📚
2019/03/20 プログラミング・パラダイムの歴史とテクニック@社内
機械式計算機
最初のプログラマ
- Augusta Ada King(オーガスタ・エイダ・キング)
- Charles Babbage(チャールズ・バベッジ)
機械仕掛けの計算機
電子計算機
-
Alan Mathieson Turing(アラン・マシスン・チューリング)
- 計算理論の基礎となる数多くのアイデアをまとめた
- 生きてる間には評価されなかった
- 最近映画化された
-
John von Neumann(ジョン・フォン・ノイマン)
- 原爆に関わってた
- ほとんどのコンピュータの基本アーキテクチャとなるプログラム内蔵方式について論文にまとめた
パラダイム以前ざっくり
- インデントは一段のみ
- if文あっても全部同じ
- 制御構文は条件付きジャンプ命令のみ
- 今でもCPUレベルではこれだけで動作している
- データ構造はアドレス計算で表現
構造化プログラミング
-
Edsger Wybe Dijkstra(エドガー・ダイクストラ)
- 構造化プログラミングを提唱して炎上する
-
P. J. Plauger(P.J.プローガ)
- 非標準Cコンパイラの作者
- データストリームに対する様々なロジックについて重要な書籍を残して
-
Donald Ervin Knuth(ドナルド・エルビン・クヌース)
- 文芸的プログラミングといって巨大なTeXシステムを一つのドキュメントとして記述した
構造とは
- 要素を「順次」「反復」「分岐」によって組み合わせたもの
- 計算手続きの構造とデータ構造の双方の表現に使われる
構造化設計・プログラミング
- アルゴリズムとデータ構造=プログラム
- 段階的詳細化法
- トップダウン・ボトムアップ
- 細かいところから作って組み合わせる
- レイヤード・アーキテクチャ
- 依存性の分析
- モジュール化
オブジェクト指向
-
Alan Curtis Kay(アラン・カーティス・ケイ)
- 初期のオブジェクト指向言語(Smalltalk)の開発を手動
- Bertrand Meyer(バートランド・メイヤー)
-
Bjarne Stroustrup(ビャーネ・ストロヴストルップ)
- 性善説にたった言語でC++を作成
オブジェクト指向ざっくり
- カプセル化とオブジェクト・アイデンティティ
- 主語と述語
- モノ(Object)と特性
- シナリオとインタラクション
関数型言語
-
John McCarthy(ジョン・マッカーシー)
- Lispを理論上の存在として机上のみ設計
-
Steve Russell(スティーブ・ラッセル)
- 理論上の存在だったLispをアセンブリで作り上げてしまう(天才)
-
Brendan Eich(ブレンダン・アイク)
- Lispを作るために会社に呼ばれたけど騙された
- 腹いせにJavascriptを設計・実装
関数型言語ざっくり
- 参照透過性
- 何度読んでも同じ結果が返るような
- if, whileなどの制御構文がほぼ無い
- 遅延評価とデータストリーム
- First class function
実践(ペアプロ)
ライフゲームを作る
- とりあえず条件はなし(ルールに沿っていればおk)
- 言語はJavascript
- 役割をそれぞれが担う
- ドライバー
- 実際に手を動かしてコードを書く人
- ナビゲーターのサポートの元で細かい部分を含め実装する
- ナビゲーター
- ドライバーのサポートをする人
- ドライバーの分からないことは調査する
- ドライバー
今回の成果物
Discussion