未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

基盤系プログラマの実践的教育が必要だ

ここで言う基盤系というのは、OSとかRDBMSとかプログラミング言語処理系とか、そーゆー奴ね。アプリケーションプログラムとかWebサービスとかを支える縁の下の力持ち。その基盤を作るプログラマをどのように育てるかというお話。

まあ、ハッカー予備軍をどのように育成するか。ハッカーって、育てるとか教育するとか、そーゆーものではなく勝手になるものだから、そもそも、そんなものはありえないという議論もある。確かに天才というのは、天才なので、教育がどうだこうだということはないのだけど、一般的なプログラマというのは、一般的な教育プログラムである程度底上げ的なことは出きると思う。

例えば、PostgreSQLの開発者を考えてみる。ちょっとRDBMSに興味がある、だけどどこからとっかりをつけていいのかよく分からないという初心者がいたとする。今ある、OSS利用者教育プログラムをいくらやったところで開発者にはなれない。利用者教育プログラムの延長線上には開発者に必要なトレーニングはない。全くないといっては語弊があるかもしれないがほとんどない。

PostgreSQLの開発者になるには、C言語の知識が必要だ。だけど、例えば大学のクラスルームで教えているようなC言語の文法を15回に渡って教えるような講座でPostgreSQLの開発者になれるか、あるいは即戦力的なスキルが身につくかというとほとんど身につかないし絶望的なまでに実践的ではない*1C言語を操って大規模なソフトウェアに立ち向かうには、デバッグの仕方、テストの仕方、ソースコードの書き方ではなく読み方、ビルドの仕方、コミュニティとの付き合い方、質問の仕方、問題解決の方法などなど、総合的な実践力が必要なわけではあるが、そーゆー観点からC言語を道具としてとらえ教えているという話は寡聞にして知らない。あったらぜひ教えてほしい。

そーゆー実践的なC言語入門があった上で、PostgreSQLの内部構造を解剖していくわけであるが、その講義には、主要なデータ構造、アルゴリズム、理論と実践、主要なエントリーポイントなどについての議論が含まれているべきであろう。道具立てとしてエディタやデバッガ、テストなどの知識も必要だろうし、ベンチマークの意義とかベンチマークの実施方法なども当然触れておく必要がある。アプリケーションプログラムのチューニング方法などもPotgreSQLの実装を理解した上でのいくつかの実用的なTipsがあったりするとなおよい。

教科書の中でしか知らなかった、B+木の実装とかHash Joinあるいはビットマップインデックスが、どのように実装され、それが性能上どのような特性を持つのかとかをリアルに勉強する。そして実習では、そのアルゴリズムの変更とかがどのように性能に影響を与えるかなどをやったりする。

開発コミュニティは若い開発者、プログラマを求めている。それはPostgreSQLだけではなく、LinuxだろうがRubyだろうが、どこのコミュニティも新しいプログラマを求めている。それには、「勝手に育て」ではだめで、意識して教育プログラムを設計し、それを実装していく必要がある。

MySQLハッカー予備群を作るためのC言語講座とか、Rubyハッカー入門とか、そーゆープログラムが必要だ。共通科目として、コード管理システム、ビルド方法、コミュニティとの付き合い方、テスト、デバッグ方法、性能評価とチューニング、コードの読み方などなどあると思う。

いかがだろうか。皆様のコメントを待つ。