プログラミング言語はどのくらいのレベルになれば一人前でしょう?
著書「プログラムは技術だけでは動かない」を読んだということでメールをいただくことがたまにあるのですが、話の流れとして、
「技術で一人前になるために、プログラミング言語を勉強しています」
「プログラミング言語はどのくらいのレベルになれば一人前でしょう?」
「どんな言語を勉強するのが有利でしょうか?」
「どうやって勉強するのがよいでしょう?」
という感じが多い気がします。
個人的には、なんとなく「目的と手段、どちらが先?」という違和感があります。
プログラミング言語は、日本語のようなもので、プログラミングの仕事では、基本的に「使えて当たり前」というイメージだと思います。私が若い頃はコンピューターが一般には普及していませんでしたので、もともとできる人はなかなか採用できず、採用後にプログラミング言語を身につけながらでも仕事になりましたが、すでにコンピューターは誰もが使うものであり、情報処理分野に進みたい人は、それに向けた学校で勉強がいくらでもできる時代ですし、独学でもお金をほとんどかけずに開発環境は準備できる時代です。海外で仕事をしようと考えているのに、「英語はこれから勉強します」で通用しないのと同様、プログラミングの仕事をしようとしているのに、「プログラミング言語はこれから勉強」では一人前と呼べるはずがありません。目の前に作るものが提示され、プログラミング言語で悩むようでは仕事になりません。
「どんな言語が有利か?」というのも微妙な疑問だと感じます。「自分が取り組みたいことに使える言語」であるはずです。WEBやDBをやりたいのにC言語を学んでもズレている感じでしょうし、ネットワークパケットを扱うようなプログラミングを作りたいのにJavaを学んでもなかなか役に立たないでしょう。請負や派遣の仕事であれば、少しでも多くの言語を身につけておくのが有利ということもあるかもしれませんが、広く浅くでずっと食い続けるのはなかなか大変な世の中になってきていると思います。すこし勉強すれば身につくような仕事は単価競争が熾烈で、人件費が安い国との戦いにも巻き込まれます。
著書でも書いていますが、「どのプログラミング言語ができる」ということではなく、「プログラミング言語を使いこなして、何を解決できるか」が勝負のポイントだと私は考えています。プログラミング言語自体で勝負したいなら、プログラミング言語自体の開発に取り組むのが一流への近道だと思います。世の中にはITで解決したい課題・実現したい課題があり、それを解決できる人に仕事を依頼しますし、解決できる製品やサービスを選択します。プログラミング言語のレベルで選択するわけではありません。当社メンバー達の様子を見ていても、プログラミング言語のことで悩んでいることはまずなく、「どうやって課題を解決するか」で議論しています。さらに、実は技術的な議論よりもビジネス的な議論の方が多いくらいです。
最後に、「どうやって勉強するのがよいか」ですが、個人的には「勉強」と表現している時点で「甘い!」と思います。学生ならともかく、社会人は食わねばならないのです。「勉強してできるようになったら・・・」では仕事になりません。「できる限りの準備をしたら、仕事として取り組む」しかないのです。引き受けたからには完成させるしかなくなり、必死でもがき苦しむことによって本当に自分の力になります。「本を読む」「先生に教わる」というレベルではそう簡単に身につきません。私がC言語を大学時代に身につけた際にも、半年間本を読んでも全く分かりませんでした。分かったと言ってアルバイトの仕事を引き受け、やると言ったからにはやり遂げなければならない状況に自分を追い込んだら、あっという間に使える状態になりました。
最初から「一人前」の人などいないのです。現場で痛い目にあいながら、心から「やらなければ!」と思うから身につくのです。実は製品やサービスも同じで、「最初から完璧な製品などない」のです。世に出して、現場で叩かれて、ようやく一人前の製品に育つのです。「一人前になったら・・・」といつまでも勉強していても一人前の力はつきません。現場に飛び込み、必死になることが一番の近道です。