プログラム言語、いろいろありますね。
当サイトの管理者は、プログラマーとしてマネージャーとして数十年間、いろいろな言語を扱っています。
そんな管理者が、本職プログラマーの目線で見た、プログラミング言語の比較をしてみます。
比較するプログラミング言語
比較する言語は、現場でもよく使われる、以下の11種類。
それぞれの特徴を見ていきましょう。
C/C++
- 使われる場所 PythonやJavaなどの裏方の高速処理、ゲーム、組み込みアプリ(IoT)
- 特徴 早い、不安定、低水準
- 難易度
ゼロオーバーヘッドの高速処理、IoTの立役者
動作時に無駄なこと一切しない。とにかく速い。これが最大のメリット。
他言語を使う時も、速さ必要なとこだけC/C++で作ったりする。ゲームもリアルタイム性求められるので使うこと多い。
低水準とは、レベル低いとかでなく、機械を直接制御できるということ。なので様々な機械のチップに埋め込まれる。IoT(Internet of Things)の立役者。
扱いがひときわ難しい
C/C++最大の鬼門、ポインター。こいつを少しでも誤ると即停止。その凶悪さは他言語の追随を許さない。
管理者ひとこと
ピーキーなマシンをカリカリにチューンして限界スペックに挑む、C/C++にはそんな楽しさがある。
その性能が求められる場面はいまだ多い。ただヘンに作ってしまうと凶悪さが半端ない。
Java
- 使われる場所 Webバックエンド
- 特徴 大衆的、安心感、冗長
- 難易度
30年の歴史が持つ安定感
登場から永く一線を張る言語。その歴史から開発経験者も多い。
後方互換性を保ち続けている。バージョンアップしても動く抜群の安定感。これがあるから最終的にはやっぱJava、ということも多い。
書き方がやや冗長
歴史が古いだけに、最新の言語と比べると、書き方がちょっと冗長。
ただ言い方変えれば、トリッキーな書き方を封印している。なので誰が書いてもそれなりに読める。これはメリット。
管理者ひとこと
Javaは、誰が作ってもそうそう破綻しないという安心感あり。
過去遺産も多いし、後方互換性もある。長いあいだ残り続けるであろう言語。
C#
- 使われる場所 Webクライアントアプリ、ゲーム
- 特徴 Javaと似た安心感、ややニッチ
- 難易度
Javaと似た扱いやすさ、実はUnityの開発言語
もともとMicrooftがJavaに対抗してできたもの。なのでJavaと似ている。さらに便利な機能をプラスしている。
ゲームエンジン2巨頭のひとつUnityは、実は開発言語がC#です。(もうひとつの巨頭UnrealEngineはC++)
Windows専用感が否めない
C#は、言語仕様は公式化されている。が、やはりMicrosoftなだけに、実質Windows専用の感が否めない。LinuxやMacでも使えるのだが、あまり見ない。
かつてはMicrosoftも、C#を武器にWeb開発の頂点を狙おうとした(WPF,Silverlight)ものの、夢破れる。
管理者ひとこと
かつてはWindowsアプリの花形だったが、いまではWebアプリ全盛だから影が薄くなりがち。
Python
- 使われる場所 AIならPython、ほかいろいろできる、研究者が愛用
- 特徴 シンプル、なんでもできる、速度は遅い
- 難易度
構文がシンプル、データサイエンス分野で人気
シンプルなこと、誰が書いても同じになること、が根本思想にある言語。これが高水準でまとまってる。
The Zen of Python はいいこと書いてあるのでぜひ読んで。
研究者がこぞって使う言語。もともとAIでブレークした言語であるしね。やっぱりNumPyの存在が大きい。あれは他の言語にはなかなか真似できない。
処理速度が遅い
ほかの言語と比較しても、処理速度が圧倒的に遅い。とくにforループが絡むとかなり遅くなる。
このあたりで、業務システムへの組み込みはためらいある。
管理者ひとこと
初心者におすすめ。分かりやすいし色々できるし、いい言語。
ただ初心者の最大難関が環境構築。Windowsでネイティブに扱えるといいのにね。
JavaScript
- 使われる場所 Webフロントエンド
- 特徴 Webで必須、変化が激しい
- 難易度
Web開発者必修、ブラウザで唯一動く言語
初心者にはとっつきやすい。テキストにHTMLとJavaScript書けばすぐ動くしね。色変えたりアニメーション作ったり楽しい。
ブラウザで動くのがこれしかないから、Webフロントエンドでは選択の余地はない。
プロトタイプベースの罠、学習時と本職時の落差がすごい
プロトタイプベースの仕様はけっこう罠。C++やJavaなどの静的型付言語からくると、この動的型付にはまる。プロパティ間違えても追加されちゃうの困る。
また、本職としてJavaScript使うとき、世界が一変する。jQuery、Angular、Vue、React…突然いろいろ登場。いやこれ別言語でしょ?というくらい落差ある。さらにTypeScriptも加わるともうハードモード。
管理者ひとこと
初心者のころは楽しい。Webに動きが付くと楽しいし。
いざ本職となると、必要なスキルレベルが別次元になる。教育の仕方に頭を悩ませる言語。
Webフロントエンドなら避けて通れないしね。
PHP
- 使われる場所 Webバックエンド
- 特徴 HTML生成特化、WordPress採用言語
- 難易度
Webサーバサイド特化の素直な言語
サーバ側でのHTML生成に特化した言語。C言語あたりをベースにしているので、そのあたりに慣れた人はすんなり受け入れられる。
やっぱりWordPress
世界中のサイトの多くが採用するWordPress。その開発言語なのだから、そりゃ需要は大きい。
なかなか新規開発というのは少なそうだけれども。
管理者ひとこと
世はSPA時代だからやや存在感が薄くなってきた。だが滅びることはない。WordPressがある限り。
Ruby
- 使われる場所 Webバックエンド
- 特徴 Ruby on Rails、自由度大、くせがつよい
- 難易度
日本人が開発した言語、やっぱりRuby on Rails
米国が圧倒的主流のプログラミング界隈で、日本人まつもとゆきひろ氏が開発。日本人の方の活躍はやっぱりうれしい。
Rubyといえば、Ruby on Rails。Webサイト簡単に構築できることで人気。
ちょっとくせあり
他の言語と比較すると、構文にちょっとくせがある。書き方の自由度もかなり高くバラエティに富んでいる。それがゆえ、大規模システムへの適用はちょっと躊躇しがち。
管理者ひとこと
RubyとPHPは方向性が似ているのでよく比較される。比較サイトもいっぱいある。
ただ新規開発はこれから少ないだろうから、結局どちらを既に使っているか次第か。
Swift
- 使われる場所 iPhoneアプリ、iPadアプリ
- 特徴 iOS専用、わりと素直
- 難易度
iOS専用言語、いいとこ取り構文
Appleが作った言語。iPhone や iPad のアプリ作るなら、これ一択。
Objective-Cの後継なので、C言語の流派を保ちつつ、ほかの言語のいいとこ取りしたような言語。ほかの言語から移っても扱いやすい。
Macが必須…
事実上、Macがないと開発できません。Xcodeもいるし。Windowsユーザーには敷居が高い。
管理者ひとこと
iOSアプリ開発には必須なのだが、やっぱりMacがないと開発できないのが、なかなかつらい。
MacBook高い…
Kotlin
- 使われる場所 Androidアプリ
- 特徴 Android専用、Javaライクの安心感
- 難易度
ほぼAndroid専用言語、ベースはJavaの安心感
Googleが、Androidアプリの公式開発言語に指定したもの。AndroidアプリはJavaでも開発できるが、やはりこれからの主流はKotlin。
ベースとなっているのはJava。Javaをスクリプトっぽくした雰囲気。Java仮想マシンで動くし、構文もJava習得者にはとっつきやすい。
弱点らしい弱点があまりない
あまり目立った弱点は感じない。まあAndroid開発に限ったことだが。
管理者ひとこと
iOS/Swiftに比べれば格段に開発の敷居は低い。フリーソフトだけでAndroidアプリが作れるのはいい。
Go
- 使われる場所 Javaと同じところ
- 特徴 簡単、安全、大規模スケール、現実的
- 難易度
Googleが作った次世代言語、超現実的な言語仕様
Googleが、巨大システムへのスケールを見越して開発した言語。つまり、巨大システムで大量プログラム開発しても破綻しにくい。
言語仕様がものすごく現実的。明確に削ぎ落している仕様もあり。三項演算子ないとか、例外ないとか。
並列処理は書きやすい。ゴルーチンって名前なんか強そうよね。
Googleは、クールとかスタイリッシュとかよりも、ものすごくシビアに現実を見て、取捨選択しているように感じる。
プログラマーにはあまり面白味はない
プログラマーがワクテカしそうな面白仕様を削ぎ落してる。なのでコーディングしてワクワクする要素は、あまりない。まぁワクワクでやりたい放題やっても困るけど。
管理者ひとこと
自分で作るとしたら面白味はない。でも人に作ってもらうなら圧倒的な安心感。
経営者層から選択されうることが多い言語。
Rust
- 使われる場所 C++と同じところ、WebAssembly
- 特徴 C++並みに早い、C++より安全、スパルタン
- 難易度
ゼロコスト抽象化による性能品質両立、Linuxカーネル導入などで注目
Rustが目指すのは、昨今の高抽象化設計と、C/C++並みの性能を両立すること。各所サイトで公開されているベンチマークでも、かなり同等の処理速度が出るとされている。
Linuxカーネルへの適用も話題。Linuxの父、リーナス・トーバルス氏より、LinuxカーネルへのRust採用が発表。これまでのC言語の土壌にRustが入り込む。
また、Webフロントエンドの高速化を目指すWebAssemblyでも、Rustが最有力開発言語という意見多し。
超ハイレベルの言語仕様
言語仕様はものすごく難しい。所有権とか、関数型言語記法とか。もう一見さんお断りの雰囲気。
素人がやると、コンパイルを通すことすら叶わない、ハイパースパルタン仕様。
管理者ひとこと
今後の発展に、大きな可能性を感じる言語。ただこのスパルタンさがあるので、一般人への普及は時間がかかりそう。
重要な概念を持っているので、さわりだけでも勉強して損はない。
まとめ
本職プログラマーの立場から、プログラミング言語の比較をしてみました。
どこでも言われることですが、一番優れているプログラミング言語、というものはありません。どのプログラミング言語も得手不得手はあるし、TPOにより使い分けるべき。
ぜひ複数のプログラミング言語を学び、状況に適したプログラミングできるようにしましょう。
コメント
コメント一覧 (2件)
はじめまして。結局、どういう場合にどの言語が適切か掘り下げていただけると嬉しいです。
ちなみに、Pythonって遅いんですね。世の中で広く使われているのは何故なんでしょうか?
ご意見ありがとうございます!
どのような場合のどこ言語が適切かは、改めて別の記事で取り上げたいと思います。
Python自体はかなり遅いです。Pythonは、NumPyなどのライブラリを使ってこそ効果を発揮します。
NumPyなどのPythonライブラリの実態は、C言語など高速な言語で書かれていることが多いです。