現役エンジニアおすすめのプログラミング言語と どんな言語でも必要な基礎知識 2019


これからプログラミングを学習される方に向けて、現役エンジニアの筆者が実開発経験を元に、幾つかの言語についてご紹介します。
筆者は大学卒業後15年ほどシステムエンジニアリングの会社に勤めてきました。C言語の学習に始まり、最近では需要の高いWeb系や、機械学習などの得意な言語にも取り組んでいます。
どんな言語でも共通している部分はあります。
本サイトではプログラミングにおける共通知識から、各言語の具体的な使用用途について触れていきたいと思います。

プログラミングの共通知識

まずはプログラムに共通する用語・知識について説明します。
これらの概念を理解しておけば、後は各言語の記述方法、ルールを知れば独学でも学ぶことができます。
流し読みでもよいので是非目を通しておくことをおすすめします。
変数
色々な数値や文字を入れることができる箱、入れ物の事です。
例えば電卓プログラムを作る場合、ユーザがどんな数字や、符号を押すかはプログラムを書いた時点ではわかりません。
その場合、1,2というユーザが選んだ数字、’+’,’-‘といった符号を入れる箱(変数)を用意しておき、そこに実際に選ばれたものが入り計算に使われます。
用意した変数という箱は、その時に使う値や文字などに変化します。
全てを固定の値とするような、例えば 1+1を計算するプログラム、であれば変数はいりませんが、
どのような値が使われるかわからない場合には必要な仕組みです。
プログラムの基本と言えるでしょう。
型
先に説明した数字や文字、は種類が異なります。これらは型が違うと言います。
言語によっては、この変数には数値だけを入れる、この変数には文字だけを入れる、と
箱の形を決めなければならないものがあります。(主にCやC++がそうです。)
これは、コンピュータにとっては、箱の形が決まっている方が
計算が速くできる場合があるからです。
CやC++などはこれら型を意識してプログラムを作る必要がありますが、
その分処理を高速に行えるという特徴があります。
学ぶ言語によりますが、用語としては知っておいて損はないと思います。
構造
プログラムの作り、形の事です。
プログラミング言語は基本的に上から下に処理が実行されます。
ただし、途中で別の処理にジャンプしたり、戻ったり、同じことを繰り返したい場合があります。
どんなプログラムでも、そのような構造を作ることができます。
各言語の書き方の違いを理解すれば良いだけです。
関数
非常に重要な概念です。
数学で関数というものがありますが、プログラミング言語においては、
ある処理の固まり、と覚えた方がとっつき易いのではないかと思います。
例えば、電卓プログラムであれば、ユーザがどれだけの計算をするかはわかりません。
足し算を100回して、掛け算を200回するかもしれません。
何度実行されても良いように、予め、足し算をする処理の固まり、掛け算をする処理の固まり、
をプログラムしておきます。
そして、ユーザが足し算の結果を求めてくる(数字を押した後に’=’を押した場合)度に、
足し算処理の固まり(足し算関数と呼ぶことにします)を呼び出します。
足し算関数は呼び出されると、数値を足した結果をプログラムの呼び出し元に返します。
そして呼び出し元は結果をユーザに表示します。
このように決まった処理を関数にしておくことで、それを呼び出すだけで
実行できてしまうので、プログラムの記述量(コード量)を減らすことができます。
綺麗なプログラムというのは、この関数が適切に用意されており、
処理がダラダラと書かれておらず読みやすい状態です。
スキルを上げていく為には、良い関数を作ることを意識することが大切でしょう。
おすすめのプログラミング言語と特徴
それでは筆者が実際に開発経験のあるオススメの言語と特徴を紹介します。
それぞれの言語にかかるコストや難易度を”学習コスト”として以下のようにランク付けしていますので、参考にして下さい。
・非常に簡単
・簡単
・普通
・難しい
・非常に難しい
C言語 ~高速で汎用的な組込み向け言語~

