プログラミング言語を選ぶ前に見たかった統計

# 概要

これ知ってたら言語選定するのに便利そうだな。
もっと前に知ってたら、あの場面で使えたのにな。
と思った情報をまとめました。

かなり上のレイヤーの話として書いています。
型システムやパラダイム、実行方法などの
末端の詳細技術には触れません。
主に表面上の数字の話です。


# ターゲット層

「次回のプロジェクトは言語を変えてみようかな」とか
「１言語マスターしたぞ！次は何をしよう？」という人向けです。

「初めてプログラミングを勉強しよう」という人向けではありませんが、
もしかしたら参考になるかもしれません。

中には普段見ているサイトの紹介もあるかもしれません。
「このサイトをその視点で見ることもできるのか」
と思っていただけることをお祈りします。

「知ってることばかり」という方は、
生暖かい視線を送ってください。

# 言語間の影響関係図

プログラミング言語同士の影響を視覚化したものです。

Bさん「Aさん、今回のプロジェクトはAAAA言語で開発しようよ！」
Aさん「どんなやつ？」
Bさん「CとJavaに強く影響受けてるんだよね、Aさんならすぐ慣れると思うよ」
みたいな会話で使えると思います。

[Programming Language Influence Network | Exploring-Data](https://exploring-data.com/vis/programming-languages-influence-network/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/0663b9c3-d7fd-52b2-e251-b18782862c5c.png)
例えば、Javaの赤い丸をクリックするとハイライトすることが出来たりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/7d964c6f-ef5f-9866-7a5e-6b5f6be9e8c7.png)

また、「どの言語**から**影響を受けたか」だけでなく、「どの言語**へ**影響を与えたのか」というのが見れる点もいいですね。

# オクトバース

