どの言語か選ぶ暇があるなら書けばいい

よく、〜言語がいいとか、〜言語は脆弱性がどうだとか、〜言語はオブジェクト指向言語じゃないからだめだとか書いてるのを見るが、そんなの社会人になってからじゃ言う暇は無いし、言語が選べる環境なんて無い。そんなうらやましい環境があるのであればお目にかかってみたいものだ。

僕が勤めている会社が中小企業だからなのかもしれないが、プログラミングをすると言っても新規作成するなんてことは滅多にない。既に出来ているものの修正とか、アップグレードとか、カスタマイズとかがほとんどだから、必然的に現在作成されている言語を使用しないといけない。言語を選ぶなんて滅相も無いことで、そんなことがあったら天と地がひっくり返るくらい驚くかもしれない。

さらに、言語を選べないだけじゃない。どんなに汚いコードを見ようと、どんだけ無駄な処理をしていようと、どんだけスパゲティーなコードを書いていようと直したりはできない。だってそれは既に動いているコードであって、それを直すためにはそれ相応の理由が必要なのだから。。。直したい衝動をこらえつつ作成して、バグがあるっていわれて呼び出されたら、今回作成したとこと全く関係ないバグだったとかそんなことばっかり。だから、言語が選べるなんて恵まれた状況でプログラミングしている人はうらやましいよなぁって純粋に思う。

そんな環境だから、僕は趣味も含めて結構いろんな言語に触ったんじゃないかと思う。PerlやらPHPやらJSPやらASPやらVBやらC#やらC++やらCやら・・・。スクリプト系の言語とか含めだしたらまだまだたくさんある。それでいろんな言語を触って思ったことは、どの言語も結局は動きは一緒ってこと。「どれだけ処理を簡単に記述できるか」とか「どれだけ深いところまで触れるか」とかが違いなわけで、それは各言語のコンパイラがどんだけ頭が良いかって違い。基本は全て一緒*1。forとかifとかswitchとかwhileとかはどれもおんなじ動きをするもので、ifって書いてあるのに条件分岐じゃないとか、forって書いてあるのにループしないとか、そんな意味不明な言語はない*2

最初に書いたとおり、社会人になってプログラミング言語を選べる機会なんて非常に稀でやれって言われたらやるしかない。だから言語を習得する上で考えなければならないことは、どの言語を使用するかじゃなくて、どのように書くかっていうアルゴリズムだと思っている。オブジェクト指向って大体思考の話で言語に依存するわけじゃない。継承とか出来る言語は確かに便利なんだけど、便利ってだけでなければ無いでどうにかできるものなんだよね。そういう考え方が存在して、もしそれを使用できるならこういう風にかけるよなぁって考えれるかどうかが大事な話で、継承ができないような言語を使ってプログラムをしているから劣っているなんてことは全然無い。

これから言語を学ぼうとしている人は何でもいいから書いてみればいい。何かを書いて、そして動かしてみて、動いたときの感動だけを持っていればよい。なんでこんな言語を使って書かなきゃいけないんだろうとか考える必要は全く無い。だって、そのプログラミングをしているときの思考そのものが、新たなプログラミング言語を習得する上でも絶対に有用なのだから。

*1:脆弱性が多いとかそういう話は置いといて、プログラミングする上でってこと

*2:っというか、いまだ出会ったことは無い