プログラミング言語の将来性


0.はじめに

 現在多くのプログラミング言語が存在します。作りたいアプリによって選択する言語が変わるという側面がありますが、マイナーな言語になるとライブラリのバージョンアップが止まったり、サポートが終了したりして継続した使用が困難になる可能性があります。
そこで現在の状況を解析するとともに、将来の動向について自分なりに解析してみたいと思います。

1.元ネタ

調査元データ:

 この記事の中で面白いのが以下の2点です。
1)開発人口の増加に対して、それぞれの言語の使用率が上昇しているかを確認している点で、2024 と 2022 を比較して、開発人口の増加率と同等なのが JavaScript 、増加率以上に増えているのがRustとGo
2)Python 、 Java、C#といった開発者全体の何%が使用しているかという観点からみると減少している

この2点を中心に自分なりに今後の予想をしていきたいなと思います。

3.将来予想

 私が基本的に懸念しているのは、地政学リスクやAIによるコード汚染によって、オープンソースを使用するコストが上がるのではないかと感じています。例えば最近、以下のようなことがありました。

上記のような事件が起こりやすい環境になっていると思います。
そのためメンテナーが信頼できる、または導入しようと思っているライブラリの内容を大体把握でき、リスクが少ないことがわかるライブラリ位しか使いにくい状況が発生すると思います。

1)Java について

 現在求人数も多く、日本である程度の開発規模になると最も使われている言語だと思います。
ただ Java は言語仕様というより運用に関して多くの課題を抱えるようになりそうだなと感じています。

〇 3つの代表的なJDK
 2018年ごろ、OracleのJDKについてJava 11から商用利用が有償となり、無償でJavaを利用するのであれば他のJDKを利用する必要が出てきました。
そのためAdoptOpenJDK、Zulu、Amazon Corretto 等の JDK から選択する必要が発生しました。
私には、この3つのJDKは他のものと交換したら動かないという経験が何度かあります。
この問題単独であれば指定すればよいので大した問題ではないように見えますが、こういった小さな運用ルールの積み重ねが複雑性を生んでいきます。

〇 Javaを使う企業の特徴
 大きなシステムを作る企業でJavaは採用されることが多いです。そのため一番実績があるJavaを使用したいんだと考えられます。こうした大きなシステムはライブラリの依存関係が複雑になり、バージョンアップだけでも大変ということがよく発生します。そのため重要なシステムだからこそ改修しないということが発生し、むしろセキュリティ面の脆弱性を抱えるリスクがあります。

小さな企業でも昔作成したコードがJavaであったというケースもあります。そのような企業ではコストをかけたくないので昔、作成したプログラミングから変更しないというケースもあります。その場合は使用しているライブラリがもう古くてサポートしていない等、カオスの状況になっていることもあります。

〇 具体例:Log4j
 Javaアプリケーションの標準的なロギングライブラリとしてLog4jというものがあります。
2021年頃重大な脆弱性が存在することが確認され、任意のコードを比較的容易にリモート実行できてしまうリスクがあることが確認されました。
標準的であるが故にどこに使われているか把握しきれず、かなりの混乱を招きました。
こういったことからも分かるように古くから使用されていて実績があれば盤石ということはないので、適宜更新や改修を入れる必要があります。
積み重ねた歴史があるがゆえに改修できなくなったコードは財産ではなく負債になることがあります。

これからJavaを使用する場合、ライブラリの使用についてもよく吟味し、改修しやすいコードにし頻繁に更新する必要があることを覚悟する必要があると思います。

2)Python について

 Python は様々な用途のライブラリがあり、業務の自動化でよく使用されるプログラミング言語と言われますが、日本の現場ではそこまで採用されていなかったと思います。
むしろ AI ブームから注目されはじめたものと思われます。
最初の検討段階ではすぐ書き始めて、消してと試行錯誤しやすいのでPythonは非常に便利だと思います。
ただそのあとの実装は他の言語でやるということも多かったです。

〇 Python の高速化について

 Python の利点であり弱点はスクリプト言語であることです。そのため、速度は遅いです。そのこともあり、他の言語で再実装をするということもよく発生していました。
