私が知っているすべてのプログラミング言語は書かれています-つまり、何らかの方法でテキストの長さとして入力されます。しかし、プログラム全体をドラッグアンドドロップするだけのプログラミング言語はあるのでしょうか。ループを取得するには、ここでこのボックスを選択し、「コード」のそのセクションにドラッグします。そして、このようなものがなければ、それが発明されたら飛ぶでしょうか?
個人的に私はそれがそんなに良い考えだとは思わないが、あなたの考えを聞きたい。
私が知っているすべてのプログラミング言語は書かれています-つまり、何らかの方法でテキストの長さとして入力されます。しかし、プログラム全体をドラッグアンドドロップするだけのプログラミング言語はあるのでしょうか。ループを取得するには、ここでこのボックスを選択し、「コード」のそのセクションにドラッグします。そして、このようなものがなければ、それが発明されたら飛ぶでしょうか?
個人的に私はそれがそんなに良い考えだとは思わないが、あなたの考えを聞きたい。
回答:
多くの服装がドラッグアンドドロッププログラミングシステムを行ってきました。
ナショナルインスツルメンツの「Labview」は、おそらく最もよく知られた最高のものです。
彼らが遭遇する根本的な問題は、Flying Code Monkeyを専門のプログラマーおよびエンジニアに変換する方法が知られていないことです。1つの例として、O(N ^ 2)またはO(N ^ 3)プロセスとO(N log N)プロセスの間でFlying Code Monkeyに違いはありません。つまり、 O(N log N)アルゴリズム。これは、作成するQuickieグラフィッククラッジにカスタム適合できます。
彼らが遭遇する2番目の問題は、最初の問題に必要な専用ブロックを提供すると、ブロック間でデータを移動することによって生じるオーバーヘッドが高くなり始めることです。私はRippenと呼ばれる非常に素晴らしいシステムの1つを使用しました。HIGH!が必要なパフォーマンスのセンサー処理アプリケーションでどこを傷つけているかを調べるためにプロファイルを作成したとき、CPU時間の約20%がデータ移動に費やされているのを見るとかなり不安になりました。(私はLADAR画像処理を行っていたため、入力画像のすべてのピクセルでかなりの数の浮動小数点処理を行っていたため、CPUの20%はデータ移動オーバーヘッドの多くでした。)
おそらく、コンパイラベースのシステムに移動することでパート2を回避できます。画像をフィードすると、非常に最適化された実行可能プログラムにコンパイルされますが、実際に問題が解決するかどうかはわかりません。ツールのインタラクティブな性質。
LabVIEWはかなりグラフィカルです。
Yahoo! パイプは、おそらくあなたが記述しているタイプのグラフィカル言語の完璧な例です。プリミティブ(ユーザーが操作するデータソースからループや条件へのすべて)をドラッグアンドドロップして、システム全体の情報の流れを生成します。
これは非常にドメイン固有ですが、それが主なポイントです。パイプはデータ中心であり、視覚化(式ではなく)が最重要です。同様に、ScratchやSprogなどのチュートリアル環境!学習支援として取り組んでいるものの視覚化を強調します。データ入力の効率性は、そのドメインでははるかに低い優先度です。
時々誰かがドラッグアンドドロッププログラミング言語または設計ツールを思いつき、それを「私たちが知っているようにプログラミングに終止符を打ち」、それを使うすべての人をプログラマーにしようとしています。
それらのどれも実際として仕事をしてはまだありませんし、私たちの仕事のすべてのアウトを入れている理由は、実際には、作成したどのくらいのドラッグアンドドロップ機能に関係なく、あなたがそれを作る方法をユーザーフレンドリーに関係なく、単純な事実はそれであるということであるプログラミングは難しい。
プログラミングの本当の分野は、問題を解決する方法を知ること、プロセスをモデル化し、使用できるようにデータを整理する方法を理解することです。コンピュータで何ができるかを理解することさえ。
一部の人々はこのように考えるように教えられないことを示唆する証拠があります(議論の余地がある場合)。そもそも、このように考えられないなら、たくさんのプログラマーがいるので、もしアイデアがあれば、それを支払う価値があると思うなら、いつでも誰かを雇ってアイデアを実装することができます。プログラミングロジックで十分に作業できる場合は、比較的単純なドラッグアンドドロップ環境をいじるのではなく、実際の言語を学習することもできます。
ここで一般的なプログラミングを考えています。同じことは、ドラッグアンドドロップがITスペシャリストではなく、そのドメイン内のスペシャリストである本当に有用なプロセスユーザーである可能性のある、より限定されたDSLタイプのシナリオには必ずしも当てはまりません。
私が見た中で最高のドラッグアンドドロッププログラミングシステムは、Lego Mindstorms NXTロボット用です。
これにより、いくつかの非常に複雑な機能を制御して、いくつかの非常に素晴らしいことを行うことができます。
ただし、ある時点で機能しなくなるため、別のシステムに戻す必要があります。
この記事を参照してください:http : //www.wired.com/geekdad/2007/11/the-best-progra/
ただし、これが改善され、さまざまなシナリオが提供された場合、この必要性はますます少なくなる可能性があります。
データフロープログラミング(別名フローベースのプログラミング)は、一種の可能性があります。ただし、データフロープログラミングはチューリング完全ではありません。
データフロープログラミングは、シーンにコンポーネントインスタンスを配置してポートを接続するときにアプリケーションを作成し、メッセージ処理ネットワークを形成する方法です。コンポーネントはライブラリから選択できます。コンポーネントにはコンシューマ(入力)ポートとプロデューサ(出力)ポートがあり、他のコンポーネントのポートと接続する準備ができています。
マウスでもシンセアプリの作成に使用したのではなく、素手と小さな立方体を使用した素敵な例を次に示します。http://www.youtube.com/watch? v = 0h-RhyopUmc
Wikipediaの記事は良い出発点です:http : //en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming
サウンド生成は、データフロープログラミングの典型的な領域です。いくつかのオープンソースシンセシステムがあります: http: //www.synthedit.com/ http://alsamodular.sourceforge.net/
Macをお持ちの場合、工場出荷時のQuartz Composerがプリインストールされている場合があります:http : //developer.apple.com/graphicsimaging/quartz/quartzcomposer.html
私は私の友人とDFシステムを作成しましたが、ビジュアルエディターはまだありません。スクリプトビジュアライザーのみです。
MITのScratchプログラミングシステムは、ほぼ完全にドラッグアンドドロップです。
GoogleのApp Inventorも似ているようです(そして、Scratchを信用しています)。
私も自分で大きなものをコーディングしたくありませんが、「プログラマー思考」を教えるために、スクラッチは素晴らしいです。それは本物のプログラミングですが、即座に視覚的に満足し、スナップを一緒にブロックすることで、新人を先送りにする「構文エラー」のフラストレーションの多くを回避できます(この記事で見たビュー)。pythonコマンドラインで若い子供たちを熱狂させようとしても、最近はそれが減りません。
あなたが考えている形ではないかもしれませんが、これはすでに存在しています。2つの例は、SimulinkとAliceです。
Simulinkは、動的システムシミュレーションを組み立てるグラフィカルな手段です。コンストラクトのほとんどは、通常プログラミングと考えるよりも複雑ですが、forやifステートメントなどは、グラフィカルに構築できます。政府および多くの大企業がSimulinkで初期設計を行い、その後、Simulinkの「コード」に何らかのタイプの定理証明器を適用するため、Simulinkは航空宇宙アプリケーションではかなり重要です。
アリスは、子供向けのドラッグアンドドロップのプログラミングトレーニングツールです。子どもたちは、ある種のプログラミングストーリーボードにアクションやオブジェクトをドラッグアンドドロップすることで、ストーリーを楽しく構築できます。
視覚的なプログラミング言語はかなりあります。私が大規模なコールセンター用に管理した電話システムは、ドラッグアンドドロップモジュールを使用してプログラムされました。私の叔父は、製造ラインを設計するためのジャストインタイムシステムを開発しました。これは完全にドラッグアンドドロップで、20年前のことです。
ドラッグアンドドロッププログラミング言語を使用したPS1でロボット戦闘ゲームをプレイしました。
テキストプログラミングは50年に渡って順調に進んでいますが、ソフトウェアエンジニアリングは、次のレベルの複雑さに対処するためにグラフィカル領域に移行する必要があります。たとえば、メニーコアプロセッサの登場と並列プログラミングの課題により、スレッドモデルが限界に追い込まれています。率直に言って、ソフトウェアコミュニティは、プログラミングには根本的に異なる特別な何かがあり、他のすべてのドメインのように視覚化を受け入れられないというthinking慢な考えだと思います。電話オペレーターや他の多くの職業と同様に、適切な自動化テクノロジーにより、ドメインの専門家はすぐに知識ベースのシステムの豊富なシミュレーション空間で協力できるようになります。ソフトウェア業界は、パラダイムシフトが長い間待ち望まれています。