プログラマーとして技術のコモディティ化にどう向き合うか

Large Language Model (LLM) の進化によって、プログラミングの現場は大きく飛躍を迎えることとなった。

集合知の代名詞であった Stack Overflow は、Open AI の開発する ChatGPT に取って代わられた。簡単なコードを生成したり、エラーの内容について説明してもらったり、複雑な概念を教えてもらったりするために、Google の検索ボックスではなく ChatGPT を使うのが当たり前になった。教師やメンターと対話するように、苛立ちを見せることもない万能な対話型学習の相棒として使うことも増えてきた。複雑な正規表現のルールを覚えるために 500 ページの本を読む必要はなく、ユースケースと制約条件を与えるだけで答えが出てくるようになった。

ChatGPT だけではない。GitHub Copilot は、日常のプログラミングにおけるつまらないボイラープレート生成を簡単に代替わりしてくれる。英語がわからなくても、コードの読み手に伝わりやすい命名規則やモジュールを提案してくれる。テストコードも提案してくれる。プログラムを書くのに、キーボードを打つ物理的速度に律速される必要がなくなった。

もちろん、現時点のツールにも限界はある。クラウドでのリソースを富豪のように使うユースケースについて批判もあるだろう。"Garbage In, Garbage Out" の考え方に即すれば、とはいえ誰か頭の良いプログラマーが引き続き素晴らしいコードを教師データとして創造し続ける必要はある。AI 脅威論を唱えたいわけでもない。

それでも、技術の進歩によって、プログラミングスキルの大半がコモディティ化していることに、異論を唱える人は少ないだろう。

技術の進歩によって人間がより創造的な仕事に取り組めるのであれば大いに大歓迎だと思うのだが、では、技術がコモディティかする中でプログラマーは何に選択・集中していくべきなのだろうか。必要以上に憂うことなく、かといって時代の進化に置いてきぼりにされることもなく、これからも社会の発展に寄与し続けていくために、どうマインドセットを変えていったらいいのだろうか。

プログラマーにとってのコモディティ化とは何か

そもそも「コモディティ (commodity)化」とは何か。

経営学や経済学でよく使われる言葉であり、新聞やブログ記事でも頻繁に登場するレベルで市民権を得た言葉なので、知っている人も多いと思うが念のため説明しておこう。

コモディティ化とは、「競争市場に出回っている商品・スキル・サービスなどが、お互いにどれを選択しても大差がない」状態のことを言う。つまり、どれを選んでもおおむねオッケー、合格点だ、ということになる。

では、プログラマーにとって技術がコモディティ化するとは、どういう意味だろうか。

今までコンピューターサイエンスを体系的に学び、少ない時間を投資した人にとっての専売特許であるプログラミングというスキルが、技術の発展とツールの進化によって、誰にでも簡単に行われるようになる、ということだ。これに疑問を持つ人は今更少ないだろう。実際、プログラマーの裾野は広がっている。ローコードにノーコードはもちろん、複雑なアルゴリズムは簡単なデザインと UX の裏に抽象化されていく。

「いや、ちょっと待て。ベースとなる知識をしっかり学んだかどうかで、プログラムの品質は大きく変わってくる」という意見もあるだろう。完全に同意だ。しかしここで言いたいのは、何か課題を解決するために、ツールさえ使えればその裏側の仕組みを理解する必要はないということだ。

自動車を運転するのに、内部の内燃機関や電気系統について詳細に理解している人がどれくらいいるだろうか?そして、自動車を運転してスーパーに買いに行くだけなのに、それらの知識がどれくらい必要だろうか?

プログラミングスキルがコモディティ化していく中で、重要なのは「課題解決のスキル」ではない。なぜなら、課題解決するためのスキルは、どんどん自動化されていくからだ。重要なのは、どんな課題を解くべきか、「課題発見のスキル」なのだ。

