概要
これ知ってたら言語選定するのに便利そうだな。
もっと前に知ってたら、あの場面で使えたのにな。
と思った情報をまとめました。
かなり上のレイヤーの話として書いています。
型システムやパラダイム、実行方法などの
末端の詳細技術には触れません。
主に表面上の数字の話です。
ターゲット層
「次回のプロジェクトは言語を変えてみようかな」とか
「1言語マスターしたぞ!次は何をしよう?」という人向けです。
「初めてプログラミングを勉強しよう」という人向けではありませんが、
もしかしたら参考になるかもしれません。
中には普段見ているサイトの紹介もあるかもしれません。
「このサイトをその視点で見ることもできるのか」
と思っていただけることをお祈りします。
「知ってることばかり」という方は、
生暖かい視線を送ってください。
言語間の影響関係図
プログラミング言語同士の影響を視覚化したものです。
Bさん「Aさん、今回のプロジェクトはAAAA言語で開発しようよ!」
Aさん「どんなやつ?」
Bさん「CとJavaに強く影響受けてるんだよね、Aさんならすぐ慣れると思うよ」
みたいな会話で使えると思います。
Programming Language Influence Network | Exploring-Data
例えば、Javaの赤い丸をクリックするとハイライトすることが出来たりします。
また、「どの言語から影響を受けたか」だけでなく、「どの言語へ影響を与えたのか」というのが見れる点もいいですね。
オクトバース
近年様々な宇宙が話題になっています。
例えば、Spider-VerseやMCU、ウィザーディングワールド、アローバースなどです。
これらを総称してシェアードワールドと呼ぶらしいです。
その中でも、GitHubの周りに構築されたコミュニティをOctoverse(オクトバース)と称しています。
このオクトバースはWebサイト上で状態を確認することができます。
オクトバースの状態を検討材料にしてプログラミング言語を選定することが出来るみたいです。
例えば、言語ごとの貢献数を確認したり、
成長率を確認したり、
パッケージの充実度を推測したり、
貢献者の増加率からチーム編成方法を考えたり、
様々な角度からGithubのトレンドを見ることが可能です。
ただし、GitHub Inc.が見せたい情報だけが表示されている事実には注意したいところです。
また、言語のトレンドだけを見たい場合はGitHut2.0がいいかもしれません。
Stackoverflow Insight
最近よく、「最も給料がもらえるプログラミング言語はどれ?」とか
「プログラマーに最も嫌われた言語はどれ?」とか、
いろんな統計結果のニュースをよく目にします。
それらの1次情報は、だいたいが同じ場所なのです。
どこかというと、Stackoverflowの年次開発者調査です。
プログラミング関係の統計を見たいときは、とりあえずココです。
技術の相関関係が見れたりとか、
稼げる言語が分ったりとか、
愛されている言語が見れたり、
これは、dreaded・wanted・loved・popluarで分かれているのが見どころかもしれません。
また、開発者の種別割合を見ることもできます。
需要が多いわりに人数が少ない分野が見つかれば攻めるに値しますよね。
他にも、就職する検討材料として重要視されるのは使用しているテクノロジーだという結果もあります。
JetBrainsの統計
Q&Aサイト
Q&Aサイト
Tagsを確認すると、言語ごとにどれくらいの質問が投稿されるのかを見ることが出来ます。
また、Usersでは、トップユーザーがどんな言語に興味があるのかを確認することが出来ます。
「レベルの高い人は、こんな言語を使うんだな」みたいな視点が生まれるでしょうか。
このスクリーンショット見るとDotNet系とJava系が強い印象ですね。
※ずっとベータですが、日本語版もあります。
Teratailから得られる統計情報
タグ一覧を確認すると、言語ごとにどれくらいの質問が投稿されるのかを見ることが出来ます。
また、総合ランキングでは、トップユーザーがどんな言語に興味があるのかを確認することが出来ます。
「Teratailのランカーは、PHPが好きなんだな」みたいな視点が生まれるでしょうか。
フレームワーク・CMS・MVCなど
言語そのものよりもフレームワークが重要な場合もよくあります。
フレームワークがあると作業手順が明確になるので協業しやすかったり、
ロジックを考える必要が無く、組み立てるだけの簡単作業になったりします。
Web系フレームワークが多いですね。
同じ言語のフレームワークでも、どこまで対応できるかという守備範囲の広さが違ったりします。
どんな開発案件にも対応する想定で設計されたフレームワークをフルスタックフレームワークと言ったりします。
テスト
テスト環境が簡単に構築できるのか?というのはかなり重要なポイントです。
Wikipediaではユニットテスト・フレームワークという記事で紹介されています。
テスト駆動開発、略してTDD(Test Driven Development)専用のライブラリがある言語を選定すれば、
テストの実行や管理がスムーズになります。
まだまだ発展途上の概念ですが、vscodeにも標準で機能がついていたりします。
pythonのテスト機能などはその好例です。
エディターやIDE、またはその拡張機能でサポートされているのかというのは大きいですね。
また、テスト駆動開発の上のレイヤーの概念としてビヘイビア駆動開発があります。仕様通りの振る舞いをできているかテストしながら開発します。
このビヘイビア駆動開発、略してBDD(Behavior Driven Development)用のライブラリがあるかどうかも検討したいところです。
企業に重要視されているのか
Vscodeのドキュメントでは、
「node.js・TypeScript・Python・Java・C++」の5つだけが大項目になっています。
「Languages」という項目を開くと他にも見つかりますが、何か意図がありそうです。
「ng-conf 2017]での様子を投稿した動画Keynote Day 3 - BRAD GREEN and ROB WORMALDでのBrad Greenさんの言葉によると、Google社内の標準言語(Canonical Languages)にはC/C++、Java、JavaScript、Python、Go、TypeScriptがあるそうです。
言語一覧
以下は「どんな言語があるのかな」「名前から辿って言語を選定したいな」というとき使えそうなものです。
プログラミング言語図鑑では、主要なプログラミング言語をユーモアたっぷりに紹介しています。
プログラミング言語大全では、100以上のプログラミング言語を紹介しています。
また、Wikipediaではプログラミング言語カテゴリーのリストからざっと言語を見渡すことが出来ます。
Excelsior!