Q. 技術者は常に流行りの技術を身につけるべきでしょうか?
以前「ソフト屋とハード屋どちらが得か?」という論考をブログに書いたことがあります。 議論の詳細は省きますが、結論としては「ソフトウェアエンジニアとハードウェアエンジニアの技術体系の特性には大きな差異があり、それによって必然的に社会から求められる振る舞いが変わってくるが、それに直接的な優劣は存在しないため好きな方を選べば良い」というものでした。 その特性の差異というものは、具体的には「何をベースにしたエンジニアリングか」という点の違いです。
ハードウェア関連のエンジニアリングはベースが自然科学です。物理学、電磁気学、物性学、これらは人間が考えたものではありません。自然の法則から外れることなく、それに沿って人間ができることをやるのがハードウェアエンジニアリングです。 ソフトウェアについても「基本は数学だ」とおっしゃる方は多いかと思います。しかしながらソフトウェアエンジニアのほとんどがそれを意識する必要はなく、むしろ「誰かが作った効率的で合理的なルールの上」で作業することが主な仕事です。
したがってハード屋には最新技術も重要ですが、ベースになる過去の技術の知識と経験がなければできないことの方がほとんどです。 しかしソフト屋には、例えばJavaはCをベースにできていますがJavaでアプリ開発に関わっているけどCは書いたことがない、というような人は多くいることでしょう。さらに言えば究極的に言語はハードウェア上でアセンブラ(機械語)で動いていますが、これをいじることができるエンジニアなどもはやCOBOLエンジニア並みの希少価値ではないでしょうか。
ソフトの領域では優劣の入れ替わりが極めて激しいです。 2012年のGoogle IOで猫をAIに自動認識させる以前は、機械学習のエンジニアの価値など多くの人が気に留めていなかったのではないかと思います。しかし今や高給取りの代表選手です。 私が大学生の頃はHTMLは直打ちでした。Pealが流行りで私も自作で色々と作った記憶があります。しかし20年後の今、そんなことをしている人も口にする人も全くいません。
一方ハードの領域はノウハウの高い人に市場価値が発生しやすいと言えます。 例えば「不要輻射」というものがあります。電子機器から出る有害な電波のことで各国が規制を作っています。この不要輻射を下げるための理論体系は古くからありますしシミュレーション技術は日進月歩で成長しています。 しかし、やはり問題は起きます。 理由は場合によって様々ではありますが、そのほとんどが「単体では良好だが組み合わせると上手くいかない」「追加で入れたあの部品が悪さをしているのかどうかがわからない」などのような、想定の限界に起因したものです。 これ自体はソフトウェアでも似たようなことが起きます。しかしソフトウェア開発であれば1週間開発が止まるとか、2, 3日徹夜で解決しなければならないというような手戻りも、ハードウェアでは金型の作り直しで数ヶ月スケジュールが遅延する上に数百万円失う、というようにダメージがどうしても大きくなりがちです。 このような「トラブルのニオイ」に敏感なのはやはり多くの場合でベテランなどの経験値とノウハウが高い人々です。 3Dプリンターが出てきて一部の市場は削られましたが破壊まではされていません。電子基板の作り方は彼これ何十年も同じです。このように根本的な時間の流れのスピードの違いも両者には存在します。
したがって、タイトルの質問に関しては基本的にソフトウェアの話として聞きましょう。ハードウェアエンジニアに対しては「流行り技術より自分の専門性にできる限り特化しなさい」とアドバイスしたいです。
ここで2つのエピソードを紹介します。
ひとつめのエピソードは、もう5年ほど前の話にはなりますが、当時の部下で20代中盤のエンジニアKくんから「時代はPHPですよ」と言われてギョッとしたことがあります。サーバーサイドを構築する上での言語をどうするか、という議論の中での発言だったので、みんなが一笑に伏すなか私は彼がどういう思考でそういう結論に至ったのかが気になりました(その時の結論はScalaでしたが)。 彼は「プログラミングの理想は1行で完了するコード」と言い切ります。要するに数多く存在するFrameworkを深く理解した上で目的に応じて如何に効果的に使いこなすかが重要だという主張です。 確かにそれには一理あるように感じました。 そして何故PHPかというとPHPの多くのFrameworkが中国で使用されており、Commit数が他の言語とは桁が違うレベルで 極めて多い、つまりこれらのFrameworkは既に多くの人々に叩かれた後で「十分過ぎるほど枯れている」ということです。 サーバー運用を経験したことがある方はご存知のとおりに、メンテ業務の中で非常に重たくかつ重大事件に繋がるまで後回しにされがちな業務に「言語やライブラリ、SDKのアップデートに対する対応」があります。したがって使用するツールは極力枯れているものを選ぶのが定石です。その観点においてPHPは時代がぐるっと回って今は非常に有用だということです。
ここでPHPはあくまで事例ですが、開発の目的は何かしらを構築することであり、そのために最新のものが取り立てて必要でなければ、十分に用途を満たしかつ安定的なものを選択することは非常に合理的です。
もうひとつのエピソードは、こちらは2年ほど前の話ですが、AIエンジニア数名と一緒に仕事していた時期に私が率直に思ったことを共有します。 それは彼らがとても勉強熱心だということです。 AIは多くの分野でまだまだ黎明期というべき状態にあります。そのため多くの有益な叡智は大学などでの研究をもとに論文として発表されることが多いです。したがって彼らは非常に多くの論文に目を通しています。そのほとんどが言うまでもなく英語です。 GoogleやAmazonなどが用意したAI関連のツールを使用しているだけの人は「AIエンジニア」と呼ぶことはできないと私は考えています。先ほど述べた通りに黎明期にある業界では、まだまだ「乗っかるだけの人」よりも「新たなアルゴリズムなどを思考しチャレンジする人」の方がずっと求められているからです。 例えば20年前、Excelでマクロを組むのが上手な人を何か専門職的な呼び方をしていたということはなかったでしょうか。しかしその業務は徐々に簡略化されコモディティ化され、いずれ誰にでもできる業務に落ちるのです。「エンジニア」で居続けることができるのは、表計算の仕組みであったり、新たなグラフ描画の手法であったり、UI/UXなどを専門性を持って追求し続けた人たちだけです。
「流行り技術の追求」はするべきではありません。 しかしもしそれがあなたにとってとても興味があるものであった場合は、ぜひ「寝ても覚めても〇〇のことばかり考えているか」「〇〇の追及のためにキャリアを捧げる覚悟があるか」というくらい厳しめに自分の気持ちを評価してみてください。
このポストの内容は以下の書籍の一部(原文)です。興味のある方はぜひ書籍をお求めください。