もちろん、課題解決自体に興味がある人は一定数いるし、その人たちの価値は失われないだろう。世の中には、車自体が大好きで、車の構造に熟知し、素晴らしい仕組みを作り続けるエンジニアがいる。そのように、プログラミング言語自体やフレームワークを作る人は残り続けるだろう(これがどのカテゴリーに属するかは後述する)。だが、必要とされる数は圧倒的に減っていくはずだ。また、全員がそうあるべきでもない。

では、今までプログラマーであった人が、コモディティ化するテクノロジー社会の中で、価値を発揮し続けるべきためには、何を意識したら良いのだろうか。

僕は君たちに武器を配りたい

ここでちょっと寄り道をする。

瀧本哲史先生という、偉大な投資家兼経営コンサルタントの方がいた。残念なことに 2019 年に逝去されてしまったのだが、彼は京大の客員准教授としてのみならず、その本質をつく数々の書籍を世に出すことによって、今も少なくない読者に影響力を与え続けている。

私が大学生時代、そう、ちょうど東日本大震災が起こった年に『僕は君たちに武器を配りたい』という本が出版された。当時学生の間で話題になり、大学の生協で手に取った私は大きな衝撃を受け、むさぼるように読んだことを覚えている。ふとしたきっかけで最近読み直したのだが、10 年以上経った今でも有用なエッセンスが詰まった良書だとえらく感動した。

有名な本なのでご存知の方も多いと思うが、簡単に説明させていただく。「武器」といっても戦争の話ではない。グローバル化が訪れて、強制的に他の国との競争環境に晒されるようになった昨今。資本主義が富める者と飢える物を残酷に分けるこの競争社会において、スキルや商品がコモディティ化していくことは避けられない。では、その社会を生き抜くためには、どのような心構えを持つべきなのか、若者に向けて書かれた一冊なのだ。

そしてここで私がこの一冊を紹介する理由はただ一つ。冒頭で述べた「プログラマーとして技術のコモディティ化にどう向き合っていくべきか」という問いに対して、考える視座を与えてくれるからだ。

儲かる漁師と、儲からない漁師

さて。ぜひ読んだことをない方は本書を手に取ってもらいたいのだが、その中で印象的だった一つのエピソードを紹介しよう。

それは、「海で魚を取る漁師にも、儲かる漁師と、儲からない漁師がいる」というストーリーだ。もちろん比喩であり、どのような漁師になるべきか、という示唆を含んでいる。

注)ここでは、本書をもとに私が意訳した内容を載せる。意図を変えないように努力しているが、本文はぜひご自身で確認していただきたい。

まず第一に、儲からない漁師の典型は、自分では何も考えず、ただ人に使われるだけの「コモディティ」の漁師だ。代わりはいくらでもいる。 では、儲かる漁師にはどのような漁師がいるだろうか。6種類の漁師がいる。

一番目の儲かる漁師は「トレーダー」だ。つまり、「とれた魚を他の場所に運んで売ることができる漁師」だ。海で釣った魚を、魚が取れない山の上の村まで運んで行って売ることができる。

二番目の漁師は「エキスパート」だ。つまり、「一人でたくさんの魚を取るスキルを獲得した漁師」だ。他の漁師の二倍の魚を釣ることができるので、当然収益は二倍になる。

三番目の漁師は「マーケター」だ。言い換えると「高く売れる魚を作り出すことができた漁師」だ。他の漁師がどうせ売れないからと捨ててしまっているような魚に目をつけて、新しい調理法というストーリーを通じて付加価値をつけて売ることができる。

四番目の漁師は「イノベーター」だ。他の漁師が釣竿で釣っている中、網漁やリール、ルアーの発明によって、より楽に、よりコストをかけずに魚を釣ることができる「新たな仕組みを作り出すことができる漁師」だ。

五番目の漁師は「リーダー」だ。人をまとめるスキルがあるので、他の「多くの漁師を配下に持つ」ことで、全体としての収益を上げる。

最後の六番目の漁師は「インベスター」だ。自分自身では釣りはしないのだが、漁についての知識は深く、市場での魚の売れ行きや新しいルート、その日の天候といったあらゆる側面についてアンテナを張っている。漁船と網を所有し、乗組員を雇って働いてもらう。

