プログラマにとって体系的な知識とは何か

関連するかもしれない話。プログラマの知識はどこで無くなるかとか考えると楽しいかもしれんね、とか、そういう系。


コンピュータの知識というのは、超抽象的な数学っぽいところから、超末端バッドノウハウまで幅広い抽象レベルをカバーしているのが特徴だと思う。
大体、イメージとしては、「流行り廃りのドッグイヤーっぽい感じ → オブジェクト指向とかの設計技法 → OS、CPU、デバイスとか → (数学っぽいの。こっから先はわからん)」って感じか、そんなにきれいに分類できないだろうけど(例えば、Yaccとかだと数学がベースにあるけど、古いツールなのでどうでもいいしがらみがあるとか)。


基本的に、コンクリート(この単語を見る度に、僕の脳内ではコンクリートブロックが)なものほど、すぐ使えるけど、数年で無くなる。アブストラクトなものほど、何の役に立つのかわからないけど、長期間に渡って使える知識となる、かと思う。


で…だから何?


えーと。自分の持ってる知識、技術が、「どういう革命が起こったときに使えなくなるのかなー」と、考えてみるのは暇潰しとか眠れない夜によろしいんじゃないでしょうか、という話。


例えば、HTTPじゃないまともな相互通信を持ったプロトコルができたら、AJAXとか消えてなくなるよなー、とか、リレーショナルデータベースモデルのまともな実装ができたら、SQLの為の知識は意味無くなるよなー、とか。
CPUの知識とか、普遍的な知識のようで、超並列コンピュータとか、量子コンピュータとか、そういうのが今のスカラマシン向けの知識、キャッシュとかパイプラインとかスーパースカラとかの知識も使えなくなるよなー、とか。まあ、僕等が現役のうちに実現するかどうかは謎なんだけど。486発売が1989年…486→Core 2 Duoが17年だとすると…あと34年のうちに、(僕が定年ぐらいか…)486→Core 2 Duoくらいの変化が二回起こるぐらいの時間がある…微妙なー。Fortranが生まれて50年、FortranC#3.0の変化が50年だとすると、ノイマンアーキテクチャは僕等が生きてる間にはそんなに変化しないかなーという気もするけど。


数学の知識が普遍なのかどうかも考えるべきだよな。今の計算機は関数で表現できるから、λ計算で全部表現できるのだけど、もし、計算機が関数じゃなくなったら…それってどんな状況?知らんが。5000年後ぐらいには、そういう計算機が当たり前になってると言われています[要出典]。


だから、つまり、どんな革命が起こっても無くならない知識なんて無いのだから、勉強なんてやめて遊ぼうじゃないか!そうすれば無駄になる知識なんてそもそも無くなるのだった。(ノーガード戦法)