guntamania

令和元年版 初心者が学ぶべきプログラミング言語

[2019-05-01 Wed]

さて、令和になったことだし、プログラミング言語でも学んでみっか! でも何からはじめていいかわからん〜 >_< というそこのアナタ!

そんなアナタ向けに初心者が学ぶべきプログラミング言語をまとめてみる。

TL;DR

全部読み飛ばして、最後の 初心者が学ぶべき言語 を見よう。

はじめに

元MS社員のスポンスキー氏が言うように、 プログラミング言語は住む世界によって様相が全く変わってしまう。

Five Worlds | Joel on Software

そのため、各分野の問題を解決するために いろいろな言語が生み出され、今のような状況になっている。 なので、一旦分野別に使われている言語をみてから、 初心者が学ぶべき言語をまとめよう。

Web

Webエンジニアは、比較的求人も多い上に 教育のためのマテリアルも揃っているので、 目指すにはハードルが程よく低く、人気があるのではないかと思う。 具体的にどんな技術を身につければいいかというと、 以下のレポジトリを見ると全てわかってしまう(まるなげ)。

developer-roadmap | github

あえて詳細に書くなら以下のような具合になるだろうか。

フロントエンド

ざっくりいうと、Webブラウザの見栄えを整える技術分野だ。 言語としては、以下のふたつだ。

しかし、近年、フロントエンドも高度に複雑化しており、 学習する内容は加速度的に増えつつある。 このようなジョークも笑えなくなってくる。

バックエンド

Webのサーバ側を支える技術分野だ。 バックエンドは実に様々な言語で構成される。 単純にWebサーバで動作するWebアプリという意味では、

などが使われる。 モダンな現場ではAWSの LambdaFirebase Functions が使われているので、

あたりの言語を習得していくことになるだろう。

モバイル

モバイルは現状iOSとAndroidが大きなシェアを持っている。 基本的にこれらを開発することになるはずだ。

iOS

iOS、つまり iPhone/iPad のアプリを作るためには、

の習得が必要である。

Swift は2014年に発表されたプログラミング言語で、モダンな作りをしている。 一方、 Objective-C は珍妙な言語であり、 今はあまり学ぶメリットはない。 ただ、古(いにしえ)のプロジェクトを担当する場合には 必要になってくるだろう。

Android

Androidアプリを作るには、以下のような言語が必要である。

Kotlin はモダンなJVM言語である。 モダンな現場だと Kotlin が採用されていることが多い。 一方 Java も現役で使われる言語だ。 また学習しておくと、他のWebやデスクトップのプロジェクトでも 知識が使い回せるため、一旦勉強してもいいかもしれない。 ある程度のキャリアを積むと、誰もが一度は通るプログラミング 言語である。

クロスプラットフォーム

以上に書いたのはネイティブアプリを実装するやりかただ。 そのため、各OS向けに対応したい場合、お互いに移植しなければならない。 両プラットフォームに対応したアプリを一度に作りたい場合は 以下のようなフレームワークを使用すれば可能だ。

これらはネイティブアプリと変わらないUXを提供すると 謳っている。 でもやっぱり実際にはどうしてもこのフレームワーク臭さが目立ったり、 各OS向けになにか対応が必要だったりする。 結局、本格的に市場に耐えるアプリを作るためには、 それぞれのプラットフォームで作るのが望ましい。

デスクトップアプリ

あまりデスクトップアプリが注目されなくなってきた。 以前は窓の杜やらVectorでフリーソフトを拾ってきたのにな..

Mac

macOSでアプリを作るのに必要なものや手順は、iOSとあまり変わらない。 近々いろいろ統一されるようなので、さらに差異はなくなっていくだろう。 したがって言語は以下の2つが必要になってくる。

Windows

Windowsアプリを作る方法は多岐にわたる。 サードパーティからもいろいろ開発環境が提供されているからだ。 あまりに多いので ここ を参照しました。 王道としては、まずはVisualStudioを手に入れるところからだろう。

入門しやすいのは WinsowsForms だ。 GUIでポチポチしながらプログラミングできる。 ある程度なれた人なら WPF あたりを選択するといいかもしれない。 言語は F# なんかも対応してた気がする。 これらの選択肢は入門しやすいわりに、自分が何をしているのか見失いやすい。 それがVisualStudioらしさ。

他にも手段はあって、 以下のフレームワーク・言語でWindowsアプリを作ることも可能だ。

