死にゆく技術と流行る技術の狭間で

2017 年、私は React.js および ECMAScript のキャッチアップをしていました。

スタートアップに転職してすぐのタイミング。転職先で React.js を使ったマークダウンエディタを開発していました。それまで Android や Node.js を中心として開発していたので、React.js をはじめとする View フレームワークは全く素人。かなりの時間をかけてキャッチアップしました。

一年後には、draft.js を始めとする OSS のコードも読めるようになりましたし、小規模のコンポーネントであれば自身で開発して GitHub で公開するようにもなりました。

正直、React.js で学んだ技術なぞ、すぐに枯れると思っていました。当時は View フレームワーク戦乱時代。React.js 以外にも Ember.js や Vue.js、Angular などさまざまなフレームワークについて語られ、発信され、どれを学習すれば良いのか迷うような状態でした。

私が React.js を選択したのはあくまで仕事で必要だったから、それ以上でもそれ以下でもありません。当時は Hooks の概念もなかった。仮想 DOM のコンセプトは素晴らしいと思ったものの、React.js の専売特許では決して無く(後発でもそれを真似したフレームワークは開発できた)、三年も経てばどうせまた別のフレームワークを使っているに違いないと考えていました。

そして五年たった今、当時の私の「予想」は、今の所大きく外れています

他の View フレームワークも勿論利用されていますが、React.js のその後の発展には目を見張るものがあります。便利なライブラリが雨後の筍のように公開されました。CSS Modules の流れも汲みして、デザインやレイアウトと共にビジネスロジックをコンポーネントとして責務分離をできるようになった結果、中規模のサイトを作るようなユースケースであれば、大抵すでに OSS において開発された車輪の数々がありました。Relay Relay や Redux などがイベント処理を支え、 GraphQL との化学反応による Developer Experiences の向上も人気を博し、とりあえず React.js を知っておけば困らない状況でした。Gatsby や Next.js のような便利なフレームワークも産まれ、中規模以上の開発にも耐えうるテンプレートによる柔軟性と開発速度を享受できるエコシステムが生まれました。

2018 年に Backend Engineer、さらにその後 2020 年に Site Reliability Engineer に転向してからも、React.js に時間を投資した十分な見返りを得ることができました。スタートアップで働いた 2017 年の間たった一年分の時間しか投資していないのに、自分でサイトを作るときは React.js とフレームワークを用いればものの数十分もあればそれなりの出来栄えのサイトを作れましたし、ブログやポートフォリオも難なく作れました。仕事でも、SRE が開発する社内サイトや内製アプリケーションのフロントエンドの実装にも活かせました。

「React.js なんてすぐ枯れる」と思っていた自分には申し訳ないくらいのお釣りが来ました。

「予測」なんてできない

先日、過去にブックマークした記事の振り返りをしていたら、以下の記事が出てきました。

20年近くかけて少しずつやりたいことに近づいたソフトウェアエンジニアの生存戦略

「予想は外れる」という認識を持つ:「死にゆくものにコミットしない」と書きましたが、実際に死んだ技術を私は見たことがありません。私が「これは近いうちに人気がなくなって誰も使わなくなるだろう」と思ったもので、本当になくなったものは1つもありません。普通に使われていたり、ある分野に特化して生き残っていたりします。人気がなくなろうが、気にせず、その技術にずっと長く関わり続けて、幸せそうなエンジニアもたくさん知っています。むしろ、死にゆくものに取り組むメリットもあります。人気がなくなるので、競争相手が少なくなり、相対的な需要や給料が増えることがあるのです。ジョブセキュリティ的にも食いっぱぐれない可能性が高くなります。なので、自分の予想は外れることを前提で、ゆるやかな気持ちで勉強に取り組むようにしています。

ジュニアエンジニア時代は、ジョブセキュリティで悩む毎日でした。投資できる時間は限られているので、活躍できるソフトウェアエンジニアになる技術に投資したい。当時の私が出した答えは「Computer Science (CS) の基礎」でした。応用情報技術者試験で出されるような基本的な内容から、コンパイラの原理、ネットワーク・プログラミング、Linux のイロハを学びました。

そんな中でも、同時並行で仕事で必要なスキルを学ぶ必要があるので、正直嫌々 React.js に手を出したわけですが、結果としては期待以上の得をしているわけです。CS の基礎が中長期で必要となるという考えは変わっていませんが、自分が過去に学んだ技術を棚卸しながら振り返ってみて、新しい気づきに出会ったのでした。

「この技術が使われそうだから」とか、「この技術を学ぶと給与が上がりそうだから」といった外部要因による学習は、モチベーションが続かない。逆に、山を張って"勉強"した結果、期待収益が得られなかった時の喪失感が大きい。それならば、知的好奇心に従って、その時に学習したいものを優先する。今はそんなモチベーションで学習しています。

その学び方にも良し悪しがあり、大学のカリキュラムのように自分が興味が最初はなかった分野でも幅広く学ぶことで得られる知見や発見もあるので、その観点も忘れずにいたいとは思いますが、少なくとも「この技術は当たる!」というような考え方は避けたい。

未来を予測するという行為は、自分が思っている以上に「当てずっぽう」なもの。来年に株価が上がる銘柄を当てる確率も、都市で地震が起こる確率も、大して違いは無いでしょう。「予測は外れるものだ」と自分に言い聞かせることは、歩みを止めないための第一歩なのです。

2022-07-10