プログラマに大切なのはバランス感覚
私はプログラマに大切なことはバランス感覚だと思います。そういった感覚はコンピュータに関する幅広い知識と経験から学ぶことができます。特定のプログラミング言語に偏ることなく、多くの言語や環境を学び体験することが大切なのではないでしょうか。
Javaスクールの危険
結論を言うなら、CもSchemeも教えないJavaスクールというのは、本当のコンピュータサイエンスを教えているとは言えないのだ。
どのようなプログラミング言語を学ぶべきかというのは、よく議論になりますが、何が正しいかの結論はまだ出ていないようです。プログラミング言語、いや、プログラミングそのものがまだまだ発展途上にある今日において結論を出すことは難しいでしょう。では、実際のところ、どのような言語を学ぶべきなのでしょうか。
プログラムを作る過程
一般的にプログラムは以下の手順で作られます。
- プログラムで実現したい機能を考える
- 機能をコンピュータで実現するためのアルゴリズムを考える
- アルゴリズムをコンピュータが理解できる言語に置換する
1.はどんなプログラムを作るか考える工程です。何をするソフトを作るのか、そしてそれはどんなことができるのか、最初に考えますよね。
2.はプログラムのいわば「考え方」とでも言うべきものでコンピュータや環境に依存しません。もちろんプログラムで実現可能な方法を考えるので、全く依存しないとは言いきれないのですが、まずはどのようにして問題を解決するかを考えます。
3.はアルゴリズムを実際にコンピュータで動かすことが出来るようにする作業で「実装」と呼ばれます。プログラムを実行するコンピュータやプログラミング言語などの環境に依存します。
プログラムを作る上で1.は必須の作業ですね。ここから一気に実現したい機能が実現できればいいのですけど、残念ながら人間の考える機能とコンピュータのできることの間には大きな隔たりがあります。プログラミング言語は、この隔たりをいかに埋めるかという観点から発達してきました。
言語の発展
現在のところ1.から2.にかけての工程を省略することは難しいです。そこでプログラミング言語はいかにスムーズに2.から3.の工程を行うかに着目して改良されてきました。それは抽象化です。
ハードウェアがOSによって抽象化されたように、プログラミング言語も抽象化の歴史をたどっています。高級言語によりアセンブラが抽象化され、オブジェクト思考によりデータ構造が抽象化されました。Java VMなどではコンピュータそのものが抽象化されています。
これらの努力により、本来アルゴリズムとは関係のないプログラミング上の「実装」が大幅に簡略化されました。今日の言語においてはCPUがどう使われ、データがどのように配置されるかを意識する必要は少なくなりました。これによりプログラムの生産性と安定度は高まったといえます。それでは最新の言語を使うべきなのでしょうか!?
バランス感覚を磨こう
新しい言語にも弱点はあります。それは処理速度です。ハードウェアの発達により速度の問題はかなり解消されましたが、当然ながらCPUをネイティブに使う方が速くなります。このへんは性能と生産性のトレードオフということになります。
ところで、優秀なプログラマは例えスクリプト言語であっても性能の高いプログラムを書くことができます。どのようにすれば性能の高いプログラムを作ることができるのでしょうか。
私はプログラマに大切なことはバランス感覚だと思います。プログラムの局所的な最適化だけではなく、あらかじめプログラムの設計から性能を考慮してUIやAPIのデザインをしたり、それぞれの限界を知った上で目的に最適な言語やフレームワーク・システムが何かを見極める、といった感覚です。
そういった感覚はコンピュータに関する幅広い知識と経験から学ぶことができます。特定のプログラミング言語に偏ることなく、多くの言語や環境を学び体験することが大切なのではないでしょうか。