プログラムの属人性
このところメンバーが受託開発で開発中のプログラムの仕上げに大忙しなのですが、なかなか苦戦しています。仕様関連などプログラミング以外の影響も大きいのですが、プログラミングにおいて影響が大きいと毎回感じているのが、ソースコードの属人性です。
WEBシステムなどのユーザインターフェース部分や、帳票関連などのように、基本的にはボリュームの大きさが大変なシステムは別ですが、技術的に深いシステムではどうしてもソースコードを他人が理解する苦労が大きくなります。この問題は分割して開発していたモジュールを組み合わせる場合などにも問題になりますし、途中までコーディングが進んだソースを他のメンバーが引き継ぐ場合にも問題になります。
現在の開発手法の向かう方向は基本的には属人性を減らす方向であり、そのためにミドルウェアやフレームワークが整備されてきているのですが、性能やサイズを追い求めるシステムではどうしても低レベルな部分からコーディングをする必要があり、さらに、そのテクニックが結果に影響するものです。そのような開発ではどうがんばっても属人性が減らせないのです。私の会社のソフト開発で請けている仕事の半分はそのような仕事です。
私が考えているポイントとしては、シンプルさと使い込まれたライブラリ群です。プロセスやスレッドを複雑に制御しながら動作しなければならないシステムでは、排他や同期の仕組みが複雑になりやすく、他人が理解しにくいソースになってしまいがちです。性能を求めると様々な中間的なデータを保持したりしてますます訳が分からなくなります。だからこそ、頭の中に、まずシンプルさを優先させる考えが大切だと思っています。できあがってみると結局シンプルな方が性能もサイズも優れていることが多いものです。また、複雑なシステムこそ基本部分の信頼性がポイントになります。汎用的な処理を、毎回使っていて信頼性も性能面も安心できるライブラリ群で押さえているかどうかで、動作確認する範囲が大きく違うものです。
若手とベテランの腕の差は実はシンプルさとライブラリ群だと言えるくらいだと私は感じています。経験豊富なベテランは何度も嫌と言うほど複雑なシステムの開発を経験していますから、テスト工程やメンテナンス、仕様変更などでシンプルさがいかに大切かを身にしみています。また、長年で蓄積し改良を加えたライブラリを持っているので、基本部分が安心できる状態に最初から持って行けるのです。若手はこれから試行錯誤してライブラリを蓄積したり、良い面でもあるのですが少しでも新しい進んだ技術に取り組もうとするためになかなか信頼性が落ち着かなかったりするものなのです。
そういう面から、プログラマー35才定年説など全くナンセンスで、むしろベテランならではの腕の見せ方があるのです。ところが現状の派遣を中心とした時間単価性の仕事のやり方によりそれが上手く活かされないのです。できあがるシステムの価値に応じた対価の考え方が広まれば、ベテランならではの優れた仕事に高い付加価値を見いだすなどの流れができると思うのですが、ボリュームのみの仕事とテクニック・ノウハウが重要になる仕事が一律になってしまっているのが問題なのです。プロの音楽家の演奏と素人のカラオケの違いと同じことなのです。動けば良いというプログラムと性能やサイズを追い求めたプログラムでは全く違うのです。
職人プログラマーのすばらしさを認知させることができればと、著書などでもそのような内容を書いているのですが、まだまだ道のりは長そうです。