著作一覧 |
Joel on Software(Joel Spolsky)
どこかで読んだようなネットスケープの凋落の物語が語られているが、歴史に学ぶ方法の問題点は、ほとんどの場合、反例が見つかり、しかもそのどちらが正しいかを検証する手段がないことだ。成功したものは成功したために検証のためにそれをやり直す必要はなく、そのために別の方法を取った場合にそれがどうなるかがわからないからだ。
反例1: マイクロソフトの市場シェアのほとんどを占めるExcelという表計算ソフトは、そこそこ成功したマルチプランとは独立して更地に作られた。(Mac版が)
反例2: OS Xは、OS9を捨てて更地に作られた。
反例3: Unixは、Multixとは全然無関係に更地に作られた。
反例4: SQL Server7は、それまでのSybaseのコードベースを捨てて更地に作られた(らしい)
反例5: (憶測)大成功をおさめたNetscape Navigatorは、Mosaicに見切りをつけて更地に作られた(アンドリューセンがコードを盗まなかったと仮定して)。
別意見:Netscape凋落の原因は、更地に開発ではなく、モチベーションの欠如による
なぜか? 会社がイノベーションを止めてしまったからだ。会社は大きくなり、そして大会社はどうしても創造性がなくなる。例外はもちろんある。しかし一般的に、すごいことをやるのは、動機づけが高く、目的を一つにした人たちの小集団だ。関わる人たちが増えれば増えるほど、その集団はグズでまぬけになる。
(辞職そして追悼。)。
(ただし、公平を期すならば「6 ヶ月から 10 ヶ月の手戻りとなった。」という更地主義のもたらしたマイナス面を見ておく必要がある)
何が言いたいかというと,アプリケーション開発者の多くが「既存コードベースを拡張/修正する」ことを一番良いと信じていることを問題視しているのだ。最初からやり直さなければもっとうまくできるだろうという考えが間違いであることは再三証明されてきた。間違わないでもらいたいが,ビジネスの状況や技術的な理由によって,アプリケーションを捨てないですませなければならないこともある。しかし,その方がいいと思ったからといって,(最初から書き直すのではなく)アプリケーションの既存の機能を書き換えるのは,十中八九間違っている。
どちらにしても、最初のリリースから幾度か待つ必要があるのは当たり前の話だ。
良く読めばすぐにわかるが、最初に挙げた2番目の「認識」が不適切だからだ。「Microsoft製品「XXX』の次期バージョン」のほとんどが、既存コードベースの修正/拡張だからだ。たとえばVistaはXPのコードをまったく使わずに更地に作った? まさか。にもかかわらず、最初のサービスパックを待つつもりだよ(実運用については)。次期Officeが更地に作られた? 誰もそうは思わない。
2番目の認識はリリース直後の製品は、それが更地に作られようが、修正/拡張であれ、キャズムを超えるには人柱(アーリーアダプター)をソフトウェアのモロク神に捧げる必要があるということを示しているに過ぎない。
というか、まさかパッチレベルで済むような修正に対してまで更地主義で挑む愚か者がいるということを書いているのかね? そうは読めないのだが。
結局のところ、本人が書いているとおり、新築と増築のどっちを選ぶかは「ビジネスの状況や技術的な理由」に依存している。したがって、タイトルはミスリードを招くため極めて危うい。
class DupError < RuntimeError end class Database def add(key) unless @data[key].nil? raise DupError end @called += 1 @data[key] = true end def remove(key) @data[key] = nil end def renew @data = Hash.new @called = 0 end attr_reader :called end Storage = Database.new #複数のデータを登録する処理 def create(args) args.each do |x| begin Storage.add(x) return rescue DupError end Storage.remove(x) create(args) end end #データの数を1から16まで増やしながらテストしてみる (1..16).each do |x| Storage.renew args = Array.new(x) {|i| i} args.each do |val| #全データが登録済みという状態をテスト用に作る Storage.add(val) end create(args) puts "#{x} by #{Storage.called} times" endその破壊力にはすごいものがあった。それにしてもなんでちゃんと停止するのか、最初わけがわからなかった。
ジェズイットを見習え |
>ソフトウエア開発者の危うい「更地主義」<br><br>翻訳の元記事はこれですかね。<br>http://www.sqlmag.com/Article/ArticleID/93775/Filling_a_Green_Field.html<br><br>標題は"Filling a Green Field"となっていますが、印象が随分と違いますね。どうしてこのような邦標題になったんでしょう。
>OS Xは、OS9を捨てて<br>CopelandとRhapsodyのことを考えると、OS Xはむしろ反・更地主義の一例になるのではないでしょうか?
(いや、別にならない|まったくその通り)と思います。この2元論は、最初から破綻していて、プロジェクトのスコープとどこまで戻ったら更地と見なすのかに依存したくだらない話です(本気で更地がどうのと言い出したらCから作らなければならない−Unixくらいかな)。したがって、どうとでも言えます。あまりにもくだらないのでネタにしただけです。ただし、元ネタは注意深く「アプリケーション」と前提しているのに、あまりにも構成要素が多いOSを出したのは無理がありましたね。たとえばCoplandは修正ベース(そのため、Toolboxの制限に捉われた)、Rhapsodyは更地ベース(ただしOPENSTEP+MACHの修正ベースと見られなくもないのでは)とも言えます。
技術的にはMac OS XはNeXTからものすごくスムーズに連続していると感じますね。<br>あと、更地主義(という言葉をあえて使う)では、大抵は新旧の対立や葛藤が伴うのでそのオーバーヘッドの分は確実に不利だと思います。強烈なリーダーがいたり(例:Jobs)、個人の欲求だったり(例:Unix)すればその分を補って逆転できるのではないかと。
>それまでのCybaseのコードベース<br>Sybase ですよね?
ですね。