見出し画像

2021年にプログラム言語を勉強するとしたら、何がいいのか考えてみた - 第1話:プログラミング言語網羅編

Goldrush Computingの仕事をしていると、インターンや、若い人にプログラミングを勉強したい時に何から始めたらいいか聞かれたり、助言したりする機会があります。

私はエンジニアとして他のエンジニアと差別化できる部分はあまりないのですが、
Java, Assembly, C、C#、Objective-C、Swift、Kotlin、Python、Javascript、という9言語のプログラミングができること

本1冊から独力でプログラミングを習得した
という2点のバックグラウンドから、この問いに関してはアドバイスできることが多く、アドバイスした若者から「この内容を知りたい人はもっといると思いますよ」といういいアドバイスを逆にもらったので、Noteにまとめてみることにしました。

これ以降の内容は、

あくまで私個人の感想

ではあるものの、今、2021年にプログラミングを勉強し始める場合、どういう道があると私が思っているのか、4話に渡って書いてみたいと思います。

(私が何者であるかは、こちら↓↓↓にざっくりと書いてあります)

まず第1話

どの言語で何が作れるのか?


をテーマに、私が知っている限りの言語とその使い道を網羅していきます!

Swift

Apple社が開発した言語です。”スウィフト”と読みます。
iPhoneアプリ、iPadアプリ、Macアプリ、Apple Watchアプリ、Apple TVアプリを作ることができます。
Apple製品以外で動作するアプリなどは作ることはできませんが、Appleの美しい製品群で動くアプリを作ることができる魅力的な言語です。

Appleが開発に必要なツールをすべて無償提供しています。(ただし作ったアプリをAppStoreで公開するには、有料のアップルディベロッパープログラムに入る必要があります。)
Appleが言語や開発ツールをすべて管理していて、”他の人がSwift言語や開発ツールの亜種を作ることがない”ため、一度覚えた言語、開発ツールを長年使って開発を続けられるのが魅力だと私は思っています。
文法もモダンで、書きやすく、個人的には好きな言語です。

開発ツールってなに?
プログラムを書く時、パソコンに入っているメモ帳やWordにプログラムを書くわけではなく、専用のエディタと呼ばれるソフトウェアを使ってプログラムを書きます。エディタには、プログラムを書きやすくしてくれる機能がいろいろと搭載されています。またエディタの他に書いた後のプログラムを実行して、結果を見せてくれたり、間違っていることを指摘してくれるコンパイラというプログラムをエディタと組み合わせて使います。その他にもプログラムを作る上で必要な機能が全部詰まったものを開発ツール、あるいはIDE (Integrated Development Environment)と呼びます。
Swiftでアプリを開発するときは、Apple社が提供しているXCode(エックスコード)という開発ツールを使います。


Kotlin

”コトリン”と読みます。元々はサーバーのプログラムを開発するために造られましたが、後にGoogleによって、Androidアプリを作る言語として採用されました。

Androidスマートフォンで動くアプリを作ることができます。

作ったアプリはGoogle Playで公開することができます。

こちらもSwiftと同じ用にGoogle社が開発に必要なツールを無償で提供しています。
(アプリをGoogle Playで公開するには、有料のディベロッパープログラムに入る必要があります。)
こちらもGoogleがしっかり管理していて、他者が似たような物を作れないようになっているので、一度覚えた言語と開発ツールのスキルを長年使い続けられる魅力があります。

Kotlinの文法は非常にモダンで、現代のプログラミング言語のいい部分がバランス良く入っています。私が最も好きな言語です。

Java

"ジャバ"といいます。2000年頃に人気を博した言語で、Kotlinができる前はAndroidアプリを作るために使われていました。現在もJavaを使ってAndroidアプリを作ることができます。
Javaはサーバー側のプログラムでも採用されていることが多く、Javaを覚えるとサーバープログラムを書くこともできます。

デメリットは、コードの行数が長くなりがちなので、プログラムを後から見返した時に読みにくいことです。

- Androidアプリが作れるが、近年はKotlinが主流になっている

- 大企業や銀行の機関システムで使われている

- ベンチャーなどのWebサービスでは使われなくなっている

現在のJavaの立ち位置は、大企業志向の言語かもしれません。

