エンジニアにもいろんな職種があり、得意不得意というものはあります。 エンジニアの中にも細かい専門職が存在し、「その知識のスペシャリスト」というような存在は、企業でも必ず重宝されます。 しかし、エンジニア業界では、あらゆるプログラミング言語に精通していることの必要性も、すごく高まっています。 そのような傾向になっているエンジニア業界の背景には、一体どんな理由があるのでしょうか?
複数の言語を学んで「学べる領域」を広げていくことが大事
プログラミング言語と言っても、「オブジェクト指向」、「関数型」、「手続き型」などさまざまなジャンルがあり、さらにそれらの特徴を上手く組み合わせた言語なんかも、多く登場してきています。
それぞれを学んで得られる知識というのは、同じ言語と言えども、当然全く違う内容のものになります。
言語によっては、共通している機能や考え方があるため、習得した言語の数だけ新しい知識が増えるというわけではありませんが、「その言語独自の理論」というものは、やはりその言語を学ばないことには、理解しがたいものです。
「テスト駆動開発」という、近年のエンジニア業界で一般的となっている手法においては、それぞれの言語において、ノウハウが出来上がっているものや、モジュールが存在するものもあります。
ということは、複数の言語に精通しておかないと、選択した言語によって有利にも不利にもなるということです。
また、多くの言語に精通しておくことで、システムやソフトウェアのことについて、もっと深く考える機会が増えたり、どうすればもっと効率よくプログラミングができるのか、考える機会も多くなるでしょう。
「あの言語はこの部分が簡単だったけど、この言語ならこんな方法で効率が良くなるんだ」といったように、言語だけではなく「エンジニアとしての技術向上」に大きく繋がるので、複数の言語習得に、無駄なことはないと言えます。
自分の余裕は自分で生み出すことが大切
そして、多くの言語を知ることで、「エンジニアとしての選択肢が増える」というのも、多くの言語に精通しておくべき理由です。
これは、エンジニアとしていろんな職種を選ぶことができるという意味もありますが、どちらかと言うと、状況に応じて、「いろんな選択肢で解決に持って行ける」という、自分で自分の余裕を作るというイメージの方が大きいです。
他の言語の知識を頭に入れておくことで、それぞれの長所と短所を知ることができます。
要件に忠実で、かつ効率的なシステム開発・設計に取り組む際には、とても大きな技術と言えるでしょう。
例えば、LISPなどで知られる「関数型」のプログラミング言語には、他のジャンルにはない論理的思考力が必要になってきます。
これを経験することによって、関数型以外のプログラミング言語でも、プログラミングに対するアプローチスキルが上がると言われています。
経験しないと分からないことは、つまりその言語に手をつけない場合、一生学ぶことのできない知識です。
少し経験するだけで、エンジニアとしてのスキルを底上げできる可能性があるのに、自分でその可能性を限りなくゼロに近づけていることにもなりかねません。
新しい言語を「1から学ぶ」と考えると、躊躇してしまう原因になる
そもそも、1つでも言語を習得するのが大変なのに、複数言語を習得するのは相当厳しいと思っているエンジニアも多いでしょう。
しかし、先ほども少し言ったように、異なる言語でも同じような理論があったり、全く違う分野でも同じような考え方があったりします。
ということは、学べば学ぶほど、新しい言語の習得は、「どんどん簡素化していく」ということが言えるでしょう。
どうしても、ゼロの状態から言語を習得したときのイメージで、新しい言語を習得しようとすると、少しためらってしまいます。
その気持ちはもちろん分かるのですが、1つ2つマスターすれば、制御文の理論や変数・関数なんかは、文法は違えどとても似通っている言語が多いです。
1つ1つを完全に習得しようというイメージより、「状況に応じていろんな言語の強みを出せるように準備しておく」という意識で、取り組んだ方がいいでしょう。
新しい言語にチャレンジするときは、大体のエンジニアが、以前活用していた言語との違いに興味を持ち、どんどんいろんな言語に触れたいという気持ちが強くなってくるものです。
そして、新しい言語を勉強するときは、「知識や理論だけ頭に入れる」という方法ではいけません。
最初は参考書などを見ながら、「実際に体験してみる」という行動が重要です。
いろいろな言語に精通するということは、言語の知識が増えることよりも、エンジニアという仕事、そして情報技術そのものの知識が増えることになるので、自然と周りとの差をつけることに繋がるでしょう。