私はちょうどこれについて考えていました。それについてブログ記事を書くつもりだったので、ここから始めたほうがいいかもしれません。プログラミングでは、新しい入力方法だけではなく、それに伴う新しいメタファーが必要だと思います。三段重の物です。モデル - メタファー - インターフェース。
私は最近ますます、言語は計算を表現するための貧弱な比喩であると考えるようになりました。言語は私たちがコミュニケーションのために使うものです。プログラムをコンピューターへの通信と見なすことができ、同時に他のプログラマーへの通信と見なすこともできます。しかし、言葉以外にもコミュニケーションの方法はあります。私はここでリストに取り組んでいます。この投稿を自由に編集して、リストにさらにものを追加してください。
コミュニケーションの方法
- スピーチ
- ボディランゲージ
- ジェスチャー
- 顔の表情
- 手話
- 絵画・デッサン
- ダイヤル、ボタン、スライダー、ポインティング、ドラッグ (GUI)
プログラミングのもう 1 つのメタファーはビルドです。プログラミングインターフェースの基礎を形成できる、機能的なものを構築するいくつかの可能な方法を次に示します。
機能的なものを構築する方法
- ギア/スプリングおよびその他の機構
- 紙折り・裁断・糊付け
- パッチコード
- 電子回路
- ヒンジ、ボールベアリング、ホイール
- 噴水バルブとパイプ
- アルキメデスの機械: 滑車、てこ、ねじ
- レゴ
計算を指定するさらに別の方法は、定義によるものです。
定義方法
- 制約 - 分類 - 集合論 - プロパティ - シンプトン - 論理テーブル - ルール - 線路 (線路図のように)
しかし、なぜ私たちがこれを行っているのかを覚えておいてください。現在のプログラミング言語の動作には明らかにいくつかの弱点があります (そうでなければ、新しい言語を作成したくないでしょう)。新しい言語を設計する際は、それらを念頭に置いておきましょう。
現在の言語の問題
インターフェイスが隠されています
API は隠されています
副作用はバグの大きな原因です。プログラムのどの部分も他の部分に影響を与える可能性があります。
リファクタリング - 自分自身を繰り返していることに気付くことがあるので、繰り返しをマクロ、関数、またはその他のメタファーに分解する簡単な方法が必要です。これは、大規模なテキスト操作作業によって、大部分が手作業 (または Java では半自動) で行われます。そのようなことをまったくばかげているように見せる新しい比喩はありますか?
より複雑な構造を構築するために使用する独自の構成要素、つまり「単語」またはイディオムを定義する簡単な方法が必要です。独自のツール、環境の独自の部分。多くの言語では、これを第一級の方法で行うことはできません。
コンパイラは、わずかなミスでもプログラマを厳しく罰します。
変数には時間の感覚がない - 過去に変数に設定されたすべての値の履歴を照会する方法はありません。言い換えれば、プログラムの進行を「巻き戻す」ことができるプログラミング言語を手に入れることができるでしょうか? 変数が頻繁に予期しない値に変更される可能性があるという事実は、バグの別の原因です。これは副作用の問題の残りの半分です
ほとんどのプログラミング言語の学習曲線はかなり急勾配です
コード全体でライブラリまたはウィジェット X への参照を作成すると、そのライブラリとほぼ結び付きます。多くのリファクタリングを行わないと、同様の同等のライブラリに切り替えることが難しくなります。これは主に、ライブラリに名前があるという事実に関係しており、ライブラリを使用するために、コード全体でそのライブラリの名前とそのメソッドをハードコーディングしています。より良い方法はありますか?
並列処理が不十分で、マルチスレッド化により、バグ、競合状態、デッドロックが発生します。そのようなバグを不可能にする並列処理へのより良いアプローチはありますか? この問題だけでも、多くの新しい言語が作成されています。
コンピューター画面を超えて考えてください、皆さん。おそらく、キーボードは、複雑な関係や記号を入力するための最も効率的なインターフェイスです。本気ですか?マウス、タッチ スクリーン、タブレット以外にもさまざまな選択肢があります。コンピュータと対話する無数の方法 - 私たちは皆、1 つまたは 2 つのかなり普通の方法に落ち着いています。