学習するプログラミング言語の選び方
※【おすすめのプログラミングスクール14選】の記事も新しく追加しましたので、よろしければこちらの記事も合わせて参考にして下さい。
初めてのプログラミングの学習で言語選びに迷う人も多いと思いますので目的別にプログラミング言語の選び方を解説していきます。
例外はありますが1つ言語を習得してプログラムの基本的な知識を得れば、他の言語の基本的な処理の習得はそう難しいものではありませんので、別の言語を新たに学ぶ場合でも最初に学習した言語が全く無駄になるということはありません。
現在学生でプログラムに興味があり勉強しようと思っている人も、将来プログラマーを目指して勉強しようと思っている人も参考になれば幸いです。
WEBサイトのサービスを作りたい
この場合はブラウザに表示する画面を用意したり、表示された画面を動的に処理するフロントエンドと、サーバ側でデータベース等を読み書きして表示に必要な情報を処理するバックエンドに分かれます。
フロントエンド(ビュー処理)側
プレゼンテーションロジックともいいますが、主に現在では言語の学習とHTML5の学習が必要ですので同時に進めるのがよいと思います。
主に表示する画面を用意する際にはPHPが使われることが多いと思います。またブラウザに表示された画面を動的に処理するときはjavascriptを用います。そのjavascriptの記述自身をPHP側で画面生成時に動的に出力したりすることもあります。
またビューはsmartyやbladeなどテンプレートエンジンを使用する場合も多いですが簡単な制御構造しかない(使わない)ですので簡単に習得できると思います。
PHP以外で使われる言語としてはPythonやRuby、Perl、ASP等がありますがまずはPHPを学習するのがよいと思います。その他は必要に応じて学習していきましょう。
いずれにしても言語+HTML5(html、javascript、css)の知識が必要となりますし、言語の学習よりHTML5の学習に必要な時間の方が長いと思います。
フロントエンド側の主な言語をまとめると以下のようになります。
おすすめ度 | 言語(言語以外の必要な知識含む) | 主に使う場面 |
学習必須 | HTML5(html、javascript、css) | 画面表示 |
高 | PHP | HTML生成 |
必要になったら | テンプレートエンジン(学習は楽) | HTML生成 |
中 | Python、Ruby、Perl、他 | HTML生成 |
バックエンド側
主に必要なデータを取り出したり加工したり保存したりする部分でビジネスロジックと言ったりもします。こちらも現在は主に使用されることが多い言語はPHPになりますので、PHPメインで学習するのがおすすめです。
ビジネス向けのサイトではjavaを使っているところがまだ多くあります。またPHPほどではないですがPythonやRubyのフレームワークを使って処理を実装することも多いです。webでプロジェクト管理できるRedmine等はRubyで作られていたような記憶があります。
さすがに今の時代になってはPerlでの実装は稀ですがmixiはperlだったりします。
基本的にWEBサービスはMVCモデルのフレームワークを使うことが多く、V(ビュー)をテンプレートエンジンに置き換えている場合もあります。
Mはモデルの頭文字で主にデータの入出力や処理を担当する部分です。Vはビューの頭文字で主に画面生成の処理を受け持ちます。Cはコントローラーの頭文字でブラウザからのアクセスに対する処理の振り分けを主に担当します。
先に出てきたフロントエンド側は主にビューの処理にあたります。
フロントエンドとバックエンドが明確に分かれていない場合もありますので柔軟に対応することが求められます。(キッチリしているところはキッチリしています)
バックエンド側の主な言語をまとめると以下のようになります。
おすすめ度 | 言語 |
高 | PHP |
中 | Java、Python、Ruby、Perl、その他 |
ゲーム(or アプリ)を作りたい
この場合はクライアント側(ゲーム本体)とサーバ側(ネットを使用する場合)で分かれます。
クライアント側
ゲームアプリの場合、最近はUnityを使うことが多いですのでまずはC#を学習してみるのがよいと思います。同時にUnityについての学習もすると効率的です。
UnityとはAndroidやiOS、Windows等プラットフォームを超えて開発、リリースができる統合開発環境のゲームエンジンです。
次点でJavaやObjective-C、そしてC/C++となります。Javaはビジネス系のサーバ側でも使用することがあります。
Unityを使わない場合、AndroidならJava、iOSならObjective-C等となりますし、Unrealエンジンを使う場合やPCでネイティブで実装を行う場合はC/C++となります。(一般的な場合でありもちろん例外はあります)
UnrealエンジンはUnityと同じように統合開発環境ですがUnityよりもハイエンド向けとなります。
クライアント側の主な言語をまとめると以下のようになります。
おすすめ度 | 言語 | 主に使う場面 |
高 | C# | 主にUnity、WEBサービス系でも使う場合あり |
中 | Java | Androidアプリ、WEBサービス系でも使う場合あり |
低 | Objective-C | iOSやmacOSアプリ |
低 | C/C++ | 低水準~高水準の様々な処理に使われる |
中 | C/C++ | Unrealエンジンの処理の記述 |
表を見る限り様々な処理に使えるC/C++を学ぶのが良さそうに見えますが、なんでも出来る代わりに言語仕様とハードウェアの深い知識が必要とされるため、Unityのある現在はゲームを少ない学習と労力で作ろうという人にはお勧めできません。
車に例えるとUnityはオートマチック+半自動運転車で車の整備はディーラー任せ(車の知識必要なし)なのに対し、C/C++は完全マニュアル車+車の整備(車の知識も必要)も自分でするイメージです。C/C++は下手したらゼロから車を作る行為も含まれるかもしれません。
逆に深いハードウェアの知識や最先端のライブラリの技術に興味があり、例えばWindowsのゲームでDirectX等を駆使して次世代の凄いゲームを作ろうとしているのであればC/C++を学習するのもありです。
ただしUnrealエンジンを使ってC/C++を使う場合は例外です。この場合面倒な部分はUnrealエンジン側でカバーしてくれますので、必要な処理を必要な場所に必要なだけC/C++で記述するだけです。
サーバ側
サーバ側はクライアントにデータを送ったりデータを受け取ったりするAPI処理を行うことが多いです。また管理画面の機能や集計などの定期的に行うバッチ処理を行ったりもします。
一般的に現在ではゲームに使われるサーバ側の多くの処理はプレゼンテーション処理のビュー側がjsonでレスポンスを返す等のAPI処理であり、多く使われている言語はPHPなのでまずはPHPを学習するのがいいとおもいます。今から学習するならPHP5よりもPHP7をおすすめします。
次に多いのがPythonやRuby、Node.jsでのjavascript、ビジネス系の案件で多いJava、古き良き時代を象徴するPerl、場合によってはC#だったりします。こちらもPHPと同じくHTTP通信がメインになる事が多いです。
リアルタイム通信を前提としているMMORPGやFPSなどはTCPやUDPのソケット通信メインとなりサーバ側はC/C++のことが多いです。(Node.jsだったり必ずしもC/C++という訳ではない)
どの言語もサーバ環境の古さによって互換性の問題などで使えるバージョンに制限があったりしますので案件の古さによってまちまちです。様々な言語を扱えるようにしておくのはメリットですので、中盤からはPHPだけにこだわらず柔軟に様々な言語を学習するのがいいと思います。
サーバ側の主な言語をまとめると以下のようになります。
おすすめ度 | 言語 | 主に使う場面 |
高 | PHP | API処理、WEBサービス、バッチ等 |
中 | Python、Ruby、Java | API処理、WEBサービス、バッチ等 |
中 | Node.js(javascript) | websocketがらみの処理が多い |
低 | Perl | 昔は様々な場面で使われていた |
低 | C/C++ | リアルタイム性の高い通信処理 |
低 | その他(C#やASP等) | 会社や環境によって上記以外が使用されることも(Windowsサーバ等) |
サーバ側も処理の速さを突き詰めるとC/C++になってしまいますが、サーバは増やすことによって負荷を分散することができますので、簡単にサーバを増減できるクラウドサーバが普及した現在ではリアルタイム性を追求する以外の目的でC/C++が使われることは稀です。
組込機器のプログラミングがしたい
こちらは個人で学習することも稀だと思いますし、個人でする場合は趣味の範疇だと思いますので詳しくは書きません。
言語に関しては組込機器のCPUごとのアセンブリ言語かCになるかと思われますが最近では中身はAndroidというものも多いためその限りではないこともありそうです。
おすすめの言語という観点ではなく、その組込機器のCPUやOS、ハードウェア構成の勉強必須になるかと思います。
プログラミング言語の前に決める事
自分が何を作りたいのか
これが一番最初ではないかと思います。
作りたいものが決まったら作りたいものを作る解説本を読んだり、解説サイトを見たりしていると、自ずと自分が作りたいものを作るために学習しないといけない言語も見えてくるでしょう。
言語を先に決めて後から作れるものを作る、その言語で入れる会社を探すとかだと後々モチベーション的にもきつくなると思われます。
最後に、少しでもこの記事を読んでくれた方の参考になれば幸いです。
※【おすすめのプログラミングスクール14選】の記事も新しく追加しましたので、よろしければこちらの記事も合わせて参考にして下さい。