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