📚

2019/03/20 プログラミング・パラダイムの歴史とテクニック@社内

2022/05/24に公開

機械式計算機

最初のプログラマ

機械仕掛けの計算機

  • 階差機関
  • 解析機関
    • 資金枯渇で開発されなかった
    • 四則演算とかやるつもりだった
    • パンチカードでやってた
  • bombe
    • 機械・電気式計算機
    • 歯車の位置を替えて計算する形だった

電子計算機

  • 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
  • 役割をそれぞれが担う
    • ドライバー
      • 実際に手を動かしてコードを書く人
      • ナビゲーターのサポートの元で細かい部分を含め実装する
    • ナビゲーター
      • ドライバーのサポートをする人
      • ドライバーの分からないことは調査する

今回の成果物

https://github.com/uyawer/jstest01

GitHubで編集を提案

Discussion