わかりやすいソフトウェアを設計する(そして実際、何でも設計する)ための重要な特性の1つは、優れた抽象化のセットを開発することです。最近では、これらの抽象化には、関数、クラス、インターフェイス、再帰、高階関数などが含まれます。しかし、他に何がありますか?デザインをさらに抽象化して、当面の直接的な目標以外のことを考える必要がないようにするにはどうすればよいでしょうか。既存のテクノロジーでまだ活用されていない新しい抽象化は何ですか?
また、私のリストにあるほとんどの項目(おそらく再帰を除く)は、コードの再利用に使用されるツールでもあることに注意してください。コードの再利用はこの質問の主題ではなく、優れた抽象化の必要な側面として私が見ているものでもありません。関数は、いくつかの異なる場所から呼び出すことができるためではなく、説明的な名前の背後に関数が実行していることを隠すため、抽象化として役立ちます。
形の悪い考え:それ自体の状態を維持せずに、他の関数のシーケンスのみを呼び出すドライバー関数は、実際には関数と同じですか?それを関数として書き、それを関数と呼びますが、おそらくそれは別の概念を表していますか?これは、値を返すプロシージャと値を返さないプロシージャを区別することにより、一部の言語に反映されています。しかし、おそらく、その違いを確認するためのより良い方法、比較的無関係なステップのシーケンスを抽象化するためのいくつかの異なる方法がありますか?
繰り返しになりますが、将来のプログラミング言語はどのようにして抽象化をより容易にすることができますか?