ブックレビュー

From The Joel on Software Translation Project

Jump to: navigation, search

Joel Spolsky / 青木靖 訳
2002年3月13日 水曜


「すべてのプログラマのための完璧にかなり近いリスト」 -- ジャン・ダーク


どんな本を読んでいるかということから、その人について多くのことを知ることができる。あなたの読む本がすべて私と同じなら、きっとあなたも私と同じように考えるようになる。私は常々そんな風に考えていた。

それでここに用意したのが「ジョエルのプログラマの書棚」だ。この短いリストは、すべての現役プログラマが本当に読むべきだと私が思っている本を集めたものだ。私自身の書いた本も気付かないようにもぐり込ませてあって、買ってもらえると私に2ドルばかり入る。


やさしいソフトウェアマネジメント

Image:Peopleware.gif

Tom Demarco and Timothy R. Lister, "Peopleware: Productive Projects and Teams"
「ピープルウエア 第2版 - ヤル気こそプロジェクト成功の鍵」

Microsoftのサマーインターンをしていたとき、私は友人とよく、学校で使うものを仕入れに、会社の備品室へ「見学」に行っていた。そこにはフロッピーディスクやマウスパッドやポストイットに混じって、小さなペーパーバックの山があり、私は1冊家に持ち帰って読んでみた。それがトム・デマルコとティモシー・リスターのピープルウエアだった。これは私がかつて読んだ中でもっとも影響を受けた本だ。この本を表すのに一番いい言葉は、「反ディルバート宣言」だろう。Microsoftの社員がみんなちゃんとした壁と閉まるドアのついた個室を与えられているのを不思議に思ったことはない? この本を読めばなぜか分かる。どうしてマネージャたちは、物事をする上でチームにあれほどの裁量を与えているのだろう? その理由もこの本を読めばわかる。どうしてMicrosoftには、ずば抜けて生産的で団結したSWATチームがあんなにたくさんあるのだろう? その主たる理由は、ビル・ゲイツがピープルウエアを読んでいるマネージャでいっぱいの会社を作ったからなのだ。この本を最大限に推奨する。すべてのソフトウェアマネージャが読むべき本があるとしたら、これがそうだ・・・1度読むだけではなく、毎年読み返そう。


Image:MythicalManMonth.jpg

Frederick P. Brooks, "The Mythical Man-Month"
「人月の神話―狼人間を撃つ銀の弾はない」

間違いなくソフトウェアプロジェクトマネジメントの古典の中の1つであるこの本は、4半世紀も前に書かれた。フレッド・ブルックスは世界初の超大規模ソフトウェアエンジニアリングプロジェクト(IBMのOS/360オペレーティングシステム)を動かそうとしていて、そうしてソフトウェアというのが他のエンジニアリングといかに根本的に違っているかということを書き記す最初の人間となった。この本は、すでに遅れているプロジェクトに増員するとますます遅れるという原理を見出したことによってよく知られているが、それは氷山の一角にすぎない。この本を理解することは、ソフトウェアチームのマネジメントについて正しく考えるための必要条件なのだ。


Image:RapidDevelopment.jpg

Steve C. McConnell, "Rapid Development: Taming Wild Software Schedules"
「ラピッドデベロップメント―効率的な開発を目指して」

スティーブ・マコネルは、大規模ソフトウェア開発をするようになって最初の10年の間にMicrosoftが見つけ出したたくさんの開発マネジメントに関するアイデアをとてもよく捉えている。この本の中にあるアイデアと、まったくところ独創的でないジョエルテストの間に多くの重なる部分があることに気付くだろうと思う(意外や意外!)。この本ではスケジュールプロセスをコントロールするということに、より重点が置かれている。


コードのクラフトマンシップ

Image:CodeComplete.gif

Steve C. McConnell, "Code Complete: A Practical Handbook of Software Construction"
「Code Complete―完全なプログラミングを目指して」

プログラミングの優れたプラクティスについての百科事典。Code Completeは個人のクラフトマンシップにフォーカスしており、私たちが感覚的に「きれいなコード」と言っているものを作り上げることに関するすべてが書かれている。この本はコードのレイアウトとホワイトスペースの置き方だけで50ページ費やしているような本だ。