この速度という観点で難しいところは、速いライブラリー(numpy等)を使用するとそこまで遅く感じないという点があります。
この numpy がC++で実装されているためです。(ちなみに統一した言語で操れるように考えられているのがMojoです。)
ただ言語そのものの標準仕様でアプリケーションを作成した場合、基本的には遅いです。

この点に対してPythonを毎年50%高速化し、互換性を保ちつつ 4年間で5倍高速化する ことを目標とする計画があります。

ただ上記計画がうまくいっても、コンパイル言語に比べるとまだ速度面の問題は抱えるものと思われます。

〇 ライブラリについて

 Python の良さは多様なライブラリです。ただそのオープンソースがこれまでと異なり危険になっていく可能性が高いというように思っています。
特にAIにとって学習のリソースが多い言語のため、汚染が非常に強くなる可能性があるかと思います。

3)C#について

 C# については私もよく仕事で使用していたので個人的な感想もあります。Java と同様の問題を抱えており、それ以上にフレームワークの問題を抱えていると思います。
.net framework から .net への移行はそこまで簡単ではないですし、言語の書き方も古いものを紹介しているものが多く、新規参入者に混乱を招くだろうと思います。

〇 政治的(?)懸念
 上記のこと以上に私が個人的にうーんと思ったことは、Vidual Studio Code と Office についてクロスプラットフォーム部分をTypeScript(JavaScript)で書いたという部分です。 

C# の伸びしろとしてはクロスプラットフォーム、つまりWindows専用ではないという点であり、.NET MAUI というものもあります。
Microsoft には率先して、これらのサービスにNET MAUIを使用してほしかったという気持ちがあります。
また以下のような記事も C# を使用する人を不安にしています。これはMicrosoftの求人でC#で作成された一部機能の書き換えでRustエンジニアを募集していたため起きた騒動です。

Unity とWindowsアプリ専用言語になってしまう可能性を懸念しています。

4)JavaScript について

 ブラウザで稼働するという言語であるという利点は他の追随を許さないものと感じています。
言語としては柔軟すぎる点や、モジュールシステムの混乱等あり、私自身は非常に難しい言語だと感じています。
欠点を補足する言語として TypeScriptが存在します。
ただJavaScriptを完全に書き換えるほどの勢いは出ていないように感じます。

WASM が非常に可能性があるのですが、現時点では JavaScript でファイルを読んでいるところもあり移行しきれそうな感触はありません。

インフレ時代には企業は資金調達に苦労します。
そのため今はAIの話をすることで資金を集めている状況です。このため企業利益に直接関係しづらいWASMなどの技術開発にお金がいかないのではないかと懸念しています。

5)Go について

 Go は言語の単純さがよくも悪くも評価が分かれることがありますが、標準ライブラリが充実しているという側面があります。
また言語の単純さもあって、後方互換性も高くあんまり神経質にならずバージョンをあげることができます。
歴史が浅いためJavaほどのライブラリの充実はありません。
ただ標準ライブラリや自分たちで作成したライブラリ等でプログラミングを作成することになり、むしろ悪意のあるライブラリ等が混入しにくくなります。

バックエンドでは Java 以外に Go が使用されるケースがじわじわ増えてきました。大きなシステムからマイクロサービスにより向かう流れが出てくるのではないかと思う点もあり、今後Goがより勢力を拡大する可能性もあると思います。
ただ複雑さは保存されるので、マイクロサービス同士の相互作用というむずかしさが今度は発生することになります。

6)Rustについて

 ModernなC++をやっている人には習得しやすいと思いますが、基本的には習得が難しい言語です。
