BLOGTIMES
2004/08/30

達人プログラマー

  programming  softwareengineering 
このエントリーをはてなブックマークに追加

達人プログラマー―システム開発の職人から名匠への道

まさしく実践的*1なシステム開発のためのベストプラクティス集です。

内容についてはそれはBooksさんでも触れられているようにちょっとした事から、きちんとソフトウェア工学に則った理論まで様々なことが書かれています。改めて読んでみるとAOPのこととかちゃんと書いてあったり、著名な論文をReferしてたりしますね。

達人プログラマー ?システム開発の職人から名匠への道? [それはBooks]

内容は、プログラミングを行う上で当たり前のことから(例えば手を動かす前に、まず考えること、など)、プログラムを設計する際の注意点(結合度を最小にする、デメテルの法則など)、テストしやすいコードにするにはどのようにプログラムを書いたら良いのかまで、幅広く網羅しています。

このため、自ら一定以上のプログラミングをしない人には内容がさっぱり理解できないと思われます。

ターゲット

対象とする読者層としては一通りプログラミングを習得し、最近リファクタリングを覚えはじめて、「もうちょっときれいなプログラミングをしたいなぁ」というような人でしょうか。もちろん上級者が読んでもそれなりの気づきが得られると思います。

でも、実践は難しい

ここに書いてあるプラクティスがきちんと実践できれば、そもそもプログラミングでえらい目にあうということはかなり少なくできるでしょう。ただ、そのためにはかなりの労力であったり、技術力が必要を必要とします。

先日その事実を目の当たりにしてしまいました。

この本には「コード・ジェネレータ」というものがでてきます。コードジェネレータとは文字通り、何かの入力を基にしてコード*2を生成するためのプログラムのことで、ある種の自動プログラミング機構と捉えることもできます。

20 コード・ジェネレータ 

木工職人が何度も同じものを繰り返して作成する場合、ちょっとした工夫をします。彼らはジグ、すなわち型枠を作るのです。いったん正しいジグができれば、何度でも同じものを作ることができるというわけです。ジグは複雑さをなくし、失敗する確立を減らし、職人が品質以外の部分に機を配れるようにしてくれるのです。

これに関する例として、データベーススキーマからコードを生成する積極的なコードジェネレータの例が載っています。

コードジェネレータの有用性についてはもはや議論の余地がないところだと思いますが、下手なコードジェネレータは確実に生産性と品質を落とし、失敗する確立を高くしてしまいます。実際に有用なコードジェネレータが作成できる人は実際には限られており、誰でもすぐに作成できるものではないというのが現実でしょう。

先日、自作のコードジェネレータフレームワークを持っている人とミーティングする機会がありました。あるプロジェクトでそのフレームワークを使わせてもらえることになったのですが、そのジェネレータは、DBというかValue Objectの定義をXMLに書くだけで、Value ObjectData Acces ObjectValidatorSQLスクリプトなども自動生成されるようなすばらしい仕上がりでした。

開発コンセプトとしては、Struts + Toque + DBCPを基本とし、なおかつシンプルでわかりやすく、テストがしやすいものにしたかったということでした。具体的な改善点としては、StrutsのActionはHttpServletRequestHttpServletRequestに依存していましたが、これを取り除くことでJUnitなどを活用したテストができるようになっていました。

このジェネレータは誰にでも使うことができますが、これを作るにはかなりの技術力が必要です。現にこれを作った人の技術力はServletコンテナが自作できてしまうレベルに達しています*3まさに達人プログラマーですね。

こういう人と一緒に仕事ができる機会に恵まれることはエンジニアとしてまたとない好機です。自分もエンジニアとしてそういうところを目標にしつつ、ビジネスにも目を向けられるようになりたいなぁと思いますね。

この本の作者

プログラミングRuby―達人プログラマーガイド

アンドリュー・ハントデビット・トーマスはどこかで名前を聞いたことがあると思っていたのですが、プログラミングRubyの著者でしたか。こちらも持っていますが、オススメです。

  • *1: 原題は"The Pragmatic Programmer"。さすがに実践的プログラマーというのは変なので、達人という訳になったみたいですね。
  • *2: プログラムのこと。
  • *3: さすがにServletコンテナが自作できる人がその辺にごろごろしているということはないでしょう

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/339
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン