宣言型。命令型。意図型。
開発者は常にプログラミングパラダイムについて語っています。
私たちは命令型プログラミングを使い、宣言型プログラミングを使い、関数型やオブジェクト指向のスタイルを使います。
しかし、私たちはある一層(レイヤー)を見落としています。
未来は意図型(Intentional)にあります。
命令型プログラミングは、コンピュータに何をすべきかを正確に伝えます。ステップバイステップの指示を与え、プロセスに焦点を当て、実行順序を制御します。これにより精度は得られますが、あらゆるステップの負担を自ら背負うことになります。
宣言型プログラミングはこれを変えました。どのように行うかではなく、何が欲しいかを記述します。SQLはその完璧な例です。データが欲しいと要求するだけで、ループを書いたりメモリを管理したりする必要はありません。システムがその作業を処理します。これにより生産性が向上します。
しかし、宣言型システムでさえ、実装について考えざるを得ないことがよくあります。
レスポンシブWebデザインを見てみましょう。カラムやブレイクポイントのためのコードを書きます。これは依然としてメカニズムを記述しているのです。レイアウトがどのように機能すべきかを記述しているに過ぎません。
システムは「何をしているか」は理解していますが、「なぜしているか」は理解していません。
意図型(Intentional)プログラミングは、その目標を変えます。
CSSを記述する代わりに、望ましい振る舞いを記述します。システムに「適応せよ」と伝え、文脈に基づいて「再構成せよ」と伝えます。焦点はメカニズムから「目的」へと移ります。
ソフトウェアはこの方向へと進んでいます。
- SQL: データを記述する。
- Infrastructure as Code: リソースを記述する。
- Nectarine: スキーマとAPIを記述する。
残りの作業はシステムが処理します。
優れたソフトウェアライブラリは、単に機能を提供するだけではありません。それらは「言語」を提供します。考え方を教えてくれるのです。あらゆるAPIや名称が、一つの哲学を築く助けとなります。
実装は重要ですが、それがあらゆるレイヤーに漏れ出すべきではありません。開発者はメカニズムを表現したいのではなく、意図を表現したいのです。彼らは何を達成したいのかを分かっています。
優れた抽象化は複雑さを隠します。偉大な抽象化は、意図を明白にします。
命令型や宣言型のスタイルは残り続けるでしょう。しかし、私たちは目標を理解するシステムへと向かっています。目的を結果へと変換するシステムが必要なのです。
どのように機能するかだけでなく、何を意味しているかに焦点を当ててください。意味はメカニズムよりも重要です。
出典: https://dev.to/stinklewinks/declarative-imperative-intentional-4j60