楽天技術研究所 ネットワーク応用通信研究所 Rubyアソシエー...
Transcript of 楽天技術研究所 ネットワーク応用通信研究所 Rubyアソシエー...
Powered by Rabbit 2.1.8
Second System Syndrome
楽天技術研究所ネットワーク応用通信研究所
RubyアソシエーションHeroku
まつもとゆきひろYukihiro "Matz" Matsumoto
@yukihiro_matz
Powered by Rabbit 2.1.8
ソフトウェア開発Software development
Powered by Rabbit 2.1.8
ソフトウェア開発は難しいSoftware development is hard
Powered by Rabbit 2.1.8
誤解もあるIt's often misunderstood
Powered by Rabbit 2.1.8
設計してコーディングDesign then code
Powered by Rabbit 2.1.8
間違いWrong!
Powered by Rabbit 2.1.8
ソフトウェア開発は設計であるSoftware development is designing
Powered by Rabbit 2.1.8
間違った前提による困難さDifficult to work on false assumption
Powered by Rabbit 2.1.8
設計=デザイン
Powered by Rabbit 2.1.8
デザインは難しいDesign is hard
Powered by Rabbit 2.1.8
何を作るべきか知らないWe don't know what we should make
Powered by Rabbit 2.1.8
Powered by Rabbit 2.1.8
欲しがるものを作ってはいけないWe shouldn't make what they want
Powered by Rabbit 2.1.8
顧客に何が欲しいか尋ねたら「速い馬」と答えたろう
ヘンリー・フォード
Powered by Rabbit 2.1.8
生活を変えるものを作るMake what changes their lives
Powered by Rabbit 2.1.8
存在しないものを創造するCreate something that have never existed
Powered by Rabbit 2.1.8
デザインは決断であるDesign is decision
Powered by Rabbit 2.1.8
決断は難しいDecision is hard
Powered by Rabbit 2.1.8
未来はわからないからBecause the future is unknown
Powered by Rabbit 2.1.8
状況が変化するからBecause the situation changes
Powered by Rabbit 2.1.8
昔は良かったGood old days
Powered by Rabbit 2.1.8
目的は明快だったThe target was clear
Powered by Rabbit 2.1.8
数値計算Numerical calculation
Powered by Rabbit 2.1.8
事務処理Business processing
Powered by Rabbit 2.1.8
良き昔は過ぎ去ったGood old days have over
Powered by Rabbit 2.1.8
今は解を求めてさまようNow we struggle to find the solution
Powered by Rabbit 2.1.8
解はないかもしれないThe solution may be illusion
Powered by Rabbit 2.1.8
Ruby
Powered by Rabbit 2.1.8
Rubyを公開した時(1995年)When I released Ruby in 1995
Powered by Rabbit 2.1.8
「スクリプト言語にオブジェクト指向は要らない」
Some said we don't need OO for scripting
Powered by Rabbit 2.1.8
間違ってたBut they were wrong
Powered by Rabbit 2.1.8
何が欲しいか聞かなかったI didn't ask them what they want
Powered by Rabbit 2.1.8
私が未来で使いたいものを作ったI created what I wanted to see in the future
Powered by Rabbit 2.1.8
わからない人もいたSome didn't understand what they saw
Powered by Rabbit 2.1.8
気にしなかったI didn't care
Powered by Rabbit 2.1.8
10年続けたI kept working for 10 years
Powered by Rabbit 2.1.8
「当たり前」になったRuby became new normal
Powered by Rabbit 2.1.8
未来の「当たり前」を作るCreate new normal
Powered by Rabbit 2.1.8
ソフトウェア開発の本質The essence of software development
Powered by Rabbit 2.1.8
良いソフトウェアを作ったSuppose you have created the great software
Powered by Rabbit 2.1.8
そこで終わりじゃないIt's not the end of your development
Powered by Rabbit 2.1.8
未来はわからないからBecause the future is unknown
Powered by Rabbit 2.1.8
状況が変化するからBecause the situation changes
Powered by Rabbit 2.1.8
生まれた瞬間から古びるソフトウェアSoftware gets older soon after created
Powered by Rabbit 2.1.8
変化する状況への対応We have to adapt to changing situation
Powered by Rabbit 2.1.8
時間が経つにつれてAs time goes by
Powered by Rabbit 2.1.8
システムはより大きく複雑にSystems will go bigger, more complex
Powered by Rabbit 2.1.8
保守も難しくなるMore difficult to maintain
Powered by Rabbit 2.1.8
複雑なシステムがイヤになった時When we become sick of complex systems
Powered by Rabbit 2.1.8
セカンド・システム症候群が起きるSecond system syndrome will come
Powered by Rabbit 2.1.8
セカンド・システム症候群Second system syndrome (SSS)
Powered by Rabbit 2.1.8
廃棄再創造希求症候群Scrap and build syndrome
Powered by Rabbit 2.1.8
症状Symptoms
Powered by Rabbit 2.1.8
すべて捨てたい誘惑Temptation to throw away everything
Powered by Rabbit 2.1.8
ゼロから作り治したい誘惑Temptation to create everything from scratch
Powered by Rabbit 2.1.8
もっと綺麗なシステムが作れるという幻想
Illution that we could create cleaner systems
Powered by Rabbit 2.1.8
もっと高性能なシステムが作れるという幻想
Illution that we could create systems that performs better
Powered by Rabbit 2.1.8
意思決定者を説得する熱意Enthusiasm to persuade the boss
Powered by Rabbit 2.1.8
良いデザインへの強い熱意Strong enthusiasm for better design
Powered by Rabbit 2.1.8
予想以上に困難なデザインDifficult design problems beyond expectation
Powered by Rabbit 2.1.8
予想以上にかかる時間Delayed schedule beyond forecast
Powered by Rabbit 2.1.8
予算を越える費用Development cost beyond budget
Powered by Rabbit 2.1.8
怒る顧客Angry clients
Powered by Rabbit 2.1.8
破綻するプロジェクトProject failure
Powered by Rabbit 2.1.8
あ痛た、たOuch!!
Powered by Rabbit 2.1.8
しょっちゅう起きるSSS happens all the time
Powered by Rabbit 2.1.8
程度の違いこそあれwith different severity
Powered by Rabbit 2.1.8
私の専門はプログラミング言語My expertise is programming languages
Powered by Rabbit 2.1.8
言語も例外ではないLanguages are no exception
Powered by Rabbit 2.1.8
むしろ言語では頻発するRather many languages suffer SSS
Powered by Rabbit 2.1.8
言語は長生きだからBecause languages live longer
Powered by Rabbit 2.1.8
普通のアプリよりもはるかにFar more than usual applications
Powered by Rabbit 2.1.8
Case 1
Powered by Rabbit 2.1.8
Perl5 vs Perl6
Powered by Rabbit 2.1.8
Perl6は2000年に開発開始Perl6 project started 2001
Powered by Rabbit 2.1.8
Perlの思想を引継ぐPerl6 inherit Perl philosophy
Powered by Rabbit 2.1.8
ゼロから実装Perl6 implementation from scratch
Powered by Rabbit 2.1.8
新文法Totally new syntax
Powered by Rabbit 2.1.8
新VMTotally new virtual machine
Powered by Rabbit 2.1.8
15年後(2015年)15 years later (2015)
Powered by Rabbit 2.1.8
Perl6はまだないWe don't have Perl6 yet
Powered by Rabbit 2.1.8
今年のクリスマス(予定)Finally this christmas (hopefully)
Powered by Rabbit 2.1.8
普及には恐らくさらに何年もProbably need years to become widely used
Powered by Rabbit 2.1.8
誤解しないで欲しいDon't get me wrong
Powered by Rabbit 2.1.8
Perlコミュニティを尊敬しているI respect Perl community
Powered by Rabbit 2.1.8
Perlコミュニティは賢いPerl people are smart
Powered by Rabbit 2.1.8
そんな彼らも苦しむEven they suffer
Powered by Rabbit 2.1.8
セカンドシステム症候群は恐ろしいSecond system syndrome is scary
Powered by Rabbit 2.1.8
Case 2
Powered by Rabbit 2.1.8
Python2 vs Python3
Powered by Rabbit 2.1.8
Python3000
Powered by Rabbit 2.1.8
Python3000設計方針Python3000 design policy
Powered by Rabbit 2.1.8
古いやり方を捨て機能重複を減らす"reduce feature duplication by removing old ways of doing
things"
Powered by Rabbit 2.1.8
西暦3000年までに出ればWish we could release it before A.D.3000
Powered by Rabbit 2.1.8
何年も何年も議論Discussed for years
Powered by Rabbit 2.1.8
2006年、Python3000開発開始Python3000 project started in 2006
Powered by Rabbit 2.1.8
2008年、Python3.0公開Python3.0 was relased in 2006
Powered by Rabbit 2.1.8
互換性問題Compatibility problems
Powered by Rabbit 2.1.8
2015年になってもPython2がまだ使われている
In 2015, Python2 is still widely used
Powered by Rabbit 2.1.8
Python3を捨てようという人までSome even claimed to give up Python3
Powered by Rabbit 2.1.8
最近Python3率が増えたようなRecently Python3 has adapted more widely
Powered by Rabbit 2.1.8
ようやくかFinally
Powered by Rabbit 2.1.8
誤解しないで欲しいDon't get me wrong
Powered by Rabbit 2.1.8
Pythonコミュニティを尊敬しているI respect Python community
Powered by Rabbit 2.1.8
Pythonコミュニティは賢いPython people are smart
Powered by Rabbit 2.1.8
そんな彼らも苦しむEven they suffer
Powered by Rabbit 2.1.8
セカンドシステム症候群は恐ろしいSecond system syndrome is scary
Powered by Rabbit 2.1.8
Rubyも例外ではないRuby is no exception
Powered by Rabbit 2.1.8
Ruby1.8 vs Ruby1.9
Powered by Rabbit 2.1.8
パフォーマンスPerformance
Powered by Rabbit 2.1.8
多言語化Multilingualization (M17N)
Powered by Rabbit 2.1.8
2000年構想開始The idea was born in 2000
Powered by Rabbit 2.1.8
2004年プロジェクト開始The project started in 2004
Powered by Rabbit 2.1.8
2007年1.9.0リリース1.9.0 was released in 2007
Powered by Rabbit 2.1.8
互換性問題Compatibility problems
Powered by Rabbit 2.1.8
普及に5年以上Took 5 or more years
Powered by Rabbit 2.1.8
PythonよりマシWe've done better than Python3
Powered by Rabbit 2.1.8
「あきらめよう」という人はいなかったNo one suggested to give up at least
Powered by Rabbit 2.1.8
なにがよかったのかBut how?
Powered by Rabbit 2.1.8
どうやってセカンドシステム症候群を克服するか
How can we overcome second system syndrome?
Powered by Rabbit 2.1.8
1. 「全部捨てる」ことを避けたwe have never thrown away everything
Powered by Rabbit 2.1.8
ひとつずつ置き換えたWe have replaced one at a time
Powered by Rabbit 2.1.8
文字列クラスReplaced string class
Powered by Rabbit 2.1.8
仮想マシンReplaced Virtual machine
Powered by Rabbit 2.1.8
オブジェクト表現Replaced object representation
Powered by Rabbit 2.1.8
ガーベージコレクターReplaced garbage collector
Powered by Rabbit 2.1.8
できるだけご完成を維持しつつKeep compatibility as much as possible
Powered by Rabbit 2.1.8
移行パスを用意しつつPrepare migration path
Powered by Rabbit 2.1.8
劇的な変化を試みないNever tried too drastic changes
Powered by Rabbit 2.1.8
少しずつ変化するChanged step by step
Powered by Rabbit 2.1.8
バージョンの幻想2. versioning illusion
Powered by Rabbit 2.1.8
2.0 vs 3.0
Powered by Rabbit 2.1.8
5.0 vs 6.0
Powered by Rabbit 2.1.8
1.8 vs 1.9
Powered by Rabbit 2.1.8
3. 移行のご褒美migration bait
Powered by Rabbit 2.1.8
1.9以降の大きなメリットMoving 1.9 had huge benefit
Powered by Rabbit 2.1.8
パフォーマンスPerformance
Powered by Rabbit 2.1.8
動機付けMotivation
Powered by Rabbit 2.1.8
セカンドシステム症候群対策の大原則
Rules of thumb of SSS
Powered by Rabbit 2.1.8
「全部捨て」をしないDon't throw away everything
Powered by Rabbit 2.1.8
一気にやりすぎないDon't push too hard
Powered by Rabbit 2.1.8
やさしくPush softly
Powered by Rabbit 2.1.8
着実にPush steady
Powered by Rabbit 2.1.8
互換性Compatibility
Powered by Rabbit 2.1.8
変化を止めないKeep moving forward
Powered by Rabbit 2.1.8
2.0は(ほぼ)完全な互換性を維持2.0 had (almost) perfect compatibility
Powered by Rabbit 2.1.8
しかし時が経つにつれBut as time goes by
Powered by Rabbit 2.1.8
セカンドシステム症候群はまたやってくる
Second system syndrome comes again
Powered by Rabbit 2.1.8
Ruby 3.0
Powered by Rabbit 2.1.8
我々は原則を忘れないBut we don't forget the rules
Powered by Rabbit 2.1.8
「全部捨て」をしないDon't throw away everything
1.
一気にやりすぎないDon't push too hard
2.
やさしくPush softly
3.
着実にPush steady
4.
Powered by Rabbit 2.1.8
Ruby3構想中We started working on Ruby3.0
Powered by Rabbit 2.1.8
状況が変化するからBecause the situation changes
Powered by Rabbit 2.1.8
マルチコアMulti cores
Powered by Rabbit 2.1.8
データスケーラビリティData scalability
Powered by Rabbit 2.1.8
コードスケーラビリティCode scalability
Powered by Rabbit 2.1.8
実験中By experimenting ideas
Powered by Rabbit 2.1.8
なにも約束しないWe don't promise anything
Powered by Rabbit 2.1.8
セカンドシステム症候群対策の大原則
Rules of thumb of SSS
Powered by Rabbit 2.1.8
「全部捨て」をしないDon't throw away everything
1.
一気にやりすぎないDon't push too hard
2.
やさしくPush softly
3.
着実にPush steady
4.
Powered by Rabbit 2.1.8
Ruby3
Powered by Rabbit 2.1.8
人とコンピューターの協同Man-machine collaboration
1.
パフォーマンスPerformance2.
コンカレンシーConcurrency3.
Powered by Rabbit 2.1.8
より広い領域へToward broader domain
Powered by Rabbit 2.1.8
より高い生産性More productive
Powered by Rabbit 2.1.8
かなり高い互換性Yet keeping compatibility
Powered by Rabbit 2.1.8
Rubyが未来を作るRuby will create the future
Powered by Rabbit 2.1.8
Rubyコミュニティと一緒にAlong with Ruby community
Powered by Rabbit 2.1.8
あなたと一緒にWith you
Powered by Rabbit 2.1.8
みなさんと一緒にWith all of you
Powered by Rabbit 2.1.8
Happy Hacking!
Powered by Rabbit 2.1.8
Thank you