
・プログラミング言語の種類
・各プログラミング言語の難易度
・各プログラミングの特徴
・どんな観点でプログラミング言語を選択するか
既に1~2個のプログラミング言語を習得していて、次何にしようかなと思っている人にはやや物足りない内容になっているかもしれません。
目次
【サマリ版】プログラミング言語の種類・難易度
【サマリ表】※難易度はなるべく一般的な評価を心がけていますが、一部筆者の独断と偏見が入っています。
プログラミング言語 | 処理方法 | プログラミングパラダイム | 難易度(★5段階) |
C言語 | コンパイラ | 手続き型 | ★★★★★ |
C++ | コンパイラ | 手続き型・オブジェクト指向型・関数型 | ★★★★★ |
C# | コンパイラ | 手続き型・オブジェクト指向型・関数型 | ★★★☆☆ |
Go | コンパイラ | 手続き型・オブジェクト指向型 | ★★★☆☆ |
Java | コンパイラ | 手続き型・オブジェクト指向型 | ★★★★☆ |
JavaScript | インタプリタ | 手続き型・オブジェクト指向型 | ★★☆☆☆ |
Kotlin | コンパイラ /トランスパイラ |
オブジェクト指向型 | ★★★☆☆ |
PHP | インタプリタ | 手続き型・オブジェクト指向型 | ★★☆☆☆ |
Python | インタプリタ | 手続き型・オブジェクト指向型・関数型 | ★★★☆☆ |
R | インタプリタ | 手続き型・オブジェクト指向型・関数型 | ★★★★☆ |
Ruby | インタプリタ | 手続き型・オブジェクト指向型・関数型 | ★★☆☆☆ |
Rust | コンパイラ | 手続き型・オブジェクト指向型・関数型 | ★★★★★ |
Scala | コンパイラ | オブジェクト指向型・関数型 | ★★★★★ |
Swift | コンパイラ | 手続き型・オブジェクト指向型・関数型 | ★★★☆☆ |
Visual Basic | コンパイラ | 手続き型・オブジェクト指向型 | ★★☆☆☆ |
処理方法には、インタプリタ型とコンパイラ型があります。(トランスパイラ型もありますが割愛)
プログラミングパラダイムには手続き型・オブジェクト指向型・関数型があります。
それぞれがどういうものかについては、以下の記事を参照ください。
ざっくり言うと、処理型であれば、インタプリタ型のほうがコンパイラ型に比べて学習難易度が低いです。
というのも、コンパイラ型は自分が作成したプログラムコードをコンピュータが理解できる形(機械語)に1度翻訳する過程があります。
これをコンパイルと言います。
コンパイルによって機械語に翻訳しますが、自分が書いたプログラムコードに誤りがあれば、そこでエラーを吐き出してしまいます。(コンパイルエラー)
例を挙げると、英語を学習中のあなたが拙い英語で手紙を書いたとします。
手紙を友人に送る前に、英語がペラペラの通訳に自分が書いた手紙を見てもらいます。
そこで、通訳が「は?全然わかんないんだけど?没!」って差し戻してくるわけです。
完璧な英語にするまで手紙送らせてくれないんですよ。
それは学習コストがかかりますよね。
インタプリタ型は手紙の全文を完璧にしなくても、手紙を書いていく段階で一文一文ずつ誤っているか合っているかを逐次教えてくれます。
とはいえ、”インタプリタ型でありながらコンパイラ型でもある”という言語も少なくないため、単純にインタプリタ型かコンパイラ型を分類することは難しくなってきました。
また、パラダイム型でいえば、一般的に右に行けば行くほど学習難易度は高いと言われています。
(手続き型<オブジェクト指向型<関数型)
処理型・パラダイム型は、あくまでプログラミング言語を選択する上での一つの目安といった捉え方をすることをお勧めします。(これが全てではありません)
各プログラミング言語の特徴をざっくり説明!
C
パラダイム型:手続き型
難易度:★★★★★
”プログラミング言語の原点”と言われているほど他の言語に影響を与えたプログラミング言語です。
この言語を学習しておけば、他の言語の習得も容易です。
それでいて、JavaやC#に比べると、シンプルなため、覚えることが少なくて済みます。
ただし、「ポインタ」という概念は理解が難しいとされており、初心者で挫折する人もある部分です。
ゲーム、組み込み(家電製品や自動車の制御装置)など、CPUやメモリといったリソースに余裕がないものに使われることが多く、教育にも利用されることがありますね。
僕の知り合いのプログラマーも、会社の社長が「C言語を覚えておけば応用がきくからいい」と言われて新人研修時に習得したと言っていました。
C++
パラダイム型:手続き型・オブジェクト指向型・関数型
難易度:★★★★★
C言語にオブジェクト指向を追加した言語です。C言語に対して上位互換性があり、C言語のように手続き型でのプログラミングも可能です。「C/C++」と一括りにされることもあります。
ただし、言語の難易度は間違いなく上がっています。
C++は、大規模なソフトウェアで高速性が求められるゲーム開発などには必須な言語になります。
C#
パラダイム型:手続き型・オブジェクト指向型・関数型
難易度:★★★☆☆
Windowsで使われているアプリケーション開発・実行環境(.Net Framework)における標準言語です。
Cとついているから、CかC++に何か追加したものなのでは?と思った方もいるかもしれません。
実態は全く異なります。語源としてはCに比べて「より良いC」という意味が込められているそうですが。
既存のプログラミング言語のいいところをうまく組み合わせて作られていて、開発環境の構築が整備されているため、初心者でもスムーズに開発できることが特徴です。
Windowsアプリだけでなく、スマホアプリなどまで幅広く開発可能な言語です。
Go
パラダイム型:手続き型
難易度:★★★☆☆
Googleによって開発されたプログラミング言語です。
コードを簡潔に記述することが可能で、学習するための負荷が少ないので、新人やこれからプログラミングを始める初心者にはオススメの言語です。
CやJavaなどのプログラミング言語と構文が似ているため、これらの言語の経験がある方なら、比較的容易に習得することが可能です。
Webアプリの開発に利用されます。
Java
パラダイム型:手続き型・オブジェクト指向型
難易度:★★★★☆
プログラミングに全く関わりがなかった方でも1度は耳にするのではないでしょうか。
それくらい今やメジャーなプログラミング言語です。
C言語に構文は似ていますが、ポインタなどの概念がなく、初心者でも学びやすい内容になっていますね。
それだけでなく、利用者数が多いため、学習するにあたっての参考資料やリファレンスが充実しています。
企業の業務システム/アンドロイドアプリ/Webアプリまで様々な用途で使用されている言語です。
JavaScript
パラダイム型:手続き型・オブジェクト指向型
難易度:★★☆☆☆
JavaScript は主にWebブラウザの作成に利用するプログラミング言語です。
Javaとは名前が似ていますが、実は全くの別物です。
「JavaできたらJavaScript できるでしょ?」っていう上司がいたら注意してください!
(僕はこれまで実際にそういう上司いました・・・)
Kotlin
パラダイム型:オブジェクト指向型
難易度:★★★☆☆
Java言語をもっと簡潔に、安全になるように改良されたプログラミング言語です。
Null安全という特徴があり、NullPointerExceptionが発生しにくいという利点があります。
Java習得者であれば分かるのですが、とてもありがたい特徴です。
GoogleがAndroidの標準言語としてこの言語を採用したことで話題となりました。
そういった背景から、Androidアプリの開発言語として今後普及が期待されています。
PHP
パラダイム型:手続き型・オブジェクト指向型
難易度:★★☆☆☆
Webアプリケーションの開発で多く使われるプログラミング言語です。
後述する”プログラミング言語の原点”と言われるC言語に似たスタイルです。
Webアプリを作成するには学習難易度が低く、学習するために必要な開発環境の構築も手軽にできるため、初心者にはオススメな言語ですね。
Python
パラダイム型:手続き型・オブジェクト指向型・関数型
難易度:★★★☆☆
Webアプリや人工知能、データ解析・分析に使用されているプログラミング言語です。
データ解析分析や機械学習に使えるライブラリが豊富であることからAI(人工知能)業界では、必須と言える言語ですね。
後述する、R(アール)という言語も最近利用者が多くなっていますが、これはデータ解析・分析に特化したプログラミング言語といえるのに対して、Pythonの利用用途は広いです。
現に、InstagramはPythonを使用して作られています。
R
パラダイム型:手続き型・オブジェクト指向型・関数型
難易度:★★★★☆
データ解析・分析に特化したプログラミング言語で、主に研究分野で使われています。
多言語でのプログラミング経験がないと理解が難しく、初心者が最初に学ぶ言語としては不向き言えますね。
データサイエンティストになりたいという目標があるのであれば、挑戦しても良いかと思います。
Ruby
パラダイム型:手続き型・オブジェクト指向型・関数型
難易度:★★☆☆☆
Webアプリ開発だけでなく、教育に用いられることが多いプログラミング言語です。
そのことからも分かるように初心者でも習得しやすいプログラミング言語と言えます。
また日本人が開発したプログラミング言語であることから、日本語版のリファレンスが充実しています。
利用事例でいうと、COOKPADはこの言語で作られています。
Rust
パラダイム型:手続き型・オブジェクト指向型・関数型
難易度:★★★★★
RustはC言語の代替を目指したプログラミング言語です。
安全性・高速・並列実行の3本柱の特徴があります。
ただし、C言語の代替であることから、学習難易度も非常に高いと言えますね。初心者の方が最初に学習するには不向きな言語です。
OSの開発やネットワークを利用するプログラムを作成するのに便利です。
Scala
パラダイム型:オブジェクト指向型・関数型
難易度:★★★★★
ScalaはJavaの機能が使用できるよう、互換性を第一に考えて作られた言語です。
規約が複雑で多かったり、関数型プログラミングとオブジェクト指向の両方を知っていないとScalaの良さを最大限に生かせないという点から、学習難易度は高いと言えますね。
そういう意味ではJavaからのスキルアップされた言語です。
Swift
パラダイム型:手続き型・オブジェクト指向型・関数型
難易度:★★★☆☆
iOSやmacOSのために開発された言語で、比較的簡潔にプログラムが記述できるプログラミング言語(スクリプト言語)の多くの良い特徴を活かしており、学習コストは比較的に低いと言われています。
iPhoneアプリを開発したい場合は、今や第一候補に挙がる言語ですね。
Visual Basic(Visual Basic.Net)
パラダイム型:手続き型・オブジェクト指向型
難易度:★★☆☆☆
Windows上で動くアプリケーション開発環境として使用されている初心者向けの言語です。
WindowsアプリケーションやOfiiceアプリケーションの開発に使用されるだけでなく、Webアプリ開発から教育まで幅広く利用されています。
Ofiiceのマクロで使われるVBAとも似ており、Visual Basic.Netを学習すればマクロも作成できるようになります。
言語自体は同じであるにも関わらず、文法が異なる部分があります。
結局どのプログラミング言語を選べばいいの?
冒頭でも軽く述べましたが、プログラミング言語を選ぶ基準としては、以下2つあると思っています。
目的に適しているか
この基準でプログラミング言語を選択するのに適した人は「明確な目的がある人」です。
例えば、iPhoneアプリを開発したいという目的があるならSwiftでしょうし、データ分析をしたいということであれば、PythonかRあたりでしょう。
上記のように、自分が作りたいアプリやサービスがあるのであれば、それに適したプログラミング言語を選択するのが一番間違いないと思います。
人気ランキングや求人数
この基準でプログラミング言語を選択するのに適した人は「転職などのために何となくプログラミングスキルを身に付けたい人」です。
こういった人は、自分がどんなアプリ・サービスを作りたいかがイメージできていないと思いますので、人気ランキングや求人数でプログラミング言語を選択するのも1つの手だと思います。
人気ランキングについて、代表的な例でいうとTIOBEランキングがあります。
これはオランダのTIOBE softwareが人気なプログラミング言語の上位50位をまとめたものになります。
月間ランキングが載っていて、昨年の同月におけるランキングとの比較もあります。(上位20位まで)
そのため、どの言語が1年間で急上昇していて、逆に人気がなくなっているかも分かるのが良い点ですね。
是非プログラミング言語の選択に迷った場合は参考にしてみると良いでしょう!