プログラマーSEはプログラミング言語をいくつ覚えればいいか?

   


プログラミングの達人というと、いくつもの言語をマスターし、必要に応じて使い分けているようなイメージがありますが、達人というほどでなくても、複数のプログラミング言語を使える人はたくさんいます。

私自身もそうなんです。仕事で使ったものだけでも、Java, C#, PHP, Perl, C言語, JavaScript, PL/SQL, VBA, COBOLと結構な数があります。

趣味で使ったもので言うとRuby, Node.js, MQLなどがあります。

「こんなにたくさんの言語を使えるなんてすごい!」と思われた方もいらっしゃるかもしれませんが、たいしたことありません、あなたにも出来ます。

プログラミング言語ってどれもよく似ているので、方言みたいなものなんです。

東京に住んでて標準語を話す人が、テレビでお笑い芸人が喋っているのを真似して「なんでやねん」とか、えせ関西弁って話せますよね。本気になれば、えせじゃなく全部関西弁のイントネーションで話すことも出来るはずです。

複数のプログラミング言語を使えるようになるのも同じようなものです。

先程のえせ関西弁と同じでプログラミング言語をちょっと使える程度になる「えせ状態」になら簡単になれます。そこから、プロとしてお金をもらえるレベルになるにはもう少し努力が必要になります。努力と言っても英語をマスターするのに比べればずっとずっと簡単です。

では、本題である「いくつ覚えればいいのか?」について考えていきましょう。

一つでもいいけど

究極を言ってしまえば、いくつでもいいのです。「おれは一つの言語を極める!」と決めて、その言語のスペシャリストになっていくのもいいと思います。

ただ、その言語の需要がなくなってしまった場合、職業人プログラマーとしては困ってしまいます。とはいえ、実際、それまでにある程度以上需要のあった言語の需要がゼロになることはなかなかありません。COBOLだって未だに需要があります。

仮に需要がなくなったとしたら、その時に別の言語を覚えればいいので、それほど問題ではありません。方言を覚えるようなものなんですから。

言語には系統の近さがある

プログラミング言語の違いは日本語の方言みたいなものだと言いましたが、とはいえ、似てる度合いが近い言語、遠い言語があります。

自然言語でも英語とドイツ語は単語や構文規則が近いと言われています。一方日本語と文法が近いのは韓国語だと言われてます。

これと同じようにプログラミング言語にも系統があります。

例えば、C言語系統の言語として、C言語の子供として、C++があり、さらにその子供にJavaとC#がいます。PerlやPHPもC言語系統の言語です。

これらの言語は一つ覚えれば、他の言語を覚えるのも簡単です。文法やキーワードがほとんど同じだからです。
例えば、Javaのif文と代入文は以下のようになります。

PHPだと以下のようになります。

ほとんど同じですよね。PHPの場合、変数の頭に$をつけるのがルールなんです。それ以外はほぼ同じです。

これに対して、別の系統の言語であるCOBOLを覚えるのは少し大変です。

「え?」って感じですよね。とはいえ、これは短いコードサンプルなのでなんとなくは分かるかと思いますが、C言語系統の言語では変数への代入を

val2 = 5;

と数式のようにイコール(=)使っているのに対して、COBOLは

MOVE 5 TO val2

と英語のような書き方になっています。このように基本的な表記方法に違いがある言語を覚えるのはちょっとだけ大変です。

そして、主要な言語の中でCOBOLのような表記をしているのはCOBOLだけです。

ですから、COBOLしかわからない人は他の主要な言語を覚えるのに苦労することになります。

ということで、重要なことは主流な言語をまずは一つ覚えることです。すると、他の言語を覚えるのも簡単になります。

複数の言語を学ぶと視点が一つ高くなる

複数の言語を覚えると、複数言語にまたがるプログラミングの共通点が見えてきます。

「Rubyでは高階関数を使った書き方が多用されてるなぁ、それならPHPを使う時にも高階関数を使った書き方も試してみよう」

という風に、他の言語で学んだプログラミングテクニックを別の言語に応用することが出来るようになります。

これって一つの言語しか学んでない人には出来ないことです。

そうやって、いくつもプログラミング言語を学んでいくと、どんどん言語感の共通点に関する知識が増えてきます。すると、プログラミング言語ってこういうものだよなという、本質のようなものが見えてきます。