学習コスト:難しい
C言語は主にロボットや家電、自動車、産業機器など、パソコンではない機械で動くプログラムに使われています。
これらは組み込み機器、組込み系と呼ばれるものです。
パソコンではない機器で動くプログラムを作るには必須と言えるでしょう。
C言語を使えば、小規模から大規模まで多くのシステムを作ることができます。
例えば、簡単な電卓のようなものや、自動販売機。テレビや冷蔵庫などの家電製品。自動車や飛行機、工場のロボット等です。
メリット
他の言語に比べて非常に高速に動くことができます。
組込み機器は、パソコンと比較してCPUの性能やメモリに限りがあります。
必要な用途に限定している為、パソコン内のCPUやメモリのような高価なものは不要だからです。
C言語は、CPUやメモリに対しても非常に細かい制御を記述することができ、
うまく書けばかなりの高速化が期待できます。
また、C言語を学び理解することができれば、他のどんな言語も怖くなくなります。
先に説明した型や変数、構造、関数といった概念が理解できていなければ書けないからです。
一人前になるには1年ぐらいはかかるかもしれませんが、
マスターすれば他のどんな言語でもすぐに理解できるでしょう。
その点ではかなりおすすめです。
デメリット
記述ルールが厳しく、細かい記述ができる分、理解に時間がかかります。
また、記述が長くなりがちです。
学習コストの高さが難点でしょう。
C++言語 ~Cの拡張、オブジェクト指向言語~

学習コスト:非常に難しい
C言語の上位言語です。こちらも組込み機器によく使用されています。
C++を使うことでCで述べたような家電や自動車などの組込み系の機器を作ることができます。
また、画像処理や計算系のライブラリも充実していますので、カメラを使った物体検知システム等に使われる事もあります。
パソコン上のゲームやアプリケーションに使われる事もありますが。
それはどちらかというとC# という言語の方が向いているかもしれません。
メリット
Cより格段に機能が拡張されています。
Cでは自作する必要があった処理も、C++では用意されている機能を使って実行できます。
C言語を知っている人は、追加の部分を勉強すればよいので、理解が早いでしょう。
C++ではオブジェクト指向という概念を取り入れています。
これが非常に重要な考えなのですが、細かく説明するとここでは足りませんので割愛しますが、
これによりCより更にスマートで美しい記述が可能です。
そしてこのオブジェクト指向は他の様々な言語でも取り入れられています。
学習するにはC++もしくはjavaがうってつけでしょう。
デメリット
Cと同じですが学習コストは非常に高いです。
Cより難易度が高いと思います。
Cを良く知っている人でも、そこからまた半年~1年ぐらいかかるかもしれません。
ただ、それはオブジェクト指向を使った綺麗なプログラムを書く場合であり、
とりあえずやりたい事をするプログラムを作るにはそれ程にはかからないでしょう。
java ~どんな環境でも動くC++的な言語~

学習コスト:難しい
javaの特徴は、どんなプラットフォーム上でも動く、ということです。
CやC++は、OSがWindows、Linuxの場合や、CPUの種類が違う場合などに
動作させる為に記述を変える必要がありますが、javaは一度作れば変更する必要がありません。
それゆえ、非常に多くの機器やシステムで使われています。
javaはWeb系の機能もあることからWebサービスやWebサイトを作ることもできますし、
スマートフォンアプリや、ゲーム、C/C++と同じように組込み機器にも使われています。
javaはC++とよく似ています。
筆者はC++の経験が4,5年あったので、javaはびっくりするぐらいすぐに理解できました。
もちろんC++を知らなくてもjavaを理解する事は可能です。
メリット
前述のように以下のメリットがあります。
・OSやデバイスのプラットフォームームに依存しないので、流用率が抜群です。
・オブジェクト指向を知っていると理解が非常に速いです。
・C++に似ていますが、C++より環境構築が容易です。
・C++を理解している人には学習コストは低いです。
デメリット
C++同様、オブジェクト指向を理解するのが難しい点でしょう。
また少しの処理を書くにもjava特有のルールを守るために多くの記述が必要となり、
小規模なプログラムには向いていません。
python ~豊富な機能と簡単記述、流行りのスクリプト言語~

学習コスト:普通
他のサイトでも紹介されているとおり、最も人気のある言語の一つです。
その理由は、やれる事が非常に多く、また簡単に書ける、事です。
pythonには非常に多くのライブラリ(予め用意された機能)があります。
例えば、機械学習、画像処理、数学演算、データの統計解析等、
新しい技術の研究には欠かせない要素が含まれています。
こういった分野に興味があれば間違いなく学ぶべき言語でしょう。
また、記述ルールがシンプルで、CやC++などに比べ大幅にコード量が少ないです。
メリット
・豊富なライブラリがあります。
・機械学習や数学演算等、難しい計算の処理が容易です。
・時代の需要にマッチしています。
デメリット
あまり無いのですが、強いて言うなら、簡単に書けすぎる為に、
C/C++などのルールが厳しい言語になれた人は最初は戸惑うかもしれません。
CやC++に染まっていた筆者にとっては、こんな簡単にできてしまうのか!
何でこの1行でこんなに多くの事ができているのか!?
と逆に混乱したぐらいです。
html ~webサイトを作る簡単マークアップ言語~

