5

プログラミングは、入力が必要な特殊記号などの豊富さにより、ワープロなどとは特に異なります。

プログラミングに適した新しいユーザー インターフェイス技術の現在の作物について、またその理由は何ですか?

それとも、言語構文の考え方が問題なのですか?もっと記号的にプログラミングする必要がありますか?もしそうなら、これはユーザー インターフェイスにどのように影響しますか?

編集:ユーザー インターフェイス技術を指定したとき、既存のハードウェア (マウス/キーボード) と、マルチタッチ、ジェスチャ認識、拡張現実 (いくつかの優れた例については HitLabNz を参照) などの他のものの両方を使用できるようにしました。これらをどのようにプログラミングに応用できるか興味があります。

4

7 に答える 7

4

私はちょうどこれについて考えていました。それについてブログ記事を書くつもりだったので、ここから始めたほうがいいかもしれません。プログラミングでは、新しい入力方法だけではなく、それに伴う新しいメタファーが必要だと思います。三段重の物です。モデル - メタファー - インターフェース。

私は最近ますます、言語は計算を表現するための貧弱な比喩であると考えるようになりました。言語は私たちがコミュニケーションのために使うものです。プログラムをコンピューターへの通信と見なすことができ、同時に他のプログラマーへの通信と見なすこともできます。しかし、言葉以外にもコミュニケーションの方法はあります。私はここでリストに取り組んでいます。この投稿を自由に編集して、リストにさらにものを追加してください。

コミュニケーションの方法

  • スピーチ
  • ボディランゲージ
  • ジェスチャー
  • 顔の表情
  • 手話
  • 絵画・デッサン
  • ダイヤル、ボタン、スライダー、ポインティング、ドラッグ (GUI)

プログラミングのもう 1 つのメタファーはビルドです。プログラミングインターフェースの基礎を形成できる、機能的なものを構築するいくつかの可能な方法を次に示します。

機能的なものを構築する方法

  • ギア/スプリングおよびその他の機構
  • 紙折り・裁断・糊付け
  • パッチコード
  • 電子回路
  • ヒンジ、ボールベアリング、ホイール
  • 噴水バルブとパイプ
  • アルキメデスの機械: 滑車、てこ、ねじ
  • レゴ

計算を指定するさらに別の方法は、定義によるものです。

定義方法 - 制約 - 分類 - 集合論 - プロパティ - シンプトン - 論理テーブル - ルール - 線路 (線路図のように)

しかし、なぜ私たちがこれを行っているのかを覚えておいてください。現在のプログラミング言語の動作には明らかにいくつかの弱点があります (そうでなければ、新しい言語を作成したくないでしょう)。新しい言語を設計する際は、それらを念頭に置いておきましょう。

現在の言語の問題

  • インターフェイスが隠されています

  • API は隠されています

  • 副作用はバグの大きな原因です。プログラムのどの部分も他の部分に影響を与える可能性があります。

  • リファクタリング - 自分自身を繰り返していることに気付くことがあるので、繰り返しをマクロ、関数、またはその他のメタファーに分解する簡単な方法が必要です。これは、大規模なテキスト操作作業によって、大部分が手作業 (または Java では半自動) で行われます。そのようなことをまったくばかげているように見せる新しい比喩はありますか?

  • より複雑な構造を構築するために使用する独自の構成要素、つまり「単語」またはイディオムを定義する簡単な方法が必要です。独自のツール、環境の独自の部分。多くの言語では、これを第一級の方法で行うことはできません。

  • コンパイラは、わずかなミスでもプログラマを厳しく罰します。

  • 変数には時間の感覚がない - 過去に変数に設定されたすべての値の履歴を照会する方法はありません。言い換えれば、プログラムの進行を「巻き戻す」ことができるプログラミング言語を手に入れることができるでしょうか? 変数が頻繁に予期しない値に変更される可能性があるという事実は、バグの別の原因です。これは副作用の問題の残りの半分です

  • ほとんどのプログラミング言語の学習曲線はかなり急勾配です

  • コード全体でライブラリまたはウィジェット X への参照を作成すると、そのライブラリとほぼ結び付きます。多くのリファクタリングを行わないと、同様の同等のライブラリに切り替えることが難しくなります。これは主に、ライブラリに名前があるという事実に関係しており、ライブラリを使用するために、コード全体でそのライブラリの名前とそのメソッドをハードコーディングしています。より良い方法はありますか?

  • 並列処理が不十分で、マルチスレッド化により、バグ、競合状態、デッドロックが発生します。そのようなバグを不可能にする並列処理へのより良いアプローチはありますか? この問題だけでも、多くの新しい言語が作成されています。

  • コンピューター画面を超えて考えてください、皆さん。おそらく、キーボードは、複雑な関係や記号を入力するための最も効率的なインターフェイスです。本気ですか?マウス、タッチ スクリーン、タブレット以外にもさまざまな選択肢があります。コンピュータと対話する無数の方法 - 私たちは皆、1 つまたは 2 つのかなり普通の方法に落ち着いています。

于 2009-01-14T04:41:34.073 に答える
2

非テキストのプログラミング言語を作ろうとするほぼすべての努力は、表面上失敗に終わりました。テキスト言語がなければ、正確かつ効率的であることは非常に困難です。

UI の取り組みの多くは、より優れたツールの作成に向けられています。たとえば、単純なテキスト エディターを使用してプログラミングを行うことも、Visual Studio や Eclipse などの本格的な IDE を使用することもできます。さらに、Rational Rose のような視覚化および設計ツールがあります。これらのツールは、基礎となるコードを調査および/または変更するための補完的な方法を提供します。

