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
940
オブジェクトの無い世界 / 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
310
LTの禁じ手
sapi_kawahara
1
1.1k
||とorの違いは登壇して解決した
sapi_kawahara
0
310
Macintosh talk / Macintoshの話
sapi_kawahara
0
160
混合接種してみた / Mixed inoculation
sapi_kawahara
0
110
安くて美味い日本酒 / Great wholesale market
sapi_kawahara
0
360
オフラインもし逢えたなら素敵だね / It would be nice to meet you offline.
sapi_kawahara
0
400
カジュアル面談本の裏側を語る / Casual Information Book Inside story
sapi_kawahara
0
410
推し技術の紹介 / Introduction of pushing technology
sapi_kawahara
0
160
Other Decks in Education
See All in Education
BrightonSEO, San Diego, CA 2024
mchowning
0
120
Kaggle 班ができるまで
abap34
1
240
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
2.6k
1030
cbtlibrary
0
330
Evaluation Methods - Lecture 6 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
780
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
4
15k
HCI Research Methods - Lecture 7 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
800
Diseño de estrategia de analítica del aprendizaje en tu centro educativo.
tecuribarri
0
100
Carving the Way to Ruby Engineering
koic
3
670
The Task is not the End: The Role of Task Repetition and Sequencing In Language Teaching
uranoken
0
260
AWS Well-Architected Labを活用してつよつよAWSエンジニアになろう!!! #jawsug_tokyo
masakiokuda
0
270
Web Search and SEO - Lecture 10 - Web Technologies (1019888BNR)
signer
PRO
2
2.5k
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
328
21k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Thoughts on Productivity
jonyablonski
68
4.4k
Raft: Consensus for Rubyists
vanstee
137
6.7k
4 Signs Your Business is Dying
shpigford
182
22k
Code Review Best Practice
trishagee
65
17k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Designing for humans not robots
tammielis
250
25k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
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言語が登場してか
らです。 • 今回、歴史の話があまり無いと思い、このような登壇をしました。