学習コスト:非常に簡単
htmlはwebサイトを作る際に利用されています。
webサイトにおける見出しや、リンクを張ったりする機能が備わっています。
他の言語とは少し違い、プログラミングの知識はほとんど入りません。
メリット
・少ない知識で書くことができます。
・javascriptと組み合わせて動的な動きを追加できます。
・プログラミング言語と言うより記述ルールなので、覚えることは少ないです。
デメリット
とっかかり易く、難しくないので明確なデメリットはありませんが、
リッチなサイトを作るには、javascriptなど、他の言語との組合せが必要になるため、実際はhtmlだけで事足りるという事は少ないでしょう。
javascript ~webサイトに動きを付ける~

学習コスト:普通
htmlと組み合わせてwebサイトを作る際に使われています。
サイト上での動的な動作はjavascriptで記述されています。
ユーザの入力をチェックしたり、一定時間で表示する画像を切り替えたりと、
欠かすことのできない技術です。
先のhtmlにも言えますが、web系の言語は参考にできる情報が非常に多く、
独学で学ぶことも容易です。
プログラミングした結果がサイトの見た目に大きく影響を与える為、
書くことが楽しい言語でもあります。
なおjavascriptとはjava関係ありません。
オブジェクト指向など難しい概念を覚える必要はありません。
メリット
・htmlやcssと組合せWebサイトに動きをつけることができます。
・豊富なライブラリがあり、それらを流用するだけでWebサイト上でやりたい事はだいたい容易にできます。
・見た目に影響を与えるので作っていて楽しいです。
デメリット
html同様明確なデメリットは無いように思えます。
やりたい事はだいたい流用できるものを参考にすれば簡単にできてしまいます。
逆に他のサイトと差別化を図るには、色々な知識を駆使する必要が出てくるかもしれません。
php ~Webサービス向けスクリプト言語~

学習コスト:簡単
phpはwebサービス等のサーバ側の処理で使われます。
例えば会員制のサービスにおいて、ユーザがログイン名やパスワードを入力した際に、
その情報が会員データベースに存在するかをチェックしたりする機能です。
またユーザ(ブラウザ)からのリクエストに対しての返答処理を容易に書くことができます。
webサイトにおいて、ユーザからは見えない裏側の処理の多くを実行していますので、
webサービスを作る際には必要な言語です。
メリット
htmlやjavascriptほど簡単ではありませんが、pythonと同じかそれより簡単なぐらいで、
言語としては取り組みやすいでしょう。
web系なのでやはり参考にできるものが沢山あり、独学でも十分学習可能です。
デメリット
pythonと同じようなもので、こちらも適当に書いても動いてしまうので、
他の人にも理解されやすいように分かり易く書くには、
プログラマーの親切心が必要かもしれません。デメリットという程でもないですね。
他のおすすめ言語
もう一点だけ筆者の最新のおすすめ言語を紹介します。
MATLAB ~数学演算から機械学習等、多分野で活躍~

学習コスト:難しい
MATLABは行列などの数値計算や画像処理、機械学習など、本当に幅広い計算処理を簡単に書けるプログラミング言語であり、非常に多くの分野で利用されています。
難易度はやや高いですが、研究開発をするようなエンジニアの方には非常におすすめの言語です。
以下にて詳しく紹介してますので是非参考にして下さい。
まとめ

本サイトでは筆者の経験を元におすすめ言語を紹介していきました。
プログラミング言語には冒頭で述べたような共通知識があります。
後はそれぞれ異なる各言語のルールに従うまでです。
CやC++などは学習コストは高いですが、pythonは割と簡単に高機能を実現できますし、
html、javascriptなどweb系も参考にできる情報が非常に沢山あり取りかかり易いでしょう。
まずは何をやりたいかを考え、それに似合うものを選んでいけばよいと思います。