CTO日記に書いた 「断片的な知識と体系的な知識」を、沢山の方々に読んで頂けた。
この季節、新卒(見込み)の学生さんを数多く面接してきたのですが、 新卒の段階で既に とてつもなく大きな差がついていることに改めて驚かされました。
今後大きく成長する可能性が感じられる人と、 早くも既に成長の限界が見えてしまっていて、 可能性がほとんど感じられない人、という点では、 もう既に逆転不可能とさえ思えるような大差がついてしまっています。
可能性が感じられる人、というのはつまり、 自分が何をしたいか明確に分かっていて、 かつその分野の体系的な知識を身につけている人たちです。 現時点ではそんなに多くを習得しているわけではないにせよ、 体系全体を理解していますから、自分がどこまで知っていて、 未知の領域がどのくらいあるか、感覚でつかんでいます。
じゃ、オマエは学生の時どうだったんだ、という声が聞こえてきそうなので、 私の学生生活を振り返ってみる。 コンピュータの分野が好きだと思ったのは中学一年の時で、 体系的な知識を学んだのは大学の専門課程に進んでからである。
私が初めてコンピュータに触れたのは、中学一年生の終わり頃である。 「マイコン部」なるものがあって、 3台のCommodore PET 2001を 20人以上の部員で使っていた。 しかも「部活動」は週一回 50分ほどだったと記憶しているので、 PET 2001 に触れるのは、二週間に一度、25分だけ、 しかも二人で一台を使う形だった。 最初のうちは BASIC を使って簡単なゲームなどを書いていたが、 6502 のインストラクションセットをどこからか見つけてきて (どこで見つけたのだろう? 当時はその手の資料を中学生が見つけることは、かなり難しかったはず)、 ハンドアセンブルしたコードを BASIC の poke 文でメモリに書いて 実行させて遊んだりした。
初めて BASIC の入門書を読んだとき、 将来プログラミングを仕事にできたらどんなにいいだろう、 と思ったのを今でもはっきり覚えている。 今からは想像もつかないが、 1978年当時の中学生にとって、 一人一台マイコン (当時の呼び方 ;) を占有できるなんてことは、 とうていかなわない夢だった。
高校になってようやく MZ-80K2E を購入した。 日経Linuxに執筆した連載の枕から引用:
私が最初に購入したコンピュータは, シャープのMZ-80Kシリーズの最後の機種K2Eでした。 RAMは32Kバイト,CPUはZilog Z-80 2MHzで, BASICインタプリタをROMではなく, カセット・テープから読み込む方式であるため, BASIC以外の言語への対応が容易という, 当時としては画期的なパソコンでした。 BASICライクなアセンブラBASE-80を使って, ゲームやモニターを作っていたことを思い出します。 その後,CP/Mを移植するためにBIOSを記述する際にも, BASE-80を使いました。
高校時代は、マイコンのハードウェアに興味を持ち、 MZ-80K2Eのプリント基板の配線を目で追って回路図を起こし、 それをもとに Programmable Character Generator や Z80 DMA を追加するなどの改造を行なった。 また、 コンピュータ以外の分野では、 物理や哲学に興味を持ち、 1年に百冊以上読む、という目標を立てて 手当たり次第に読書したこともある。
コンピュータにのめり込んだ高校時代だったため、 大学に進むとき、物理, 数学, 哲学などの道に進むことも (一瞬 ;) 考えたのであるが、 コンピュータを学んだといっても所詮は独学に過ぎず、 まだまだ学ぶことがあるはずと思い直し、情報工学科に入学した。
1回生のときは、Z-80 を使ったコンピュータの手作りに熱中した。 ユニバーサル基板を何枚か使って、 それぞれ CPU ボード、I/O ボード、DRAM ボード、などを順に作り、 MZ-80K2E をキャラクタ端末にして CP/M を走らせた。 2回生のとき、ソフトウェアハウスでアルバイトするようになり、 MacVJE などを開発した。 私にとって初めての、 まとまった量のプログラミング (C 言語で 5万行くらい) 体験だった。
このあたりまではあくまで独学であり、 断片的な知識の寄せ集めである。 もっとも、現在のようなインターネットなどなかったから、 全て (数少ない) 専門書を読みあさって仕入れた知識であり、 Web ページで得られる知識よりは、マシだったかもしれない。 当時のコンピュータ関係の専門書は、 大型書店 (大阪梅田の紀伊國屋や旭屋など) にしかなく、 それも数えるほどしかなかった代わり、 ほとんどがマトモな本だった。
3回生になって初めて情報処理の基礎を学んだ。 今まで経験則で回路図を設計していたのが、 カルノー図を使うとシステマチックに最適な回路を設計できる、 ということを学んで感動し、 独学の限界を思い知った。 なにせ、それまではコンピュータの設計というと 数週間かけて行なうものだと思っていたのに、 教科書で説明されている方法だと数時間しかかからないのだ。 私が初めて大海を垣間見た瞬間かもしれない。 そのとき読んだ教科書がこれ:
Switching and Finite Automata Theory
Zvi Kohavi
McGraw-Hill Education ; ISBN: 0070993874 ; (1979/03/01)
ボロボロになるまで読んだ (まあ、もともと製本が粗末というのもあるが ;)。
自分なりに体系化するセンス
仙石浩明氏にトラバのお返事を書いてもらって、何か返さなきゃと、はや1週間。何かモヤモヤと、考えがまとまりませんでした。コンピュータ科学における体系的な知識引用:私がイメージする「体系的知識」とは、コンピュータ科学でいえば、例えば「オートマトン理論」のような…
Comment by blog-mnagaku's BLOG-IGDA Japan chapter — 2006年6月28日 @ 23:00