« レファレンスモデルで社会貢献を | トップページ | DDD:ドメインをメタ方向へずらす »

2011.06.04

「プログラミングへのこだわり」を方向づける

 業務システムの生産性や保守性を高めるための基本は「コードを1行でも減らす」である。なぜなら、コーディングとこれにともなうテスティングこそが、開発作業の中でもっとも人手のかかる作業だからだ。個別案件においては、良いコードだろうが悪いコードだろうが少なければ少ないほどよい。

 いっぽう、そんな方針と明らかにそぐわない人たちがいる。彼らはプログラミングそのものに強いこだわりを持っていて、より良いコードをより多く生み出すことに生きがいを感じる人たちだ。チャーミングな彼らの姿を個別案件の開発現場で見るたびに、私はキャスティングの失敗事例を見る思いがして切なくなる。

 それは全国チェーンの外食店の厨房に、新しい料理を生み出すことに情熱を覚える若者が働いているようなものだ。彼がどう工夫しても、全国一律の料理メニューを改変するのは難しいだろう。そんな才能あふれた若者には、本部の企画部門で働いてもらったほうがいい。店の厨房で働けば、彼の情熱の暑苦しさにバイト仲間からかえって疎まれるかもしれない。

 プログラミング一般の話をしているのではなく、業務システム開発の「案件従属なプログラミング」という特殊なプログラミングの話をしている点に注意してほしい。この作業はやるべき意義のあるところで淡々と実施し、不要になれば淡々と放棄していいもので、実施することにこだわるようなものではない。こういう仕事は、プログラミングにこだわりを持つ技術者には向いていない。

 そして、まさに案件従属なプログラミングを不要にする技術の開発にこそ、プログラミングへのこだわりを持つ人々を向かわせるべきだ。個別案件の監獄に囚われた彼らは巨大な可能性をスポイルされた存在で、何度も言うように「場末で流して歌い踊るマイケルジャクソン」である。才能あふれるプログラマまでも個別案件に閉じ込めておけば人月ビジネスが栄える――そう考えるSIerの陰謀かと邪推してしまうほどに、その社会的損失は大きい。

 ゆえに私は、プログラマを個別案件に引き留めておこうとする開発手法や技術を嫌悪する。個別案件において生み出すことが求められているものは、「こだわりの手作りプログラム」ではなく「使いやすく保守しやすいシステム」である。後者が「案件従属なこだわりプログラミング」からしか生み出せないと考えるなら、プログラミングが本来持っている破壊的パワーを見損なっている。プログラマとプログラミングを侮ってはいけない。

|

« レファレンスモデルで社会貢献を | トップページ | DDD:ドメインをメタ方向へずらす »

コメント

> 後者が「案件従属なこだわりプログラミング」からしか生み出せないと考えるなら、プログラミングが本来持っている破壊的パワーを見損なっている。

この意味が分からなかったのですが、どういう意味か教えていただけますでしょうか。

投稿: | 2011.06.04 17:53

月さん

「使いやすく保守しやすい業務システム」に含まれる多くのプログラムをプログラミングせずに生み出すためのプログラムを、プログラマはプログラミングし得るという意味です。えへへ、早口言葉みたいですね(^^;

投稿: わたなべ | 2011.06.04 18:43

なるほどなるほど。
ありがとうございました!

投稿: | 2011.06.04 20:48

むしろよいコードとは無駄がなく一行でも少なく記述できるコードですから、「彼らはプログラミングそのものに強いこだわりを持っていて、より良いコードをより多く生み出すことに生きがいを感じる人たち」であれば、余分なコードを減らす努力をするものです。保守可能なコードは一般にコピペや自動生成では得られるものではありません。その点を誤解されているのではないでしょうか。

投稿: ryoasai74 | 2011.06.04 22:25

ryoasai74さん

紛らわしい書き方をしてしまいましたね。彼らが「より良いコードでより多いコード量のプログラムを書こうとする」という意味ではなく、「より良いコードを含むプログラムを書く機会をより多く得たいと願っている」という意味です。

たしかに、自動生成されたコードを後でプログラマが保守することが前提になっているのであれば、保守性を担保することは難しいでしょう。ゆえに、コードを透過的に扱う自動生成か、仕様情報にもとづく動的制御のしくみが求められます。

投稿: わたなべ | 2011.06.05 08:18

仕事でソースコードの品質をチェックするようなこともあるのですが、現在の新しい言語やFWを適切に使えば9割は無駄なコードというケースも実際多いですね。個人的には汎用のプログラムはOSS、クラウド、オフショアを利用すべきで、残ったコアの領域をハイスキルのプログラマが作るというのが合理的だと思います。以下もご参照ください。矛盾するようですが、こだわりのハイスキルのPGが中心のチームでアプリを開発することで無駄を削減できると思うのですよ。


http://d.hatena.ne.jp/ryoasai/20101208/1291821499
http://d.hatena.ne.jp/ryoasai/20101206/1291640678
http://d.hatena.ne.jp/ryoasai/20101202/1291295077

投稿: ryoasai74 | 2011.06.05 10:43

確かに、極力コードライン数を減らすことに注力しすぎると、三項演算子などをクールに使いすぎる人も出てくるし。

自分の経験としては、プログラマー同士の教育ということで、サンドボックスを一番クールなコードを書く人にお願いして書いてもらい、それをソースコードレビューしてから、展開してコーディングというような形で実施しています。

ただ、時間はかかるし、サンドボックスをどれくらいの種類を作るかにもよるので、大変ですが、よい方法ですよ。

投稿: mjackson | 2011.06.05 22:53

mjacksonさん

なるほど。練達のプログラマの技術を横展開するとともに、彼らを個別案件から遠ざけるためのいいアイデアですね。

私もXEAD Driverに添付してある販売管理システムの実装サンプルを、Rhino/JavaScriptコーディングの規範として位置づけています。マイケルジャクソンは彼自身と社会のために個別案件から解放されるべきですよね。

投稿: わたなべ | 2011.06.06 07:52

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 「プログラミングへのこだわり」を方向づける:

» [アーキテクトの仕事][IT業界][書籍紹介]こだわりのある職人プログラマー程、無駄なコードを少なくしたいものという事実を理解してほしい [達人プログラマーを目指して]
ちょっと興味深いエントリが目に留まりました。「プログラミングへのこだわり」を方向づける: 設計者の発言基本的に、この方自身もプログラマーや開発者をされているようですし、他のエントリを読んでも「プログラマーの地位向上をすべき」ということで、私にとっても非常に... [続きを読む]

受信: 2011.06.05 12:19

« レファレンスモデルで社会貢献を | トップページ | DDD:ドメインをメタ方向へずらす »