近年様々な宇宙が話題になっています。
例えば、[Spider-Verse](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%91%E3%82%A4%E3%83%80%E3%83%BC%E3%83%9E%E3%83%B3:_%E3%82%B9%E3%83%91%E3%82%A4%E3%83%80%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B9)や[MCU](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%83%99%E3%83%AB%E3%83%BB%E3%82%B7%E3%83%8D%E3%83%9E%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%A6%E3%83%8B%E3%83%90%E3%83%BC%E3%82%B9)、[ウィザーディングワールド](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%B3%95%E3%83%AF%E3%83%BC%E3%83%AB%E3%83%89)、[アローバース](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AD%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B9)などです。
これらを総称して[シェアードワールド](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%82%A2%E3%83%BC%E3%83%89%E3%83%BB%E3%83%AF%E3%83%BC%E3%83%AB%E3%83%89)と呼ぶらしいです。
その中でも、GitHubの周りに構築されたコミュニティを[Octoverse](https://octoverse.github.com/)（オクトバース）と称しています。

このオクトバースはWebサイト上で状態を確認することができます。
オクトバースの状態を検討材料にしてプログラミング言語を選定することが出来るみたいです。

例えば、[言語ごとの貢献数](https://octoverse.github.com/#top-languages)を確認したり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/b74767ff-7002-9f1a-14de-784b22618ff9.png)
成長率を確認したり、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/e9a1575e-b82c-c231-21c0-2d40c1890948.png)
パッケージの充実度を推測したり、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/31973c5e-19b0-0016-ef15-ec4d2096a786.png)
貢献者の増加率からチーム編成方法を考えたり、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/0687e98b-3940-fe03-8b67-b5eec4af51ee.png)
様々な角度からGithubのトレンドを見ることが可能です。
ただし、[GitHub Inc.](https://github.com/about)が見せたい情報だけが表示されている事実には注意したいところです。



また、言語のトレンドだけを見たい場合は[GitHut2.0](https://madnight.github.io/githut)がいいかもしれません。

# Stackoverflow Insight

最近よく、「最も給料がもらえるプログラミング言語はどれ？」とか
「プログラマーに最も嫌われた言語はどれ？」とか、
いろんな統計結果のニュースをよく目にします。

それらの１次情報は、だいたいが同じ場所なのです。
どこかというと、Stackoverflowの[年次開発者調査](https://insights.stackoverflow.com)です。
プログラミング関係の統計を見たいときは、とりあえずココです。

[技術の相関関係](https://insights.stackoverflow.com/survey/2020#correlated-technologies)が見れたりとか、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/8034b4d5-4a20-cdf1-4c05-08f966927007.png)
[稼げる言語](https://insights.stackoverflow.com/survey/2020#top-paying-technologies)が分ったりとか、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/090f330d-9da7-0c5f-e11b-7911e1e49e70.png)
[愛されている言語](https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved)が見れたり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/23a2077e-699c-5b1a-d554-bac46d40b9b5.png)
これは、dreaded・wanted・loved・popluarで分かれているのが見どころかもしれません。
また、開発者の種別割合を見ることもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/ed3bf9db-934b-e2f8-9f4b-4e7ca03d8e9f.png)
需要が多いわりに人数が少ない分野が見つかれば攻めるに値しますよね。
他にも、[就職する検討材料](https://insights.stackoverflow.com/survey/2020#job-priorities)として重要視されるのは使用しているテクノロジーだという結果もあります。

言語選定は重要ですね。タイトルに響きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/5b72e04e-3153-9f84-c007-688ac50c9d92.png)


# JetBrainsの統計

https://www.jetbrains.com/ja-jp/lp/devecosystem-2020/

# Q&Aサイト

# Q&Aサイト

[Tags](https://stackoverflow.com/tags)を確認すると、言語ごとにどれくらいの質問が投稿されるのかを見ることが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/d1c42f39-e1e0-f0a8-6e8e-3f70a7f23289.png)
また、[Users](https://stackoverflow.com/users)では、トップユーザーがどんな言語に興味があるのかを確認することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/e8f317c7-b8fc-0989-1c01-dc084859fffa.png)
「レベルの高い人は、こんな言語を使うんだな」みたいな視点が生まれるでしょうか。
このスクリーンショット見るとDotNet系とJava系が強い印象ですね。
※ずっとベータですが、[日本語版](https://ja.stackoverflow.com/)もあります。

## Teratailから得られる統計情報

[タグ一覧](https://teratail.com/tags)を確認すると、言語ごとにどれくらいの質問が投稿されるのかを見ることが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/dd10d7bb-d26c-a508-e2bb-09be0758b96c.png)

また、[総合ランキング](https://teratail.com/users?tab=ranking-total)では、トップユーザーがどんな言語に興味があるのかを確認することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/dd1221b4-7a38-c6ed-76d1-61ed7017a815.png)

「Teratailのランカーは、PHPが好きなんだな」みたいな視点が生まれるでしょうか。

# フレームワーク・CMS・MVCなど

言語そのものよりもフレームワークが重要な場合もよくあります。
フレームワークがあると作業手順が明確になるので協業しやすかったり、
ロジックを考える必要が無く、組み立てるだけの簡単作業になったりします。
Web系フレームワークが多いですね。

同じ言語のフレームワークでも、どこまで対応できるかという守備範囲の広さが違ったりします。
どんな開発案件にも対応する想定で設計されたフレームワークをフルスタックフレームワークと言ったりします。

- Python
    - [Django](https://docs.djangoproject.com/ja)
    - [Flask](https://flask.palletsprojects.com/)
    - [Bottle]()
- Java
    - [Spring](https://spring.io/)
    - Play
    - JSF
    - Spark
    - Hyperledger Fabric
    - Quorum
- C++
    - [Qt](https://www.qt.io/jp)
    - Panda
- C#

    - [ASP.NET Core](https://docs.microsoft.com/ja-jp/aspnet/core/)
- Ruby
    - [Rails](https://railsguides.jp/)
- javascript
    - Front
        - [Angular](https://angular.jp/)
        - [React](https://ja.reactjs.org/)
        - [Vue](https://jp.vuejs.org/)
    - Back
        - [Sails]()
        - backbone
        - express
- PHP
    - [Laravel](https://laravel.jp/)
    - [WordPress](https://ja.wordpress.org/)
    - [Moodle](https://moodle.org/)
    - [Magento](https://magento.com/jp/)


# テスト

テスト環境が簡単に構築できるのか？というのはかなり重要なポイントです。
Wikipediaでは[ユニットテスト・フレームワーク](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%83%BB%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E4%B8%80%E8%A6%A7)という記事で紹介されています。
テスト駆動開発、略してTDD(Test Driven Development)専用のライブラリがある言語を選定すれば、
テストの実行や管理がスムーズになります。

まだまだ発展途上の概念ですが、vscodeにも標準で機能がついていたりします。
[pythonのテスト機能](https://code.visualstudio.com/docs/python/testing)などはその好例です。
エディターやIDE、またはその拡張機能でサポートされているのかというのは大きいですね。

また、テスト駆動開発の上のレイヤーの概念として[ビヘイビア駆動開発](https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%98%E3%82%A4%E3%83%93%E3%82%A2%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA)があります。仕様通りの振る舞いをできているかテストしながら開発します。
このビヘイビア駆動開発、略してBDD(Behavior Driven Development)用のライブラリがあるかどうかも検討したいところです。

# 企業に重要視されているのか

[Vscodeのドキュメント](https://code.visualstudio.com/docs)では、
「node.js・TypeScript・Python・Java・C++」の５つだけが大項目になっています。
「Languages」という項目を開くと他にも見つかりますが、何か意図がありそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/0cbecdbe-b636-3967-46c3-3df8985c0309.png)

「ng-conf 2017]での様子を投稿した動画[Keynote Day 3 - BRAD GREEN and ROB WORMALD](https://www.youtube.com/watch?v=lOOyxwADTjI)での[Brad Green](https://twitter.com/bradlygreen)さんの言葉によると、Google社内の標準言語（Canonical Languages）にはC/C++、Java、JavaScript、Python、Go、TypeScriptがあるそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/d85bcf70-58b9-e737-04c2-798294989454.png)


# 言語一覧

以下は「どんな言語があるのかな」「名前から辿って言語を選定したいな」というとき使えそうなものです。

[プログラミング言語図鑑](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E5%9B%B3%E9%91%91-%E5%A2%97%E4%BA%95%E6%95%8F%E5%85%8B-ebook/dp/B07C3PQ2D8/ref=sr_1_4)では、主要なプログラミング言語をユーモアたっぷりに紹介しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/86e73467-8576-6d05-70e2-528b4c7e40e1.png)
[プログラミング言語大全](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E5%A4%A7%E5%85%A8-%E3%82%AF%E3%82%B8%E3%83%A9%E9%A3%9B%E8%A1%8C%E6%9C%BA-ebook/dp/B088NFBXTY/ref=sr_1_1)では、100以上のプログラミング言語を紹介しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/b4037afa-bbf7-3413-e476-dd8ffd5fec7a.png)
また、Wikipediaでは[プログラミング言語カテゴリーのリスト](https://ja.wikipedia.org/wiki/Category:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)からざっと言語を見渡すことが出来ます。


**Excelsior!**