Image:PragmaticProgrammer.jpg

Andrew Hunt and David Thomas, "The Pragmatic Programmer: From Journeyman to Master"
「達人プログラマー―システム開発の職人から名匠への道」

大学あたりでプログラミングの仕組みについては学んだが、何をするか決めるのには不安を感じているようなプログラマにとって、この本はすばらしいものだ。そこにある違いは、図面と建築の違いのようなものだ。大学の教室で設計について習ってきれいに図面を描けるようにはなったけれど、P2P音楽交換ネットワークをすべて自分で作ってみろと言われたらどこから手を付けていいか分からないのなら、これを読むといい。


プログラミングの哲学

Image:Microserfs.jpg

Douglas Coupland, "Microserfs"
「マイクロサーフス」

大学を出てすぐMicrosoftで働き始めるというのはどういうことなのか。あなたは若く、見知らぬ町にやって来た。知った人は誰もいない。他にやることもなく、コンピュータギークであるあなたは、仕事こそが楽しみだ。だからタコタイムのドライブスルーでテイクアウトの夕食を受け取ると、退屈なのでオフィスに戻る。そこから見えるのは遠くの山並みと、100フィートの常緑樹と、それにコードだ。そういう若いプログラマの多くは、仕事以外の生活がすごく孤独で空虚だ。これはMicrosoftではすごく上手く機能している。それはプログラマたちがすべてのエネルギーを1日の中の本当に楽しい部分、つまりクールなソフトウェアの開発に注ぎ込むからだ。

大きなソフトウェア会社で働く若いプログラマの感覚をマイクロサーフスほど見事に捉えている本はない。ダグラス・クープランドによる90年代初期のMicrosoftの描写は驚くほど正確で、私は言葉を失ったほどだ—しかしそれから彼はさらに進んで、今まで誰も目を向けることのなかった、そこで起きていることに対する道徳的、倫理的な理解を示している。空虚さや、やりきれない孤独感や、現代北アメリカに見られる個人のつながりの模索について、クープランドのように分かっている人はいない。


Image:ZenAndTheArt.jpg

Robert M. Pirsig, "Zen and the Art of Motorcycle Maintenance"
「禅とオートバイ修理技術―価値の探究」

ある人々のプログラミングへの態度は、ツケを払うための手っ取り早い方法というものだ。他の人には、それだけでは十分ではない・・・私たちにとって仕事は生活の中の重要な部分であり、それを意味あるものにするための哲学的な理解を必要としている。この本はエンジニアリングと哲学を関連づける上でとても参考になる。


Image:GodelEscherBach.jpg

Douglas R. Hofstadter, "Godel, Escher, Bach: An Eternal Golden Braid"
「ゲーデル、エッシャー、バッハ―あるいは不思議の環」

この本を大学に入る前に読んだ私は、「ゲーデル、エッシャー、バッハ」を専攻したいと思っていた。私が授業を選ぶ基準は、この壮大で飛び抜けて興味深い本に取り上げられているトピックをカバーしているかどうかということだった。ここにはAI、認知科学、コンピュータサイエンス、哲学、心理学、音楽、それに美術が、魔術的に織りなされている。


Image:APatternLanguage.jpg

Christopher Alexander, Sara Ishikawa, Murray Silverstein, et al., "A Pattern Language: Towns, Buildings, Construction"
「パタン・ランゲージ―環境設計の手引」

ああ、確かにこれは建築の本だ。何かを建てたりする話だ。この本のどこにもコンピュータについて触れた部分はない。実際私がこの本を買った理由は、建築に興味があったからだ。それからあることに気付いた。この本の中にあるあらゆることが、私たちソフトウェアデザイナの仕事に応用できるということだ。たとえば、CityDeskのスプラッシュ画面はとても有力なパターンである「禅窓パターン*1に基づいている。デイブ・ワイナーのRadio Userlandが人々にアピールしているのは、それが「生活を見おろす窓のパターン*2に従っているからだ。「段階的な屋外空間パターン」*3を踏まえているソフトウェアは理解しやすい。

