ハッカーと画家―コンピュータ時代の創造者たち

Paul Graham著『ハッカーと画家―コンピュータ時代の創造者たち』。サポートページShiro:HackersAndPaintersからリンクされている川合史朗さんのページでも、かなりの数の翻訳を読むことができます。どれも面白い文章。以下はまとめでもなんでもなくて、自分が思い出す用のメモ。

口にできないこと ---What You Can't Say---

どんな時代でも、そういったレッテルを見つけるのは難しくない。同意出来ない意見に対して、「それは正しくない」というかわりに人々がどういう言葉を使うかを見れば良い。政治家が、相手に対して「間違っている」というなら、それは率直な批判だ。しかし政治家がある主張を、その真偽ではなく「対立主義的」だとか「差別に対して配慮を欠いている」だとか言って攻撃しているとすれば、注意を払った方がいい。

*****

私がそれをするのは、まず第一には、子供の時に石の下を覗いたのと同じ理由からだ。純粋な好奇心。そして特に、禁じられていることに対する好奇心。とにかく見せてよ、それからそれをどうするか自分で考えるから。

*****

水の中にいる時に、どうやったら波を見ることができる? 常に問い続けることだ。それが唯一の防御だ。口にできないことは何だ。そして何故だ。

ものつくりのセンス ---Taste for Makers---


我々の多くは子どもの頃に、この絡み合いを考えないままでいるように教えられてきた。弟が塗り絵で人を緑に塗っているのをばかにしていると、母親はきっと「あなたにはあなたの好みが、弟には弟の好みがあるのよ」とかなんとか言うだろう。

ここで母親は美学についての重要な真実を教えようとしているわけではない。単にあなたと弟がけんかするのを止めたいだけだ。

*****

センスは個人の好みだと言うのは論争を避けるには良い方法だ。問題は、それが真実でないということだ。ものをデザインしはじめると、それを感じることになる。

*****

良いデザインは単純である。
良いデザインは永遠である。
良いデザインは正しい問題を解決する。
良いデザインは想像力を喚起する。
良いデザインはしばしばちょっと滑稽だ。
良いデザインをするのは難しい。
良いデザインは簡単に見える。
良いデザインは対称性を使う。
良いデザインは自然に似る。
良いデザインは再デザインだ。
良いデザインは模倣する。
良いデザインはしばしば奇妙だ。
良いデザインは集団で生起する。
良いデザインはしばしば大胆だ。


簡潔さは力なり---Succinctness is Power---

私の知る限り、この問題について最初に書いたのはFred Brooksだ。彼は「人月の神話」の中で、平均的なプログラマが生産できるコードの行数は言語によらずほぼ一定であると述べていたと思う。私は確か、学部生か大学院に入りたての頃にそれを読んで新鮮な驚きを受け、その意味するところは非常に大きいと感じた。だってそこから得られる結論は、 (a) ソフトウェアをより速く書く唯一の方法はより簡潔な言語を使うことで、 (b) その手間を掛けた者はそうしなかった競争相手をはるか後方に引き離すことが出来る、ってことだからだ。


デザインとリサーチ ---Design and Research---

良いデザインが出て来やすいのは、対象とするユーザーがあなた自身を含んでいる時だ。あなた自身を含まないグループに対して何かをデザインしていると、対象ユーザー層は自分より上ではなく、下だと思ってしまいがちになる。

それは問題だ。ユーザーを見下ろすことは、たとえ慈悲心があったとしても、いずれはデザイナーをだめにする。アメリカの住宅のうち、自分でそこに住もうと思っている設計者が作ったものはほとんど無いんじゃないか。

*****

現実には、良いデザインを得るにはユーザーに近付き、そして常にユーザーの側に居なくてはならない。実際のユーザーに合わせて常に考えを調整しなければならない。特に最初の段階がそうだ。ジェーン・オーステンの小説が良いわけは、彼女はまず作品を家族に読んで聞かせたからだ。だから彼女は自己満足的な芸術ぶった風景の描写や、もったいぶった哲学的考察に堕ちることが決して無かった。


もうひとつの未来への道 ---The Other Road Ahead

うちの近所に、こんなステッカーを貼った車が停めてある:「不便なら死んだほうがまし」。多くの人は、ほとんどの場合、一番手間のかからない方法を選ぶ。Webベースのソフトウェアが勝つとすれば、それが便利だからに他ならないはずだ。そして、どうもそれは正しいようだ。ユーザにとっても開発者にとっても。

*****

開発者にとって、Webベースとデスクトップソフトウェアとの最も顕著な違いは、Webベースアプリケーションはひとつのコードの塊ではないということだ。Webベースアプリケーションは単一の大きなバイナリではなく、むしろ違ったタイプのプログラムの集合になるだろう。従って、Webベースアプリケーションの設計は、ビルディングを作るよりも都市を作るのに似てくる。ビルディングだけでなく、道路や標識、上下水道にガス電気、警察署と消防署、そして拡張計画や災害への対応計画なんかが必要だ。

