読者です 読者をやめる 読者になる 読者になる

南極の図書館

ペンギンが寝ていた…。

プログラマが知るべき97のこと

Ruby はてな年間100冊読書クラブ 表現 book

前回書いた通り、オススメの一冊。
今春“プロ”グラマーになる人が、あと1週間で学ぶ3つのこと(+1) - holyppの日記

見出し

・私の選んだ2つのこと
プログラマーの考え方になる

私の選んだ2つのこと

本書の内容について。
テスト、デプロイ、レビュー、開発環境(IDE/unix)、開発技法の話はもちろんいくつもあり、
それに「良いコードとは何か」「ちょっとした開発のコツ」「経験談(失敗談)」などたくさんの考え方が書かれている。


人によって、また読む時期によって感じ方が全く変わってくる類の本なので、さしあたり今の自分が気になった2つを選んでみた。

64.プロのプログラマとは (ロバート・C・マーティン)

タイトルの通り。解っていたはずなんだけど、まだまだ。

プロのプログラマとは、どういう人のことでしょうか。
プロフェッショナルなプログラマの最大の特徴は「自分が責任を取る」という態度、責任感です。

もちろん誰もが責任を持って仕事をしている。
ただ、それが「どれくらい?」となると、ちょっと足りてなかったかな、と思わされる。

たとえば、あなたがもし、心臓切開手術を受けるとします。そしてその様子を幽体離脱して上から見ているとします。医師に与えられた時間は限られています。

こういう時あなたが患者なら、医師にはどう行動して欲しいでしょうか。
納期に追われるプログラマのような行動を望みますか。「とにかく時間内に終わればよい」というようないい加減な仕事をして欲しいですか。あるいは「今、ちょっと治せないので、 後にします」などと言って欲しいですか。

納期に追われるプログラマのような行動を望みますか?

19.誰にとっての「利便性」か (グレゴー・ホーペ)

技術よりの話ではこれを。API設計について。


メソッドwalkとrunがあったとして、これらはメソッドをまとめてしまっても良いと考えられる。
例えばwalk(true)と書けば走っている、とする。普段はそれで良いが、対象がAPIであったらどうか。

 API では、1 つの問いに対応する動詞、つまりメソッドが必ず1つとは限らない、ということです。
 ボキャブラリーに多様性を持たせれば、微妙な意味の違いが容易に表現できます。
 たとえば、walk(true) というようなコードを書かされるよりは、単に run と書ける方が間違いなく使いやすいでしょう。
「することがほとんど同じなのに、2 種類の呼び出しを使うのは不便ではないか」というのは、要するに呼び出す側にとって不便というのではなく、コードを書く自分が、内容のほとんど同じメソッドを2つ書くのが「面倒」という意味なのです。

つまりタイトルの通り、「それ」は、誰にとっての「利便性」か、ということ。
APIでは利用する側の利便性を考えることが良い設計になる。これは「言語」と一緒だという。
そういえばRubyもString#length()とString#size()など、様々な表現ができる。

プログラマの考え方になる

詰まるところ、本書の効能としてはこれが一番大きいのではないか。


朱に交われば赤くなるという。
81人のプログラマの考え方と、そこで使われている言葉によって、読者は特に意識をしなくてもプログラマになっていく。


これは「48.いろいろな言葉を学ぶ(クラウス・マルカルド)」に書いていることにも通じる。

たとえば、話す相手が会計士ならば、原価センタ会計、投資資本、使用資本、といった概念についての基本的な知識が必要です。
マーケティング担当者にも、弁護士にも、やはりそれぞれに特有の言葉や概念ががるので、それを多少は知っておかなければうまく話ができません。

これはプログラマが会計士/弁護士と話す場合に「相手の言葉」を意識する必要性を書いている。
ここには、プログラマが「プログラマの言葉と概念」を使っているという前提があるが、日本の(様々な)プログラマがそのような「考え方」をしているのかといえば、必ずしもそうではない。
私の周りでは「サラリーマンの考え方」をしている人の方がよほど多い。


本書の全てのエッセイには、プログラマの哲学が根底にある。
通して読むことで、初学者やサラリーマンでも「プログラマっぽく」なる。
その際、ひとつひとつの言葉の意味がわからないかも知れないが、それでも「プログラマっぽく」なるのだ。


そこから真にプログラマになるためには、本書で紹介されている本を読んでいけばいい。
リファクタリング」や「レガシーコード」は読まなければならないし、まだそれらを敷居が高いと感じるなら、先に「テスト駆動開発入門」を読んではどうだろうか。
テスト駆動開発入門」は比較的薄く、内容は「テストを書いて、コードを書いて、リファクタリングする」という実践的なものなので、スラスラと進むし、楽しいし、身になる。

終わりに

本書はオライリーにしては安くて薄い。
それに、気が向いたときに、気が向いたところから読み始めて、止めたいときに止められる。一つのエッセイは、ほとんどが2ページである。
座右の書にいいかもしれない。


個人的に、内容が同じらしいけどリファクタリングRubyエディションが気になってる。


はてな年間100冊読書クラブ、7冊目。
※(2011/4/4)何点か指摘いただいた点を修正しました。 @JunichiIto77 @pplaceinfoに感謝します。