HTA はJScript(JavaScriptに酷似したもの)とHTMLの組み合わせなので、 Webを少しかじっていると入門が楽。 ただ、 JScript は昔IEに入ってたJavaScriptの実行環境とほぼ同じで、 モダンな構文はほとんど動かない。あとググりにくい。

HSP は僕が小学生のころにいじっていたもの。 とにかく環境構築が楽。 小学生でも学習できる反面、 大人が勉強しようとするとものたりない。

クロスプラットフォーム

モバイルアプリと異なり、ことGUIアプリにおいて、 クロスプラットフォームで開発されるケースは一般的になってきている。

Electron は最近人気のアプリでよくみかける。 AtomやSkypeなんかも Electoron らしい。

Java製のアプリといえば、Eclipseなんかがそうだったとおもう。 ただ、GUIフレームワークの選択がなかなか渋かったと思うんだけど (なかなか良いUIを提供してくれるフレームワークがない)、 最近は JavaFX というのが標準であるらしく、 一応解決をみることができるようだ。 Java のメリットはいろいろな環境で動くこと。 マイナーなOSにも対応している。

ゲーム

ゲームを作る場合は、何かしらのミドルウェアを頼りにすることになるだろう。

このあたりが定番だ。 ただ、そこまでのハイエンドゲームでない場合は、 自前で各プラットフォームにあった言語で作ることになる。

機械学習

最近は 機械学習 のキーワードからプログラミングに興味をもつ人が 多いと思う。 今から機械学習を始めるのなら、言語は以下の2択だろう。

理由は、単純に資料やライブラリの数が十分にあるから。 実際にはわりとどの言語でも開発できたりする。

初心者が学ぶべき言語

こうしてまとめると、 とりあえず学んどいて損はない言語は以下のような感じか。

C言語

上に挙げた言語一覧では一切登場しなかった言語。 にもかかわらず、ここに挙げざるを得なかったのは、 やはりその確固たる地位によるものだ。

C言語はプログラミング言語の中でもかなり機械語に近い分類だ。 そのため、コーディングの際には常に危険が生じ、 また可読性・メンテナンス性にもすぐれないため、 現在、特にアプリケーションプログラミングにおいては、あまり用いられない。

とはいえ、この言語はそのプリミティブさゆえにコンピュータの動作を 知っておかないとマトモにコーディングできない。 なので、C言語を学習するということは、 コンピュータ全体を学習するということになる。 腰を据えて学習する場合、一番良い選択肢になるだろう。

JavaScript

なにかと登場回数が多い言語。 最近はAltJSという改良言語を使うことも多い。 特に TypeScript は人気なので、頭に入れておいてもいいかもしれない。

ただし、深掘りすると結構ハマる言語である。 ユルい見た目をしているが、 プロトタイプベース という一風変わったパラダイムを採用しているし、 function 宣言が並ぶと、 Lisp を彷彿とさせる見た目になってくる。 そのせいか、熟練プログラマの書いたコードを初心者プログラマは 1行たりとも読めないという事態が往々にして発生する。

なので、軽々に初学者向けにおすすめできない言語であるものの、 ブラウザさえあれば開発が始められるため、 ついついここから始めてしまう言語である。

Java

オブジェクト指向言語を学びたい場合はベストな選択肢だと思う。 特にいろいろなプラットフォームに対応するので、 これさえ学んでおけば、モバイル、組込み、Web、デスクトップ 全て対応できるプログラマーになれる。 しかし、最初の障壁が結構難しい。 HelloWorldを出すのも一苦労だ。

そういう意味では手をだしづらいかもしれない。

Python

とにかく初学者に優しい言語。 GUIアプリでは登場しないヤツ。

GUIアプリは何かと煩雑になることが多いので、 Pythonで作るアプリは単純になりがちってだけかもしれない。 初学者が書いても熟練が書いても、あまり品質に差異のないコードになるよう 言語が予め設計されている。

GO

Google謹製。 メリットはそれ。

Pythonと同じく、初心者にも優しい言語設計となっている。 Googleが提供するライブラリも多く、 機械学習を組む場合には重宝する。

まとめ

なんか高レイヤーに偏ってしまった感がある。 ゲームのところでOpenGLにも言及すべきが迷ったが、やめておいた。 その他にも低レイヤーの話はあんまりしていないな。

あとはネットワーク関連か。 DevOpsとかだと、シェルとかymlとか必要になるけど、 それってもはやプログラミング言語なのか..?

とはいえ、初心者向けということであれば概ね網羅できてるんでないかと思う。 いきなりプログラミング教室で Rails 学ぶのもいいんだけど、 一旦俯瞰してから入門するのもいいのではないかと思うのだ。