プログラミングは学ぶ必要がなくなるのか?

島澤甲氏:生成AIは本当に変化をもたらしているかなと思います。今日聞かれているみなさんの中にも、「ぶっちゃけ俺らって、どうなっちゃうのかな?」と、「けっこうコーディングをやってきたけどなぁ」と思っている人が多いんじゃないかなと思います。技育祭も、生成AIの未来についてのセッションがすごく多いので、これはやはりすごく注目されているテーマだし、大事なテーマだと思うんですよね。

なので、このセッションではあえてまったく違う切り口で、この生成AIというテーマを切ってみようかなと思います。ちょっとみなさんに1つ。これは先月かな? まぁまぁネットでもバズったというか話題になりましたけれども、NVIDIAのジェンスン・フアンさんが「もうプログラミングは不可欠ではない」というようなことを提唱しましたね。知っている人もけっこう多いかな?

これについて、みんなどう思いますか? プログラミングは学ぶ必要がなくなると思いますか? それとも「いやいや、そんなことはないだろう」と思いますか? ちなみに私は、さすがにポジショントークなので、学ぶ必要がなくなるとは思っていないです。

実はこのセッションで伝えたいことは、「あ、俺はなくなると思います」でもいいし、「いやいや、そんなわけないでしょう」と考えるのでもいいというところで、このプログラミングを学ぶ必要があるのか、ないのか。どちらでもかまわないので持論を持ってほしいなというのを伝えたいと思っています。

なぜそんなことを言うのかというと、私もこの業界に入って20年ぐらいやっているわけなんですけれども、本当に過去に変化なんて死ぬほどあったんですよ。技術の価値なんて本当に常に栄枯盛衰です。

16進数を見ると何をやっているかがある程度わかる

私の高校時代の「これはプログラミングというのか?」というのをちょっと紹介します。この話題についてこられる人がいたら、うまい酒が飲めそうだなと思うんです。

(スライドを示して)なにかアプリケーションがあるじゃないですか。とりあえず電卓を用意しましたけれども、これをHEXで開いたことがある人はいますかね? プレゼン中はチャットがぜんぜん見られないので、なにかコメントをいただいていたらすみませんね。ちょっと今は見られていないんですけど。例えばこれはHEXで開くと、こんな感じで16進数の羅列になりますよね。

この意味を知っている人がどのくらいいるかわからないのですが、実際にこれには意味があるんですよ。これはディスアセンブルをかけてやると、それぞれの文字の意味合いがこんなかたちでわかるんですね。といっても、これはかなりわかりにくいですよね。例えば今カーソルが当たっているEB 31というのは0x31にジャンプするという命令です。

他にも、例えば90といったらNo Operationで、75だったらJNE、Jump Not Equalでと、こういうのが決まっているんですよ。私は高校時代にこういったものを拗らせていて、この16進数を見ると何をやっているかがある程度わかるくらいまでけっこういったんですね。実際、このスキルがあると何ができるかというと、プログラムをバイナリから直接書き換えることができるんですよ。

当時私はゲームがけっこう好きだったんですけど、面倒くさいのがすごく嫌いで、レベル上げはあまりやりきらんという感じだったんですよね。普通だったら敵を倒してレベルを上げますが、バイナリをいじってやると歩いただけでレベルが上がったり、何ならゲームスタート直後にレベルMAXにしたり、何ならゲームスタート直後にエンディングにしたり。

それは何がおもしろいのかという話なんですけど、実はプログラムというのはこういうのを書き換えてやると、自分の任意の動きに書き換えられるんですね。今これをやっている人はあまりいないと思いますが、当時私はこのレベルのものをやっていました。

プログラミングの技術は常に変化する

当時はコンパイラを使わないで直接マシン語を書いたほうがCPU性能が引き出せていいんだよ、みたいなのもあって、アセンブラを使わないでマシン語でという時代があったのもやはり事実なんですよね。

そうであっても、このテクニックはぶっちゃけ高度で、これをやりきっている人を私もエンジニアをやっていてなかなか出会わないんですが、じゃあ高度だから価値があるかというと、正直私が商売をやり出して一回も見たことないんですね。

コンピューターウイルスの解析などでは一部使われたりしていて、これはすごく難易度が高いし、(できる)人も少ないのですが、実際にこの技術自体に現代において価値を持つかというと、けっこう悩ましいです。(価値が)ないとは言いませんが、商売として飯を食べていくにはしんどいかなと思います。

(スライドを示して)まずみなさんに押さえておいてほしいものとしては、プログラミングの技術は常に変化するんですね。私はハンドアセンブルみたいなこともやりましたが、今の人はこんなところからやらないですよね。

それからアセンブラベースになって、普通に高水準言語でのコンパイラベース、インタプリタベースと発展していって、中間言語になったり、仮想化技術も当然出てきて、クラウドがメインになってくるとサーバーレスや分散処理といったテーマが価値を持ち出して、今はコンテナやAIやそれこそLCAP、ローコード、ノーコードみたいなテーマが技術のアセットとしては重要性を増してきているのかなと思います。なので、その先にLLM開発があっても、まったく不思議ではないと思うんですよね。

