学ぶべき言語1位はPythonらしい

技術

海外の雑誌のプログラミング言語人気ランキングですので、国内の事情はまた異なるかもしれませんが、相変わらず人気が高いのはPythonらしいです。

ランキングの顔ぶれ

この記事ではランキングが羅列されていて見にくいので、表に書き起こしてみます。

順位名称
1Python
2Java
3C
4C++
5JavaScript
6C#
7R
8Go
9HTML
10Swift
11Arduino
12MATLAB
13PHP
14Dart
15SQL
16Ruby
17Rust
18アセンブリ言語
19Kotlin
20Julia
プログラミング言語人気ランキング2021 by IEEE Spectrum

いやツッコミどころもちょっとあって、HTMLとかプログラミング言語扱い?とか、それならCSSはどうなるの?それともHTML+CSSなのか?とか。あと、SQLとかアセンブリとかざっくりしすぎだろ、とか。対象によって方言バリバリのものをひとまとめで何か参考になるのか、というあたりが気になります。この20位くらいまでに入ってこない言語はマイナーということになるのでしょうか。

元の記事を見ればその辺りの詳細もわかるのかもしれません。

なお、記事の1ページ目の最後にもありますが、GitHubやStackOverflowでのデータを元にしたRedMonではJavaScript、Python、Javaの順で、検索エンジンのクエリ結果を元にしたTIOBEというものではC、Python、Java、C++、C#だそうです。

そんなわけで、調査が違えばランキングも違うのでどこまであてにしていいのかというのはあります。例えば、検索クエリで上位になっている言語は単に検索しないと情報が出てこないという理由で、ここに上がっていない言語は見るべきサイトが確立していて検索しないでも使いこなせるということもあるのかもしれません。

結局、それぞれのランキングを出しているところがどこに注目しているのかで結果は違ってくるので、単体でランキング結果に一喜一憂することに意味はないと思います。
それでも、上記の結果から総合的にC#、C++、Java、JavaScript、Pythonあたりは人気が高いと言えそうです。(左の記載はアルファベット順です)

Pythonは学ぶべき言語か

このランキング記事の最大のメッセージは「Pythonを学ぼう」というものであることは明記されています。ではそれはなんで、というところをリンク先の記事では書いています。

Python人気の理由

ランキングの順位自体はあまり意味を感じませんが、人気の理由は参考になります。同記事ではPython人気の理由として以下を挙げています。

比較的学習が容易であるとともに、「Tensor Flow」や「NumPy」「SciPy」といった、データ科学や機械学習(ML)の分野で利用できる洗練されたライブラリーを擁する健全なエコシステムを有しているため、著しい成長を遂げてきている。
(中略)
「MLや科学技術計算向けに普及しているモジュールを含む、膨大な数のライブラリーから大きな力を得ている」という。そして同誌は、Pythonが「新規テクノロジーのデファクトプラットフォームとして君臨している」

上記引用の太線部は自分がポイントかと思う部分を強調したものです。
要は、学習が容易、かつ、膨大なライブラリがあるのですぐに活用できるということかと思います。

Pythonの弱点

もちろん、いいとこだけではないので、弱い部分も記事では触れています。

Pythonの処理速度はCほど高速ではなくモバイルアプリの開発にも適していない。また、フロントエンドのウェブ開発においてもJavaScriptと、Microsoft版のJavaScriptであるTypeScriptの後塵を拝している。

まあ、触れてはいるのですが、その後の部分で「こういう対応をしている」というフォローもしていて、結局はPython礼賛になっています。
まだそういう試みをしているという段階であって、それで解決したとも、解決できそうとも書いてないので少々手前味噌な感じはします。

例えば高速化の取り組みについて触れていますが、Pythonと比べて2割程度の性能向上に過ぎないそうです。さらに、有力な企業のバックアップもなさそうで、果たして実用域まで辿り着けるのかどうか。

最大の問題として、結局はPythonベースであり、静的型付けでない以上は業務システムで使う様なものではないと自分は考えます。モバイルアプリとか、プロトタイプとして使うならともかく、本格的なシステム構築に使う様なものではなく、あくまでPythonで大量データを処理する際のパフォーマンス改善なのかな?と感じています。

実際に使ってないので想像ですが、機械学習にしろデータ処理にしろ、大量のデータを食わせて処理する必要があると思います。そういう分野でPythonでパフォーマンスに問題がないのでしょうか。だから高速化をしようとしているのでしょうが、正直、ちょっと見た記事では実用化まで持っていけるか微妙な感じのプロダクトだったので…。
そこは置いておくとして、ライブラリは最初からあるわけではありません。大量データ処理には向いてなさそうに感じるPythonでなぜそれをやろうとして、結果としてライブラリが大量に存在する様になったのかは一般教養として少し興味があります。現在はライブラリがたくさん揃っているからという理由が大きいとして、そもそもはどうだったのか。
まあ適当な環境でぶんぶん回しておけば良いという考え方なのかもしれませんけど。
で、さっと処理するのには書くのが楽なPythonが向いていて、皆が使っているうちにライブラリも整備されていった…というストーリーはアリそうには思います。実際、どうなのかはわかりませんけど。