だいぶ意訳した。さて、これら六種類のタイプの漁師を、プログラマーに置き換えてみよう。

「トレーダー」タイプのプログラマー

技術がそこまで発展していない領域に、テクノロジーを持ち込んで大きくプロセス改善ができるプログラマーだ。最近流行りの DX 文脈で活躍するプログラマーといえるだろうか。

例えば、医療業界に新しい SaaS を導入したり、政府機関のペーパーワークを新しいツールでプロセス改善したり、教育現場に AR/VR を導入してインタラクティブ性の向上による教育効果の向上を達成したり、といったイメージだろう。

「エキスパート」タイプのプログラマー

複数のプログラミング言語に精通し、数々の業界を渡り歩いたがゆえに課題解決スキルが非常に高いプログラマーだ。

データベースからネットワークはもちろん、Linux マシンのホストレベルでのパフォーマンスチューニングから、グローバルに分散するシステムの水平スケールするシステムの設計もでき、監視システムやプロセス設計もできるイメージだ。

「マーケター」タイプのプログラマー

枯れた技術にも新しい付加価値を見出し、思いもよらない場面で利用価値が高いことをストーリーとして示すことができるプログラマーではないだろうか。

決して最先端ではない技術をうまく組み合わせて、確実に動作するシステムを作ることができる。任天堂に脈々と伝わると言われる「枯れた知識の水平思考」も、言い換えると「既存の技術に、新しい課題を発見してぶつけてみて、奇想天外なストーリーを生み出す」プロセスと言い換えられるのではないだろうか。

「イノベーター」タイプのプログラマー

これはわかりやすい。プログラミング言語自体やフレームワーク、機械学習の文脈で言うならモデル自体を研究していく競争力ある一部の OSS プログラマーやリサーチャーだろう。

「リーダー」タイプのプログラマー

人を管理するという点で、マネジメントスキルや共感力を備え、プロジェクトを推進していくことができるエンジニアリングマネージャーがリーダータイプにあたるだろう。

自分自身で釣竿を垂らすことはなく、メンバーである漁師のモチベーション設計やチームづくりといった点に優れているプログラマーだ。

「インベスター」タイプのプログラマー

これは単純にソフトウェア業界で起業する起業家兼プログラマーと言って差し支えないだろう。ビッグテックの高給やスタートアップの Exit を通じてある程度まとまった資金を得た後で、プログラミングのスキルと人脈を糧にエンジェル投資家として活躍するようなプログラマーもこのケースに当たる。

価値を失っていく二種類の漁師

さて。

問題はコモディティ化する中で、今までは儲かる漁師に数えられていたタイプの漁師にも、価値を失っていくタイプがある。

どのタイプか想像ができるだろうか。それは、最初に挙げた「トレーダー」タイプと「エキスパート」タイプの漁師なのだ。なぜか。

トレーダータイプが価値を失っていく理由

まず、トレーダータイプについて。

確かに、コモディティ化初期においては、テクノロジーと現場のドメインの両方をわかる誰かが、課題とツールを橋渡しする貴重な人材として、大いに活躍するだろう。

しかし。ツール自体が圧倒的に進化していくにつれて、その技術革新が遅れた業界の人たちが、プログラマーのアドバイスを受けることなくツールを使いこなせるようになる。そうなれば、中途半端に技術とドメインが分かるプログラマーは不要だ。特定の業界においてドメイン知識が豊富で、課題発見することができる人たちが、最初から自分たちでツールを利用した方が、コミュニケーションコストが嵩まないため、早いし安いし、成果も出しやすいだろう。

この傾向は、ツールの進化によって下支えされる。昔は Web サイトを作るのに、ゼロからコーディングできる Web プログラマーが重宝されたが、今やノーコードツールを使ってプロトタイプを作るのが容易になっている。EC サイトも、Shopify のようなツールを使えば簡単にセットアップできる。

ツールが進化するにつれて、課題解決のスキルはインフレする。その時、一生懸命時間をかけて学んだプログラミングのスキルは、すでに陳腐化しているのである。