*1 Zen View: 「美しい眺望のある場合は・・・転換地点に眺望を見晴らす窓を設ける」
*2 Windows Overlooking Life: 「外の生活が最もよく見渡せるような位置に窓を設ける」
*3 Hierarchy of (Open) Space: 「それぞれの屋外空間がつねにより大きな屋外空間への眺望を備える」

何年か前にパターンについての短命なムーブメントがプログラミングの世界で起ったが、このプログラミングにおけるパターンムーブメントが本当の拡がりを見せたことはなかったと思う。それはこの本の形式を模倣しようとする試みであって、この本の知恵を取り入れようとするものではなかったからだ。


ユーザインタフェースデザイン

Image:UIForProgrammers.jpg

Joel Spolsky, "User Interface Design for Programmers"

自分の本を宣伝したっていいよね?

「プログラマのためのユーザインタフェースデザイン」は、すべてのプログラマが知っているべきである、ユーザインタフェースデザインの最も重要な原理について伝えようとする試みだ。私が読者から受けた最も典型的な反応は、「私はあなたの本を読んで、自分のプログラムで直さなきゃいけないところを3カ所見つけたよ」というものだ。


Image:Dont_Make_Me_Think.jpg

Steve Krug, "Don't Make Me Think"
「ウェブユーザビリティの法則―ストレスを感じさせないナビゲーション作法とは」

「ウェブユーザビリティの法則」はWebにおけるユーザインタフェースデザインに関する楽しくて優れた本だ。(「リンクの色を変えない」みたいな)ありふれたルールを並べただけではない、良いユーザインタフェースデザインの原理を捉えようとする本がようやく現れた。スティーブ・クルーグの中心的な主張は、人々に考えさせることを少なくすればあなたのサイトは使いやすくなる、ということだ。


Image:AboutFace.jpg

Alan Cooper, "About Face: The Essentials of User Interface Design"
「ユーザーインターフェイスデザイン―Windows95時代のソフトウェアデザインを考える」

ユーザインタフェースデザインの古典であるこの本は、Visual Basicの生みの親によって書かれた、GUIデザインのバイブルだ。


Image:Design_of_Everyday_Things.gif

Donald A. Norman, "Design of Everyday Things"

ドナルド・ノーマンの古典、The Design of Everyday Things (以前The Psychology of Everyday Thingsというタイトルでも出版されている)は、「ユーザインタフェースデザイン」についての最高の本の1つに数えられる。たとえその話題にしているのがコンピュータではなくてドアとか冷蔵庫であったとしても。この本のアフォーダンスの理論は革新的であり、私も自分のユーザインタフェースの本の第4章で取り上げたが、それが日常的な製品のデザインの良さに関する最も影響力の大きな考えであることは、今日でも変わっていない。


Image:DesigningWebUsability.jpg

Jakob Nielsen, "Designing Web Usability"
「ウェブ・ユーザビリティ―顧客を逃がさないサイトづくりの秘訣」

わかってる、わかってる。不運なヤコブは「ClearTypeにより・・・ユーザは年間2000ドルの節約が可能になる」とか、「その答えはマイクロペイメントにある」みたいな奇妙な言説のために評判が悪い。確かに変なところもあるが、ばかげた算術に混じって、あなたの知っている必要のある的確な考えもまた、ニールセンはたくさん述べている。もし何らかの形のWebデザインをやっているのなら、この本にある原理を知っていなければならない。もしWeb以外のデザインをやっているのなら、この本をユーザビリティエンジニアリングの優れたケーススタディと考えるといい。


プログラマのための資本主義

Image:RandomWalk.jpg

Burton Gordon Malkiel, "A Random Walk Down Wall Street"
「ウォール街のランダム・ウォーク―株式投資の不滅の真理」

あなたがこの業界に十分長くいるのなら、多額の金をどうにか管理しなきゃいけない状態になるのは避けられないだろう。それでへまをしたくなかったら、いくつか知っておかなければならないことがある。

