僕が出来る言語は所詮RubyとJavaScriptぐらいだ。
触ったことある言語だったら十数個ある。仕事上ならScalaもPythonもせいぜい1000行超えるぐらいは書いた。
一応大学院での研究内容は普遍的なプログラミングの理論であることもあった。お蔭で各言語を使い始めれば大体は掴めるし、「あ〜あの言語でいうアレね」って分かる強みもある。多少なりプライドもある。外部に対してスキルを示したいときは少しぐらい大きく見せたいという思いだってある。『自分はX,Y,Z..言語扱えます』って振る舞う際のX,Y,Z..の長さがスキルレベルを示せそうだ、なんて錯覚も覚えていた。だから出来る限りリストアップしようとすることもあった。実際に仕事上未経験の言語であっても、始めてしばらくで平均的な速度が出るぐらいまでキャッチアップ出来る自信はそこそこある。
なんでこんな事を思ったかという話をする。この前、ふと僕は、ユーザに価値の高いものを素早く効率的に提供できるようになる技術の本質が何なのか考えていた。そのようなものには技術をしっかり活きているはずだし、そうでなければ、自分の技術に対する価値認識には誤りがある。
Rubyという言語自体はどうか。Rubyという言語は素晴らしい設計がされており、開発者に豊かな表現力を提供してくれる。おかげで素直にドメインロジックを記述でき、他者にとって読む苦労の少ない形になってくれる。初学者でも比較的容易に触ることが出来るおかげで、人材的にも苦労が少ない。反面パフォーマンスは劣るし、静的型もないので堅牢性には欠ける。このような面はユーザにとって価値があるかというと、実際にはユーザへのデリバリに達するまでの速度も品質も他の言語とそれ程大差がないと思う。言語に対する慣れは数週間も触れば十分に高い水準に達するだろう。
Rubyの周辺gemはどうか。Rubyは様々な人によってメンテナンスされ続ける数えきれない素晴らしいアクティブなライブラリに恵まれている。こういうものを組み合われば、自分の書くコードは一気に減らすことができる。これは明らかにデリバリ速度を上げられるし、自前で実装するよりも多くの人がぶつかっているので同じ罠を踏まなくていい。ただ、これも別にRubyに限った話ではない。開発者の絶対量で言えばそれなりに多いが、適切にメンテされているかどうかは信じ続けるしかない。
上記はあくまで個人と関係のない範囲の話である。一方、ごく個人的な、gemに精通しているということや、多くのツールを駆使できる状況はどうだろう。各gemは一度利用したことがあるから2回目は調べなくても掴めるし、特有の罠についても知っている場合がある。こういう力は、考えてみれば開発効率をかなりのレベルで上げている。自分の"記憶"という最短距離に情報アセットがあるのだから当然だ。
つまり、本気で使えている言語というのは、その言語や周辺のライブラリに関する個別具体的な知識やコンテキストを深く知っていたり、OSSにコミットしたりした経験が積み上がり、そのお蔭で実際の課題に対して最短かつ最良の手段をすぐに見つけられるのだ。
実際、ある仕事上の課題が生じたとき、もしRubyだったら、「ああ、これはあのgemとあの機能を組み合わせればいけるな。一つ懸念があるとすればこういうケースなので、ここだけ事前に調べればいい。調べ方はもう見当がついている」という感じになるはずだが、それがScalaやPython、Haskell、Ocaml、Rust..だったらそこまでサクッといくとは限らない。
ほとんどの言語に、その周辺に膨大なライブラリやツールがある。そして、それらを徹底的に駆使したときに初めてその技術を活かすことができる。そしてそのときに初めて"出来る"といえるレベルになる。言語周辺環境の個別具体的な知識の量から考えれば、一つの言語に対して少なくとも2~3年の経験が必要だし、さらに、5年もすれば環境は変化するので、本当に"出来る"と表現できる言語なんてのは直近5年ぐらいに触り続けていたせいぜい2つの言語ぐらいだ。
こんなにも個別言語の周辺世界が広いのに、色んな言語を自分の出来る言語として口で並べるなんてことはむしろ滑稽なのではないか。そう感じたら、"出来る"と言うのが恥ずかしくなってきたので、言うのをやめることにする。
僕はPHPできません