だてブログ

ねことテクと趣味のブログ

エンジニアは一つの言語に特化すべきかどうか

こんにちわ! 今日は、面白い質問を見つけたのですが、SSL未対応でそのサイト自体に安全が保証できないため、こちらの方で引用-紹介させていただきます。また回答が28件あったため、そのなかでも上位数件を載せたいと思います。

質問 エンジニアは一つの言語に特化すべきかどうか

エンジニアは一つの言語に特化したT字型の成長をするといいと聞きました。 しかし、現場に出ると、プロダクトに合わせてPHP, javascriptなど様々な言語を使うように求められました。 エンジニアとしてのキャリア形成を考えた時に、一つの言語のみに特化させて極めるべきなのでしょうか? それとも知識は浅くても幅広く言語を習得すべきなんでしょうか?

この質問にたいして、様々な意見がありました。

A. エンジニアを雇う立場から言えば、言語はツールであり、適材適所で色々な言語を使いこなすことが出来るエンジニアの方が好ましいのは当然です。「得意な言語がある」ことは好ましいことですが、そのためにその言語に固執したり、客観的な判断が出来ないようでは困ります。私が雇ったエンジニアの中で、Javaが得意でとても優秀なエンジニアがいましたが、Javaが最適でないところにまでJavaを使おうとしたり、Java以外の言語を勉強することを拒否したので、とても苦労しました。理想的には「どんな言語でも2週間でマスターしてやる!」ぐらいの心意気のある(そして実際の実力もある)エンジニアと仕事をしたいですね。
A. 特化すべきではないと思います。 言語は流行もあります。そして、エンジニアとしての寿命はそれほど長くないです。結局プログラミングは表現が変わっても原則は変わりません。そういった共通した根本的な考え方をマスターすれば、他の言語習得にそれほど時間はかかりません。それ以上に、言語よりも原則をマスターして設計が出来るようになり、エンジニアからより上流に移っていくことが必要だと思います。ただし、組み込み系などのニッチなトコについては尖がってずっとエンジニアとしていくのもありだとは思います。
A. 多分エンジニアとしての質やレベルは、どの言語かというより、エンジニアリングとして何をすることが出来るのかによって測られるのだと思います。そういった能力を高めるには言語を一つ決め打ちして掘り進むのがいいと思います。一つの言語で到達した点に、他の言語でたどり着くのはそれほど難しくないですからね。 なので結論としては1つの言語のみ特化、会社などの実情を鑑みると、今やっている言語を本気で極めようとしたほうがいいという答えなのではないでしょうか。ちなみに、個人的には、サーバーサイドの重い処理はC++(HadoopだとJava)Webサーバー全体としてはRuby,クライアントサイドは言わずと知れたJavaScript,学術論文や機械学習分野だとPythonやR,iOS開発だとObjectiveCでやるのが一番楽な気がしているので、強要されなくても自由に出来るのであれば言語を変えます。結局言語の差なんて、文法的には方言程度の差しかないので、ライブラリの充実度など含め、そのドメインで多く使われている言語を使うのがデバッグなどを含め開発が速くなると思います。我が道を行くとGoogle先生が助けてくれないですからねwちなみに、別の話として、その分野のトップになるためにマイナー言語を学んで高速に情報発信していくという戦略はありかと思います。
A. 言語という意味では、言語に固執するなという部分もありますが、言語に紐づくコミュニティにコミットするという意味ではある程度、言語を絞ったほうが良いと言う部分もあります。僕がこのレスを読んだ人に希望するのは、他の言語をバカにしない人材になって欲しいということですね。昔ならVB、今ならPHPがそういう対象になりがちですが、その中でも、市場ではPHPは何故支持されているのか?!を適切に把握し、もしRubyPerlが好きだったとしても、普通にその言語も使えるようになって欲しいと思います。処理系の人に言うと怒られるかもしれませんが、言語というのはエンジニアリングという意味では所詮、何かを実現するための手段の一つでしかない、という事実はあります。また言語のトレンド一つで、成功したサービスの歴史あるコードがレガシー技術扱いになってしまうという業界としての問題もあります。技術者は、トレンドにこだわるよりも、あなたの本当の価値はそこじゃないというところを意識し、ビジネスやアウトプットの質や安定性にコミットして欲しいです。
A. 業務及び趣味でPythonを使っていますが、いろいろな言語をかじっては覚えたりしています。自分が思うに、一つの言語に特化するためには、むしろ他の言語を勉強する必要があると思います。著名なハッカーの人々は、例えば「一年に一つのプログラミング言語を学ぶべきである」と述べたり、あるいは半ダースの言語を覚えるべきである、という話をしています。参考までに、そういったエッセイを載せておきます。 http://www.yamdas.org/column/technique/21-daysj.html http://itpro.nikkeibp.co.jp/article/COLUMN/20070618/275142/ プログラミング言語には、さまざまなパラタイムがあります。例えば、自分がかじった範囲ですと、関数型としてHaskell、宣言型としてPrologなどが挙げられます。これらの言語は、いわゆるPHPPythonといったような手続き型以外のパラタイムを教えてくれます。そうすると、如何に自分が勉強している言語が「特殊なものの」の一つであるということに気がつかされまず。そして、またこれらは「この言語はこうするべきだ」という思い込みを打ち砕き、違うアプローチを教えてくれます。これらが実際的に、業務として、ようするに「技術を金にする」という意味で役に立つかどうか、というところは疑問ではあるでしょう。しかし、自分は上記の言語を勉強した所で、ポンコツでありながらも、「こういう考えをするとどうだろう」と考えられるようになったように感じます。それは確実に業務として生きているように感じます。また、エンジニアとしてのロードマップとして、どのように生きるのか。一つとして、Webサービスをたち上げる、といったときに、一つの言語でおさまることはほぼありえません。最近、自分でもサービスを立ち上げたのですが、Pythonの他に、SQLであったり、クライアントJavaScriptであったり、それらをつなぐShellScriptへの理解をせまられて、必死で覚えています。たぶん、多くのスペシャリストも、上のように、「母国語(メインの言語)」を覚えながら、他の言語で幅を広げるという形を取っているような気がします。もちろん、ただの器用貧乏になる可能性もありますけどね、自分のように :)
A. 高水準言語を使うエンジニアであれば、答えとしては、すべきではないです。まず、大抵の高水準言語のプログラミング言語は使った言語と同じ世代言語で、親となった言語があります。まず、その親言語の理解が必要です。例としてはC#の親言語はC++,phpの親言語はC++などとなります。次に同じ親を同じとしている他の言語の理解が必要です。(以降、類似言語と省略)これら、親言語と類似言語は、文法の違いもありますが、根幹として、設計思想の差がありますので、同様の仕組みを作る場合、記述する命令の差が出てきます。これら差がオブジェクト指向が使える高水準言語の場合、全体的な設計に大きく関与してきますので、バグ、生産性、セキュリティといった要素に大きく関わってきます。全く系統の異なる高水準言語の場合は、上記の差異がわかりづらいですが、同様の差がありますので、よく学んで下さい。

以上のように賛否両論さまざまな意見がありました。 わたしのゼミの先生もそうでしたが、多くのプログラマーはより幅広く言語を学ぶべきという人が多いとおもいます。 しかし、学生の短い時間でどれだけの言語を習得できるかと考えると、一つの言語のスペシャリストになろうとするのも悪くはないのかな?と私は思っています。 ちなみに、わたしはPython超大好きっ子なので、(ほかも必要最低限学びながら、)すくなくとも今年はPythonオライリー本全部読破しようと目論んでいる勢いで学んでいます。 好きな言語を好き放題やれるのは学生のうちだと思いますし、こだわるのもいいのかなと思っています。