需要が生まれる技術・なくなる技術は当然あって、個々の技術の価値は基本的には不安定だと思ったほうがいいです。「Hadoop」が出た当時は、Hadoopのエンジニアは月に500万円稼ぎましたからね。でも今も同じかというと、決してそんなことはないので、まずこれを前提として考えてもらえるのがいいのかなと思います。

価値のある技術は3次元、もしくはそれ以上にディメンションを持っている

そうしたら、みなさんは実際にどうしたらいいのよ? エンジニアとしてのキャリアは、どういうふうに組み立てたらいいのよ? と考えられるかもしれません。ここからはみなさんへのメッセージとして、本質的に求められるエンジニアとして必要な技術はいったい何だろうというところを、私の1つの持論ですが話していきたいと思います。

(スライドを示して)私はエンジニアにとって価値のある技術は3次元、もしくはそれ以上というように実はディメンションを持っているんじゃないかと思っています。今真ん中に「Application」があります。アプリケーションは私たちの製品の主戦場だし、当然アプリケーションの裏側の技術は重要なんですね。

フレームワークや言語、さらにその下にはアルゴリズムと、ソフトウェアエンジニアとしては、こういうアプリケーションを支えるベーステクノロジーはすごく重要な技術だと思うし、たぶんみなさんもそう感じるんじゃないかなと思います。でも実際は、Z軸以外もあるなと私は常日頃思っています。

例えばアプリケーションと関連はしますが、どちらかというとソフトウェアエンジニアとしては、まぁ知らなくてもいいんじゃないかなみたいな技術もあるわけですよ。まったく異なる技術軸もあると思っていて、例えばOS。OSぐらいはある程度知らないといけないと思うのですが、ではその下で動いているファームウェア、そしてその下で動いているハードウェア、それを支えるマテリアル、素材。

こういうところをみなさんが意識することは、どのくらいありますかね? あまりないんじゃないかなと思います。でも実際のところは、ハードから始まるイノベーションはけっこう多いんですよ。例えばインターネットみたいなものも、こういったルーティングされたネットワークが物理的に世界規模で広がるから発展することが当然ありますし、身近なところでいったらスマートフォンですよね。

スマートフォンの登場によって、実はアプリケーションのあり方は大きく変わりました。潰れていった会社も、私の周りでもけっこうあります。実はこのハードから始まるイノベーションは多いし、その下の素材。今はなかなか想像がつきにくいかもしれませんが、量子コンピューターのように別の次元のコンピューティングが出てきたりすると、当然私たちにもアプリケーションの世界にも影響があります。

何が言いたいかというと、このアプリケーションに影響を与えるものは、実は言語やアルゴリズム以外にも本当に多様にあるということです。なので、私はこういった異なる技術軸を持つのはすごく大事だと思っています。

プロダクトを魅せる技術・伝える技術・信頼を作る技術…エンジニアに求められる技術

さらに変わった技術軸にいってみましょうか。これはX軸と置いていますが、実はアプリケーションの前には、聞く技術や提案する技術のように顧客に対する技術があるんですね。その前に社会、ソーシャルで、この顧客の流れの大元となるような、将来を予測するようなテーマはあると思うのですが、こういうのを見抜くのも実は技術なんですね。

そして、アプリケーションを作った後というのもあって、それは作った後に魅せる技術、伝える技術です。お客さんに対して「この製品は、こういう課題解決につながっていますよ」みたいなかたちでやるのも1つの技術です。(あとは)セールスで、入り込む技術、信頼を作る技術です。これは今日は深掘りしませんが、実はこういうのはすごく重要な技術軸だと思っています。

なので、開発技術力はすごく重要なのですが、エンジニアを構成する要素の一部だと思っているんですね。

この赤枠で囲ったわかりやすい技術だけで勝負していると、技術の変化に乗り遅れた時にけっこう行き詰まったりすることがあります。他の視野を持っていたり人を動かすような技術を持っている人は、実はそれだけですごく価値があるし、生成AIみたいなものが出てきても、本質的にその人の価値は生成AIに食われるものではないと思っています。

LLMは、この技術のディメンションの中においては重要な技術ですが、全体から見ると技術要素のごく一部でしかないという捉え方もできるかなと私は思っているんですね。なので、生成AIがテーマとして出てきた時に、あまり右往左往するようなものでもないのかなと。やはりこういうのは持論を持つのがすごく重要だと思います。

例えば受け身で、生成AIはこういうものだという感じで捉えてしまって、自分で考えることをしないと、やはり損をします。これはあくまで私の考え方ですが、「こんなことない」「LLMはもっと大きいんだ」という持論があってもいいと思います。でもやはりこういう、何かしらの技術を体系的に考えるという、そういうフレームワークを持っているのがいいんじゃないかなと思います。

(次回へつづく)