Objective-C

”オブジェクティブシー”と読みます。Swift言語が開発される前に、iPhoneアプリを作るために使われていた言語です。現在はSwfitが完全に主流となっているため、この言語を勉強する理由はほとんどなくなっていると思います。

C言語

”シーゲンゴ”と読みます。もっとも伝統のある言語です。

IOTデバイスやオペレーティングシステムなどハードウェアと直結して動作するプログラムはC言語で書かれることが多いです。

私はソニー・エリクソンで携帯電話を開発していたときに携帯電話のOS(オペレーティングシステム)の一部のハードウェアとやり取りをするプログラムをC言語で書いていました。

CPUやメモリ、レジスタなどのコンピューターの根幹を理解するのに一番よい言語です。

現在若い人がC言語を使う機会が多いのはIOTデバイスの開発だと思います。IOTデバイスの開発には、ARMやArduinoなどのマイクロチップが使われていて、これらのチップで動作をするプログラムを書くのにC言語を使います。

ArduinoはCPUの知識がなくても簡単にC言語でプログラムを書くことができるので初学者にはおすすめの環境です。

C#

"シーシャープ”と読みます。マイクロソフト社がJavaに対抗して作った言語です。Windows PCで動作するソフトを作ったり、UnityでゲームやVRアプリを作るために使います。

Unityを使いたい人は必ず必要になる言語です。

Python

”パイソン”と読みます。もともとはプログラミング教育のために造られた言語で、誰が書いても同じように見えるコードになることから非常に読みやすい言語です。

サーバーサイドのプログラムを作るのに使われます。

機械学習のプログラムを作るためにも使われます。

サーバーサイドのプログラムを作るためには他の言語の選択肢も豊富にありますが、機械学習のプログラムを作るためには2020年現在、必須の言語と言っていいでしょう。配列や行列データを表現したり計算したりするのに非常に便利な言語で、動作速度も早いことが機械学習で使われている理由です。

サーバーサイドってなに?
サーバーサイドのプログラムというのは、クラウド上のサーバーコンピューターの上で動作するプログラムのことです。バックエンド、と呼ばれることもあります。
例えばあなたが使っているGmailなどのWebサービスも、送信したメールは一度Google社のサーバーコンピューターに送られてそこから相手のメールボックスに入れられます。このような処理をしているのがサーバーサイドのプログラムです。Webサービスを作る上でもスマートフォンアプリと連動したサービスを作る上でもほとんどのケースで欠かせない存在です。
サーバーサイド=バックエンドが裏側の仕組みを作るためのプログラムに対して、表側、ユーザーのWebブラウザで動作するプログラムをフロントエンド(表側)と言います。

Javascript

フロントエンドとサーバーサイドのプログラムを作ることができます。(フロントエンドの説明はすぐ下のグレーのボックスを見てください。)

サーバーサイドのプログラムはnode.js(ノードジェイエス)というフレームワークを使って作ります。

フロントエンドは、Vue.js(ビュージェイエス)、React.js(リアクトジェイエス)、Angular(アンギュラー)などのフレームワークを使って作れます。

Javascriptのメリットは、学習がしやすい、試してみやすい、ことと、サーバー、フロントエンド両方で使えることです。

デメリットは、フレームワークや開発ツールのトレンドがものすごく速く変わって行くため、毎年新しいものを勉強していかないと、言語だけ知っていてもものが作れなくなってしまうことです。

