プログラミング言語の習得難易度を分類してみた

      2017/03/20

本を読む女の子

「プログラミング言語ってたくさんありすぎて、どれ学んだらいいか選べない…」
「出来れば習得が簡単な言語が良い…」
「就職・転職で評価される言語が良い…」

どのプログラミング言語を学ぼうか考えるのって楽しいですよね?
私もこれまでC/C++, JavaScript/node.js, VB, Java, PHP, Ruby, C#と様々な言語を使ってきました。

ちょびっと触った言語としてPerl, COBOL, PL/SQL, Python, Scala等があります。

Haskell, F#, LISP, Lua, Go等のように入門書は読んだけど、実際使うには至らなかったなんて言語もたくさんあります。

そんな経験を踏まえて、今回はプログラミング言語の習得難易度を分類してみます。

難易度S(全くものにならず)

Haskell, F#, Lispです。つまりは関数型言語ですね。

入門書を読んで文法を頭に入れてみたものの、これらの言語を使って何か作ろうという気になれませんでした。

というか、どうプログラムを組むかの発想が全く浮かばなかったんです。つまり修得できてないということなんでしょう。

「関数型言語を使ってこういうものを作りたい!」っていう具体的な目的がなく、勉強のための勉強になっていました。プログラミング言語って使わないと身につかないのはわかっているんですけど、関数型言語だと何も作る気になれないというデッドロック状態なんですよね~。

難易度A(難しいけど、頑張れば使えた)

C/C++です。低水準な言語という意味での難しさがあります。

私は18歳の時に専門学校に入学してプログラミングを始めたのですが、その時に習ったのがC/C++でした。

「今思えば難しい言語だな」と思います。特にC言語は用意されてる関数が簡素な機能しかなくて、原始的なロジックを自分で組む練習になりました。

JavaやPHPなど、C言語より高水準な言語をたくさん使ってきた今、C言語でコードを書くのはきついなぁと思います。char配列を直接ごにょごにょ扱うロジック書きたくないですもの。

あと、よく言われてる「ポインターが難しい」って話ですが、ポインターってざっくり説明すると他の言語で言う「参照」のことです。

参照ってオブジェクトのアドレスですよね。ポインターもアドレスです。ポインターの場合、アドレスに加算減算などをして参照する先を移動させることが出来ます。違いはそれだけなので、知識として理解するのはそこまで難しくありません。

ただ、知識として分かっていても複雑なポインタ演算を使ったコードは「書いた本人以外よく分からん」ってことがよくあります(笑)

難易度B(簡単に見えてしんどい)

JavaScript/node.jsです。意外ですかね?

メジャーな言語の多くは同期IOを基本にしているのに対してJavaScript/node.jsは基本的に非同期IOなので、コールバック関数でIOの結果を受け取る書き方をしなければならない所が厄介です。

PHPでファイルを読む同期IOのコードって以下のような書き方をします。

同じことをJavaScriptで書くと、非同期IOなので以下のようになります。

非同期IOだと、IOが発生する度に無名関数を書いて結果を受け取らなければならないんです。IOが一回ならいいけど何度もあると、3個のファイルを読むが場合、こうなります↓

コールバック地獄ってやつです。コールバック関数が何十にもネストしていってコードが読みにくくなります。

脳に負荷のかかる言語だと思います。まぁ、修行になっていいかもしれませんけどね。

あとはオブジェクトを定義するのがクラスではなく、プロトタイプによって行うところも特殊です。

メジャーなオブジェクト指向言語はクラス型オブジェクト指向なのに対して、JavaScriptはプロトタイプ型オブジェクト指向なので、他の言語の考え方をそのまま使うことが出来ず、これまた脳に負荷がかかって修行になります。

PHPでオブジェクトを定義する場合、クラス型オブジェクト指向なので以下のようになります。

JavaScriptでオブジェクトを定義する場合、プロトタイプ型オブジェクト指向なので以下のようになります。

どうでしょうか?classの方が直感的で分かりやすいですよね。

node.jsをしばらくやった後、PHPやRubyに戻ると、「なんて楽なんだー!同期IOさいこー!クラスさいこー!」って思えたほどです。

とはいえ、Webアプリケーションのクライアント側をやるならJavaScriptは必須なので、やるっきゃありません。

難易度C(普通に使える)

Java, C#, PHP, Perl, Python, Rubyです。(その他大抵のメジャー言語もこのランク

「えっ?PHPの方がJavaより簡単でしょ?」って思われたかもしれませんが、大きなくくりとしてPHPとJavaの難易度は変わりません。

これらの言語はクラス型のオブジェクト指向言語ですし、命令型言語です。基本はみんないっしょなので、文法の差異を覚えればすぐ使えるようになります。

命令型言語は

  1. 逐次実行
  2. 分岐
  3. 繰り返し

の3つの要素で出来ているので、これら3つを抑えればどの言語でも使えます。

もちろん、その言語らしい書き方が出来るようになるにはそれなりに時間を要しますが、それでも、関数型言語のようなパラダイムの違う言語を覚えるよりはずっとかんたんです。

「PHPはかんたん、PHPしか使えないプログラマーはバカ」とか言ってる人はPHPを使ったことがないんじゃないんだと思います。使ってみれば、言語として持っている機能はほとんど一緒だということが分かるからです。

PHPの標準関数の引数の並び方のポリシーがバラバラだったりするイライラはありますけど、それは言語設計の美しさの問題であり、言語の習得難易度とは別の問題です。

そんなわけで大抵のメジャーな言語は難易度Cなので、そんなに構えず、気になった言語を学んでみるといいと思います!

プログラミング初心者におすすめのサービス
1. 講師から対面で学びたい派には

プログラマカレッジをおすすめします。ProEngineerという転職エージェントが運営しているプログラミングスクールです。20代限定なんですが、無料で受講できて、修了後、就職支援もしてくれるんです。最高過ぎですよ、これ!!就職の紹介料を企業からもらえるのでスクールを無料にできるんでしょうね。すばらしいシステムだと思います!

30代以上の方には

プログラマカレッジは20代限定なので30代以上の方にはWebスクをおすすめします。受講料の返金保証がついているし、毎日11時〜23時まで通い放題なのでとてもいいと思います!

2. 自宅で学びたい派には

侍エンジニア塾の無料体験レッスンをおすすめします。カリキュラムを自由に選択できるので、自分が教わりたい内容をピンポイントで学ぶことが出来ます。このスクールから33歳でITエンジニアに就職出来た人がいるそうなので、30代の方にもおすすめです。

3. つまづいた時に質問したくなったら

プログラマー専用の質問サイトteratailをおすすめします。 つまづいた時にteratrailで質問すれば教えてもらえます。

これらのサービスを活用すれば、全くの初心者からでもプログラミングをばっちり出来るようになると思います!レッツトライです!

 - 技術 , ,