ああ、だけどすっごく込み入った話なんでしょ、あなたはそう思っているかもしれない。一般人から搾取しようと待ちかまえているずる賢いウォールストリートの狐たちを、どうしたら出し抜けるのか? そこそこうまく投資するためだけでも、絶えず調査し、研究し、手を動かし、読み、学ぶ必要があるように思える。あのたくさんの年次報告やら、それに小さな活字で印刷されたたくさんのコラムでいっぱいの退屈な新聞をみな購読しなきゃならない。

投資をやりくりする上で知るべきすべてのことが一冊の本で学べると言ったら、どう思う? すべてのことをだよ? しかも本当のことなのだ。これがその本だ。投資に関する本を何冊も読んでいる暇がないのなら、これこそ読むべき本だ。


独立する

Image:GrowingABusiness.jpg

Paul Hawken, "Growing a Business"
「ビジネスを育てる」

私はよくメールでこんなふうに聞かれることがある。「まったく、ベン&ジェリーのように会社を始めるという説には賛成なのだけど、いったいどこから始めたらいいのかわからない」。この本はそんなあなたが読みたいと思うだろう本だ。これは小さくて軽い本だけど、会社を有機的に成長させる思想について教えてくれる。


グラフィックデザイン

Image:NonDesigners.jpg

Robin Williams, "The Non-Designer's Design Book"
「ノンデザイナーズ・デザインブック」

これこれ! 誰でもある種のグラフィックデザインをしなきゃならないし、どんなソフトウェアチームでもプロのデザイナを雇うという贅沢ができるわけではない。この薄くてすばらしい本は、レイアウトやフォントといったものの背後にある原理を理解させてくれる。この本のいいところは、風呂の中で水がぬるくなる前に全部読み切ってしまえるが、次の日にはあなたの作るダイアログボックスやPowerPointやWebページがかっこよくなり始めるということだ。


違いを生み出す

Image:Influence.jpg

Robert B. Cialdini, "Influence: The Psychology of Persuasion"

ロバート・B・チャルディーニの有名な本"Influence"もまた、繰り返し読み返す価値がある。慈善団体があなたに寄付を依頼してくるとき、彼らはほとんど間違いなく、封筒に「贈物」を入れてよこす。あなたの住所の書かれたシールだとか、グリーティングカードを2枚とか、そういったものだ。彼らがあなたに贈物をする理由は、社会学的相互主義の原理のためであり、それによってあなたは何かお返ししなきゃいけないような義務を感じる。あなたはたぶん「お急ぎください、数が限られています!」みたいな表現を耳にしたことがあるだろう。テレビの広告であまりに多く耳にするので、もう気に留めなくなっているかもしれない。こんな言い方がされるのは希少性の原理のためで、人は希少なものは価値が高いと自然に考えるのだ。これらのトリックは、セールスの連中やマーケティングの人間や広告している人たちが、人々にある種の行動を取らせようとし向けるときに使っている。チャルディーニのこのすばらしい本は、人々の行動に影響を与えることの科学と実践の背後にある心理学的理論について議論している。彼らがあなたにそれを仕掛けてくる前にこの本を読んでおくことだ。


Image:Helplessness.gif

Martin E. P. Seligman, "Helplessness: On Depression, Development, and Death"
「うつ病の行動学―学習性絶望感とは何か」

何ヶ月か前にCityDeskをリリースしたとき、私はAlt+F、Alt+Sでファイルを保存している人から苦情のメールを受け取った。残念ながら小さくて気付かれずにいたバグがあって、このキーボードショートカットを使うと、イラつくことに、ファイルが保存されたあとドキュメントが閉じられていたのだ。私がこれに気付かなかったのは、私自身はAlt+F、Sで保存していて、(小さな違いだが)Alt+F、Alt+Sは使っておらず、そしてAlt+F、Sの方はちゃんと機能していたためだ。

