システム設計ができる人を育てる方法

ある程度の規模のシステムを構想できる人材というのは、どうやったら育てられるのだろうか?

まず、プログラムの腕がそこそこあることが絶対条件である。
システムというは、最終的に動かなくては話にならない。
夢だけ語って、あとはうまいこと動くようにしてくれ!
って丸投げするような奴は少なくともエンジニアではない。


目的のシステムはどのようなデータ構造・アルゴリズムで実現できるか考えられること。
その上で、小さな目的を与えてそれを設計から施工からテストまで一貫してやらせること。
まずは規模よりも最初から最後まで一貫してやれることが重要。


IT業界というのは、少数のスペシャリストと多数の凡庸な下働きとで構成される。
数十億、あるいは数百億という金額をかけて作られるシステムは失敗は許されない。
だからこそ、設計というのはIT業界に携わっていてもなかなかさせては貰えない。
そして、実績がないとチャンスさえも回ってこない。


この数少ない「設計に携わる機会」をどう奪い取るか、それがプログラマ
成長の分水嶺と言っても過言ではないと思う。
特に困難なのは、最初の一回目。一回の成功事例があれば、格段に二回目以降のチャンスが広がる。
ただし、最初の一回を任されることが難しい。しかも、成功させねばならないのだ。


フリーのプログラマではこのあたりをどうやってクリアするかが大きな壁となる。
逆に、企業としてプログラマを育てる場合、この壁をどうやって超えさせるかがポイントだ。
まずはサンドボックスで失敗をしても大丈夫というセーフティネットを強いて練習を。
そして、徐々にリスクのある設計を任せていく。


大きなシステムの中の独立した一機能というのが、課題としては適切だと思う。
小さいながらも独立した機能を頭から最後まで。
セーフティネットとしては設計の構想のヒアリング。
そして、途中段階でのレビューといった形でチェック。
しかし、それも過保護になりすぎないように。
ときどき「どんな調子だい?大丈夫?困ったことはない?」と声はかけるけども、
設計は任せる。考えさせ、決断させる。
なぁに、後で直せる程度の誤りは教育コストとして織り込んでおけばいい。


手にした道具をどのように扱えばよいのか。それを工夫できることが何より重要。
道具はアルゴリズムであったり、データ構造の方法論だったり、デザインパターンだったり
フレームワークへの知識だったり、プロトコルへの理解だったりと多様だ。
手持ちの道具で何ができるかを考えること。
道具が足りなければどうやって探し、手に入れるかを考えること。
常日頃からいろんな道具に興味を持つこと。


やるべきことははっきりと挙げることができる。
しかし、それはとても地味な努力の積み重ねであるがゆえに
システム設計を行える人材というのは稀有なのだろう。