僕はプログラミング言語論争に首を突っ込む気は一切ない。好きな言語も嫌いな言語もあるし、各言語の長所や短所もある程度分かっているつもりであるが、結局どの言語を使うかなんていうのは、自分が勤めている企業や、自分の回りのエンジニアや、マーケットの状況によって決定されてしまう事がほとんどなので、決定されたものに自分をチューニングしていくしかないであろうと思っている。
ただし「どの言語を使おう」とか「どの言語を学ぼう」といった視点ではなく「どの言語から何を学べるであろうか」という視点から考えると、プログラマの成長にとってプログラミング言語の選択というのは非常に大切であろうと思っている。以前勤めていた企業では、製品の多くの部分がCOBOLにて実装されていたので、相当量のCOBOLの実装やデバッグを僕も行っていた。COBOLと聞くと「COBOLプログラマなんて駄目だよ」とか「時代遅れだよ」というような批判をする人が社内にも多くいたが、「プログラマとして、どういった観点でCOBOLプログラマだと駄目なのか」という部分にまで突っ込んで批判している人は少なかった。こういった思慮に欠ける批判から得るものはあまりないので、これを前述した「どの言語から何を学べるか」という観点から考えてみたい。
結論から言うと、結局COBOLでしかプログラムを組んだことがないのであれば、近年プログラムで解くべき問題を解決をする上で必要な知識や概念が身に付きにくいのである。言い換えると、COBOLという先生が教えてくれない解決方法が必要とされる問題が世の中にたくさんある、ということになる。一教えれば百学ぶ天才は例外として、COBOLしか扱っていないのに例えばオブジェクト指向の考え方や、マルチスレッドプログラミングに関連する技術を学べるのかと問われると、かなり難しいと答えざるをえない*1。まつもとゆきひろさんが以前講演の中で「言語は思考の為の道具だ」という意見と述べていたが、それと似た様な主張であると思って欲しい。つまりCOBOL先生にしか教わったことのない生徒であれば、ある問題に取り組むときにCOBOL先生が教えてくれた方法以外で解決方法を思考することが出来ないのである。それは問題だと思う。
前述したように「COBOLだから駄目だ」とか「時代遅れだ」とかいう浅い批判は論外であるが、もし僕が採用担当だとして、例えばJavaプログラマとCOBOLプログラマのどちらかを書類選考の段階で選択する必要があるとすれば、Javaプログラマを選ぶと思う。しかしそれはJavaだから選ぶとかそういう話ではなく、Javaプログラマの方が学ぶべき事を学べている確率が高いと思っているからそういう選択をするのである。当然面接の段階ではそれを明らかにする為の質問を投げかける。つまり「この生徒は先生からきちんと学んだだろうか」という事を確認する。そこで学べていないことが明らかになれば、何プログラマだろうが採用はしない*2。候補者を全員面接する余裕があるのであれば、基本的には候補者の特定の言語経験に左右されず、プログラマとして学ぶべき事柄をきちんと学んでいるかどうかをそれぞれに確認するようにしたいと思う。
ここに書いたことは大事な事であると思っているのだが、筆力の無さからあまり言いたい事が伝えられない。そんなもどかしさを久しぶりに感じた。