プログラミング言語の習熟
C++ を書いていると、数年のブランクがあるにもかかわらず妙な安心感がある。自分は間違っていない、というと語弊があるが、自分の間違っている程度を自分はわかっている、というような。コードの質もなんとなく高い気がする。
仕事で Android アプリの Java を書いているときはそこまでの confidence を感じない。そこそこだろうとは感じている。
Python とか JS を書いていると、我ながらこのコードはダメだなと思う。しかしどう良くしていいか検討もつかない。似たような話を前に書いた気がする。
最近のモダンメインストリーム言語、すなわち Go, Swift, Rust, TS とか全然使えない。Kotlin は Better Java として使っている範囲ではそこそこだと思いつつ、Kotlin を活かしている感じはない。
自分は学生時代、 C++ の習得に莫大な時間を費やした。学生時代後半から会社員になってしばらくは Java もそれなりに熱心にやった。そうした取り組みは自分の言語への fluency や confidence にはっきりとつながっている。何らかの新しいプログラミング言語を、同じくらいとまではいかないけれど十分な fluency や confidence で使えるようになりたいという願いがあるが、なにもしていない。
機械学習をやりたいとする。プログラミング言語の観点から見たらやるべき言語は明らかに Python である。一方で良い機械学習プログラマは良い Python プログラマなのか。いまいちそんな様子はない。Python 経験者が ML 界隈で特別重宝されている様子もない。むしろ、あまりがんばらなくてもなんとなく使える Python の性質が ML との相性の良さの一つになっているようにすら見える。なので ML 修行の寄り道として Python 真面目にやるか、という気分にはなりにくい。そんなにモダンでもなく、したがってさほど面白い言語でもないし。隣接する Computer Vision や Computational Photography に至っては C++ だし。もういいよ...
Android プログラマでいるにあたり Kotlin に詳しくなるのはいいような気もするが、Android プログラマでいるという事実にそんなに深く踏み込んでしまっていいのか。自分は根本的に Android への reservation があるためあまり盛り上がれない。そして Kotlin.js や Kotlin Native といった Android 以外での Kotlin の活躍を、自分は信じていない。ついでにいうと JVM もそんなにすきになれない。
Go. 自分がサーバサイドで何かできる見込みが薄い上に言語としてもさほど面白みがなく、盛り上がれない。サーバサイドやらない人が Go やるとなるとどうなるの?コマンドラインツールでも書くんだろうか。
TS. ウェブとかやるの?いまさら?まあやればいいのかもだけど。JS まわりほど技術習得の不毛さが際立つ世界ってなかなかないよね。
C++ 出身者にとって Rust はある意味理想の言語だ。ただ使いみちあんまりないよね。それこそコマンドラインツールとか、なんらかのシステム系のプログラミングをするにはいいんだろうけれど。ブラウザやってる人にはいいだろうね。システムプログラミングというマーケットの性質もあり、他のモダン言語と比べると若干メインストリーム感に劣る。そして仕事で触れる可能性はほぼゼロである。
Swift, は自分的にはぜんぜん圏外なのでどうでもいい。(言語の良し悪しではなく守備範囲として。)
・・・などとどれも決定打に書き、そいつらに詳しくなるくらいなら機械学習系の勉強でもするわ、みたいな気分になってしまう。
でもさー。プログラミング言語に詳しくなるってそういうことじゃないじゃん。もっと打算を超えた勢いとか愛とか執着みたいなもので過剰に時間を溶かした結果として無駄に詳しくなるわけじゃん。そして時折、何らかの偶然が過剰を報いてくれることもある。そんないささか割の悪いギャンブル・ファンタジーがプログラミング言語への精通というもの。
・・・というと極端すぎるな。マイノリティー言語への習熟はギャンブルかもしれないが、たとえばいま Swift や Kotlin や Rust や Go をやってる人はそれぞれ iOS や Android やブラウザ/システムプログラミングやサーバサイドのしごとをしていて、そこで前に進む歩みの一つとしてこれらモダン言語に習熟しようとしている。なのでいうほどギャンブル要素はない。
自分がモダン言語に腰が重いのは、1) 仕事であるはずの Android に愛がない 2) ワナビーである ML や CV にモダンメインストリーム言語がない 3) 打算的すぎる、の組み合わせの帰結といえるかもしれない。
打算を超え一つの言語に入れ込んで、その大好きな言語で流暢にガガガっとコードを書く、という憧れがある。ただ勢いも根性も足りてない。という愚痴。