そういう点ではPaizaには以下のデータがあるはずなので、あるサービス限定のものとはいえ、それなりに参考になりそうなプログラミング言語のデータがありそうです、が公開されていない様です。まあ、企業秘密として出したくないのかもしれませんが、多少は出してくれても良いのにと感じます。求人側のデータは特に出したくないでしょうし。

  • スキルチェックで使われている言語とその回数
  • プログラミング学習での各講座の利用状況
  • ユーザが登録している経験言語や希望言語
  • 求人側が提示しているプログラミング言語の条件

個人的にはPythonは苦手

誰かの質問に誰かが答える某サービスでPython絡みの質問を見ていたり、その他のWeb記事を見ている限りでは感じるのは、Pythonは書くのが楽、学習コストも少ない、というあたりの意見が多いということです。

実際、自分もPaizaのスキルチェックでは最近はPython3系で回答しています。その理由として確かに楽というものはあります。単純にタイプ量が少ないですし。1番の理由はあまりに騒がれているからちょっと勉強がてらというノリです。
でも、現状はPCに環境を作らずに専らPaiza.IO頼りです。

ただ、長らくC、C++、Javaといった性的型付言語をやってきた経験と習慣があるので、どうしても違和感は残りますし、インデントでブロックの範囲を示す考え方も慣れてはきましたがやはり違和感があります。性格的に、誰かや何かに任せっきりにすることに嫌悪感があるせいもあります。自分でコントロールしないと気が済まないのです。

もっとも最近のJavaScriptの無名関数(ラムダ式)で引数に直接関数を書いてしまうやり方はなかなか慣れないです。慣れると効率的なのでしょうが、頭の中で整理できないです。若いうちの柔軟な脳みそなら問題ないのかもしれませんし、単純に実践経験がないだけかもしれません。

Pythonの大胆な割り切りもまあわかりますし、実際に書き捨てでは使いますが、長期間メンテするものには使いたくないと感じます。

Pythonコードを書いた後に他の言語を使うと、ついついブロックの最後の「end」とか「}」を忘れたりして愕然とすることがあります。
逆のパターンでpythonでifにthenを付けたりとか。

ランキングの変化の方が大事

個人的には単年度のランキングそのものよりは、複数年比較した場合の変化についての方が重要に感じます。記事では最後でこれに触れています。

注目すべき変化は、MicrosoftのC#だ。この言語は2020年の25位から2021年には10位以内に躍進した。IEEE Spectrum誌はこれが2020年11月にリリースされたC#のバージョン9.0によるものだと推測している。

自分も昔C#にだいぶ前に関わったことはありますが、その頃には能動的にコーディングする立場でなかったので、触ったことがありません。そんなわけで、それなりに歴史もあるバージョン9の言語が急に20位圏外から6位になるというのはそれなりの理由はありそうです。

それを言い出すと、C#の元になったC++やさらに元になったCがいまだに残っていることが驚きです。
Wikipediaによると各言語の登場時期は以下の様になっていました。

名称登場年
C#2000年
C++1983年
C1972年
Java1995年
Rust2010年
C#と関連言語の登場年

C言語に至ってはそろそろ半世紀ですね。Javaにしても四半世紀超えているので歳をとるわけです。

学ぶべきプログラミング言語とは

自分はどれか一つ学べばそれで全て解決するというプログラミング言語はないと思っています。
もちろん、ある特定の分野に限ればそういう言語もあるかもしれません。しかし、ずっとその分野だけやっていられるか、いても良いのかわかりません。そういう点で言えば、FORTRANとCOBOLをやるべきです。それらで書かれたシステムはまだまだ残っている一方、それをメンテできる技術者は減る一方ですから。いつかどこかでなくなるかもしれませんが、まだ当面は残ります。

でも、そういうことでもないです。メインはバリバリCとかC++とかC#を使っていても、ちょっとした前処理、後処理をするのにPythonを知っていれば便利、かもしれません。
そうして色々なプログラミング言語を適材適所で使えるのが当たり前と思っています。ですので、Pythonに限らず学ぶべきでない言語なんてものはないと思っています。が、優先順位は必要です。今やっていることに直接関わるものは最優先ですし、次にやりたいものに適した言語も優先度が高いでしょう。

そのためには世の中にどんな言語があって、どんな特徴があるのか知ることが大事だと思います。最も、ランキングに出てくる20の言語のうち、中身を知らない以前に存在を知らなかったものもあるので、自分もまだまだです。

技術プログラミング言語

Posted by woinary