プログラム言語がなんとかならん話

2024/1/29作成

私はアラフィフのITエンジニアです。近い世代の方は似たような経験があると思うのですが、これまで複数のプログラム言語を使ってきました。具体的には、BASIC、アセンブラ(6809, Z80, 8086)、C言語、C++、Perl、PHP, JavaScript, Ruby, Python って感じですね。細かいのを合わせるともうちょっと増えると思います。

こうして複数のプログラム言語を経験してくると、その根底にある共通概念のようなものが身に付きます。ざっくり言えば、コンピュータの基本原理みたいなものですが。そういうものが身に着くと、さらに新しいプログラム言語を学ぶのも容易なんですね。外国語を複数習得している人が、さらに新しい言語をあっという間にマスターしてしまうらしいですが、それに似ているような気もします。

ただ、これまでに習得したプログラム言語は系統として近しいという話はあるんですけどね。BASIC とアセンブラを除けば、だいたいは C 言語の影響を強く受けたプログラム言語です。それはまあ、現代のコンピュータが UNIX と C 言語の影響下にあるからでもあるんですが。C 言語とは別の系統である COBOL とか LISP とか Forth とかは、多分簡単には習得できなさそうな気がします。最近のプログラム言語でも Elixir とか Haskell とかは一筋縄でいかなさそうかな。実際には触ってみたこともないのでわからないけど。外国語習得でも、ヨーロッパ系言語を一つ増やすのは簡単でも、全く違う系統の言語は難しいでしょうしね。

ともあれ C 言語の影響の強いプログラム言語であれば、プログラム言語そのものはそんなに時間かからず習得できると思います。そのプログラム言語のプロフェッショナルになるのは簡単ではないけれど、とりあえず仕事で案件をこなす程度ならできます。これまでそう思っていたし、実際にそうではあるんですが、それだけではないなと思うのがこの記事のお話です。またしても前提が長いな。

具体的には最近の現場では Java をやることになりました。Java はこれまでもテストプログラム程度なら書いたことはあったのですが、本格的にやるのは初めてです。でも C 言語系統のプログラム言語のひとつであるのは確かなので、そんなに大したことはないだろうと思っていました。実際、Java の文法だけならそんなに大したことはありません。プログラム言語の文法って、いってもそれほど複雑な話ではないですからね。そのプログラム言語ならではの書き方の流儀みたいなものも、既存の実装を参考にすればある程度は書けます。実際、1週間から2週間程度で、プログラムを書くこと自体はそれほど問題なくなりました。ただ、それだけではなくて実際にはめっちゃ苦労したんですね。

何に苦労したかというと、現代のプログラム開発ではプログラム言語を使うだけではなく、エコシステムが巨大になっているんですね。Java の場合、標準ライブラリだけでも数千あるそうです。Java のプロフェッショナルの方でもさすがにこのすべてを把握してはいないでしょうけれども、よく使うものであれば把握しているでしょう。それでも数十から数百にはなりそうですね。そのよく使うライブラリは何であって、どう使うかってのを一通り把握するまでが、言語そのものを習得するよりもはるかに時間がかかる。かいとって、ライブラリを使わずに全部自力で実装するってのも、現代のプログラミングではありえませんからね。static おじさんじゃないんだから。

ライブラリに輪をかけて大変なのがフレームワークです。今回の案件ではフレームワークとして Spring Boot を使ったのですが、その全体像のようなものはいまだによくわかっていません。ライブラリはこちらが自発的に呼び出して使うので、その挙動はリファレンスマニュアルを見ればわかるのでまだいいのですが、フレームワークの場合こちらのプログラムが呼ばれる前に様々な処理が行われます。これ、把握してないとマジックなんですね。自分の知らない間にいつの間にか処理が行われてて、その処理を把握してないと何が起こっているのか分からなくて苦労する。実際、めちゃめちゃに苦労しました。

ということで、新しいプログラム言語を習得すること自体はそれほど難しいことではないけれど、新しいプログラミング言語で実用的なプログラムを書くのは、現代ではなかなかに大変だなということを実感したのでした。まる。そりゃ求人ではその会社で採用してるプログラム言語の経験者に絞るよなぁと思った次第です。「これから勉強します!」って人を採用しても、戦力になるまで相当に時間がかかりますからねぇ。