オブジェクト指向の人が実装する際に困ったらこうやって乗り切るTipsが溜まった実用的な書籍などが出てきて、使う企業が増えないとあまり流行しない可能性があると思います。
(Tips例
・ とりあえずclone()しとく
・構造体のリストを構造体のフィールドとしたいときは、Vec<T:自作の型>で持ち、Vec::default()で生成し、self.フィールド.push(型)として運用する
・スレッド間でデータを共有するときは Arc::new(Mutex::new()をとりあえず使用しておく 等)
またライブラリやフレームワークが、微妙に分散してしまっていて、選択するのが大変という点も流行しない要因の一つだろうと思います。

すごい売れる本やキラーコンテンツとなるフレームワーク等の何かのきっかけが必要となるだろうなと感じています。

4.その他注目技術

1) Zig

 シンプルさと効率をコンセプトとした言語です。昔観たYoutubeだと2025年頃 ver1.0 という話があったと思います。

Bun と言われる JavaScript(TypeScript)のランタイムもこの言語で開発されています。

Fast running performance
Bun extends the JavaScriptCore engine—the performance-minded JS engine built for Safari—with native-speed functionality implemented in Zig.

メモリ管理がユーザーによって実行してもらうタイプの言語なので、大きな企業では使われない可能性がありますが、個人開発者は結構使っていくのではないかと思います。

2)Mojo

Mojo については以前も記事を書きました。

今後の進化が楽しみではあるのですが、 version 1.0 までのタイムスケジュールがわかりにくく、パッケージ管理関連の開発は優先度が低い点が現在気になっている点です。
さらに「Copilot +PC」と Nvidia の業績次第ではAI関連の投資が弱まる可能性があると感じています。

In the near-term, we will not prioritize "general goodness" work such as:
・Adding syntactic sugar and short-hands for Python.
・Adding features from other languages that are missing from Python (such as public/private declarations).
・Tackling broad Python ecosystem challenges like packaging.


3) チップのアーキテクト(番外編)

 私は後2,3年でAI投資が弱まる可能性を感じていますが、いくつか残っていく新技術もあるだろうと感じています。
そのひとつがGroqに代表されるアーキテクトの変更かなと思っています。
これは単に感想です。

5.現在の戦略

これからは日本でも大きく戦略が変わると思います。

相次ぐ個人情報の流出からシステムにもっとお金をかけること、そして作成したコードの管理や改修のしやすさがより要求されると思います。
またより高速にすることやメモリ消費などにもシビアになるのではないかと思います。
そのため情勢的にはRustやGoへの移行の可能性があります。
ただ Go の場合、画面系のライブラリの弱さや、Rustにはキラーコンテンツやノウハウの不足といったものが流行を止めている面があると思います。
Mojo が一気に流行る可能性もありますが、戦略面で今後苦戦する可能性があると思っています。

そのため「AIのトレンド、Google や Microsoft の動向、WASM、Mojo、Go、Rust」あたりに注目しつつ、「Java,Python,C#」または自分の現在の得意言語で食いつなぎ、次の大きなトレンドを見極めるのがよいかなと思っています。

上記の結論に対して自分で以下のような2つの突っ込みをいれます。

1)Apple の動向に注目しない理由

 iosやMacOSの国際的なシェアの低さから、あまり大きな技術トレンドは起こさないのではないかと思います。

2)結局大きなトレンドはなく、開発するアプリケーションによって変わるのではないか

 勿論その傾向が残ると思いますが、支配的なプログラミング言語がそろそろ出てくるのではないかと思っています。
多様化から一極集中にむしろ向かうのではないかと感じています。
それはすべての言語が似てきたというところから感じています。またはAI等と併用してプログラミング言語の書き換えが流行る可能性もあると思いますが、その場合もよりチューニングが可能な言語からよりシンプルな言語への変換になると思います。(TypeScriptからJavaScriptには変換可能ですが、逆は無変換を意味するでしょう。)

現状、RustかMojoにその可能性を感じています。
非常に人気のある言語であるPythonを取り込む可能性があるからです。
Mojoはもともとその意図がありますが、PyO3のようなプロジェクトが普及すれば、Python と Rust の併用が強まる可能性があります。
性能がクリティカルかつコードが変わらない部分はRust、よく変更される部分はPythonで書いておくなどいろいろな書き方が想定されます。

いずれにしても後2,3年で大きな技術トレンドの変化が起こり、そこで確定した流れが、その後数十年のトレンドを決めるのではないかなと予測しています。

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