于 2009-01-14T04:02:58.317 に答える
1

マルチタッチのようなものは、コード作成の機械的効率を潜在的に向上させる可能性がありますが、それはプログラミングにおける大きな懸念事項ではないと思います. アルゴリズムの分析、設計、文書化、およびテストに必要なすべての作業を考慮すると、実際にコードを入力するのに費やされる時間の割合は非常に小さいため、あちこちでキーを押したりマウスをクリックしたりする手間を省くことができません。 .

最近のプログラミングにおける主な課題は、特別なシンボルや構文ではないように思えます。それらは比較的少なく、ほとんどが直感的であり、C の慣習に近いものの事実上の標準に近づいています。プログラミングにおける主な課題は、コードのより大きな単位、つまり API とプログラム自体の両方の関数とクラスを理解することだと私には思えます: 何が利用可能で、各クラスは何を行い、各関数は何を要求し、何を返すか、どこにあるのか類似点と相違点、およびそれらがアーキテクチャにどのように適合するか。最も深刻な問題は、コードが遭遇する可能性のある条件のすべての可能な組み合わせについて、クラスと関数の微妙な点を理解していないことにあると思います。

AR の視覚化技術は、プログラマーやアナリストがコード構造やプロセスの全体像を見て操作するのに役立つかもしれませんが、率直に言って、テーブル、フォーム、メニューなどの従来の UI 技術やコントロールを使って多くのことを行うことができます。コーディングの世界に入るために。後期の Gupta/Centura プログラミング言語では、ツリー状のコントロールを使用して、より大きなコード構造を簡単に確認できるようにしていました。Intellisense は、コード作成を促進するための正しいアイデアですが、コードをより大規模に理解して分析するためのツールを開発者に提供するために、さらに多くのことを行うことができます。Roedy Green の Source Code in Database ( http://mindprod.com/project/scid.html )は良い出発点であり、開発者はコード ベースをインテリジェントにクエリできます。さらに良いのは、プッシュするプログラミング UI です。開発者に関する分析を行い、特定のプログラム設計について開発者が考慮する必要があることを明確にします。

于 2009-01-14T15:34:03.570 に答える
1

非テキスト (グラフィカル、音声認識、ダイレクト ニューラル インターフェースなど) の入力方法を使用する場合でも、プログラミング内容をテキストで表現することは非常に重要だと思います。

プログラムは基本的にレシピのようなものです。「これを達成するには、これらの手順を実行します」。テキスト表現は、このレシピを書き留めたものです。レシピを作成するためのレシピが必要な場合 (「このメニューをクリックして、このダイアログ ボックスを使用してください...」)、テキストによる対話が不可能な場合、作成したものとの連絡が失われます。

別の入力/プログラミング方法に対するプログラマーの希望は、彼が使用する言語の概念上の欠陥と相関していると思います。最近、たくさんのセッターとゲッターを書く任務を与えられた人について読みました。

グラフィカル プログラミングについて: マウスで三角形のようなものを描くよりも、"for" という単語をすばやく入力できます。これは、メニューからこの三角形を取得できるようにすることで、この描画が「容易」になったとしてもそうです。プログラミングでは、何百もの異なるシンボルを使用します。入力せずにアクセスできるようにどのように整理できますか? ええと、キーボード ショートカットはどうですか...ちょっと待って...

現在、キーボードはコンピュータに意味を伝えるための最速の手段であり、テキストはコンピュータに意味を保存するための最も簡潔で有用な表現です。

于 2009-01-14T04:41:22.903 に答える
0

これにはいくつかの試みがありました。

各操作を表すために特別なシンボルの選択を使用した APL。これはまだ "J" 言語の形で存在し、それを待って、すべての記号を 2 文字または 3 文字の ASCII 文字の組み合わせに置き換えました。

IBMs Visual Age 1998 年頃。「ソケット」アイコンをワークスペースにドラッグして「ストリーム」アイコンに結合するようなグラフィカル IDE がありました。しかし、それはC++を生成しただけで、最初のg-whizzの後、ほとんどのプログラマーは「テキストビュー」オプションを見つけて、それを使い続けました。

Suns Fortress -- まだテキストですが、√ などの Unicode 記号を演算子として使用できます。ただし、公開されているサンプル プログラムのほとんどは、ASCII 文字セットに固執しているようです。

ここには 2 つの問題があります。

テキストはとてもとても良いです!人々は何千年もの間、かなり優れた絵を描くことができましたが、Amazon が販売する本の 99% には単純なテキストしか含まれていません。これにはおそらく正当な理由があります。

「ソケット」と関連する「接続」ポイントのグラフィックは使いやすいかもしれませんが、作成するのは簡単ではありません。メソッドの署名とおそらく Javadoc の一部を作成する代わりに、グラフィック デザイナーが「エラー メッセージ表示アイコン」を設計し、グラフィックを使用する方法と場所に関する一連のルールを定義する必要があります。

于 2009-01-14T15:52:44.483 に答える
0

ある種の象徴的なシナリオの全体的な目的は、実際には GUI ベースの開発に要約されます。これは、Visual Studio がゆっくりと取り組んでいるテーマですが、まだ何年も先の話です。

FOR ループを表すある種のシンボルを作成しても、開発はスピードアップしません。より速くコーディングしたい場合は、適切な IDE が既にサポートしているドラッグ アンド ドロップ コード ブロックを使用するだけです。

于 2009-01-14T04:13:21.930 に答える
0

待ってください... テキスト エディタとコンパイラ/リンカー以上のものが必要ですか?

于 2009-01-14T15:57:29.107 に答える