$30 off During Our Annual Pro Sale. View Details »

オブジェクトの無い世界 / This world has no objects.

sapi_kawahara
February 16, 2020

オブジェクトの無い世界 / This world has no objects.

sapi_kawahara

February 16, 2020
Tweet

More Decks by sapi_kawahara

Other Decks in Education

Transcript

  1. オブジェクトの無い世界
    Object-Oriented Conference 2020

    View Slide

  2. プロフィール
    ● さっぴー川原 @sapi_kawahara
    ● 放浪のITエンジニアです。
    ● 経験した言語は、BASIC,アセンブラ,C言
    語,C++,Python,Java,Perl,PHP,Rubyです。
    ● フロントエンドもある程度わかります。
    ● イケているテクノロジーも好きですが、過去のテクノロ
    ジーを話すのが好きです。(今回もそれ?)

    View Slide

  3. 注意
    ● 今回話す内容は、オブジェクト指向がほとんど出てきま
    せん。
    ● オブジェクト指向と言っても、2種類の考え方がありま
    す。
    ○ Simula (C++) 系とSmalltalk系です。
    ● つまり、抽象データ型と、メッセージ送信型の戦争の話
    も出てきません。(当日11時半に追加しました)
    ● 出てくるのは、それより前の話です・・・。

    View Slide

  4. 202*年のある日
    ● 主人公は、某システムの移行作業に明け暮れていた。
    ● システムは破綻しており 、毎日帰宅は終電というスケ
    ジュールでした。
    ● 時間も無いので、似たようなところはコピペで作業をし
    まくっていた。
    ● 疲れていた、とにかく疲れていた。
    ● もう、何もかも捨てたいと思っていた。
    ● スマホも捨ててしまえ!!!!

    View Slide

  5. いつもと違う電車に乗る

    View Slide

  6. 到着したところは・・・

    View Slide

  7. 1億年後の未来

    View Slide

  8. 1億年後の未来で起きていること
    ● 人は産まれると、特別な機械が埋め込まれる。
    ● 特別な機械が人の生活をすべてサポートする。
    ● 食事も、寝る必要もない。
    ● しゃべらなくても意思疎通ができるので、自然言語は失
    われている。
    ● 地球はすべての地域で生活しやすい気候に変わってい
    る。

    View Slide

  9. 1億年後のコンピューター
    ● 意思を持っている。
    ● 最適な判断ができる。
    ● 人を敵とは思っていない。
    ● プログラムをコンピューター自身がプログラミングす
    る。

    View Slide

  10. 開発言語も失われている

    View Slide

  11. The world needs only one Computer.
    ● 遠い昔にThe World Needs Only Five Computers.という
    予言がありました。
    ○ 当時のサン・マイクロシステムズのCTO、グレッグ・
    パパドポラス氏が2006年にブログに書いたことで
    す。
    ○ Google、Yahoo、Amazon、Microsoft、Salesforce
    と、それにeBayあたりを加えれば、もうほかに地球上
    にコンピュータなど不要という話です。
    ● 1億年後の世界は、それをさらに進めた世界です。

    View Slide

  12. The world needs only one Computer.
    ● 1億年後の未来は1つのコンピューターが、人類の衣食住
    をすべて管理して、人は産まれたら、毎日好きなことを
    するだけで、遊んで暮らすだけです。
    ● 夢のような世界ですが、これを求めない集団が、この1つ
    のコンピューターにトラップというバグをしかけまし
    た。
    ● このことに気付いた1つのコンピューターが過去の世界か
    らエンジニアを呼び寄せました。

    View Slide

  13. そう貴方は選ばれた戦士です!

    View Slide

  14. さきほど言いました

    View Slide

  15. この世界は開発言語が失われている

    View Slide

  16. 開発する方法は無いのか?

    View Slide

  17. そこであることを思い出す

    View Slide

  18. 伝説のフィルム

    View Slide

  19. GitHub Arctic Code Vault

    View Slide

  20. GitHub Arctic Code Vaultとは?
    ● GitHubは、ソースコードを1000年間アーカイブ(保管)
    することで、次世代にオープンソースソフトウェアを残
    すというプロジェクトです。
    ● 残し方は、ソースコードをQRコードに置き換えてフィル
    ムに焼き付けて、気候変化が少ない北極圏に保管しま
    す。
    ● 1億年後、この設備はメンテナンスされていなかったが、
    フィルムは残っていた。

    View Slide

  21. しかしカメラデバイスは存在しない
    冒頭でスマホを捨てたよねー

    View Slide

  22. あきらめよう!

    View Slide

  23. バグっているコンピューターに依頼したこと
    ● コンピューターにしか分からないニーモニックを、人が
    分かる形に変換する。
    ● キーボードを用意してもらう。

    View Slide

  24. できたプログラムは・・・
    ● コンピューターが好き勝手に作ったものなので、典型的
    な動けばいい形になっている。
    ● 一枚板の巨大なプログラムがあるだけです。
    ● サブルーチン化すらしていない。
    ● 継ぎ接ぎだらけなので、あちこちに飛びまくる。(go to
    文)
    ● そう、オブジェクト指向前のプログラムだったのです。

    View Slide

  25. バグを直す前にRefactoringだ!

    View Slide

  26. まずは構造化定理を決めよう!
    Structured theorem

    View Slide

  27. 構造化定理とは?
    ● プログラムを整理された構造の組み合わせによって構成
    することです。
    ● その際に使うものは「順次(Sequence)」「反復
    (Iteration)」「分岐(Selection)」です。
    ● 出入り口は1つだけです。
    ○ 1966年にイタリアのコンピュータ科学者コラド・
    ベームとジュゼッペ・ヤコピーニが証明した「構造化
    プログラム定理」(Structured program theorem)
    が元となっています。

    View Slide

  28. 自動に作られたプログラムは・・・
    処理B
    判定
    A
    処理A
    true
    false
    判定B
    判定
    C
    処理C

    View Slide

  29. これを構造化定理に合わせ直します

    View Slide

  30. 順次(Sequence)
    処理B
    処理A

    View Slide

  31. 反復(Iteration)
    処理A
    判定
    A
    true
    false

    View Slide

  32. 分岐(Selection)
    処理B
    判定
    A
    処理A
    true
    false

    View Slide

  33. 構造化定理に収まりました

    View Slide

  34. 次に構造化プログラミングだ!
    Structured programming

    View Slide

  35. 構造化プログラミングとは?
    ● 抽象(Abstraction)から細部(Refinement)への設計
    (トップダウン設計)をすることによる開発手法で、当
    時はパーツを作ってから全体を作る方式が主流になって
    ました。
    ● これにより車輪の再発明などのコピペプログラミングが
    多かったです。

    View Slide

  36. 構造化プログラミングとは?
    ● これに段階的抽象(Step-wise abstraction)を持ち込
    み、抽象化したオブジェクトを設計してからの開発方式
    を提唱しました。
    ○ 1969年にオランダ人の計算機科学者ダイクストラが
    発表した構造化プログラミング(structured
    programming)が元になっています。
    ● まずは、全体を抽象化しよう!

    View Slide

  37. まずは全体を抽象化しよう!

    View Slide

  38. でも設計書が無いよね

    View Slide

  39. まずはモジュール(Module)化しよう

    View Slide

  40. モジュール(Module)化とは?
    ● 構造化定理には、モジュール化、つまりサブルーチン
    (関数)の考えが無いです。
    ● 構造化プログラミングには、サブルーチンが必要です。
    ● サブルーチンは、構造化プログラミングの段階的抽象
    (Step-wise abstraction)の考えにより作られていま
    す。

    View Slide

  41. 頑張ってモジュール化しました

    View Slide

  42. しかし・・・
    ● モジュール化しましたが、単なるサブルーチンで全然イ
    ケてない。
    ● サブルーチンを呼び出すだけになっているので、臨機応
    変に変更ができない。
    ● もっとサブルーチンを使いやすくするには?
    ● サブルーチンを自由にする。

    View Slide

  43. サブルーチンを自由にする
    ● 自由にするということは以下のことが保証されていま
    す。
    ○ 変数として名前がつけられる。
    ○ 手続きに引数として渡せる。
    ○ 手続きの結果として返される。
    ○ データ構造に組み込める。
    ● サブルーチンをインスタンス化(Instantiation)するこ
    とで実現できそうです。
    ● この自由なサブルーチンのことを次のように言います。

    View Slide

  44. 第一級関数(First class function)

    View Slide

  45. オブジェクト指向な感じになりました

    View Slide

  46. ここで目が覚める

    View Slide

  47. 元の世界に戻ってきました
    ● 違う電車は逆方向に乗っただけです。
    ● 今日は1日休みましょう。
    ● 明日からは今までやってきたことを反省しつつ新たなこ
    とにチャレンジしようと思いました。
    ● まずはスマホを探そう!

    View Slide

  48. まとめ
    ● この資料は、当方が遠い昔にオブジェクト指向を学ぶときに、前座で
    読んだ本に書いてあったことの抜粋で、未来の話は付け加えました。
    ● オブジェクト指向がブームなりつつあった頃、構造化定理はもちろ
    ん、構造化プログラミングが定着しておりません。
    ● その頃は構造化プログラミングに関して間違った考えも広まり、オブ
    ジェクト指向が定着するのは、Java言語やDelphi言語が登場してか
    らです。
    ● 今回、歴史の話があまり無いと思い、このような登壇をしました。

    View Slide