エキスパートタイプが価値を失っていく理由

エキスパートタイプが食えなくなる理由は、技術がコモディティ化することによって参入障壁が圧倒的に下がり、「ほどほどにエキスパート」な人材を育成することが簡単になるからである。せっかく積み重ねてきたスキルや知識自体が、あっという間に過去のものになるのだ。

これをなんとなく感じている現役プログラマーは多いだろう。フロントエンドの業界一つをとっても、目先のツールは毎年、いや半年ごとに変化してきている。もちろん、「ベースとなる本質を理解すれば技術の乗り換えは簡単だ」という意見があり、これには大いに賛成する。ただし、エキスパートタイプである限り、一生涯その「学んでは、捨てる」を繰り返し続けないといけないということだ。いつか限界が来るまで。

技術がコモディティ化する社会で、どう生きるか

以上、滝本先生の著書を引き合いに出しながら、コモディティ化するなかでどのようなタイプが生き残りやすいかという点について、プログラマーを例に考えてみた。

一つ、声を大にして言いたいことがある。私はこの記事を通して、決して「一部のプログラマーは廃れていくからプログラミングを学ぶ必要がない」とか、「みんなリーダータイプやインベスタータイプになれ」と言いたいわけでもない。

滝本先生も本書で言っていることであるが、長いプログラマー人生の中で、ケースバイケースでこのタイプを行き来しながら、社会の課題を発見していくのがいいのではないか、と考えているし、私自身もそうありたいと思っている。

また、この記事を読んで「プログラミング学ぶの、やーめた」という人が出るのも避けたいとは願っている。

なぜなら。新しいことを学ぶという営みは、それ自体尊いものであり、知識の獲得という楽しみを奪うことは誰にとってもするべきではない。

一方、現実問題として、「学ぶ」という行為は贅沢な行為でもある。学ぶという環境に身を置けない人だってたくさんいる。その中で、もし学ぶという環境を選択することができるなら、そしてその中でもし(私自身も大好きな)プログラミングを学ぼうと思っているなら、純粋な好奇心で学ぶか、戦略的なキャリア形成かのどちらかであってほしいと思うのだ(念の為、このどちらなのかはどちらでも良いと思っている)。

そして、もし後者の「戦略的なキャリア形成」で学んでいるなら、ぜひ「なんとなくプログラマーは給与が高そうだから」とか「今の仕事が嫌だから」といった曖昧な理由ではなく、テクノロジーを利用してあなたが真に活躍できるプロジェクトに貴重な自分の時間を投下するためにも、技術がコモディティ化するという厳しい現実を踏まえた上で、学習戦略を練ってほしいと思うのだ(純粋な好奇心で学ぶタイプであれば、この記事なんか読まずに、好きなように好きなだけ学べば良いと思う)。

もう一ついうなら、なんとなくプログラマーになった人が、技術がコモディティ化した残酷な競争社会に敗れたことを理由に、プログラミングを嫌いになってほしくない。私自身プログラミングに大いに楽しませてもらっているし、助けてもらってきたのだから、プログラミングを好きであり続ける人が少しでも多くあってほしい、そんな願いもあってこの記事を書いてみたのだ。

最後はとんでもなく青臭い締め方になってしまったが、プログラマーとしてのキャリアに悩む誰かの助けに少しでもなれば、嬉しい(将来の自分を含めて)。


更新

その後信頼する友人や知人から貴重なフィードバックをもらい、批判思考を持って自分の記事を振り返ることができました。せっかくなので、考えをもう少し深めるために、自分の記事に自分で反論を考察していこうと思います。

Q. 他の漁師のタイプはいるのではないか?

本文で挙げられた6つの漁師のタイプだけでは、すべてのパターンを表現できていないはずです。世の中は、もっと多様性に満ちている。

まず考えられるのは、各パターンの複合的なタイプでしょう。例えば、「新しい漁の方法を考えながら、それに付加価値をストーリーとして生み出し新規開拓もできる」ような、「イノベーター x マーケター」パターン。「複数のパターンを行き来しながら生きていく」という表現を行いましたが、言い換えているとも言えます。

