面接で返答に困る質問に「好きなプログラミング言語は何ですか?」というのがある。 得意・不得意を感じたことはあるが、「この言語サイコー!」とか「この言語でないと仕事できない!」とか感じたことは一度も無い。 仕事内容に応じて、あるいは客の要望に応じて、適切な言語を選択出来れば良いだけの事だと思っている。 逆に「嫌いな言語、苦手な言語」は存在する。 JavaScript, Perl, Ruby が苦手だし、どちらかというと嫌い。必要であれば使うが、不要であれば自分からわざわざ使わない。 「いろんな書き方が出来る言語」というのが苦手。なぜなら、ある目的を達成するための書き方が複数存在し、それぞれについて「なぜこの書き方なのか?この書き方を採用したときのメリットとデメリットは?」と考えだしてしまうから。 仕事柄、同僚やお客に対して「なぜ自分はこの書き方を採用したのか」を説明する状況が非常に多かった。 「あなたがその書き方でOKと思ったのならそれで良いんじゃない?」で通してくれる場面は殆ど無かった。 時には、「なぜオブジェクト指向とやらを使う必要があるのか?」から説明する必要もあった。 そうした場合に、書き方を決定するために色々なルートがある言語は、「なぜそのルートを選ぶのか?」「なぜ他のルートは使わないのか?」をいちいち説明するのが非常に面倒くさい。 また、単純にその分の学習コストが高い、と感じてしまう。 また、メタプログラミング的なテクニックが使われるRuby, Perlなどは「裏側で何をしているのか」を調べるための学習コストが高い、と感じている。メタプログラミング系でのトラブルに遭遇すると、その原因究明に非常に手間取る。 ・・・ということで「嫌いな言語、苦手な言語」を考えてみると、その反義語として「好きな言語、得意な言語」の特徴が明らかになる。 C, Java, PHP, Pythonなど、言語文法の自由度が低い言語。Pythonはそれほど低いわけではないが、「書き方はひとつだけ」という主義は好きだ。 「出来ること、書き方」が制限されるというのは、その分学習コストが低くなる。また、自由度を高めるために凝った概念とかコムズカシイ横文字を導入したりしておらず、説明しやすい。 ・・・あのね、同僚とかから質問されるわけですよ。 「JavaとかPHPってメモリの解放とか大丈夫?」 って!! そういうレベルをいちいち説明してかなくちゃいけない。これがJavaScriptだとかPerlとかRubyと来た日には、JavaScriptのPrototypeチェーンの説明だとかスコープチェーンの説明だとか、Perlの大量の一文字・二文字記号の説明だとかパッケージ・モジュールと後付OOPのblessの説明だとか、BEGIN-ENDブロック使ったソースコードを書き換えるタイプのモジュールの説明だとか、RubyならmixinだのRoRの裏側のメタプログラミングの仕掛けだの、そうしたのをいちいち説明しなくちゃいけなくて、説明したらしたで、極めつけの質問が ''「うーん、なんでそんなにヤヤコシイ仕組みを使わなくちゃいけないの?」'' ですから!! そういった経験があるがために、どちらかというとC言語の文法をベースとした、素直な言語を好むようになったわけです。 ※うん、まぁ「お前の説明が下手くそなんだよ」と言われれば返す言葉も無いのですが。