*****

E. B. ホワイトは、農場を持っている友人から、電流を流せる柵の多くは実際には電流を切っていると聞いて感心した。牛は一度感電を経験したらそういう柵に近寄らないようになるから、電流を流し続ける必要はない。「立ち上がれ、牛たちよ!」彼は書いた。「君主が寝ている間に自由を手にせよ!」


百年の言語 --- The Hundred-Year Language

実装を気にして書く必要が少なくなれば、プログラムはより柔軟になる。プログラムを書いている最中に仕様が変わっても対応できる。これは単に避け難いというだけでなく、望ましいことだ。

「エッセイ」という単語はフランス語の動詞 "essayer" から来ている。それは「試す」という意味だ。エッセイは、もともとの意味においては、何かを理解するために書いてみるものだった。ソフトウェアも同じことだ。最良のプログラムのいくつかは、作者が何を書くべきかはっきりわからないままに書きはじめたという意味で、エッセイであると言えるだろう。

*****

非効率なソフトウェアが醜いのではない。醜いのは、プログラマに不要な仕事をさせる言語だ。本当の非効率性とは、マシンの時間を無駄にすることではなく、プログラマの時間を無駄にすることだ。コンピュータが速くなればなるほど、このことははっきりしてくる。

*****

さあ、ここに2つのアイディアが出た。これを組み合わせるとおもしろい可能性が見えてくる。(1)100年後の言語は、原理的には、現在でも設計できる。(2)そのような言語は、もし存在すれば、現在でもプログラムを書くのに良い言語かもしれない。こんなふうにアイディアを並べて見ていると、 100年後の言語を、今、設計したくなってこないかい?

言語を設計する時には、そういうターゲットを設定して、常に頭に置いておくことは良いことだと思う。運転を習う時、道路の線に車を合わせるのではなく、遠くの点を目標にして方向を合わせると良いと教わるはずだ。たとえ目先10フィートまでに起こることが重要なのだとしても、そのアドバイスは正しい。プログラミング言語に関しても、それは同じだ。


ハッカーと画家 ---Hackers and Painters---

ハッカーがやっていることは「計算機工学」と呼ばれることもあるが、この用語も誤解を助長するだけだ。優れたソフトウェア設計者は、建築家がエンジニアではないのと同じように、エンジニアではない。もちろん建築とエンジニアリングの境界ははっきりと定められているわけじゃないけれど、確かに存在する。それは、「何を」と「どうやって」の間にある。建築家は何をするかを決め、エンジニアはそれをどうやってするかを考え出すのだ。

「何を」と「どうやって」をあまり分けすぎるのは良くない。どうやれば出来るかを理解せずに何をするかを決めようとするのは、間違いのもとだ。でも、ハッキングには確かに、ある仕様をどうやって実装するか決めること以上のものがある。ハッキングの最良の形態とは、仕様を創ることだ--- ただ、仕様を創るいちばんの方法はそれを実装することだ、ということに過ぎない。

*****

人々があなたの仕事を誤解するよりも悪いことがある。より大きな危険は、あなた自身が自分の仕事を誤解することだ。アイディアを探す時、人は関連した分野を見にゆく。あなたが計算機科学科にいたとしたら、ハッキングは理論計算機科学に対する応用だとか思ってしまうかもしれない。私は大学院にいた頃ずっと、もっと理論を知らなくちゃならないという思いが心の底にあって、居心地の悪い思いをしていた。期末試験から3週間後にはすっかり全部忘れてしまうことをずいぶん後ろめたく思ったものだ。

でも、私は間違っていたんだ。ハッカーは、画家が絵の具に関する化学を理解するのと同程度に計算理論を理解していればいい。時間的、および空間的な複雑度の計算法と、チューリング完全の概念については知る必要があるだろう。それから、パーザや正規表現ライブラリを書くことになった時のために、状態機械の概念は少なくとも覚えておいた方がいいかもしれない。実は、画家はそんなことよりもっとずっとたくさんのことを、絵の具に関する化学で覚えなければならないんだ。

*****

もうひとつ、これは矛盾しているように聞こえるかもしれないが、偉大な絵画とは、それ自身があるべき姿よりも優れているはずだ。例えば、レオナルド・ダ・ヴィンチがナショナルギャラリーにある ジネヴラ・ベンチ の肖像画を書いた時、彼は人物の後ろに杜松の潅木を配置した。絵の中で彼は、松の葉を一枚一枚、注意深く描いた。他の多くの画家だったら、これは単に人物の背景を埋めるだけのものだと考えたかもしれない。誰もそんなにそれを注意深く見ることはしないだろうと。

レオナルド・ダ・ヴィンチは違った。彼にとって、絵のある部分にどれだけ手間をかけるかは、誰かがそこを見るかどうかには関係なかったのだ。彼はマイケル・ジョーダンと同じだ。妥協しないんだ。

