Clean Coderを読みました。

自分は開発者ではないものの、帯に書いてあった

ソフトウェアのプロになるには本書が必要だ!

という文に惹かれたのが半分。

もう半分は、会社が毎年提供してくれている「自己研鑽のために使っていいお金枠」の余りがあってかつ年度内に使わないと消失してしまうという状況だったので、使い切るために高い本買っちゃおう!と思ってアンクルボブのCleanHogeシリーズを揃えたから、という理由。

動機はどうあれ、通しで読んでみたところいい本でした。頭から読み始めて「あー、これはエモ系のいい本だなー」という感想を抱いたのですが、読み切ってみるとエモと実利とか両方入っていました。

エモと実利の両立というのはt-wadaさんの講演を聞いたときに初めて浮かんだフレーズなので、t-wadaさんが好きなら本書もきっと好きなはず。

全体を通して書いてあることは

本書は、プロがどのように振る舞うべきか、周囲の人たちとどのように付き合うべきかを段階的に教えてくれる。

ということで、ソフトウェアのプロとしてのあるべき姿が書かれています。

たとえば章のタイトルにもなっているような

  • プロ意識
  • 「ノー」と言う
  • テスト駆動開発
  • 時間管理
  • 見積もり

などの切り口で、「プロとはかくあるべし」を説明しています。

正直全部ちゃんとできているプロはそうそういないと思うので、折に触れて読み返しつつ「いまはこの点は実践できてるかなー」と思えるポイントを少しずつでも増やしていく、ような使い方が現実解かな。

以下、特に面白かったポイントをいくつかご紹介。

QAは何も見つけてはいけない

自分がテスト・QA界隈でのお仕事をしているので、特にぐっときたフレーズでした。

これはもちろん、QAに仕事するなと言っているわけではなく。いち開発者として、「なにか問題があったらQAが見つけてくれるでしょ」という甘えを持つな、という意味でのフレーズです。開発がバグを出さないための努力を最大限行って、どうしても仕方がない部分をQAが見つける(そして「問題がないこと」を確かめる)のがあるべき姿ですね。

プロであればバグを出してはいけない

ともボブ(著者)は言っています。

自身のキャリアに責任をもつ

開発者が、QAが何も見つけなくて済むように何をすべきか、については本書全体に散らばっているので全部読むとして、特に1章では「キャリア形成」とそのための「学習」についても触れられています。

キャリアの責任は会社がとってくれることはなく、自分で責任を持つべきで、たとえば

  • 講習をうける
  • カンファレンスに出る
  • 本を買う
  • 学習の時間を見つける

ことが必要です。

プロというのは常に新しいことを学び続ける必要があり、仕事では使わないスキルであっても練習して身につけておく必要がある、と解いています。

すべてのプロは、何らかの形で練習をしている。できる限り最高の仕事をしようとしているからだ。また、練習は自分の時間で行っている。スキルを磨くのは自分の責任であり、雇用主の責任ではないとわかっているからだ。

この点についてはほんとうに同意で、自分も若いころに「仕事ですぐには使わないけれど」と思って自宅で学習していたようなことがいまの本業になっているので、特に現状を何か変えたい、という人にとっては本書で言うところの「練習」がとても大事だと実感を持って言えます。

ゾーンを避けろ

わりと「うんうん、そうだよね」と思って読み進めていた本書の中で、いくつか自分の中の常識と違うポイントが出てきました。

そのうちのひとつが「コードを書くときにはゾーン状態を避けろ」という教えです。

ゾーン=集中だと思っていたので、ゾーンに入ってコードを書くことはむしろ良いことかと思っていました。しかし、ゾーンは大局観を失うので良くない、と書かれています。

ゾーンから戻ってきた人は「ゾーンを避けろ」と言っている。ゾーンの集中状態は、生産性が高いわけではなく。失敗を起こさないわけではない。理論的な能力やスピード感覚が落ちている軽いめい想状態なのだ。

周囲との協力

この話題が実質本書(とこのブログ記事)のまとめなのですが。

プログラマーはよく「ひとりでコードごりごり書いていられる仕事」みたいに思われがちです。実際「プログラマは周囲から感覚を遮断してなにかに没頭するのを楽しむ傾向にある」わけなんですが、これは結果的にプログラマVS雇用主、プログラマVSプログラマといった対立構造を生みがちです。

しかし、「一緒に働く」のがプロとしてのあるべき姿だと本書では書かれています。当たり前ですが、1人よりもチームのほうがいい仕事ができるから、です。

ここで非常にぐっとくる一言が書かれていまして、

プログラミングとは、誰かと一緒に働くことなんだ。

まさに。

1人で孤独に働くのであれば、本書に書いてあるような内容というのは必ずしも実践しなくともうまくいくのかもしれません。しかし、プログラマーは孤独に働くのではなく、周囲の人と一緒にいい仕事をする職業です。

だれかと働くということはそこにプロフェッショナリズムが求められる。

そこでは、本書に書かれているような内容の意識と実践が必要。

上で引用している1文のおかげで全部つながってスッと腹落ちした感じです。