必修なんてなくしてクレヨン…

やっと試験が終わったので再開。

んー、ここんとこ全然プログラミングに触れてない。
つーかVC自体もう1ヶ月近く立ち上げてない気がする。
であるからして、本格的なプログラミングの内容に踏み込むのはまた今度にして、せっかく試験とかいう邪魔が入ったのでそれがらみのことをぶつぶつと。


最近我想う。結局プログラマに必要な教養って何なんだろう?
今回は大学の教養科目の中でプログラミングに役立つ知識がいったいどれほどあるのか見てみよう。


自分にとって、大学の科目の中ではじめにプログラミングと結びつくのは線形代数だ。いわゆる行列やベクトルを主に扱う数学だが、なぜそれが浮かぶかというと、たとえばゲームで座標を扱うときに、ベクトルや行列を用いるからだ。
厳密には必ずしも数学的に意識する必要はないが、演算の論理基盤になっているので、
基礎的な規則くらいは少なからず知っていることが望ましいだろう。簡単な話、2Dのゲームは座標を(x,y)の二次元ベクトルで表す。3Dなら三次元ベクトルだ。また、この座標(をもつ絵など)を平行移動したり、回転したり、拡大縮小したりしたいときは、それらの操作に対応した「変換行列」を座標ベクトルに掛ければ、望む結果が得られる。
こう考えれば、線形代数はかなりやっていて役立ちそうな感じだが、高度な3D処理を除けば、実際ゲームプログラミングに使える知識は高校レベルで一通り習得できる。
いくら「ジョルダン標準形」なんて知っていても使う場面なんてないよねえ…。

同じ数学で双頭の立場にあるのが解析学、いわゆる微分積分だ。
こっちは今のところ本格的に必要性を感じない…。
高度な微積論がプログラミング関係で使われるのかどうか、よくわからない。
sinやcosの値を求めるのにテイラー展開を使っているとかどこかで聞いたことがある気もするが、今あまり考えたくないので先延ばししよう(;´∀`)

つづいて理科系科目。
化学生物系はまあいらないだろうということで、物理系。
自分が今回のテストで本気で死んだのは量子論系の科目。というか量子論を必修にするなんてどうかしているとしか思えない。そりゃ日進月歩する現代科学において、相対論と並ぶ二大骨子であるからして、その箸の先くらいなめておいたほうが馬鹿にされないですむだろうが(誰にや)、しかしなんでわけわからん専門知識―量子演算子やら球面調和関数やらスピンやら変分法やらまで知らなくてはならないのか。つーか量子論は本気でわけわからん。ただでさえ電子とかのレベルまで行かないと現れない非日常的な現象なのに、それをみんなノートの上の数学的演算で把握できる理屈が理解できん。泣きそうだ。

もっと身近な物理といえば、力学。量子力学に対して、ニュートン古典力学といわれる類のものだ。
我々の身の回りの世界では、重力や抵抗力、摩擦力といった物体と物体の間に働く力が物体の挙動を支配し、こうした運動系は数学的記述ができる。
よってそれに基づいた演算を行えば、現実世界の現象が再現できるわけだ(もちろん完璧にとはいかないが)。
こうした意味で力学もゲームプログラミングでは重要な地位を占めるといえる。
昨今流行のFPSRTSなどでは、リアルな物理エンジンを売りにしているものも多い。

もうひとつ物理の分野で、電磁気学はどうか。
工学的な応用として電気回路や磁気、荷電粒子の知識があると、ハードの面でいろいろ役に立ちそうだが、電気、磁気の働きの根本的な理論については、それほど重要とは思えない。
これも一般教養に留められる分野だ。

ではちょっと視野を変えて語学はどうか。
日本語、というか正しいコミュニケーションができることはそりゃ当然なのでおいておこう。
外国語はどうか。多くの大学では英語以外の第二外国語を必修とする。カルテはドイツ語だの条約はフランス語だの妙な理屈は多々あるが、医者や外交官になるわけでないプログラマにとっては必修ではないだろう。
代わりに英語はやはり使用率の高さからみても学んでおくべきだと思う。たとえ自分が将来国内の自社のオフィス内でしか仕事をしないと思っていても、手に取る仕様書や使うソフトのヘルプは大抵英語だ。第一にWindowsの開発元がアメリカである時点で英語は不可避の要素といえる。


以上。
何が言いたいのかと言うと、やっぱ専門行ってもよかったかなァと…