「AIによってソフトウェアエンジニアは不要になる」。ここ数年、この手の話をずいぶん耳にするようになった。正直に言えば、僕もそれに怯えている一人である。なにしろAIの進化は甚だ速い。
ChatGPTが出てきた頃は、「Google検索が少し楽になる」くらいの感覚だった。それが今では、アプリケーションを丸ごと作り、設計を提案し、コードレビューまでこなしてくれる。これを見て「この職業は終わるのではないか」と考える人が出てくるのは、まあ自然な成り行きだろう。
かくいう僕もソフトウェアエンジニアとして働いていて、毎日のようにAIを使いながら開発している。ついでに白状しておくと、この記事の相談もAIにしている。だからこの変化は、まるで他人事ではない。
今後どうなるのか、キャリアをどう積めばいいのか。ほとんど毎日、そればかり考えている。幸い、今のところ僕にはまだ仕事がある。日本ではまだエンジニア不足感があるので、当面は問題ないのだろう。
ところがアメリカでは、すでにエンジニアの仕事が減っているという話も聞く。10年後も同じように仕事があるのか、どんなスキルがあればとりあえず食べていけるのか。考えはじめると、どうしても不安になる。
そこで、過去の革命に目を向けてみることにした。農業革命、産業革命、コンピュータの登場、インターネット、クラウド。人類は何度も「仕事のやり方」を大きく変えてきたし、どれも当時としては革命的な出来事だったはずだ。
それらを調べながら、「システム化」という広い観点からAI時代を考えてみる。半分は自分の頭の整理のために書いている文章だと思ってほしい。
道具ではなく仕組み
技術の歴史として語るなら、人類は石器を作り、火を使い、車輪を発明した、という説明になる。ところがソフトウェアエンジニアの立場から眺めると、少し違った景色が見えてくる。人類が作ってきたのは道具だけでなく、「仕組み」でもあるのだ。それも、人が毎回考えなくても同じような結果を得られる仕組みを、何千年も作り続けてきたように思える。
たとえば法律である。法律がなければ、誰かがトラブルを起こすたびに、その場で判断しなければならない。法律があれば、多くの場面は同じルールに従って裁ける。
税制も同じだ。毎年一人ひとりについて「今回は税金をどうしよう」と悩んでいるわけではない。あらかじめ決められたルールによって、粛々と処理されている。
会社もそうである。役割を決め、承認フローを決め、責任範囲を決めて、人が入れ替わっても組織が動くようにする。これも立派なシステムだ。
普段「システム」と聞くと、Webシステムや業務システムを思い浮かべがちである。しかしもう少し広く捉えれば、人類はコンピュータが登場するはるか前から、社会そのものをシステム化してきたことになる。
現実を翻訳する仕事
僕は仕事柄、「業務をシステムにしてください」という依頼を受けることがある。小売、教育、医療と分野はさまざまだが、やることは大体同じだ。現場の仕事を観察し、どんな情報を見ているのか、誰が判断しているのかを洗い出す。例外はなにか、暗黙のルールはなにかも拾っていく。
そのうえで、その仕事をコンピュータが扱える形に変換する。言い換えれば、現実世界をソフトウェアへ翻訳する仕事である。原文は現場にあり、訳文がコードになる、というわけだ。
この仕事を長くしていると、不思議なことに歴史まで同じように見えてくる。法律は社会を、工場は生産を、会社は組織を翻訳したもの。そしてソフトウェアは、情報処理を翻訳したものだ。対象こそ違えど、どれも「現実を再現可能な仕組みへ変える」営為なのである。
もしそうだとすれば、AIもまったく新しい存在ではない。人類が続けてきたシステム化という営みの、新しい段階に過ぎないのではないか。最近はそんなふうに考えている。
もちろん、これは一つの見方であって、歴史学の定説でもなんでもない。僕自身、この考えが本当に妥当なのかを確かめたくて、文献を少しずつ読んでいる。歴史学、経済学、経営学、ソフトウェア工学、AI研究と、分野はまちまちだ。
調べた限りでは、「完全に正しい」と言い切るのは難しそうである。とはいえ、かなり近い考え方をしている研究者もいるように見えた。
というわけで以下では、ソフトウェアエンジニアの立場から、いくつかの問いを順に考えていく。システムとはなにか、人類はなにをシステム化してきたのか。工業化とコンピュータは、それぞれなにを変えたのか。そしてソフトウェアエンジニアという職業とAIを、歴史の中に置いてみたい。
AIの未来を正確に予測したいわけではない。ただ、AIを人類の長い歴史の中に置き直してみれば、この仕事の行き先が少しは見えやすくなる気がしている。
システムという言葉
そもそも「システム」という言葉は、便利すぎるきらいがある。IT業界では業務システム、販売管理システム、予約システム、基幹システムと、毎日のように飛び交っている。ところが、システムとはなにかと改めて問われると、途端に答えに詰まる。
ソフトウェアのことなのか、サーバーのことなのか、データベースのことなのか。どれもシステムの一部ではあるが、それだけではないはずだ。
まず押さえておきたいのは、「システム」という言葉がコンピュータと一緒に生まれたわけではないということだ。語源は古代ギリシャ語の systēma にまで遡るとされる。意味は「複数のものが組み合わさって、一つの全体として機能するもの」である。つまり本来のシステムとは、部品同士が関係し合い、一つの目的を果たす仕組みを指す。
この考え方は生物学、経営学、社会学などにも広がり、現代では「システム論」と呼ばれる学問にもつながっている。社会も経済も組織も、そして人体もシステムなのだ。そう考えると、ソフトウェアはシステムの一種に過ぎない。
そのうえで、ここでは僕なりに定義を絞っておく。僕はシステムを「人が毎回判断しなくても、一定の結果を得られるようにする仕組み」だと考えている。学術的に厳密な定義ではなく、この文章の中で使うための作業定義である。
たとえば信号機。赤なら止まり、青なら進む。交差点ごとに毎回警察官が交通整理をしているわけではない。それでもルールと仕組みがあるから、社会はある程度同じように動く。
会社も同じで、部長が休んでも会社は動くし、社員が入れ替わっても仕事は続く。すべてが個人の能力に依存しているのではなく、組織という仕組みで動いているからだ。
ソフトウェアもまたそうだ。ボタンを押せば注文が登録され、在庫が減り、請求書が発行される。担当者が変わっても、基本的には同じ結果になる。だから僕たちは、それをシステムと呼んでいるのである。
判断の外部化
では、システム化とはなにか。僕はこれを、人間が頭の中で行っていた判断を、仕組みとして外部化することだと考えている。
飲食店で考えるとわかりやすい。店主が一人で営業しているうちは、判断をすべて頭の中で済ませられる。このお客さんにはサービスしよう、常連さんはツケでいい、今日の料理は少し薄味にしよう、といった具合だ。
ところが店舗が100店舗になると、話がまるで変わる。店長は100人、アルバイトは1000人に膨れあがり、その瞬間に「店主の頭の中」では回らなくなる。マニュアルとレシピが要り、POSシステムも勤怠管理も欠かせなくなる。人間の判断を仕組みへ変換せざるをえないわけで、これがシステム化である。
ここで一つ誤解しやすいのは、システム化と自動化は同じではないということだ。たとえばチェックリストは紙に書いてあるだけで、コンピュータなどなにも使っていない。それでも新人が同じ品質で点検できるようになるのだから、立派なシステム化である。
逆に自動販売機は、ボタンを押せば商品が出てくるという意味で自動化されている。だがその裏側には、商品の補充、売上管理、釣り銭、故障対応といったさまざまなシステムが控えている。自動化はシステム化の一部であり、コンピュータ化もまたその一部に過ぎない。
実際、コンピュータが登場する以前から、人類は法律、税、軍隊、工場、会社、学校とシステムを作り続けてきた。ならば、コンピュータはなにを変えたのか。情報を扱うシステムを、圧倒的な速度で実行できるようにしたのである。
銀行で言えば、紙の時代は人が帳簿を書き写していた。それがコンピュータなら一瞬で計算できる。在庫管理も同様だ。コンピュータは新しい仕事を生み出したというより、すでにあった社会のシステムを高速に動かす装置だったのだ。
僕は仕事で業務システムを作っている。設計をしていると、コードを書く時間よりも「現場ではなにを判断しているのか」を考える時間の方が長いことがある。予約とはなにか、キャンセルとはなにか、返品とはなにか。それを理解しなければ、コードは一行も書けない。
つまりソフトウェアエンジニアは、コードを書く前に現実世界のルールを読み解き、コンピュータで扱える形へ翻訳している。この視点に立てば、ソフトウェアエンジニアとはプログラマーというより、システム化を行う職業なのだ。コードを書くことは、その最後の工程に過ぎない。
もし人類の歴史がシステム化の歴史だったとするなら、最初のシステムはなんだったのか。コンピュータでも工場でもなく、もっと古いところに始まりがあるように思える。法律、国家、官僚制度といった、社会そのもののシステム化である。
国家という仕組み
狩猟採集時代、人類は数十人程度の小さな集団で暮らしていたと考えられている。その規模なら、社会は人間関係だけで維持できる。誰が信頼できるか、誰が狩りが得意か、誰が病気で、誰が約束を破ったのか、全員がお互いを知っている。ルールは紙に書かれておらず、法律も税金もないが、それでも社会は成り立つ。
これは現代のスタートアップにも少し似ている。社員が5人なら、就業規則を細かく作らなくてもなんとか回るし、Slackで一言相談すれば済むことも多い。ところが5000人の会社で同じことをやれば、とても回らない。社会もおそらく同じだったのだ。
転機は農業革命である。農業を始めた人類は定住するようになり、人口が増え、土地や財産という概念が生まれた。食料を備蓄し、やがて都市ができる。そして、知らない人同士が同じ社会で暮らすようになった。
ここで初めて、誰がなにを所有しているのか、税は誰が集めるのか、争いは誰が裁くのか、という問題が持ち上がる。社会そのものが複雑になったのである。
巨大なif文としての法律
法律について考えてみる。ある人が他人の財産を盗んだとする。法律がなければ、そのたびに王様や村長が判断しなければならない。人によって判断が変わるかもしれないし、昨日と今日で基準がぶれるかもしれない。
法律があれば、あらかじめ決められたルールに従って処理できる。もちろん現実の法律は複雑で、機械的に適用できる代物ではない。裁判官の判断もあれば、例外もある。それでも「判断を個人からルールへ移した」という意味で、大きな転換だったはずだ。
ソフトウェアエンジニアの目で見ると、法律は巨大なif文の集合にも見えてくる。実際の法律はそれよりずっと込み入っている。ただ、条件を満たしたらどう処理するかを社会全体で共有しているところは、現代のプログラムといささか似ている。
もう一つ興味深いのが官僚制度だ。税金を例にとれば、一人の王様が全国民の税金を管理しきれるはずがない。だから徴税する人、記録する人、監査する人、報告する人と役割を分け、手続きを定め、責任範囲を決める。これによって国家は、人が入れ替わっても動くようになった。
担当者が辞めても仕事が続き、マニュアルがあり、承認フローがあり、役割がある。この点で、官僚制度は現代の会社組織とよく似ている。どちらも人ではなく組織が仕事をしている状態であり、僕はこれも一種のシステム化だと考えている。
さらに言えば、国家は巨大な情報システムでもあった。人口、土地、収穫量、税収、兵士、道路といった情報がなければ、国家は運営できない。現代ならデータベースに入れるところだが、古代にはもちろんコンピュータなどなく、紙や粘土板で管理していた。媒体こそ違えど、情報を集め、保存し、更新し、意思決定に使うという考え方は、すでに存在していたのだ。
ここまで振り返ると、一つ気づくことがある。社会が大きくなったとき、人類は優秀な人を増やして解決したわけではない。人間一人の能力は、何千年前と大して変わっていないのだから。
それでも国家を作れたのは、法律を作り、役割を作り、組織を作ったから、つまり仕組みを作ったからだ。蒸気機関でもコンピュータでもない。人間だけでは処理できない複雑さを、仕組みによって扱えるようにしたこと――これこそが人類最大の発明であり、文明を押し上げてきた力だったのではないだろうか。
職人からベルトコンベアへ
とはいえ、国家ができても問題は残っていた。社会は回り、法律も組織もある。それでもモノを作る速度は、人間一人の能力に縛られていた。職人が一日に一つしか作れないものは、一日に一つしか存在しないのだ。
そこで起きたのが産業革命である。人類は社会だけでなく、仕事そのものをシステム化することに成功する。
産業革命以前、家具も靴も服も道具も、多くは職人の手で作られていた。一人の職人が材料を選び、加工し、組み立て、仕上げる。完成に必要な知識はその人の頭の中にあり、言ってみれば職人一人が一つのシステムだった。
技術書もあれば弟子もいたが、最終的には経験や勘や熟練に大きく依存していた。優れた職人が辞めれば品質は下がり、亡くなれば技術も失われる。人に依存する社会だったのである。
18世紀、アダム・スミスは有名な「ピン工場」の例を紹介した。一人ですべて作るよりも、切る人、伸ばす人、尖らせる人、包装する人と工程を分けた方が、生産性は圧倒的に上がる。仕事を分解するだけで、生産量は何十倍にもなった。
この話はふつう経済学の文脈で語られる。だが僕には、仕事そのものをシステムへ分解した話にも読める。一人の頭の中にあった仕事を工程へ、役割へと分割し、誰がやっても同じ結果になるようにしたのだ。
巨大な関数を小さな関数へ分割し、責務を分離し、モジュール化して理解しやすくする。ソフトウェア設計と、やっていることはほとんど変わらない。分業とは、システム設計そのものだったのかもしれない。
20世紀初頭になると、フレデリック・テイラーがさらに一歩踏み込む。彼は作業を徹底的に観察した。人はどう歩き、どう工具を持ち、何秒かかり、無駄な動きはないのか。そのうえで「最も効率のよい作業」を標準化した。
科学的管理法として知られるこの手法は、人間を機械のように扱っているとして、現代では批判されることもある。もっとも、ソフトウェアエンジニアの目には、仕事のアルゴリズムを作っていたように映る。仕事を観察し、判断を抽出し、例外を減らし、手順を書き、再現可能にする。業務システムを設計するときの僕たちの手順と、驚くほど似ているのだ。
その仕組みを工場全体へ広げたのが、ヘンリー・フォードのベルトコンベアである。それまでは人が製品のところへ行っていた。フォードは逆に、製品を人の前まで運ぶようにした。作業者は決められた仕事だけを行い、仕事の流れそのものがシステムになる。
フォードがやったのは、自動車の発明ではなく、仕事の流れの設計だった。ソフトウェアで言えば、ワークフローエンジンを作ったようなものだ。誰が担当するのか、どの順番で進むのか、なにが終われば次へ進むのか。現代の業務システムで毎日のように設計していることを、彼はとうの昔にやってのけたわけだ。
フローチャートとしての工場
工場を見学すると、僕はいつもプログラムを眺めているような気分になる。材料が入り、加工され、検査され、製品として送り出される。途中には条件分岐があり、不良品なら戻し、合格なら次へ進め、在庫が足りなければ止まり、工程が終われば通知する。フローチャートそのものである。
もちろん工場はソフトウェアではない。それでも「仕事を順序立てて処理する仕組み」という意味では、プログラムと瓜二つと言っていい。だから工業化とは、モノづくりをシステム化した歴史でもあったのだ。
面白いのは、ソフトウェア開発も同じ道をたどっていることだ。昔は設計も実装もテストもリリースも、一人で全部やっていた。ところがシステムが大きくなるにつれて、レビュー、CI、自動テスト、Docker、クラウド、マイクロサービスが入り込んできた。役割と責務を分け、仕組みで動かすようになったのだから、ソフトウェアを作る仕事もシステム化の例外ではなかったわけだ。
こうして眺めると、人類は便利さだけを追い求めていたわけではないように見える。本当の敵は複雑さだったのだろう。社会が大きくなり、人が増え、仕事と情報が増えると、一人の人間ではとても扱えなくなる。
だから仕組みを作り、役割を分け、標準化する。つまりシステム化するのである。人類は何千年もの間、複雑さを管理するためにシステムを作り続けてきたのだ。
紙のままだった事務
もっとも、工場にも限界があった。モノは効率よく作れるようになったが、帳簿も会計も銀行も紙のままだった。情報だけは、まだ人間が処理していたのである。
次に人類がシステム化したのは、モノではなく情報だった。コンピュータは、人類が初めて情報そのものを処理するために作った巨大なシステムである。そして、そのシステムを設計する新しい職業が生まれる。ソフトウェアエンジニアだ。
産業革命によって工場は劇的に変わり、大量生産が可能になった。ところが工場の外へ一歩出ると、事情はまるで違っていた。受注も在庫も会計も給与も紙、銀行も役所も商店も紙。モノを扱う仕組みが発展した一方で、情報を扱う仕事は依然として人間がこなしていた。
会社が大きくなるほど、紙も帳簿も計算も確認作業も増えていく。工場は速くなったのに、情報だけは人間の速度のまま取り残された。新しいボトルネックの誕生である。
コンピュータというと、計算を速くする機械というイメージがある。それも間違いではない。ただ現代のコンピュータを見る限り、計算よりも大きな役割は情報の管理だった。
銀行が管理したいのは、お金そのものではなく、口座情報、残高、振込履歴、融資情報といった情報である。図書館が管理しているのも本そのものではなく、どの本がどこにあり、誰が借りていて、いつ返ってくるのかという情報だ。予約システムもホテルそのものではなく、空室という情報を管理している。つまりコンピュータは、現実そのものではなく、現実を表現する情報を扱う機械だったのである。
業務システムを設計していると、現実世界には最初からデータベースが存在していることに気づく。図書館なら、本があり、利用者がいて、貸出があり、返却期限がある。それぞれのあいだには関係があり、ER図に起こすと、ほとんど現実世界そのものになる。
僕たちはデータベースを発明しているわけではない。現実世界をデータとして表現し直しているだけなのだ。会計でも教育でも医療でも事情は同じで、現実世界にはルールがあり、関係があり、状態がある。ソフトウェアエンジニアは、それをコンピュータが読める言葉へ翻訳している。
社会の訳文としてのソフトウェア
ここで改めて、ソフトウェアエンジニアという仕事について考えてみる。僕は、この仕事をコードを書く職業だとは考えていない。もちろんコードは書く。ただ、その前にやっていることがある。
現場へ行き、業務を聞き、紙を見て、電話の内容を聞き、例外を聞き、担当者に質問する。返品とはなにか、受付完了とはなにか、キャンセルとはなにか、このとき誰が判断しているのか。この時間の方が実装より長いことも、往々にしてある。
僕たちはコードを書いているというより、現実世界を理解しているのだ。その理解を、最後にプログラムへ変換しているに過ぎない。だからソフトウェアエンジニアとは、現実世界をコンピュータへ翻訳する職業なのである。
もしこの見方が正しいなら、ソフトウェアとはなにか。僕はそれを、社会の訳文だと考えている。会計ソフトは会計制度の、勤怠システムは労務管理の訳文である。ECサイトは商取引を、予約システムは宿帳や台帳を訳したものだ。
ソフトウェアはゼロから世界を作っているのではない。すでに存在している社会を、コンピュータの中へ移しているだけだ。その過程で改善もあれば新しい価値も生まれるが、原文はあくまで現実世界にある。
ふたたび問おう。コンピュータはなにを変えたのか。社会そのものというより、情報処理の速度を変えたのである。帳簿を書く時間、検索する時間、計算する時間、集計する時間、確認する時間。それらが劇的に縮み、情報システムそのものが高速化された。
だから企業は巨大になれたし、世界中でビジネスができるようになった。小売も金融も、いまやコンピュータなしでは成り立たない。
ところが興味深いことに、社会の情報処理がシステム化されても、ソフトウェアを作る仕事そのものは長く人間に依存していた。コードを書く、仕様を考える、バグを探す、設計する、レビューする。IDEは進化し、ライブラリは増え、フレームワークも登場したが、作るという行為そのものは人間が担っていた。その状況が、Googleの登場あたりから少しずつ変わりはじめる。
検索からCI/CDまで
社会をシステム化し、仕事をシステム化し、情報をシステム化した。その次に順番が回ってきたのが、ソフトウェアを作る仕事そのものだったのではないか。
ソフトウェア開発が始まった頃、プログラミングは極めて専門的な仕事だった。言語仕様を覚え、OSやコンパイラを理解し、メモリ管理やCPUを理解し、そのうえで自分でアルゴリズムを書く。まさに職人であり、コードを書く能力そのものが価値だった。
優秀なプログラマーほど、どのAPIを使い、どのアルゴリズムを選び、どんなライブラリがあるのかを頭の中に抱えていた。それを支えていたのは、ひとえに経験である。この頃のプログラマーは、産業革命前の職人によく似ている。
Googleが登場すると、開発の仕方が変わった。わからないことがあれば検索し、エラーが出たら検索し、APIの使い方も検索する。昔は本棚の技術書を開いていたのが、ブラウザに置き換わった。
これは単に便利になっただけの話ではなく、知識へのアクセスがシステム化された出来事だった。「全部覚えている人」ではなく、「必要な情報へたどり着ける人」が強くなった。人間の記憶への依存が、少し減ったのである。
次に現れたのがStack Overflowだ。エラー、設計、実装、ベストプラクティスについて、世界中の開発者が経験を書き残すようになった。本来は人の頭の中にしかなかった経験がインターネット上に積み上がり、「誰かが過去に悩んだこと」を世界中の人が使えるようになった。経験そのものがシステムになったと言ってもよい。
GitHubは、さらに大きな変化だった。それまで共有していたのは知識だが、GitHubはソフトウェアそのものを共有する。ライブラリ、フレームワーク、OSSといった形で、世界中の開発者がコードを公開し、改善し、再利用できるようになった。
昔なら一から作っていた認証機能も、今ではライブラリを入れるだけで済む。HTTPサーバーもORMもUIライブラリも、すべて誰かが作ってくれている。実装そのものがシステム化されたのだ。
その次に変わったのはコードではなく、環境だった。昔の開発現場では、「自分の環境では動く」という手垢のついた言い訳が日常茶飯事だった。誰もが一度は聞いたことがあるだろう。この一言で溶けた工数を世界中から集めれば、ちょっとした国家予算くらいにはなるのではないか。
OSが違う、ライブラリのバージョンが違う、Node.jsのバージョンが違う。環境構築は、人に大きく依存していた。Dockerはその環境そのものを共有できるようにし、人頼みだった環境構築まで仕組みに変えてしまった。
そして、コードは書いたら終わりではない。レビューし、テストし、ビルドし、デプロイする。昔はこれも人がやっていたが、今ではGitHubへpushするだけでテストが動き、ビルドが走り、デプロイまで終わる。CI/CDによって、リリースという仕事そのものがシステムになったのである。
こうして並べてみると、Google、Stack Overflow、GitHub、OSS、Docker、CI/CDは、一見まったく違う技術に見える。だが実は、どれも人間が行っていた仕事を仕組みに変えてきた。知識、経験、コード、環境、リリースと、ソフトウェア開発は少しずつ人間への依存を減らしてきたのだ。
AIは突然現れたのか
ここで僕は、AIについて考えはじめた。AIは確かにすごい技術である。コードを書き、レビューし、設計を考え、テストまで書く。ただ、本当に突然現れたのかと問われると、僕にはそうは思えない。
Googleが知識を、Stack Overflowが経験をシステム化した。GitHubがコードを共有し、Dockerが環境を、CI/CDがリリースをシステム化した。その延長線上で、AIは実装という知的作業をシステム化しはじめたのだ。
そう考えると、AIは突然現れた革命というより、次の一歩に見えてくる。人類が何十年も続けてきた、ソフトウェア開発のシステム化の一歩である。
この流れが正しいなら、AIはコードを書く仕事を奪うのか。おそらく一部はそうなるだろう。ただ、もっと大きな変化が起きる気がしている。コードを書くことよりも、なにをシステム化するのかの方が重要になっていくのだ。
これまで実装コストが高すぎて作れなかったソフトウェアが、AIによって作れるようになる。そうなれば、ソフトウェアエンジニアの仕事の比重は、コードを書くことからシステムを設計することへ、さらに移っていく。
AIはソフトウェアエンジニアを不要にするのか。それとも、この職業の本質を改めて問い直しているのか。ここからは、AIを歴史全体の中に置き直して考えてみる。
革命であり延長線でもある
国家、法律、工場、コンピュータ、インターネット、ソフトウェア、そしてAI。それぞれまったく別の出来事に見えるが、僕はそのすべてに共通するものがあると考えている。人類は複雑さに耐えるためにシステムを作ってきた、ということだ。
AIは革命なのか。この問いに、僕は「はい」とも「いいえ」とも答える。技術として見れば、間違いなく革命である。数年前には考えられなかったことが、今では日常になっている。
コードを書く、設計を考える、テストを書く、ドキュメントをまとめる。これまで人間が担ってきた知的作業の一部を、AIが担いはじめている。
一方で歴史全体から眺めると、少し違う景色が見えてくる。社会を、仕事を、情報をシステム化し、そして今、ソフトウェア開発そのものをシステム化しようとしている。そう考えると、AIは革命でありながら、長い歴史の延長線上にもあるのだ。
AIの話になると、決まって「コードを書く仕事がなくなる」と言われる。ある意味では、それは正しい。実際、僕自身もAIを使ってコードを書く時間が増えていて、以前なら一時間かかっていた実装が十分で終わることもある。
しかし、ここで一つ疑問が湧く。コードを書くことは、そもそもソフトウェアエンジニアの本質だったのだろうか。
僕は違うと考えている。業務システムを作る仕事では、コードを書きはじめる前に現場へ行き、担当者に話を聞き、紙の帳票を読む。業務フローを理解し、例外を洗い出す。そのうえで、予約とはなにか、返品とはなにか、注文とはなにかを考える。
この時間がなければ、コードは一行も書けない。コードは、最後に現れる成果物に過ぎないのだ。
しつこいようだが、僕はやはりソフトウェアエンジニアを翻訳者だと考えている。英語を日本語へ訳すように、現実世界をコンピュータが理解できる形へ訳す。予約という概念をデータベースへ、会計という制度をプログラムへ、病院の業務を画面へと翻訳していく。
この翻訳こそがソフトウェアエンジニアの仕事だったのなら、AIがコードを書くようになっても、翻訳という仕事はなくならない。むしろ、訳すべき原文は増えていくはずである。
まだ紙と電話の世界
普段仕事をしていると、「これはまだシステムになっていない」と思う場面にしょっちゅう出くわす。電話、紙、Excel、口頭での引き継ぎ、暗黙知、ベテランにしかわからない判断。地域特有の運用、会社独自のルール、業界だけの常識も、枚挙に暇がない。人間の頭の中にしか存在していない仕組みが、社会にはまだ無数にある。
いわば、まだ誰も訳していない原文が山積みなのだ。これまでは、システム化したくてもできなかった。開発コストが高く、ソフトウェアを作ること自体が非常に高価だったからだ。しかしAIによって、その前提が変わりはじめている。
だから僕は、AIによって最も変わるのはコードを書く速度ではなく、システム化できる範囲だと考えている。1000万円かかるから作れなかったシステム、社員が10人しかいないから諦めていたシステム、一人しか使わないから作らなかったツール。そういったものが作れるようになる。
ソフトウェアは減るどころか、爆発的に増える可能性すらある。人類はこれまで、作れなかったから作らなかっただけなのだ。AIはその制約を取り払おうとしている。
原文を読む力
では、ソフトウェアエンジニアはなにを学ぶべきなのか。もちろん技術は必要だが、プログラミングだけでは足りない。これから重要になるのは、社会を、業務を、そして法律や会計、医療、教育といった現実の領域を理解することだ。つまり、現実世界を理解する力である。
システムが現実世界の訳文である以上、原文を読めなければいいシステムは作れない。そこはAIとて同じだ。AIはコードを書けるが、「なにを作るべきか」までは教えてくれない。現実世界の課題を見つけるのは、今のところ人間の役割である。
AIを怖いと思う気持ちは、僕にもある。ただ歴史を振り返れば、人類はいつも新しい仕組みを作ってきた。法律ができたときも、工場ができたときも、コンピュータができたときも、仕事は変わった。それでも「仕組みを作る」という営みは終わらず、むしろ対象を広げてきた。
だから僕は、AIによってソフトウェアエンジニアが不要になるとは考えていない。むしろ、ソフトウェアエンジニアが扱える世界が広がるのだ。コードを書くことが目的ではなくなり、社会を理解してシステムとして設計することがますます重要になる。そういう時代は、もう始まっているのかもしれない。
その意味で、僕は存外楽観している。冒頭で怯えていたのはどこの誰だったのか、という話ではあるが。
以上、AIがコードを書く時代にソフトウェアエンジニアとはなんなのか、という素朴な疑問から出発して、歴史をたどってみた。国家、工業化、コンピュータ、そしてソフトウェア開発である。行き着いたのは、人類は何千年もかけて複雑さを仕組みに変えてきた、という考えだ。ソフトウェアエンジニアはその歴史の中で、現実世界をコンピュータへ翻訳する役割を担ってきた。
AIはその仕事を終わらせる存在ではなく、訳し方を変える存在なのだろう。仕組みを作るという営みは、道具が変わったくらいでは終わらないのだ。