見えない細部は、それが組合わさると、見えるようになる。妥協しないことはこの点で重要だ。ジネヴラ・ベンチの肖像画の横を通りかかった人々は、すぐにその絵に気を止める。絵のラベルを見てそれがレオナルド・ダ・ヴィンチによるものだと知るより前からだ。全ての見えない細部が組合わさることにより、まるでほとんど聞こえないかぼそい声が幾千も合わさって一つの旋律を歌っているかのように、ある種圧倒される何かが創られる。

*****

私は子供の頃、いつも、人の身になってものを考えなさいと教えられた。実際にはそう言われる時はいつでも、自分のしたいことじゃなくて他人の望むことをしなさい、という意味だった。だから共感なんてつまらないものだと思って、私はそれを磨こうとはしなかった。

だが、なんてこった。私は間違っていたんだ。他人の身になってものを見るというのは、本当は成功する秘密だったんだ。それは自己犠牲を意味するとは限らない。他の人のものの見方を理解することは、あなたがその人の利益のために行動しなくちゃならないということには関係ないんだ。特定の状況では、例えば戦争をしている時は、まったく逆の行動をしたいと思うだろ


素晴らしきハッカー ---Great Hackers---

同じことがGoogleでも起こったんだと思う。 Googleが創立された時、いわゆるポータルについては、検索という部分は退屈でさして重要でないものだというのが一般的な認識だった。だがGoogleは検索は退屈なものだとは思わなかった。それが、彼らが検索を非常にうまくやってのけた理由だ。

ここは、マネージャーで差をつけられる領域だ。親が子供に言い聞かせるように、部屋を10分で綺麗にかたづけることはできないかもしれないけれど、良いマネージャーは問題をより面白いものに再定義してやることができる。スティーブ・ジョブスはこの点が特に長けている。高いスタンダードを持つというのもその一部だ。Macの前にも、たくさんの、小さく安いコンピュータがあった。彼は問題をこう再定義したんだ:美しいコンピュータを作ろう。それこそが、他のどんな鼻先のニンジンよりも、開発者達を駆り立てたんじゃないだろうか。

そして、彼らは確かにそれに成功した。Macが初めて現れた時、あなたはそれが良いものだと知るのに、電源を入れてみる必要さえ無かったはずだ。ケースを見るだけでわかった。何週間か前に、私はケンブリッジの道端を歩いていて、誰かの捨てたごみの中にMacのキャリングケースみたいなものを見つけた。中を覗いて見たら、果たせるかな、Mac SEが鎮座していた。私はそれを抱えて帰って、電源を入れてブートしてみた。Macintoshの笑った顔が現れて、ファインダーが現れた。ああ、なんてシンプルなんだ。これはまさに…Googleのようだ。

*****

友人の幾人かは、ハッカーの集中力に関して言及した。一人の言葉を借りれば、「他の全てのことを頭から追い出せる」能力だ。私も確かにそれには気づいていた。また、何人かのハッカーが、ビールを半杯でも飲んだら全くプログラムできなくなると言っているのも聞いたことがある。ハッキングは、ある種の特殊な集中能力を必要とするのかもしれない。素晴らしいハッカーはたぶん、非常に大きなコンテキストを頭の中にロードすることが出来て、したがってコードを一行眺めている時にも、その行だけでなくそれを取り巻くプログラム全てを見ているのかもしれない。ジョン・マクフィーはビル・ブラッドレイのバスケットボール選手としての成功は、彼の並外れた周辺視に依っていたと書いていた。通常、完全な視力は、だいたい47度の垂直周辺視角を持っている。ビル・ブラッドレイは70度の視角を持っていた。彼は床を見つめていながら、バスケットを観ることが出来たのだ。素晴らしいハッカーは、そのような生まれつきの能力を持っているのかもしれない。 (私は密度の高い言語を使うことでずるをしている。それは実質的にコートを狭める効果を持っているからだ)。


知っておきたかったこと --- What You'll Wish You'd Known

偉大な問いを発するのに何年もかかるとしたら、いま、16歳の君は何をしたらいいだろう。質問を見つける準備をするんだ。偉大な問いは突然現れるんじゃない。徐々に頭の中に結晶してくるんだ。それを結晶させるのは経験だ。だから、偉大な問いを見つけるのに探し回ってもだめだ。「ぼくができる偉大な発見は何だろう」なんてぼんやり考えててもだめだ。そんな質問に答えはない。答えがあるなら既に見つけてるはずだからね。

大きなアイディアが頭に浮かぶようになるには、大きなアイディアを追い求めるんじゃなく、自分が興味を持つことにたくさんの時間を費すことだ。そして頭を柔軟に開いておいて、いつでも大きなアイディアが巣を作れるようにしておくんだ。アインシュタイン、フォード、ベッケンバウアー、みんなこのレシピを使ったんだ。彼らはみな、ピアニストがピアノの鍵盤を知りつくしているのと同じように、自分の仕事を知りつくしていた。だから何かひっかかりがあれば、すぐにそれに気づけるという自信を持っていたんだ