2009-04-29
■ 基盤系プログラマの実践的教育が必要だ

ここで言う基盤系というのは、OSとかRDBMSとかプログラミング言語処理系とか、そーゆー奴ね。アプリケーションプログラムとかWebサービスとかを支える縁の下の力持ち。その基盤を作るプログラマをどのように育てるかというお話。
まあ、ハッカー予備軍をどのように育成するか。ハッカーって、育てるとか教育するとか、そーゆーものではなく勝手になるものだから、そもそも、そんなものはありえないという議論もある。確かに天才というのは、天才なので、教育がどうだこうだということはないのだけど、一般的なプログラマというのは、一般的な教育プログラムである程度底上げ的なことは出きると思う。
例えば、PostgreSQLの開発者を考えてみる。ちょっとRDBMSに興味がある、だけどどこからとっかりをつけていいのかよく分からないという初心者がいたとする。今ある、OSS利用者教育プログラムをいくらやったところで開発者にはなれない。利用者教育プログラムの延長線上には開発者に必要なトレーニングはない。全くないといっては語弊があるかもしれないがほとんどない。
PostgreSQLの開発者になるには、C言語の知識が必要だ。だけど、例えば大学のクラスルームで教えているようなC言語の文法を15回に渡って教えるような講座でPostgreSQLの開発者になれるか、あるいは即戦力的なスキルが身につくかというとほとんど身につかないし絶望的なまでに実践的ではない*1。C言語を操って大規模なソフトウェアに立ち向かうには、デバッグの仕方、テストの仕方、ソースコードの書き方ではなく読み方、ビルドの仕方、コミュニティとの付き合い方、質問の仕方、問題解決の方法などなど、総合的な実践力が必要なわけではあるが、そーゆー観点からC言語を道具としてとらえ教えているという話は寡聞にして知らない。あったらぜひ教えてほしい。
そーゆー実践的なC言語入門があった上で、PostgreSQLの内部構造を解剖していくわけであるが、その講義には、主要なデータ構造、アルゴリズム、理論と実践、主要なエントリーポイントなどについての議論が含まれているべきであろう。道具立てとしてエディタやデバッガ、テストなどの知識も必要だろうし、ベンチマークの意義とかベンチマークの実施方法なども当然触れておく必要がある。アプリケーションプログラムのチューニング方法などもPotgreSQLの実装を理解した上でのいくつかの実用的なTipsがあったりするとなおよい。
教科書の中でしか知らなかった、B+木の実装とかHash Joinあるいはビットマップインデックスが、どのように実装され、それが性能上どのような特性を持つのかとかをリアルに勉強する。そして実習では、そのアルゴリズムの変更とかがどのように性能に影響を与えるかなどをやったりする。
開発コミュニティは若い開発者、プログラマを求めている。それはPostgreSQLだけではなく、LinuxだろうがRubyだろうが、どこのコミュニティも新しいプログラマを求めている。それには、「勝手に育て」ではだめで、意識して教育プログラムを設計し、それを実装していく必要がある。
MySQLのハッカー予備群を作るためのC言語講座とか、Rubyハッカー入門とか、そーゆープログラムが必要だ。共通科目として、コード管理システム、ビルド方法、コミュニティとの付き合い方、テスト、デバッグ方法、性能評価とチューニング、コードの読み方などなどあると思う。
いかがだろうか。皆様のコメントを待つ。

ただ、1から10まで教える必要はあるのかなあと…試行錯誤することで身につくことはたくさんあると思います。
A good developer must be good at computer science and engineering. Computer science and engineering are different. DBMS theory is computer science, and PostgreSQL/MySQL are engineering (Computer science is theory, and engineering is practice).
A good developer can integrate them.
基盤系プログラマで食っていけるのかという不安があります。新卒の求人にPostgreSQLの開発で給料が貰える仕事があれば良いですが、それよりもSIerやISPの方が雇用が保証されていて、両親を安心させられるのではないかと思います。
これでは「OSS利用者教育プログラムをやったところで開発者にはなれない」のではないしょうか。
システム系の教育内容はそれほど実践的でないとは思いません。レポートを書くのに行き詰まることがあれば、エディタやデバッガなどの使い方は教官やTA、詳しくなった友人に聞けばすぐに(ときに過剰なほど)教えて貰えます。
(聞かなければ教えて貰えない環境ではダメでしょうか)
私は自分の大学しか知りませんし、私の周りの環境だけが特殊なだけかも知れませんが。
私から提案です。
筑波大学には「組み込み技術キャンパスOJT」というカリキュラムがあります。
http://inf.tsukuba.ac.jp/ET-COJT/
実際に企業でLSIの設計をしている技術者が講師となり、実践的な教育を受けられると謳われています。
組み込み技術ではこのような教育が行われています。
キャンパスOJTの開講に至るまでは企業側からの支援(資金や人材?)が非常に大きかったと聞いています。
そこでhyoshiokさんもこのようなカリキュラムを大学に提案してみるのはいかがでしょうか。
あるいはこのようなカリキュラムを大学に提案するように、他の企業に提案してみるのはいかがでしょうか。
基盤系プログラマも食っていけるんだという事も、実践的な技術も確実に伝えられると思います。
原点は「作りたかった」「必要だけど無いから」「楽しいから」ぐらいなもんですよ。
個人的には、社会人が大学や大学院以外でもCSを学べるような開かれた場があると嬉しいなーと思うことがあります。