未来のいつか/hyoshiokの日記 このページをアンテナに追加 RSSフィード Twitter

2009-04-29

基盤系プログラマの実践的教育が必要だ  基盤系プログラマの実践的教育が必要だを含むブックマーク  基盤系プログラマの実践的教育が必要だのブックマークコメント

ここで言う基盤系というのは、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ハッカー入門とか、そーゆープログラムが必要だ。共通科目として、コード管理システムビルド方法、コミュニティとの付き合い方、テストデバッグ方法、性能評価とチューニングコードの読み方などなどあると思う。

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

ysatoysato 2009/04/29 12:32 わからないことを聞ける or 困ったときに相談できる先生的な存在はほしいですね。
ただ、1から10まで教える必要はあるのかなあと…試行錯誤することで身につくことはたくさんあると思います。

snagasnaga 2009/04/29 14:57 You should think education on computer science and engineering separately.

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.

udud 2009/04/29 18:52 Rubyには、「Rubyソースコード完全解説」があります。C言語とRubyを一通り勉強した後に読めば、Rubyハッカーに参加できますよ。

umiumi 2009/04/29 23:34 教材はH2 Databaseがシンプルで高性能でいいと思います。

viverviver 2009/04/29 23:55 私は大学生です。

基盤系プログラマで食っていけるのかという不安があります。新卒の求人にPostgreSQLの開発で給料が貰える仕事があれば良いですが、それよりもSIerやISPの方が雇用が保証されていて、両親を安心させられるのではないかと思います。
これでは「OSS利用者教育プログラムをやったところで開発者にはなれない」のではないしょうか。

システム系の教育内容はそれほど実践的でないとは思いません。レポートを書くのに行き詰まることがあれば、エディタやデバッガなどの使い方は教官やTA、詳しくなった友人に聞けばすぐに(ときに過剰なほど)教えて貰えます。
(聞かなければ教えて貰えない環境ではダメでしょうか)
私は自分の大学しか知りませんし、私の周りの環境だけが特殊なだけかも知れませんが。


私から提案です。

筑波大学には「組み込み技術キャンパスOJT」というカリキュラムがあります。
http://inf.tsukuba.ac.jp/ET-COJT/

実際に企業でLSIの設計をしている技術者が講師となり、実践的な教育を受けられると謳われています。
組み込み技術ではこのような教育が行われています。

キャンパスOJTの開講に至るまでは企業側からの支援(資金や人材?)が非常に大きかったと聞いています。
そこでhyoshiokさんもこのようなカリキュラムを大学に提案してみるのはいかがでしょうか。
あるいはこのようなカリキュラムを大学に提案するように、他の企業に提案してみるのはいかがでしょうか。

基盤系プログラマも食っていけるんだという事も、実践的な技術も確実に伝えられると思います。

t2y-1979t2y-1979 2009/04/30 00:02 個々人のレベルにあった具体的な対象があるとモチベーションに繋がると思います。例えば、私は ZABBIX のフォーラムをチェックしていると、修正できそうなバグや自分も助力できそうな提案を幾つか発見することができます。現実の世界で困っている人がいて、自分が何かしら助力できるというのはモチベーションの源泉になり得る気がします。理論を学ぶのはコードレビューのときでも良いかもしれません。

yokatsukiyokatsuki 2009/04/30 07:47 すごく同感です。これからの時代、ツールを使えるだけでは足りなくなり、プログラムが書けることが重要になってくる。そしてその為の教育は不可欠なものになってくると思っています。マウスのクリックでは何も新しい価値を生み出さない。やっぱりキーボードを叩かないと。

omaemona01omaemona01 2009/04/30 07:47 「最初に何をして良いかわからない」と言う人はOSSが何も無い所からどうやって始まったか考えてみると良いのではないでしょうか。
原点は「作りたかった」「必要だけど無いから」「楽しいから」ぐらいなもんですよ。

junojuno 2009/04/30 12:58 OSSコミュニティへの手引きという点に限れば「オープンソースソフトウェアのつくりかた」という文書がとてもよく書かれています。 http://producingoss.com/ja/
個人的には、社会人が大学や大学院以外でもCSを学べるような開かれた場があると嬉しいなーと思うことがあります。