フレームワークって?
ここで、一旦、フレームワークと言語って違うの?、という質問が出てくると思い、その違いをざっくりと説明してみたいと思います。
Javascriptや、Swiftなどは言語で、これは、プログラミングの世界でいう英語、フランス語のように文法が異なるプログラミング言語です。
例えば英語という言語の文法や基本的なボキャブラリーは熟知していたとして、医学の専門書を書こうとしたときには医学の専門用語のセットを知っていなければ医学書は書けません。同じように建築についての本を書きたかったら建築の専門用語のセットを知っている必要があります。
プログラミングの世界でも、Swift言語を知っていても、iPhoneアプリを作るために使う「用語セット」のようなものを熟知していないとアプリを作ることはできません。ロジックの書き方はしっているけど、じゃあ地図をだすにはどういう用語を使うんだ?ということがわかっていないと地図を画面に出すことはできないというわけです。
この「用語セット」のようなものがフレームワークになります。
Webアプリの世界には、この「用語セット」であるフレームワークの流派がたくさん存在し、どの流派の「用語セット」をつかってもWebアプリを作ることができるのですが、流派ごとにアプリを作る上で流派ごとに一長一短があったりします。
さきほどのReactやVue.jsというのはこの用語セットのようなものであるフレームワークの名前であり、どちらのフレームワークも言語はJavascript、ということになります。
(もともとは用語セットの役割がメインだったフレームワークですが、最近は、文法までもフレームワークが変えるようになっており、フレームワークを変えると言語の文法、書き方も変える必要があるケースが大きくなっています。)

フロントエンドってなに?
みなさんがよく使うWebサービスは、フロントエンドとサーバーサイド(バックエンドとも呼びます)からできています。
SafariやChromeなどのブラウザで動くプログラムをフロントエンド、クラウド上に置かれたサーバーコンピューターで動くプログラムをサーバーサイドあるいはバックエンドと呼びます。フロントエンドの直訳は”前側”、バックエンドの直訳は”裏側”、つまりユーザーに見える前側、表側のプログラムがフロントエンド、見えないクラウド上、サーバー上で動いているプログラムが裏側、という意味でこの名前がつけられています。
フロントエンドはHTML、CSSというマークアップ言語と、Javascriptを組み合わせて造られます。

HTML / CSS

HTML(エイチティーエムエル)、CSS(シーエスエス)はプログラミング言語ではありません。これらはWebページの”見た目”を記述する言語でマークアップ言語と呼ばれています。高度なロジックなどを書くことはできないため、プログラミング言語とは別の扱いですが、先述のフロントエンドのプログラムを作る上でのこの2つの知識は見た目を作る上で必須となりますので、セットで覚える必要があります。

その他の言語

これ以降紹介する3つの言語は私が使っていないので、細かな評価はできませんが、私の知っている範囲で”感想”を述べたいと思います。

Ruby

Ruby on Rails(ルビーオンレイルズと読みます)というフレームワークを使ってサーバーのプログラムを作ることができます。非常に人気の高い言語で、Webアプリ側も同時に作れるためWebサービスを高速で作ることができるという強みがあります。

PHP

ピーエイチピーと読みます。Laravel(ララベル) というフレームワークを使うと、Ruby On Railsと同じ強みがあり、Webサービスを高速で作ることができます。こちらも近年非常に人気があります。

Go

”ゴー”と読みます。近年、若いエンジニアの間で人気の言語です。サーバーサイドのプログラムを作ることができます。Goで作ったサーバーのプログラムはコンパイルという工程を経ているため、動作が速く、また色々なサーバーに移しやすいという”持ち運びやすさ”もGoの人気だと私は思っています。


以上、各言語の使いみち、特徴を個人的な見解ですが、網羅的にまとめてみました!

まとめ

もう一度、使いみちの観点からこれらの言語をまとめてみます。

iPhone/iPad/AppleWatch/Macアプリ  ⇒  Swift一択

Androidアプリ    ⇒  ほぼKotlin一択。Javaでも書ける

フロントエンド    ⇒   Javascript、Ruby (on Rails)、PHP (Laravel)

サーバーサイド    ⇒       Ruby (on Rails)、PHP (Laravel)、Python、Go

機械学習                    ⇒    Python

IOTデバイス              ⇒    C言語

Unityを使ったゲーム、VR     ⇒     C#

大企業の基幹システム           ⇒   Java


以上、2021年現在どういうプログラミング言語があるのかをまとめてみました。プログラミング言語は実はこれだけではなく、まだまだたくさんあります。
2021年現在、私が使っているもの、私の周りで使われているものを中心に取り上げてみました。

次回は、各プログラミング言語の似ている度をテーマにしてみたいと思います。1つ以上の言語を学ぶ際に、似ている言語は学習がしやすいため、長期的な学習の指針になればと思って、このような内容を予定しています。

御清覧ありがとうございました!

第2話はこちら↓↓↓






この記事が気に入ったらサポートをしてみませんか?