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
1.1k
オブジェクトの無い世界 / This world has no objects.
sapi_kawahara
February 16, 2020
Tweet
Share
More Decks by sapi_kawahara
See All by sapi_kawahara
今から始める8bits CPU アセンブラ言語
sapi_kawahara
0
820
執筆テーマの決め方
sapi_kawahara
1
370
LTの禁じ手
sapi_kawahara
1
1.2k
||とorの違いは登壇して解決した
sapi_kawahara
0
360
Macintosh talk / Macintoshの話
sapi_kawahara
0
210
混合接種してみた / Mixed inoculation
sapi_kawahara
0
160
安くて美味い日本酒 / Great wholesale market
sapi_kawahara
0
410
オフラインもし逢えたなら素敵だね / It would be nice to meet you offline.
sapi_kawahara
0
460
カジュアル面談本の裏側を語る / Casual Information Book Inside story
sapi_kawahara
0
480
Other Decks in Education
See All in Education
生態系ウォーズ - ルールブック
yui_itoshima
1
350
とある長岡高専卒のおっさんがIT企業のマネージャーになるまで / journey-from-nagaoka-kosen-grad-to-it-manager
masaru_b_cl
0
150
中間活動報告会 人材育成WG・技術サブWG / 20250808-oidfj-eduWG-techSWG
oidfj
0
840
仏教の源流からの奈良県中南和_奈良まほろば館‗飛鳥・藤原DAO/asuka-fujiwara_Saraswati
tkimura12
0
160
授業レポート:共感と協調のリーダーシップ(2025年上期)
jibunal
1
150
Padlet opetuksessa
matleenalaakso
7
15k
「実践的探究」を志向する日本の教育研究における近年の展開 /jera2025
kiriem
0
130
社外コミュニティの歩き方
masakiokuda
2
220
Entrepreneurship minor course at HSE 2025
karlov
0
130
高校におけるプログラミング教育を考える
naokikato
PRO
0
180
20250910_エンジニアの成長は自覚するところから_サポーターズ勉強会
ippei0923
0
330
HCI and Interaction Design - Lecture 2 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
1.4k
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
320
The World Runs on Bad Software
bkeepers
PRO
72
12k
RailsConf 2023
tenderlove
30
1.3k
Docker and Python
trallard
46
3.7k
BBQ
matthewcrist
89
9.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
11
930
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Context Engineering - Making Every Token Count
addyosmani
9
390
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Statistics for Hackers
jakevdp
799
220k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
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言語が登場してか
らです。 • 今回、歴史の話があまり無いと思い、このような登壇をしました。