構成は各章毎に分けて、要約・独自の解釈・具体的なコード等を挟み、なるべく腑に落ちやすい形を目指す。
独自の解釈を挟む際は冒頭に "ダブルコーテーションをつける。
"第二章は歴史のお勉強ですね
第2部 構成要素から始めよ:プログラミングパラダイム
ソフトウェアアーキテクチャはコードから始まる。
1938年, Alan Turingがコンピュータプログラミングの基礎を築いた。
1945年まで、彼は実際のコンピュータで、実際のプログラムを書いていた。彼の使用していた言語はバイナリだ。
それから様々な革命が起きた。
- 言語の革命
- 1940年代後半にアセンブラが登場
- プログラムをバイナリに翻訳する負担を無くした。
- 1951年にGrace Hopperがコンパイラを考案
- プログラムを英語で記述できるようにした。
- その後、COBOL、PL/I、SNOBOL、C、Pascal、C++、Javaなど絶え間なく新しい言語が生み出されている。
- 1940年代後半にアセンブラが登場
- プログラミングパラダイムの革命
- パラダイムとは、プログラミングの方法のことで、どのプログラミング構造を使うべきか、いつ使うべきかを教えてくれる。
- 現在まで、大きく3つのパラダイムが存在している。どれもお互いに似ているところがない。
第3章 パラダイムの概要
構造化プログラミング
構造化プログラミングは、直接的な制御の移行に規律を課すものである。
最初に導入されたパラダイムは1968年にEdsger Wybe Dijkstraが発見した「構造化プログラミング」である。
Dijkstraは制限のないジャンプを if/then/else、do/while/until に置換えた。
オブジェクト指向プログラミング
オブジェクト指向プログラミングは、間接的な制御の移行に規律を課すものである。
次に導入されたパラダイムは、構造化プログラミングの2年前の1966年に Ole Johan Dahl と Kristen Nygaard が発見したオブジェクト指向プログラミングである。
この2人は、ALGOL言語の関数呼び出しのスタックフレームをヒープに移動できること、これにより、関数から戻ってきたあとでも関数で宣言したローカル変数が存在し続けられることに気づいた。
- この関数は今日のクラスのコンストラクタになり、ローカル変数はインスタンス変数になった。
- そしてネストした関数はメソッドになった。
- 規律のある関数ポインタの使用により、ポリモーフィズムの発見に繋がった。
"クロージャーとの関係も凄く近い気がする。
1960年代に開発された概念のよう。ここの歴史的な繋がりはもっと深堀りたい。
関数型プログラミング
関数型プログラミングは、代入に規律を課すものである。
3つのパラダイムの中では最も早く発明された。
Alonzo Church の業績で、Alan Turing が挑んでいた数学的問題を追求しながら、1936年にラムダ計算を発明した。
ラムダ計算の基本的な概念は不変性である。
このことにより、関数型言語には代入文がないことを意味する。
実際には、変数の値を変更する手段が用意された言語も多いが、非常に厳しく制限されている。
考えるべきこと
意図的に3つのパラダイムのパターンを紹介した。
これらのパラダイムは、プログラマから能力を削除している。
何をすべきかを伝えるよりも、何をすべきでないかを伝えている。
1958年から1968年の10年間に発見された3つのパラダイム以降、新しいパラダイムは追加されていない。
まとめ
パラダイムの歴史的な教訓は、アーキテクチャの全てに関係している。
- アーキテクチャの境界を超えるための仕組みとして、ポリモーフィズムを使う。
- データの配置やアクセスに規律を課すために、関数型プログラミングを使う。
- モジュールのアルゴリズムの基礎として、構造化プログラミングを使う。
これらの3つが、アーキテクチャの3つの大きな関心事「コンポーネントの分離」「データ管理」「機能」に対応している。
第4章 構造化プログラミング
coming soon.