「人の要求とコンピューターの橋渡しは、AIには務まらない」エンジニアの成長に欠かせない三つの基礎知識とは?
生成AIの普及で、コードを書くスピードは劇的に速くなった。検索に時間をかける必要もなく、以前なら数日かかった試行錯誤が一瞬で終わる。そんな光景は、もはや日常だ。
ではエンジニアの成長プロセスも、同じように「短縮」されるのだろうか?
それとも、どれだけAIが進化しても、人の成長には変わらず時間と経験が必要なのか?
この問いに、『プロになるJava』の著者、LINEヤフーでJavaスペシャリストとして活躍するきしだなおきさんは、「AIでショートカットはできるが、やるべきことはむしろ増えている」と断言する。
その理由を深掘りすると、AI時代を生き抜くエンジニアに不可欠な「土台」の正体が見えてきた。
『プロになるJava』共著
LINEヤフー Javaスペシャリスト
きしだなおき(@kis)
九州芸術工科大学 芸術工学部 音響設計学科を8年で退学後、フリーランスでの活動を経て、2015 年からLINEヤフーに勤務。著書に、『プロになるJava』(共著、技術評論社)、『みんなのJava OpenJDKから始まる大変革期!』(共著、技術評論社)、『創るJava』(マイナビ)など。
きしだのHatena:https://nowokay.hatenablog.com/
目次
成長は効率化される。でも必要な時間は変わらない「人間・論理・物理」の三層がエンジニアの土台になる「実装」の中にある偶然こそ、AIに代替されない価値
成長は効率化される。でも必要な時間は変わらない
ーー単刀直入にお伺いしますが、AIの登場によって、エンジニアの成長プロセスは短縮されると思いますか?
プロセスは効率化されますが、成長に必要な期間は変わらないと思います。AIで早くなったのは「答えにたどり着くまでの時間」だけであって、「学びの深さ」そのものではないからです。
昔はライブラリの使い方を調べるのに、分厚い本やフォーラムを何時間も探していましたが、今ではAIに聞けば一瞬で分かる。試行の1回あたりにかかる時間は、圧倒的に短くなりました。
でも、エンジニアとして成長するには、「何回試して、失敗して、そこから何を学んだか」という経験の蓄積が必要です。AIはその試行のサイクルを高速化してくれるけれど、そこで得られる経験値をしっかり積み重ねるには、やはり相応の時間がかかります。
ーーとはいえ、昔より効率よく学べる環境であれば、成長スピードも速まりそうですが……。
確かに「同じ場所まで行く」だけなら、今のほうが速いです。でも、今はそもそも目指すべき到達点が上がっているので、最終的にかかる時間はあまり変わっていないと思います。
例えば、数十年前はX(旧Twitter)のようなシステムをリアルタイムで動かすだけでも大変でしたが、今はそれくらいはできて当たり前の時代です。ビデオ通話アプリにしても、映像が出るだけで感動していた時代から、今はUI/UXや安定性まで含めて完成度が求められるようになった。
求められる水準が高くなっている分、単に動くだけじゃダメで、設計や品質の観点でもちゃんとしたものを作らなきゃいけない。そう考えると、成長にかかる時間って、実は短くなっていないんですよ。
ーー求められるレベルも上がり、競争も厳しくなった中で、エンジニアには今、どんな力が求められているのでしょうか?
まずはたくさんの分野に触れて、自分なりの関心や強みを見つけていくことですね。その過程で、自分だけの視点や判断軸が育っていきます。
もちろん「幅広く経験する」といっても、ただ表面的に触れるだけじゃダメで、ちゃんと手を動かして試す必要があります。試行錯誤することで、「この設計は危ないな」とか「この構造は崩れやすいな」という感覚が自然と身に付いていくものなので。
ただ大前提として、「基礎」は絶対に裏切りません。コンピューターアーキテクチャ、論理、アルゴリズム、ソフトウエア工学……こういった分野は、時代が変わっても変わらず必要になる。結局は、そこが「土台」になります。
「人間・論理・物理」の三層がエンジニアの土台になる
ーー質の高い試行錯誤をするには、その土台になる基礎知識が不可欠だと分かりました。きしださんは、どのように学んでこられたのでしょうか?
全部挙げるときりがないんですが……特に重要だと思うのは三つの領域です。「ソフトウエア工学」「論理学」「物理(計算機や通信の実装)」ですね。
ーーではまず、「ソフトウエア工学」から詳しく教えてください。
ソフトウエア開発とは、結局のところ「人間の要求」から始まります。どういう機能を求めているのか、その曖昧さをどう解釈して設計に落とし込むか。そして完成したものが正しく動いているかどうかを検証するか。この一連の流れが、ソフトウエア工学の根幹です。
僕自身は、オブジェクト指向が注目されていた時期に関連書籍をひたすら読み漁りました。月に10万円くらい本を買っていた時期が2年ほど続いたと思います。ソフトウエア工学を学んだことで、単なる技術知識だけではなく「人間の曖昧な要求をどう扱うか」という視点を養うことができました。
ちなみに、残る「論理学」「物理」の部分はAIがなんとかしてくれる可能性も高いので、この領域を特に重点的に学ぶことが大事だと思っています。
ーー続いて、「論理学」についてはいかがですか?
論理学を学んで良かったのは、「結論が違うときに、思考の流れが間違っているのか、それとも前提条件が間違っているのか」を冷静に切り分けられるようになったことです。
論理の作法さえきちんと理解していれば、考えの筋道そのものは正しいと自信を持てますよね。だから仮説検証で想定外の結果が出ても、「これは前提条件に問題があるのでは」と考えられるんです。
さらに、論理学を学ぶことは、そのままプログラミング言語を学ぶことにも直結します。なぜなら、プログラミング言語というのは「人間の要求を計算機に伝えるために、論理を形式化した仕組み」だからです。
命題論理や述語論理の考え方を学んでいくと、条件分岐やデータ構造といった言語の基本設計が、実は論理の積み重ねでできていることが分かります。論理を学ぶことは、プログラミング言語の本質を学ぶことでもあるんです。
きしださんオススメ参考書籍①『論理と計算のしくみ』(岩波書店)
命題論理や述語論理、そして様相論理など形式論理の基礎を学べる一冊。ゲーデル不完全性やラムダ計算についても学習でき、論理と計算の関係だけでなく、両者をつなぐ「仕組み」を理解するのに役立つ。
▶詳細はこちら
きしださんオススメ参考書籍②『プログラミング言語の基礎概念』(サイエンス社)
関数型言語MLの一種であるObjective Camlを題材に、プログラミング言語の意味論や型システム、さらにはプログラミング言語の基礎概念と、それらの概念間における数学的な関連を体系的に学ぶことができる。
▶詳細はこちら
ーーなるほど。では「物理(計算機や通信の実装)」について。これはどういった点で重要なのでしょうか。
コンピューターは論理だけで動いているわけじゃなくて、結局は電気信号をどう動かすかという物理の話です。そして、そこには必ず制約がある。信号は無限に速くはならないし、電力や発熱の問題も避けられない。その制約の中でどう最適化するか、それがCPUやGPUの設計なんですよね。
僕自身はFPGAを使ってCPUの仕組みを学んだ経験が大きくて、CPUは単なる命令実行装置ではなく、メモリや演算器を効率よく制御する「交通整理の仕組み」として生まれたんだと実感しました。
この感覚を持っていると、新しい技術への理解度も変わります。例えば「なぜGPUがAI計算に強いのか」とか、「なぜ特定のマシンだと学習が速いのか」といったことを、スペック表の数字ではなく構造と物理の観点から説明できるようになる。
結果として、新しい情報を読み解くスピードも深さも増すし、将来の技術を考えるときに「ここには物理的な限界があるから、この方向は伸びにくい」と判断できるようになるんです。
物理を学ぶことは、将来を見通すための武器になる。エンジニアとして長くやっていく上で、僕にとっては欠かせない土台の一つになっています。
「実装」の中にある偶然こそ、AIに代替されない価値
ーーAIがコードを書けるようになった今、エンジニアは「実装」よりも設計や要件定義に力を入れるべきだ、という意見もあります。この点についてはどう思われますか?
コードを書くこと自体が、エンジニアの最終的な価値ではないのは確かです。ただ、「実装はAIに任せて、人間は設計だけ」という単純な分業にはならないと思います。
なぜなら、ソフトウエア開発の本質は「人間の曖昧な要求」と「コンピューターの厳密な動作」を結びつけることにあるからです。プログラミング言語は、その橋渡しをするために生まれました。
これは「他の選択肢より優れていたから採用された」のではなく、論理を組み立てながら意味を表現するには、必然的にこの形に落ち着くんです。人間の自然言語では曖昧すぎるし、機械語では詳細すぎて人間が扱えない。その間を埋める表現形式として、プログラミング言語が必要になる。
つまり、人とコンピュータをつなぐ枠組みそのものは、AIが進化しても変わらないんです。
ーーその「橋渡し役」は、AIではなく人間が担う必要がある?
AIが得意なのは「正解・不正解を機械的に判定できる領域」です。小さな正解を積み重ねれば大きな正解になるような問題、例えばアルゴリズムの最適化や処理の高速化などは、今後ますますAIが得意になるでしょう。
一方で、ユーザビリティーやセキュリティー、メンテナンス性、並列性といった領域は違います。部分的に正しいものを積み上げても、全体が正しいとは限らないからです。ユーザーインターフェースもそうですよね。個々のコンポーネントが使いやすくても、組み合わせたフォーム全体が必ずしも快適とは限らない。こういう領域では、論理的な思考で全体像を見渡す人間の役割が不可欠なんです。
AIに得意かどうかはユニットテストが書きやすいかどうかで判別できる【きしだのHatena】nowokay.hatenablog.com
ZoomやXのようなサービスを思い浮かべてください。「ビデオで会話できる」「短文を投稿できる」といった基本機能だけならAIを使えばすぐに作れます。でも、ユーザーが「心地よい」と感じるのは、右クリックメニューがきちんとカーソルの位置に出てくるとか、メッセージの日付の色が既読・未読で微妙に変わるとか、そういう細部の作り込みです。サービスの価値は、まさにその「手触り」に宿るんです。
ーーだからこそ、人間が実装することに意味があるわけですね。
そうですね。実装することは、設計力を鍛えるトレーニングにもなります。手を動かしながら「二手三手先を考える」ことで、設計の不備に気づいたり新しいアイデアが生まれたりする。AIにコードを書かせて、人間は判断だけをする役割に押し込められてしまうと、このリズムが失われてしまうんです。
なので僕は「実装は絶対に不可欠だ」と強く言い切るよりは、「実装してみることで自然に興味や知識が広がっていく」と伝えたいです。
実際にコードを書いていると、最初の目的から少し外れた疑問や新しい課題に出会うことがありますよね。その寄り道が、新しい知識を得たり視野を広げたりするきっかけになる。そうした偶然の発見こそが、エンジニアの成長を後押ししていくと思います。
この先どうなるかは誰にも分かりませんし、人との競争もなくならない。だからこそ、AI時代のエンジニアには「実装を通じて試すこと」「そこから興味や知識を広げていくこと」が大切だと思います。そうした積み重ねが、これからの成長を支えていくはずです。
文・編集/今中康達(編集部)