ファイル保存をAlt+F、Alt+Sでやるようになると、やがて無意識にやるようになって、それをAlt+F、Alt+Sだとは考えなくなる。それを保存だと考えるようになるのだ。頭の中では「保存」ボタンを押しているのであって、それで作業中のページがどっかへ行ってしまったとしたら、ユーザは自分の環境をコントロールできないように感じる。これは小さなことではあるが、4回くらいも起きると本当に不幸せに感じるようになる。私がこのバグを何時間もかけて追いかけて修正したのはそのためだ。マーフィーの法則の奇妙な巡り合わせでこの修正に引き続いて起った一連のことにより、私たちは一週間近くを無駄にすることになったが、そんなのは取るに足らないことだ。これは時間を費やすに値することだ。ユーザビリティを気にかけるというのは、そういうことなのだ。もしあなたが、メニューコマンドを使うときのAltキーを押す長さの違いをつまらないことだと依然として考えているのなら、あなたのソフトウェアは人々を不幸せにすることになる。Swingアプリケーションを使うことを耐え難く煩わしいものとしているのは、そういった小さな一貫性のなさだ。それが商業的に成功したJava GUIアプリケーションが実質的に存在しない理由だと私は考えている。

良いユーザインタフェースデザインが重要なのは、それが人々を幸せにするからなのだと、私は繰り返し述べてきた。私は文字通りの意味でそう言っている。あなたのユーザインタフェースデザインが良いなら、あなたのソフトウェアを使う人々はより幸せになる。あなたのユーザインタフェースデザインがまずいなら、彼らは不幸せになる。

それと鬱病の本との間に何の関係があるのか? 人々が自分の生活やまわりの環境をコントロールできないと感じるとき、文字通り臨床的に憂鬱になることがわかったのだ。そしてこの分野のパイオニアであるセリグマンは、抑鬱に対する薬を使わないセラピーで最も効果的なのは、少しずつまわりの環境をコントロールしていくように促すことなのだと見出した。


プログラマになるには

プログラミングについて学びたいプログラマでない読者のために、2冊の本を紹介しよう。

Image:Code.jpg

Charles Petzold, "Code"
「CODE コードから見たコンピュータのからくり」

この本は、明らかにプログラマ向けではない。プログラマになりたいのか、あるいはプログラマのしていることを理解したいのか、あるいはビットとバイトの奇妙な世界を探索したいと思っている、非プログラマのための本だ。この本を読んでみるといい。この本に書かれていることがすばらしく思え、プログラマになりたくなったら、次に挙げる「プログラミング言語C」を読む(そうして手を動かす)といい。


Image:KandR.jpg

Brian W. Kernighan and Dennis M. Ritchie, "The C Programming Language"
「プログラミング言語C」

プログラミング教育における間違った考えの最大のものは、人々をプログラミングに引きつけるためには単純で楽しいグラフィックプログラミングで始めるのがいいというものだ。ある人々は、プログラミングについて学ぶ最良の方法は、たぶんHTMLあたりから始めて、それからJavaScriptをカットアンドペーストする方法を学ぶ、という具合に進めていくことだと考えている。もうひとつの間違った考えは、JavaとかWebデータベースプログラミングのような、トレンディで市場価値の高いプログラミングスキルから学ぶべきというものだ。

だけどそういう人たちは間違っている。

あまりに込み入っていてここでは立ち入ることのできない様々な理由により、プログラミングは可能な限りマシンに近いレベルから学び始めるべきだと私は考えている。K&Rとして広く知られているこの本は、プログラマになりたいすべての人が最初に読むべき本だ。この本を手にとって、じっくり読んでみよう。その1分1分が楽しく感じられるなら、あなたはプログラマになれる。この古くさいテキストプログラミングが退屈に思えるなら、あるいはポインタというやつがどうもわからないというなら、あなたがプログラミングを本当に好きになることはないだろう。プログラミングの世界へとやさしく導いてもらう必要があるとか、あるいはあのおかしなアスタリスクの意味を解明する根気を持ち合わせていないのなら、あなたはプログラミング以外のことをした方が幸せになれるだろう。本当に。しかし、もしあなたがこの本を自力で読み通すことができたなら、最高のプログラマに必要とされる資質を持っていることになり、今後学ぶことになるあらゆることへのすばらしい基礎を築いたことになる。


読者によるお気に入りの本についての議論がここで読める。このページに加えるべきと思う本があれば、ディスカッショングループに投稿して欲しい。


(オリジナル: Book Reviews)

戻る

Personal tools