他に考えてみたいのが、そもそもなぜ魚が欲しいのか、という欲求の根源から考えてみましょう。魚はタンパク質の供給源です。魚にしかない栄養源もありますが、タンパク質を摂るだけなら魚である必要はあるでしょうか。畜産業で牛や豚を育てて販売しても良いのではないでしょうか。他の人が漁をすることで地元の海の競争が激しくなってきたなら、人が少ない更地でも購入して、そこで畜産業を始めてみたらどうでしょうか。

ということで、地元の近海における漁業というレッドオーシャンを抜け出し、別の産業にピボットする漁師も現れてくるかもしれません。そもそも技術は目的ではなく手段、その課題を解決するためにプログラミングという手段にこだわる必要はありません(ここでも課題発見のスキルの重要性がわかるでしょう)。具体例としては、プログラマーからキャリアチェンジする例がわかりやすいでしょう。

Q. 「課題発見スキル」は「課題解決スキル」より重要なのか

コモディティ化によって、課題解決スキル自体はどんどん広まっていく。それによって、誰もが平均点を取ることが簡単になっていく。であるがゆえに、どの課題を解くか、という発見力の方が高まっていく。概ねそのような主張がされていました。

答えを持っているわけではありませんが、課題発見スキルだってコモディティ化によって容易になっていく側面はあるかもしれません。課題発見をするために必要なツールだってありますし、ドメインエキスパートの知識が容易に言語化して他者に共有可能な場合であれば、ドメインエキスパートで居続けることによる価値は失われていくでしょう。

ここで重要なのは、「課題発見スキルにしろ課題解決スキルにしろコモディティ化によって参入障壁が失われていく」点であり、それらスキルを比較するメリットはそこまで無いということかもしれません。いずれにせよ、参入障壁が失われていくことで他の本質に自分の時間を投下できることは喜ぶべきことで、逆にいうと投下すべきでない領域は、課題発見であれ課題解決であれ早めに見極めましょう、ということです。

Q. 「エキスパートタイプ」の価値は本当に失われていくのか

という質問をいただきました。

どうでしょう、どのタイムスパンでものを考えるか、というのも影響しているかもしれません。

一年、二年くらいのタイムスパンであれば、先行者利益も相まって特定の知識を持っている人がしばらく優位性を保つ、というのはあるでしょう。いくらコモディティ化が進んだと言っても、新しい技術によって取って代わられるのに数日や数週間ということはないでしょう。

ですが、三年から四年くらいのタイムスパンであれば、そしてタイムスパンが長くなればなるほど、価値が希薄化していく確率は上がっていくのではないでしょうか。

価値というのは、「ある」「なし」というゼロイチ思考ではありません。もっとグレーで曖昧なもの。だんだんと年月を追うごとに希薄化していき、気がついたら価値を失っていた、ということになっているのかもしれません。

Q. 他に価値を失っていくタイプもいるのではないか

十分にあるでしょう。そもそも、以前の記事で挙げた六つのタイプでは説明しきれないタイプも十分にあるはずです。

また、事業領域によってタイプ別の価値を失う低減期の速度は違うはずです。なぜなら、そこで必要なツールや知識のコモディティ化の速度が違うから。

逆に前回の記事を読んで「起業家タイプなら安心だ」「マーケティングタイプなら一生食っていける」という思考停止に陥ってしまうほうが危険です。あくまでポイントは「自分の頭で考え続ける」ということであり、タイプの切り分けも前回の記事の考察自体もすぐに価値を失っていくかもしれません。


以上、自分の記事に反論を加えることでより深い考察ができないか実験してみました。

他にどんな観点があるでしょうか。もし面白い観点や批判思考を思いついたら、ご意見ください。

あの記事はあくまで現時点での考察のスナップショットにすぎません。ここで考えることを辞めずに、引き続き考え続けて、他の人に当てて、ブラッシュアップしていきたいですね。

2023-06-25