2008年3月の読書 つづき

人月の神話―狼人間を撃つ銀の弾はない (Professional computing series (別巻3))

人月の神話―狼人間を撃つ銀の弾はない (Professional computing series (別巻3))

 さて本自体の感想です。筆者がシステム360*1を作った経験を基に20年以上前に書かれた本書ですが、その主張は普遍的ですね。「人」と「月」が等価交換で無いなんて、プロジェクトを管理する人なら誰でも知ってます。でも都合の良いように等価交換にしてしまうんだな。コミュニケーションが大事な事だって分かっているけど、ついさぼってしまう。それを解決する銀の弾は無いという話です。みもふたも無いようですが、真実でしょうね。
 新しいキーワードとしては「セカンドシステム症候群」がありました。新しいシステムを作るにあたり、既存システムの機能を意味無く捨てられない。よくある話ですが、概念として上手くまとまっています。
 また「ガレージプログラム」をプログラミングシステムにする労力が「システム統合インターフェイス」、「文書化、テスト等」を考慮すると9倍に達するという話は個人的に共感できるものの、近年のWebサービスにはあまり当てはまらない気がする。システムに対するイメージが異なるために、テストと文書化のコストを削っても平気なんでしょうね。全てがそうだとは思いませんが。
アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣

 スゴ本*2さんのお勧めに従って読んでみました。私はトラディショナルな局面開発の経験の方が多く、アジャイルな開発というのをみたことがありません。採用の要否はともかくそのメリットを理解する事が一番の目的です。
 掲げてある原則が練れていることもさながら、それとあわせて記述してある個人の経験や「バランスが肝心」として記述されている注意事項が分かりやすい。例によって備忘としていくつかあげます。

  • 「コードが汚い!きれいにするんだ」という原則に対して、「経営陣や事業家に納得する理由を示すこと。コードがすっきりするから、では理由にならない」という注意事項が書いてある。
    うーん、まったくそのとおり。最近同じような主張を聞いたなぁ。
  • 「設計とは指針であって指図ではない」。「最初に詳細に要件定義を行い、続いて詳細な設計を行い、それから実装、統合をすませてから、最後に、(天に祈りつつ)テストする」というのはウォーターフォールの誤解された姿。
    そうだった。局面は戻らないといっている分けじゃない。全てのステークホルダーの合意を得て、そこを基点とするだけなんだ。アジャイルな開発と局面開発は対比するものでは無く、補完するものもしくは発見させるものなんだな。
  • 「Planに価値は無く、planningが肝心なのだ」設計する事で得られた知見こそが重要なのだ。
    最近これは実感しています。問題は得られた知見を以下に次の工程につなげるかです。知見をドキュメント化しないことで失われる事は少なくない。それでは設計していないのと一緒だ。
  • 継続的インテグレーションツールを活用しよう。コードのチェックアウト、ビルド、テストをバックグラウンドで定期的に実行する
    いい気がするのだけど、やったこと無いから良く分からない。一度試してみたいな。
  • インクリメンタルに開発するんだ。NASAですら、スペースシャトルの複雑なソフトウェアをイテレーティブかつインクリメンタルに開発したんだ。*3
    インクリメンタル開発を嫌がる人への反証として抑えておきたい。でも無条件では使えないはずだから、リンク先は読まないと。でも、英語か。
  • コードよりも先にテストを書く。いわゆるテスト駆動開発(TDD:Test Driven Development)。テストを先に書くことで、実装者としての視点ではなく、利用者としての視点コードに接する事になる。
    この具体例が書いてある。テスト駆動開発とかテストファーストって言われた時に、コードをとりあえず書いてテストする意味だと想像したのは私だけですか?
  • パスカルの言葉、「長い手紙をお許し下さい、短くする時間が取れなかったのです」
  • ブタとニワトリ。レストランで朝食にベーコンエッグを出すとすれば、ニワトリは卵を産むだけでいいが、ブタの方は命がけだ。チームメンバー=ブタとマネージャ=ニワトリは明確に区別すべき。
    いいネーミングだけど、実際に使ったら揉め事が起きるかな。
  • スタンドアップミーティングをしなさい。長さは10から15分くらい。一人は2分程度。
    興味はあるんだけど、使う機会が無い。次にチームを作ったときは必ずやろう。
  • PowerPointでコードは書けない。アーキテクトとは設計と指導はその本分であるはずなのに、肩書きに値しない人が多い事。小ぎれいな図を描いたりパターンをやたらと使うのはアーキテクトじゃない。
    パワーポイントで書かないなんて当たり前じゃん、と思ったら自分を指していた。ガツンときました。そうだplanningで得られた知見は必ず次の工程につなげなきゃいけないんだ。
  • ペアプログラミングは効果的なメンタリングを自然に行える環境である。
    ペアプロの価値が少し分かりました。ペアプロで稟議を通す自信は無いけど。
  • コードをレビューする。
    レビューするのは当たり前。でもどうやって?その効果はどれくらいあるのか?が理解できた。
  • アジャイルへ踏み出す。一気に導入してはいけない。胸の痛みを訴える患者に、「さっさとベッドから出てランニングマシンで一汗かけ」とは言わないよね。
    そうですね。でも自分の仕事に少しずつ取り入れたいと思います。

 けっこう気づきが得られましたね。いい本でした。