Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オブジェクトの無い世界 / This world has no objects.
Search
sapi_kawahara
February 16, 2020
Education
2
930
オブジェクトの無い世界 / This world has no objects.
sapi_kawahara
February 16, 2020
Tweet
Share
More Decks by sapi_kawahara
See All by sapi_kawahara
執筆テーマの決め方
sapi_kawahara
1
290
LTの禁じ手
sapi_kawahara
1
1.1k
||とorの違いは登壇して解決した
sapi_kawahara
0
310
Macintosh talk / Macintoshの話
sapi_kawahara
0
150
混合接種してみた / Mixed inoculation
sapi_kawahara
0
100
安くて美味い日本酒 / Great wholesale market
sapi_kawahara
0
350
オフラインもし逢えたなら素敵だね / It would be nice to meet you offline.
sapi_kawahara
0
390
カジュアル面談本の裏側を語る / Casual Information Book Inside story
sapi_kawahara
0
400
推し技術の紹介 / Introduction of pushing technology
sapi_kawahara
0
160
Other Decks in Education
See All in Education
Introduction - Lecture 1 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
1.8k
Adobe Analytics入門講座【株式会社ニジボックス】
nbkouhou
0
23k
勉強したらどうなるの?
mineo_matsuya
10
6.8k
Requirements Analysis and Prototyping - Lecture 3 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
850
Human Perception and Cognition - Lecture 4 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
750
コンセプトシェアハウス講演資料
uchinomasahiro
0
520
Ch2_-_Partie_3.pdf
bernhardsvt
0
110
Chapitre_1_-__L_atmosphère_et_la_vie_-_Partie_1.pdf
bernhardsvt
0
230
1113
cbtlibrary
0
270
"数学" をプログラミングしてもらう際に気をつけていること / Key Considerations When Programming "Mathematics"
guvalif
0
610
Algo de fontes de alimentación
irocho
1
440
地図を活用した関西シビックテック事例紹介
barsaka2
0
100
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Producing Creativity
orderedlist
PRO
341
39k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Optimising Largest Contentful Paint
csswizardry
33
3k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Building Your Own Lightsaber
phodgson
103
6.1k
Transcript
オブジェクトの無い世界 Object-Oriented Conference 2020
プロフィール • さっぴー川原 @sapi_kawahara • 放浪のITエンジニアです。 • 経験した言語は、BASIC,アセンブラ,C言 語,C++,Python,Java,Perl,PHP,Rubyです。 •
フロントエンドもある程度わかります。 • イケているテクノロジーも好きですが、過去のテクノロ ジーを話すのが好きです。(今回もそれ?)
注意 • 今回話す内容は、オブジェクト指向がほとんど出てきま せん。 • オブジェクト指向と言っても、2種類の考え方がありま す。 ◦ Simula (C++)
系とSmalltalk系です。 • つまり、抽象データ型と、メッセージ送信型の戦争の話 も出てきません。(当日11時半に追加しました) • 出てくるのは、それより前の話です・・・。
202*年のある日 • 主人公は、某システムの移行作業に明け暮れていた。 • システムは破綻しており 、毎日帰宅は終電というスケ ジュールでした。 • 時間も無いので、似たようなところはコピペで作業をし まくっていた。
• 疲れていた、とにかく疲れていた。 • もう、何もかも捨てたいと思っていた。 • スマホも捨ててしまえ!!!!
いつもと違う電車に乗る
到着したところは・・・
1億年後の未来
1億年後の未来で起きていること • 人は産まれると、特別な機械が埋め込まれる。 • 特別な機械が人の生活をすべてサポートする。 • 食事も、寝る必要もない。 • しゃべらなくても意思疎通ができるので、自然言語は失 われている。
• 地球はすべての地域で生活しやすい気候に変わってい る。
1億年後のコンピューター • 意思を持っている。 • 最適な判断ができる。 • 人を敵とは思っていない。 • プログラムをコンピューター自身がプログラミングす る。
開発言語も失われている
The world needs only one Computer. • 遠い昔にThe World Needs
Only Five Computers.という 予言がありました。 ◦ 当時のサン・マイクロシステムズのCTO、グレッグ・ パパドポラス氏が2006年にブログに書いたことで す。 ◦ Google、Yahoo、Amazon、Microsoft、Salesforce と、それにeBayあたりを加えれば、もうほかに地球上 にコンピュータなど不要という話です。 • 1億年後の世界は、それをさらに進めた世界です。
The world needs only one Computer. • 1億年後の未来は1つのコンピューターが、人類の衣食住 をすべて管理して、人は産まれたら、毎日好きなことを するだけで、遊んで暮らすだけです。
• 夢のような世界ですが、これを求めない集団が、この1つ のコンピューターにトラップというバグをしかけまし た。 • このことに気付いた1つのコンピューターが過去の世界か らエンジニアを呼び寄せました。
そう貴方は選ばれた戦士です!
さきほど言いました
この世界は開発言語が失われている
開発する方法は無いのか?
そこであることを思い出す
伝説のフィルム
GitHub Arctic Code Vault
GitHub Arctic Code Vaultとは? • GitHubは、ソースコードを1000年間アーカイブ(保管) することで、次世代にオープンソースソフトウェアを残 すというプロジェクトです。 • 残し方は、ソースコードをQRコードに置き換えてフィル
ムに焼き付けて、気候変化が少ない北極圏に保管しま す。 • 1億年後、この設備はメンテナンスされていなかったが、 フィルムは残っていた。
しかしカメラデバイスは存在しない 冒頭でスマホを捨てたよねー
あきらめよう!
バグっているコンピューターに依頼したこと • コンピューターにしか分からないニーモニックを、人が 分かる形に変換する。 • キーボードを用意してもらう。
できたプログラムは・・・ • コンピューターが好き勝手に作ったものなので、典型的 な動けばいい形になっている。 • 一枚板の巨大なプログラムがあるだけです。 • サブルーチン化すらしていない。 • 継ぎ接ぎだらけなので、あちこちに飛びまくる。(go
to 文) • そう、オブジェクト指向前のプログラムだったのです。
バグを直す前にRefactoringだ!
まずは構造化定理を決めよう! Structured theorem
構造化定理とは? • プログラムを整理された構造の組み合わせによって構成 することです。 • その際に使うものは「順次(Sequence)」「反復 (Iteration)」「分岐(Selection)」です。 • 出入り口は1つだけです。 ◦
1966年にイタリアのコンピュータ科学者コラド・ ベームとジュゼッペ・ヤコピーニが証明した「構造化 プログラム定理」(Structured program theorem) が元となっています。
自動に作られたプログラムは・・・ 処理B 判定 A 処理A true false 判定B 判定 C
処理C
これを構造化定理に合わせ直します
順次(Sequence) 処理B 処理A
反復(Iteration) 処理A 判定 A true false
分岐(Selection) 処理B 判定 A 処理A true false
構造化定理に収まりました
次に構造化プログラミングだ! Structured programming
構造化プログラミングとは? • 抽象(Abstraction)から細部(Refinement)への設計 (トップダウン設計)をすることによる開発手法で、当 時はパーツを作ってから全体を作る方式が主流になって ました。 • これにより車輪の再発明などのコピペプログラミングが 多かったです。
構造化プログラミングとは? • これに段階的抽象(Step-wise abstraction)を持ち込 み、抽象化したオブジェクトを設計してからの開発方式 を提唱しました。 ◦ 1969年にオランダ人の計算機科学者ダイクストラが 発表した構造化プログラミング(structured programming)が元になっています。
• まずは、全体を抽象化しよう!
まずは全体を抽象化しよう!
でも設計書が無いよね
まずはモジュール(Module)化しよう
モジュール(Module)化とは? • 構造化定理には、モジュール化、つまりサブルーチン (関数)の考えが無いです。 • 構造化プログラミングには、サブルーチンが必要です。 • サブルーチンは、構造化プログラミングの段階的抽象 (Step-wise abstraction)の考えにより作られていま
す。
頑張ってモジュール化しました
しかし・・・ • モジュール化しましたが、単なるサブルーチンで全然イ ケてない。 • サブルーチンを呼び出すだけになっているので、臨機応 変に変更ができない。 • もっとサブルーチンを使いやすくするには? •
サブルーチンを自由にする。
サブルーチンを自由にする • 自由にするということは以下のことが保証されていま す。 ◦ 変数として名前がつけられる。 ◦ 手続きに引数として渡せる。 ◦ 手続きの結果として返される。
◦ データ構造に組み込める。 • サブルーチンをインスタンス化(Instantiation)するこ とで実現できそうです。 • この自由なサブルーチンのことを次のように言います。
第一級関数(First class function)
オブジェクト指向な感じになりました
ここで目が覚める
元の世界に戻ってきました • 違う電車は逆方向に乗っただけです。 • 今日は1日休みましょう。 • 明日からは今までやってきたことを反省しつつ新たなこ とにチャレンジしようと思いました。 • まずはスマホを探そう!
まとめ • この資料は、当方が遠い昔にオブジェクト指向を学ぶときに、前座で 読んだ本に書いてあったことの抜粋で、未来の話は付け加えました。 • オブジェクト指向がブームなりつつあった頃、構造化定理はもちろ ん、構造化プログラミングが定着しておりません。 • その頃は構造化プログラミングに関して間違った考えも広まり、オブ ジェクト指向が定着するのは、Java言語やDelphi言語が登場してか
らです。 • 今回、歴史の話があまり無いと思い、このような登壇をしました。