すると、新たに言語を覚える際にも、それらの知識を使ってすばやく習得が出来るんです。

自然言語でも同じで、英語を学んだ後にドイツ語を学ぶのは簡単になりそうですよね。更にその後、フランス語を学ぶの簡単になります。

というように、学べば学ぶほど、次学ぶのが楽になるという好循環が生まれます。

ですから、少なくともプログラミング言語は2つ以上学んだほうがいいということになります。

その他に言われているのが、パラダイムの違う言語を学ぶことです。

プログラミング言語のパラダイムとは?

例えば以下の様なものがあります。

・手続き型言語 → C言語, Pascal, FOTRAN, COBOL
・オブジェクト指向言語 → Java, C#, Ruby, PHP, Python, Perl, JavaScript

オブジェクト指向言語にも大きく分けて2つのタイプがあります。
・クラス型オブジェクト指向言語 → Java, C#, Ruby, PHP, Python, Perl
・プロトタイプ型オブジェクト指向言語 → JavaScript

クラス型オブジェクト指向言語(PHP)のサンプルコード

・プロトタイプ型オブジェクト指向言語(JavaScript)のサンプルコード

結構違いますよね。プロトタイプ型の場合、オブジェクトをnewした後にメソッドを追加することも出来ます。

このような様々なタイプの言語を学ぶとタイプごとに特徴的なプログラミング哲学があって、それらを学ぶことによって、プログラミングをする際の施行の幅が広がります。

とはいえ、上記で紹介した言語は大きなくくりで言うと「命令型言語」というものです。

これに対して、関数型言語と言うものがあります。

命令型言語と関数型言語の違いはデカイ

命令型言語は、命令を一つずつ順番に実行していくことで処理を進めていきますが、関数型言語は関数を連鎖させることで処理を進めていきます(命令型言語でも関数を定義することが出来るので、関数を連鎖させて処理をすすめることは出来ます)。
例えば関数型言語であるHaskellでFizzBuzzのプログラムを書くと以下のようになります。

「は?」ってなりますけど、

FizzBuzzとは、引数が3で割り切れる場合は「Fizz」、5で割り切れる場合は「Buzz」、15で割り切れる場合は「Fizz Buzz」を返すプログラムです。

それでも「は?」ですよね(笑) 私もです。Haskell意味不明です(笑)

同じプログラムをPHPで書くと以下のようになります。

「これなら分かるわい!」ですよね(笑)

言語学習に失敗しない秘訣

私も関数型言語は何度もチャレンジしては、失敗しました。

なんでかというと、関数型言語を学んで作りたいものがなかったからです。関数型言語の考え方を学ぼうと思って、入門書を何冊も読んだんですが、全然身につかなかったんです。勉強のための勉強ってやっぱダメみたいですね。

なので、パラダイムの違う言語を勉強するために勉強するっていうのではなく、パラダイムの違う言語を使って何かを作りたくなった時に学ぶものなんだろうなと思います。

まとめ

・主流な言語は皆似てるので、2つ以上学んでプログラミング言語間の共通点 = 本質を学ぼう
・パラダイムの違う言語を学ぼう(勉強のための勉強にならないように、学ぶ目的が出来てから学ぼう)

エージェントを使った方が転職活動は楽です

東京・大阪近郊のイケてるIT企業に転職したい人には『レバテックキャリア』

 東京・大阪近郊のエンジニア経験者向け転職サービスです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

あとホームページ見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

エンジニア未経験の方や地方在住の方にはDODAというエージェントをおすすめします。

エンジニア未経験の方や地方在住の方には『DODA』

全国の求人を扱っていて、しかもITエンジニア未経験の人にも転職支援をしてくれるエージェントです。

未経験の人はサポート対象外のエージェントが多い中、DODAは未経験者を支援し転職を成功させています。未経験の方こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいきます。

フリーランスになりたい人には『ギークスジョブ』

フリーランスエンジニアになるには人脈が必要と思われがちですが、ギークスジョブに登録して希望条件を伝えれば、自分に合った案件を紹介してもらえるんですよ!思ってるより全然簡単にフリーランスってなれるもんなんです。

東京・大阪・名古屋・福岡の案件を紹介してもらえます。

 - 勉強法 , , ,