これからプログラミングを学ぶ人が選ぶべき言語

## はじめに

本日は、Twitter で、[高収入エンジニアは「ラスト」に注目、ファインディ調査](https://www.nikkei.com/article/DGXZQOUC312180R30C21A7000000/) の記事をよく見かける。主にプログラミング言語がカタカナ表記である点が取り上げられている。記事の元となったプレスリリース（[年収800万以上のエンジニアの4分の1が注目する言語・技術とは？](https://prtimes.jp/main/html/rd/p/000000022.000045379.html)）ではそうではないので、カタカナ表記については、記事を書いた記者の問題である。日本のIT技術者は、109万人と言われており、人口の0.8％と、中世ヨーロッパなら狩られるレベルの特異能者であり、その言葉など一般人が知る由もない。

さて、この記事では、年収の高い人は、現在パイソン（笑）を使っており、将来的にはラスト（笑）に関心を持っているという風にも読める。しかし、記事にある通り、収入を支えるのは、

> 付加価値の高いシステムに携わる

であり、使用している言語ではない。Python は、AI などが得意なので、そうだっていうことで、Python を使って Web 開発をしても、PHP で Web 開発している人と比べて高いなんてことは、（PHPの場合はあるかもしれないが）基本的にはない。

そして、年収800万以上のエンジニアの4分の1とは、この調査では、母数が1044人だそうなので、日本の年収割合がそのままここにも適用できるとすれば、800万以上 9.8％は、およそ100人。その4分の1は25人。25人が Rust に興味があるという話なので、これを全体の傾向と考えるかどうかはあなた次第。


## エンジニアを目指さない人は Python

さて、プログラミングを始めようとする人は、何を目的に始めようとするのだろうか？この記事では 0.8％の職業魔法使いに入門したい人をターゲットとしたいが、そのつもりはなくて、日々の作業を効率化したいとか、そういう人は、Python で良いと思われる。理由は、

- 開発環境整備が簡単
- 簡単
- エコシステム

ググれば何でも出てくるのは、非常に魅力的だ。注意点としては、作りたいものは何か？から始めること。作りたいもの、やりたいことがないと、基礎を学んでも、その後続かない。

## エンジニアになりたい人は…

職業エンジニアになりたい人は、どのようにキャリアを積んで行くのかを考えて選ぶべきである。

職業エンジニアにおいては、そのポジショニングが重要である。希少性の高いスキルは高収入だが案件の絶対数は少ないため、基本的に初心者はお呼びでない。希少性の低いスキルは、基本の収入はそれほど高くないが、案件は多く就職しやすい。そして希少性は、いずれ希少ではなくなる。

ということを踏まえた上で、どうなりたいか？で、言語を選ぶべきである。

### PHP

```helloWorld.php
<?php
echo "hello world";
```

ねーよ、と言う声が一斉に聞こえてくるが、PHP というのは、世界で最も使われている言語であり、当面それは変わらない。PHP 案件は安定して供給されるため、仕事はたくさんある。人数が多いので（PHPだけでは）給料は多くは望めないかも知れないが、手っ取り早くエンジニアとしての経験を積もうと考えた時に、取っ掛かりとしては、2021年現在でも妥当と言える。

簡単だし、エコシステムも割とある。

何より、Web系案件では EC サイト構築は非常に案件が多い。ECサイトをスクラッチで作る案件はほぼ存在せず、EC-Cube や Magento といったフレームワークを使うことになる。それらは PHP で書かれている。他に CMS 系では、WordPress も PHP だ。例えば、将来ベトナムで働こうと思った時に、Magento の経験などは、価値が高い。Magento はライセンスが高いので、案件自体が高単価であるし。そういうのを狙わないのであれば、入門としては良いが、PHPだけを長く続けるのは戦略としてはいまいちである。

なお、最初から EC-Cube や Magento に取り組むのは、絶対にやめた方が良い。Laravel フレームワークで何か作ってみるのが良いと思われる。

### Python

```helloWorld.py
print("hello world")
```

非エンジニア向けの人と理由は同じである。Python の学習は、言語そのものよりも、ライブラリの使い方が中心となる（気がする）。Django で Web サイトが作れたからといって、高収入にはならないし、AIの開発ができるようには全くならない。Python で高収入な業界を絞り、そこで使われるライブラリの学習をすべきだろう。Django で Web サイト作ってる会社に、AI の案件はない。一箇所にとどまり続けるべきではないが、PHP と同様、経験をスタートさせるには割と門戸は広い。

Python がおすすめなもう一つの理由は、その哲学。

> Pythonには、読みやすく、それでいて効率もよいコードをなるべく簡単に書けるようにするという思想が浸透しており、Pythonコミュニティでも単純で簡潔なコードをよしとする傾向が強い - [wikipedia](https://ja.wikipedia.org/wiki/Python)

この思想をエンジニア初期に身につけることは、とても重要である。

Rust や C、または Julia などに注目が集まるのは、Python が遅いからというのが少なからずあるが、Python も頑張っているようなので、やっぱ Python で良いじゃんってなる日が来るかも知れない。

### JavaScript/TypeScript

```helloWorld.js
console.log("hello world");
```


Node.js という革命があり、フロントエンドもバックエンドも全部 JavaScript でできるようになった。Web 開発において、フロントエンドで JavaScript を一切使わないということはあり得ないため、Web 系に進むのであれば、食いっぱぐれの心配が少ない。

Pythonと同様、そのエコシステムは素晴らしい。

非同期処理などが、初心者には理解し難いかも知れないが、素の Vanilla JavaScript から始めれば良い。Browser があれば動いてしまうというのも良い。

一方で、JavaScript は変化が激しい。スキルがすぐに古くなる。これは、デメリットでもありメリットでもある。変化が激しいため、ポジションを取りやすいのである。

TypeScript は、JavaScript に静的型付けとクラスベースオブジェクト指向を加えた上位互換言語である。なんのこっちゃという感じかも知れないが、読みやすいのと、エラー検知しやすいのが、初学者にはありがたい。それ自身も TypeScript で書かれているという VS Code や、様々な IDE と併せて、手取り足取りやってくれるので、開発体験としても素晴らしい。

他方、ちょっと出来すぎ感もある。React.js や Next.js 等を使った開発は、プログラミングというよりは、作業感がある。はめ込み作業みたいな中で、オブジェクト指向やデザインパターンなどは、意識してやって行かないと身につかないかも知れない。PHP でも Python でも同じだが、より必要ない感があるような気がする。出来上がったアプリケーションはオブジェクト指向で出来ているが、実装時にあまり意識しないような。

オブジェクト指向は、言語によらないスキルであり、どの言語でもしっかり学んで行くべきである。（と考えるのは、もはや老害なのかも知れない。）

いずれにしても、ものがどんどん出来上がっていく楽しさみたいなものは一番味わいやすいかも知れない。

### その他

```helloWorld.java
class HelloWorld {
  public static void main(String[] args) {
    System.out.println("hello world");
  }
}
```

スマホアプリなどを作るなら、Java や C 系も選択肢としてはある。Java は PHP と同様、（スマホアプリだけでなく）案件数も多い。パフォーマンスを追求した結果 C 系に着地することもある。C は Python との組み合わせでやっても良いが、最初の言語としては、かなり気合いがいる。大学等での授業では、Python が標準となって来ていると聞くが、Java なところもある。授業であるなら、素直に Java で良いんじゃない？と思わなくもない。

## 結論: Python

職業エンジニア志望には、JavaScript/TypeScript をおすすめしたいところだが、なんやかんや Python が良いんじゃないの？と思い直した。ただし、どのポジションを取りに行くかの戦略が重要であり、ペチパーと蔑まれようが、PHPも間違いではない。戦略がないと、給料は上がらず QoL が常に低い生活まっしぐらなので、きちんと意識しないといけない。

## 余談

なお、私が最初に触れた言語は Basic。36年前だ。ちゃんと学んだ最初の言語は FORTRAN。このあたりから老害臭がプンプンするが、FORTRAN は今となっては超レアスキルだ笑

現在は Web 系の開発をメインとしているが、その基礎は PHP で学んだ。振り返れば PHP で良かったと思う。現在の案件は PHP 含め、クライアントの要望に合わせて何言語でも対応している。

ポジショニング的には、技術面以外が大きく、キャリアも一般的ではなくて、参考にはならないと思うので省略。

おしまい。