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
920
オブジェクトの無い世界 / 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
280
LTの禁じ手
sapi_kawahara
1
1k
||とorの違いは登壇して解決した
sapi_kawahara
0
300
Macintosh talk / Macintoshの話
sapi_kawahara
0
140
混合接種してみた / Mixed inoculation
sapi_kawahara
0
96
安くて美味い日本酒 / Great wholesale market
sapi_kawahara
0
340
オフラインもし逢えたなら素敵だね / It would be nice to meet you offline.
sapi_kawahara
0
380
カジュアル面談本の裏側を語る / Casual Information Book Inside story
sapi_kawahara
0
390
推し技術の紹介 / Introduction of pushing technology
sapi_kawahara
0
150
Other Decks in Education
See All in Education
アニメに学ぶチームの多様性とコンピテンシー
terahide
0
220
HTML5 and the Open Web Platform - Lecture 3 - Web Technologies (1019888BNR)
signer
PRO
1
2.5k
week13@tcue2024
nonxxxizm
0
550
学習指導要領から職場の学びを考えてみる / Thinking about workplace learning from learning guidelines
aki_moon
1
700
Adobe Express
matleenalaakso
1
7.5k
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
4
14k
HP用_松尾研紹介資料.pdf
matsuolab
0
150
(2024) Couper un gâteau... sans connaître le nombre de convives
mansuy
2
140
Adobe Analytics入門講座【株式会社ニジボックス】
nbkouhou
0
18k
HCI Research Methods - Lecture 7 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
700
Comment aborder et contribuer sereinement à un projet open source ? (Masterclass Université Toulouse III)
pylapp
0
3.2k
Os pápeis do UX Design
wagnerbeethoven
0
360
Featured
See All Featured
Optimizing for Happiness
mojombo
376
69k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Ruby is Unlike a Banana
tanoku
96
11k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
2k
KATA
mclloyd
29
14k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
505
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
How GitHub (no longer) Works
holman
310
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
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言語が登場してか
らです。 • 今回、歴史の話があまり無いと思い、このような登壇をしました。