編集|宇琪、Tina
数十年ごとに、ソフトウェア工学は「死んだ」あるいは「自動化によって完全に置き換えられる」と宣告されてきました。同様の主張は、私たちはすでに何度も聞いてきました。しかし、这一次は、終わりではなく、ソフトウェア工学の別の形の「黄金時代」の始まりかもしれません。歴史上で何度も起こったように。
最近、ソフトウェア工学分野の創設者の一人であるGrady Boochが、ホストのGergely Oroszとポッドキャスト番組で、1940年代以来の計算分野における3つの「黄金時代」の理解、およびこれらの時代がそれぞれの技術的制約の中でどのように生まれたかを詳細に共有しました。
この対話が広く注目を集めたもう一つの直接的な理由があります。番組の中で、BoochはAnthropicのCEOであるDario Amodeiが最近大きな議論を引き起こした判断——「ソフトウェア工学は12ヶ月以内に自動化される」——を正面から評価しました。彼の結論は明確です:技術的な言葉で表現すれば、この判断は根本的に間違っている。
Boochによれば、このような主張は「コードを書くこと」と「ソフトウェア工学」そのものを混同しており、歴史の中で繰り返し現れる事実を無視している:ツールは次々と変わるが、ソフトウェア工学が真に解決すべき難題は決して消えない。むしろ、每一次の「自動化パニック」は、より高い抽象レベルの到来と新たな黄金時代の開始に対応している。
このポッドキャストビデオに基づき、InfoQは一部を削除・修正しました。
核心的な観点は以下の通りです:
現代の計算の多くの成果は、「悲しい織機」の上に織り込まれている。
ソフトウェアは極めて動的で流動的、かつ高度に可塑的な分野である。一度、特定の種類のシステムを構築する方法を掌握し、再利用可能なパターンを形成すると、それらが経済的に新たな応用空間を持つことがすぐにわかる。
多くのいわゆる「職業危機の物語」は、分野に対する狭い理解から来ている。実際に起こっているのは、ソフトウェアがより広い人々に広がっていることだ。非専門の開発者がより多くのソフトウェアを書くようになることは、極めて積極的な変化である。
新しいものへの入り口に立っているとき、深淵を凝視して落ちるのを恐れるか、または飛び込んで羽ばたくかを選べる。今が、飛ぶときである。
最初の黄金時代:アルゴリズム抽象が支えるソフトウェアの世界
Gergely:あなたはこれまで何度も、ソフトウェア工学の全体的な進化は本質的に抽象レベルが絶えず上昇する過程であると述べてきました。その中でのいくつかの重要な転換点を整理し、この流れを理解し、さらにAIがその中でどのような役割を果たしているかを説明していただけませんか?
Grady:「ソフトウェア工学」という用語自体、実はかなり後になってから出現した。最初にこの表現を明確に使用したのは、一般的にMargaret Hamiltonであるとされている。彼女は「有人軌道実験室」プロジェクトを離れ、アポロ計画に参加したばかりだった。ほぼ完全にハードウェアと構造エンジニアで構成される男性チームの中で、彼女は数少ないソフトウェア開発者の一人だった。彼女は自分の仕事を区別するための言葉として、「ソフトウェアエンジニア」という呼称を使い始めた。
後で他の人々もこの表現を継承した、特にNATOソフトウェア工学会議でよく言及される。実際、その会議の開催はMargaretの仕事よりも数年後で、「ソフトウェア工学」という命名自体にも一定の議論があった。「人工知能」がその最初の学術会議で引き起こした議論と同じように。尽管如此、時間が経つにつれて、この言葉は受け入れられ固定された。
その核心的な意味は:Margaretと彼女の同時代の人々は、これが工学的属性を持つ活動であることに気づいたということだ。工学の本質は、様々な静的および動的制約の間に、可能な限り合理的な解決策を構築することであり、完璧を追求することではない。这一点は、構造工学、電気工学、または化学工学と一致している。
ソフトウェア分野では、私たちが直面する媒体は極めて柔軟で、可塑的で、弾力性があるが、制約もまた現実に存在する。私たちは依然として物理法則の制約を受けており、例えば情報伝送は光速を超えることは不可能である。システムを構築する規模はハードウェア能力の制限を受ける。アルゴリズムレベルでも、根本的な境界が存在する。理論的には、例えばセルラー通信に不可欠なViterbiアルゴリズムのように、特定の問題を解決する方法を知っているかもしれないが、長い間、それを効果的に実装する方法を知らなかった。高速フーリエ変換も同様である:理論は既に存在していたが、計算可能性が得られる前に、実際の応用は進められなかった。
科学および計算レベルの制限に加えて、人的要因も同様に重要である。私は仕事を完了するのに十分な人を集めることができるか?チームを効果的に組織できるか?理想的には、ソフトウェア開発の最適なチーム規模はゼロ、次に一人だが、これは明らかに現実的ではない。これらのシステムが経済的および社会的に長期的かつ深远な影響を持つため、個人に依存することはできず、ソフトウェア自体が個人の生命周期を超える能力を持つ必要がある。
ソフトウェアが社会構造の隙間に徐々に浸透するにつれて、デジタル著作権管理などの法的問題が発生する。しかし、より根本的なのは倫理的問題である:私たちは特定のシステムを構築する方法を知っているかもしれないが、それらを構築すべきか?これは人間の価値と尊厳に合致しているか?
正是这些科学、技术、人类与伦理层面的静态和动态力量,共同作用于软件工程师。工程师所做的,正是在多重约束之间取得平衡,并在一种极其美妙的媒介中构建系统。
ソフトウェア工学の発展は異なる時代に分けることができる。最初の頃は、ほとんど「ソフトウェア」という概念が存在しなかった。人々は単に機械を直接操作し、ハードウェアとソフトウェアの間に明確な境界はなかった。ENIACを例に取ると、プラグボードに配線を差し込むことはプログラミングとみなされるか?それは可能だが、それは今日理解しているソフトウェアではない。
1940年代末から50年代初頭にかけて、コンピュータの形態が進化するにつれて、人々は徐々にソフトウェアを独立した存在として区別し始めた。当時のソフトウェアはほぼ完全にカスタマイズされており、特定のマシンと密接に結びついていた。しかし、ソフトウェア自体のコストは無視できなくなっていった。人々はハードウェアのアップグレードを望んだが、既存のソフトウェア投資を放棄したくはなかった。これにより、「ソフトウェアとハードウェアの分離」という重要な問題が浮上した。值得注意的是、「デジタル化」という用語は1940年代末になって初めて提案され、「ソフトウェア」という言葉は50年代になって初めて出現した。ソフトウェアが独立した実体として認められたのは、実は私の人生の中で起こったことであり、それ自体が衝撃的である。
ソフトウェアが徐々にハードウェアから分離するにつれて、Grace Hopperらは、ソフトウェアが単なる技術活動だけでなく、産業や制度にもなり得ることに気づき始めた。最初のソフトウェアはほぼアセンブリ言語の形で存在し、具体的なマシンと高度に結合していた。1960年代になると、IBMは、統一された命令体系を持つ一連のコンピュータアーキテクチャを構築し、ハードウェアをアップグレードしながらソフトウェア資産を保持できることに気づいた。この決定は、工学的選択であると同時に、商業的・経済的選択でもあった。この考え方が確立されると、ソフトウェア需要は急速に爆発し、ソフトウェア工学は最初の黄金時代に入った。
この時期、ソフトウェアは独立した産業となり、その核心的な課題は「複雑さ」だった。今日の基準で見れば、当時のシステムは比較的シンプルだったが、その時代において、それらはすでに理解し構築するのが極めて困難だった。ソフトウェアは依然としてマシンに非常に近かったため、主な抽象形式はアルゴリズム抽象だった。コンピュータは最初に数学演算に使用されたため、Fortranのような言語は本質的に数式翻訳を実現するためのものだった。
Gergely:時間軸から見ると、この世代はどの段階に対応していますか?
Grady:おおよそ1940年代末から70年代末まで続いた。この時期の代表的な人物にはEd Yourdon、Tom DeMarco、Larry Constantineなどがおり、エンティティ関係モデルなどの思想もこの時に出現し、データ分野に影響を与えた。
これは非常に活発な段階だった。フローチャートが発明され、システム設計の補助に使われた。ソフトウェア開発は分業体系を形成し、システム分析者、プログラマー、パンチカード操作員、コンピュータオペレーターがいた。この分業は主に経済的要因に驱动され、当時のマシンコストは人件費よりもはるかに高かったため、すべてが希少で高価な計算リソースを最大限に活用する方法を中心に展開された。
この段階の主なタスクは、数学計算と既存の業務プロセスの自動化に集中していた。例えば、会計、給与計算などの作業は元々大量の人力を必要としたが、ソフトウェアを通じてプロセスを加速し、精度を向上させることができた。そのため、当時のソフトウェアのほとんどは商業、数値、計算集約型システムだった。
公の視界の外では、国防、航空、気象、医療などの分野でも重要な革新が進められていた。真に先端的な探求は、これらの縁辺分野、特に国防システムで行われることが多い。冷戦の背景から、分散型リアルタイムシステムが必須となった。Whirlwindコンピュータ、SAGE(半自動地上環境システム)などのプロジェクトが相次いで出現した。SAGEシステムの規模は非常に大きく、推計によれば当時のアメリカのソフトウェアエンジニアリソースの20%から30%を占めていた。これは前例のない工学規模であり、第一世代ソフトウェア工学の黄金時代が縁辺地帯で育んだ深远な影響を示している。
Gergely:軍事分野は、当時のソフトウェア研究と産業推進における最大の出資者だったのではないですか?彼らにはそのような現実的なニーズがあったからです。
Grady:確かにそうです。当時明確で現実的な脅威が存在したため、軍事分野は継続的に投資せざるを得なかった。そのため、多くの重要な革新が国防システム内で起こった。私は現在制作中のコンピュータ歴史ドキュメンタリーで、次の言葉を使ったことがある:コンピュータ発展史には2つの最も重要な駆動力がある。一つは商業であり、その経済的ロジックについては既に議論した。もう一つは戦争である。
現代の計算の多くの成果は、「悲しい織機」の上に織り込まれている。私たちは今日当たり前のように使っている多くの技術、例えばインターネット、マイクロ化技術は、ほとんどが政府の資金提供、特に冷戦の背景下から生まれた。したがって、ある意味では、私たちは冷戦から「恩恵を受けている」。
なぜ最初の黄金時代は限界に達したのか?
Gergely:では、この段階はまだ第一世代ソフトウェア工学の黄金時代に属しているのか、それとも既に過ぎ去ったのか?
Grady:これらのことは依然として第一世代黄金時代の中で起こっていた。当時のソフトウェア工学には比較的明確な「重心」があったが、縁辺地帯でも同時に多くの業界の進化を促進する探求が行われていた。第一世代ソフトウェア工学の黄金時代では、ソフトウェアの主な応用は数学計算と商業システムに集中し、システム分解の核心的な方法はアルゴリズム抽象だった。私たちはデータやオブジェクトの観点からではなく、プロセスや関数の観点から世界を理解していた。しかし、縁辺領域では、分散システムのニーズ、マルチマシン協調のニーズ、リアルタイムシステムのニーズ、および人間machineインターフェースのニーズなど、いくつかの応用シナリオがこのパラダイムを絶えず突破していた。
私たちが今日使用しているグラフィカルユーザーインターフェースの源流は、WhirlwindおよびSAGEシステムにまで遡る。当時の最初のグラフィカルインターフェースは陰極線管(CRT)に基づいていた。これらの探求は、当時のソフトウェア開発の中心地にはなかったが、後に深远な影響を及ぼした。ここでの重要な启示は:ソフトウェアは極めて動的で流動的、かつ高度に可塑的な分野であるということだ。一度、特定の種類のシステムを構築する方法を掌握し、再利用可能なパターンを形成すると、それらが経済的に新たな応用空間を持つことがすぐにわかる。これがソフトウェア工学の最初の黄金時代の特徴である。
ただし、1970年代末から80年代初頭にかけて、この体系は亀裂を見せ始めた。NATOが主催したソフトウェア工学会議は、公共のレベルで問題を明確に指摘した初めてのものだった:NATOは自分自身が深刻なソフトウェア困境に直面していることに気づいた:ソフトウェアへの需要はほぼ無限だが、品質と速度の点で、業界は効果的に供給できない。これが後に「ソフトウェア危機」と呼ばれる背景である。
Gergely:この「ソフトウェア危機」とは具体的に何ですか?人々は何を懸念していたのですか?
Grady:ソフトウェアは巨大な価値を持ち、明確な経済的インセンティブがあることが証明されたが、業界全体が十分な速さ、十分な品質で、十分な規模のソフトウェアを生産できない。
Gergely:つまり、ソフトウェアは高価で、遅く、品質が不安定だったということですか?
Grady:それに加えて、需要が非常に旺盛だった。人々は絶えず、「私たちにはもっとソフトウェアが必要だ」と言っていた。これらの4つの要因が重なり合い、当時の危機を構成した。これは今日私たちが懸念しているプライバシー監視、システムクラッシュなどの問題とは異なる。每一个黄金時代が直面する「危機」の性質は変化する。
Gergely:今日からその時代を振り返ると、当時の状況を想像するのは本当に難しい。
Grady:当時、この危機は現実的で切迫したものであり、同時に興奮する時代でもあった。ソフトウェアは高度に柔軟で拡張可能な媒体として、ほとんど私たちの想像力だけに制限されていた。
さらにマイクロ化技術の突破が重なった:集積回路の出現、Fairchildの誕生、そしてシリコンバレーの形成——これらすべてはトランジスタ技術に起因する。Fairchildの最大の顧客は実際にはアメリカ空軍で、ミサイルプロジェクトに使用された。シリコンバレーで生産された初期のトランジスタのほとんどは、冷戦関連計画に使用された。しかし、正是这些需求奠定了规模化生产的经济基础,继而催生了集成电路、个人计算机等一系列后续发展。
1970年代末になると、ソフトウェア危機は非常に明白だった。米国政府を例に取ると、彼らは自分自身が「バベルの塔」問題に陥っていることに気づいた:軍事システムで使用されるプログラミング言語は1万4000種類に及ぶ。今日の基準で見ても、この数字は非常に驚くべきもので、更何况当時のソフトウェアシステムの規模は現在よりもはるかに小さかった。JOVIAL、COBOLなどの言語が広く使用され、同時に、ALGOLなどの言語は形式化手法の発展を促進した。Dijkstra、Hoareなどの影響下で、人々は数学的厳密性をプログラミング言語研究に導入し始め、形式言語理論が台頭した。
この背景のもと、米国政府はAdaプロジェクトを推進した。最初は合同プロジェクトワーキンググループによって発足し、目標は言語の数を減らし、一種の統一言語で置き換えることだった。これには、抽象データ型、情報隠蔽、関心の分離、およびKnuthが提案した文芸的プログラミング思想など、多くの研究成果が集約されていた。Adaは、これらのアイデアをマクロレベルで統合しようとする試みであり、この規模の推動は、当時の米国軍事部門だけが条件を備えていた。
同時に、ベル研究所はC言語とUnixを育んだ。これらの成果も同様に極めて重要だった。学術と産業の縁辺では、Bjarne Stroustrupという名の研究者が、C言語の固有の欠陥を解決するために、Simulaのオブジェクト指向の思想をC言語に導入できるかどうかを考え始めた。ちなみに、Simulaは最も早いオブジェクト指向言語だった。これらは、より深い変化を反映している:人々は、アルゴリズム抽象だけでは複雑さに対応できないことに気づき始めていた。ソフトウェアには新たな抽象方式が必要だった:オブジェクト抽象。
興味深いことに、「プロセスから世界を見る」ことと「事物から世界を見る」ことの分岐は、プラトンの時代から既に存在していた。プラトンはその対話の中で、人々がプロセスかオブジェクトかのどちらで世界を理解すべきかを議論していた。「原子」という概念自体、この思想伝統に由来する。言い換えれば、抽象の選択は新しい問題ではなく、ソフトウェア分野に再び適用されたものなのである。
さらに、関数型プログラミングの思想もこの時期に徐々に形をなした。Fortranの発明者は、この言語を完成させた後、状態を持たない数学的関数をコアとするプログラミングパラダイムを探求した。私は彼の死の数ヶ月前にインタビューしたが、なぜ関数型プログラミングが主流にならなかったのかを尋ねた。彼の答えは:関数型プログラミングは「難しいことを簡単にする」が、「簡単なことを異常に難しくする」というものだった。これも、それが常に重要な位置を占めながらも、主導的なパラダイムにはならなかった理由を説明している。
至此,我们来到了第一代软件工程黄金时代的尾声,并逐步迈向第二代。推动这一转变的力量包括持续增长的系统复杂性、规模化开发的困难,以及在国防领域中对分布式系统价值的进一步认知。同时,微型化技术的成熟也催生了个人计算机的出现。
2番目の黄金時代:「プロセス」から「オブジェクト」へ、ソフトウェアは複雑になり始める
Gergely:これは主にトランジスタと電子技術の突破によるものではないですか?
Grady:まさにそうです。これは非常に活気のある時代だった。愛好家が自分でコンピュータを組み立てられるようになった。それ以前では、この規模の参加はほぼ不可能だった。
Gergely:これは計算史上初めて、愛好家が真に大規模に参加できるようになったときですか?
Grady:そうです。経済状況が改善され、軍事部門が推進したトランジスタと集積回路の生産により、一般人がこれらの部品を入手できるようになった。シリコンバレーでは、人々はこれらの技術を直接購入して実験できた。
「遊び」はソフトウェア歴史の中で常に重要な役割を果たしてきた。1970年代末から80年代初頭は、高度に実験的な時代だった。『What the Dormouse Said』という本は、パーソナルコンピュータの台頭がヒッピー反主流文化と密接に関連していると指摘している。これは「権力の下放」という精神であり、Stewart Brand、Merry Prankstersなどの人物やコミュニティと密接に結びついており、The WELLのような初期のオンラインコミュニティも生み出した——後に電子掲示板システムと呼ばれるようになった。総じて、1970年代末から80年代初頭は、可能性に満ちた段階だった。多くの新しい技術的道筋と思想がこの時に同時に芽生えた。
当時、私たちは徐々に、ソフトウェア工学が重要な転換を迎えていることに気づいていた:人々は単に「プロセス」を通じて世界を理解するのではなく、「オブジェクト」と「クラス」を通じて理解し始めた。同時に、分散システムのニーズ、およびますます複雑なシステムを構築する現実的な圧力が、完全な嵐を形成し、ソフトウェア工学の2番目の黄金時代を推动した。
率直に言って、私はちょうどその段階でこの分野に入った。ちょうど正しい時間と場所にいただけだ。当時、私はヴァンデンバーグ空軍基地で働いており、ミサイルシステムや宇宙システムの関連プロジェクトに参加していた。そこには軍事スペースシャトル計画も含まれていた。それは非常に興味深い場所だった。毎週のように1回か2回の打ち上げがあったからだ。あなたは走り出てロケットが上昇するのを見て、「信じられない」と感叹する。
1980年代末になると、世界は新たなソフトウェア観念の準備ができていた。それはオブジェクト指向プログラミングとオブジェクト指向設計である。第一世代ソフトウェア工学と比べて、最大の違いは抽象レベルの変化だ。私たちはデータを単なる原始的なデータ湖として見、アルゴリズムで操作するだけではなく、データと行動を同じ概念に統合し、オブジェクトを形成した。この方法は、私たちが構築できるシステムの複雑さを大幅に拡張し、多くの重要なソフトウェアの基盤を築いた。
コンピュータ歴史博物館でMacWriteとMacPaintのソースコードを見ると、它们是用Object Pascal写的,是我见过结构最优雅的软件之一。它们的设计严谨、组织清晰,其中许多设计决策至今仍然能在Photoshop等现代系统中看到延续。这本身也说明了软件生命周期的一个有趣事实。
オブジェクトの視点からソフトウェアを理解することは、極めて効果的な方法であると証明された。なぜなら、ソフトウェアの複雑さの問題に解決策を提供するための新たな道筋を提供したからだ。最初の黄金時代と同様に、2番目の黄金時代も活気があった。1980年代、90年代には、重要な人物が多数現れた。例えば「三位一体」(私自身、Ivar Jacobson、Jim Rumbaugh)や、Peter Coad、Larry Constantine、Ed Yourdonなどだ。彼らは共に、「プロセス」から「オブジェクト」への思考方法を推动した。もちろん、私たちは間違いも犯した。例えば、一時的に継承を過度に強調し、それを万能の解決策のように考えたことだ。これは後に完全には正しくないことが証明された。しかし、クラスとオブジェクトから世界を理解する基本的な思想は、最終的に保留され沈殿した。
同時に、これは経済面での転換点でもあった。システム規模が拡大するにつれて、プラットフォームが台頭し始めた。実際、これは最初の黄金時代にも先例があった:人々は同じ機能を繰り返し構築したため、常用アルゴリズムとプロセスをパッケージ化して再利用し始めた。例えばディスク操作、端末出力、ソートアルゴリズムなどだ。これらの実践は最終的にソフトウェア共有の概念を生み出した。商業システム分野では、IBMのSHAREユーザーオーガニゼーションが典型的な代表例だ。これは顧客が自発的に組織し、相互にソフトウェアを共有するコミュニティである。
Gergely:これは比較的原始的な「パッケージング」方式ではないですか?例えばソートアルゴリズムやいくつかの一般的な機能を集中して配布するような?
Grady:明確にする必要があるのは、これはIBMの公式が行っているのではなく、完全にユーザーコミュニティによって推進されたものだ。これは実際、初期のオープンソースソフトウェアの形態の一つだった。当時のソフトウェアとハードウェアの経済構造も異なっていた。ソフトウェアは通常ハードウェアと一緒に無料で提供されていた。1960年代後半になって、IBMはソフトウェア自体が商品になり得ることに気づき、ソフトウェアとハードウェアを分離し、個別に課金し始めた。
より早い段階では、コミュニティの雰囲気是非常开放的,人们会说:“我写了这个工具,你拿去用吧。”这正是开源精神的雏形。类似的事情在第二黄金时代再次发生,只不过抽象层次更高了。人们开始共享库、组件和工具,比如驱动CRT显示器的程序。这些东西本身并不构成竞争优势,却极大地提升了构建复杂系统的能力。
在这种背景下,平台逐渐形成。随着库和组件规模不断扩大,分布式系统兴起,我们开始讨论“面向服务的架构”(SOA)。HTML和HTTP让信息交换成为可能,人们开始设想通过网络共享图像、消息乃至服务。SOAP等协议由此诞生,成为当今平台时代的前身。这些变化,正是在第二黄金时代为平台经济奠定基础。
Gergely:「プラットフォーム」の台頭、具体的には何ですか?あなたはプラットフォームをどのように定義しますか?
Grady:AWSとSalesforceは典型的な例だ。これらのプラットフォームは「経済的な城塞」のようなものだ。プラットフォーム側は、あなたが堀を越えてその能力を使用することを許可するが、前提は:あなた自身が最初から構築する場合、コストははるかに高くなるということだ。そのため、2番目の黄金時代では、SaaS系企業の台頭が見られた。なぜなら、特定のソフトウェアの複雑さとコストが、このビジネスモデルを支えるのに十分に高くなったからだ。1990年代末から2000年代初頭にかけて、これは同樣に活気のある段階だった。インターネットが急速に発展し、ソフトウェアは社会のあらゆる隙間に真に浸透し、文明のインフラストラクチャの一部となった。電子メールはその典型例だ。
Gergely:あなたはいつ最初のメールアドレスを持ちましたか?
Grady:1987年、那时还是ARPANET。随着软件成为日常基础设施,第一黄金时代所担忧的许多问题逐渐“消失”了,不是被忽视,而是被内化进系统之中。优秀的技术会“蒸发”,成为空气的一部分。第二黄金时代,正是当今软件世界的根基。
2000年前後、インターネットバブルが崩壊し、経済的ロジックはそれまでの拡大を支えられなくなった。同時にY2K問題も発生した。事後から見れば「何も起こらなかった」ように見えるが、それは無数のエンジニアが巨大な努力を払ったおかげで災難を避けられたからであり、これは「最高の技術は見えない」典型例だ。
Gergely:私もミレニアムバグ以前の緊張感を覚えている。映画で世界の終わりを予言するものもあった。結局何も起こらず、多くの人はそのような警告を信じなくなった。
3番目の黄金時代:AI時代ではなく、ソフトウェア工学の成熟期
Grady:ここで、此前未展开の歴史の手がかりを補足したい:AIだ。
AIの最初の黄金時代は1940年代、50年代に出現し、シンボリズムをコアとした。代表的な人物にはHerbert Simon、Newell、Minskyなどがいた。当時もニューラルネットワークが試みられ、例えば真空管で実現した人工ニューロンなどがあったが、計算能力と理論的制限により最終的に失敗し、AIは冬の時代に入った。2番目の黄金時代は80年代に出現し、ルールシステムとエキスパートシステムを代表とした。ハードウェアとアーキテクチャには進歩があったが、依然として規模化が難しく、再び停滞した。
21世紀に入り、私は私たちが実はソフトウェア工学の3番目の黄金時代に既に身を置いていると考えている。その標識は、再び抽象レベルが飛躍したことだ:単一のプログラムから、プラットフォームレベルのライブラリ、フレームワーク、サービスへ。私たちはもはや自分自身でメッセージシステムやデータ管理を実装せず、既存のプラットフォーム能力を直接使用する。AIプログラミングアシスタントの出現は、まさにこの複雑さの増大への応答である。它们并非偶然,而是第三黄金时代演进逻辑的自然结果。
現在の問題は、前2世代とは異なる:ソフトウェア規模は空前の大きさで、セキュリティ、サプライチェーン攻撃、システム信頼が核心的な议题となっている。同時に、ソフトウェア大手の重要性により、「システムリスク」を有している。さらに、技術的倫理問題も前面に押し出された:私たちができることは、私たちがそれを行うべきことを意味するのか?
Gergely:多くの人は実はあまり振り返って考えない:これらはどのように始まったのか、そしてソフトウェア工学という学問自体がどれほど「若い」のか。70、80年というスケールで見ても、それはせいぜい2世代分の歴史しかない。
しかし、私は現在業界で一般的に感じている感情がある。特に最近の段階で、多くのソフトウェアエンジニアが明らかな「実存的不安」を経験している。この不安はこの冬の休止期の後明らかに加速した。冬の休止期の前は、AIと大規模言語モデルは主に自動補完ツールであり、時にいくつかのコードを生成するだけだった。しかし、冬の休止期の後、新しい世代のモデルは品質の相当高いコードを書けるようになり、私が実際にそれらを信頼し始める程度にまで達した。
歴史的に見ると、コードを書くことは常に困難なことだった。私たちは熟練するのに数年間の訓練を必要とし、真に優れるにはさらに長い時間がかかる。そのため、今多くの人は深刻な不安に陥っている:機械がこれほど良いコードを書けるとは、どうして短短数ヶ月で起こったのか?次に何が起こるのか?コードングは常にソフトウェア工学と高度に結びついていたが、今はそうではないようだ。あなたの歴史的視点から、今起こっていることをどのように理解しますか?
Grady:これはソフトウェアエンジニアが初めて経験する実存的危機ではない。類似の不安は第一世代、第二世代ソフトウェア工学の時期にも現れた。だから私の態度は常に:歴史は繰り返し、この回もやがて過ぎ去る、というものだ。私はよく心配する人々に言う:パニックになる必要はない。基本に集中せよ。なぜなら、それらの能力は消えないからだ。
私はかつてGrace Hopperに会ったことがある。彼女が1950年代に、ソフトウェアはハードウェアから抽象化できることに気づいたのはまさに彼女だ。この思想は当時極めて破壊的で、強い反対も引き起こした。多くの初期コンピュータエンジニアは、ハードウェアに密接に依存しなければ効率的なソフトウェアを書くことは不可能だと考え、この做法が業界全体を破壊するのではないかと心配した。事実は、彼らが間違っていたことを証明した。
類似の議論はFortranが出現した時にもあった。人間が手で書いたアセンブリコードは、コンコンパイラが生成したコードよりも効率的であると信じる人もいた。しかし、抽象レベルが上昇するにつれて、この見方は何度も覆された。每一次の抽象の飛躍は、既存の技能の一部を中心的地位から奪い、これらの変化は往々にしてエンジニア自身によって推动された。
過去、この衝撃は如此劇的な感情を引き起こさなかった。重要な理由の一つは:当時の従業者規模が小さく、おそらく数千人程度だったことだ。而今天,这个群体是数以百万计的。人们理所当然会问:那我怎么办?
私もよく若いエンジニアから类似の質問をされる:「私は間違った方向を選んだのか?」私の答えは常に:今がまさにソフトウェア業界に入るのに良いタイミングだ、というものだ。理由は簡単だ。私たちは新たな抽象レベルの飛躍を経験しているからだ。機械語からアセンブリ言語へ、アセンブリから高級言語へ、高級言語からライブラリとプラットフォームへ、那样的飞跃一样。
この変化は私にとって大きな解放だった。私は大量の瑣末な詳細を気にする必要はなくなったが、ソフトウェア工学の基本原则は依然として存在する。長期的なメンテナンスが必要で、時間の試練に耐えるソフトウェアを構築している限り、これらの能力は代えがたい。
もちろん、あなたが単に使い捨てのコードを書き、書いたら捨てるだけなら、どんなツールでも構わない。私は多くの人がAIエージェントを使ってこの「使い捨て」の自動化タスクを完了しているのを見ている。これはまったく問題ないどころか、非常に価値がある。
これは私を初期パーソナルコンピュータ時代の「愛好家文化」を思い出させる。当年、多くの元々ソフトウェアと無関係だった人々が自分でプログラムを書き始め、大量の新しいアイデアを生み出した。今日の状況は極めて類似している。あなたはAIを使って、過去経済的に価値がなかったことを自動化できる。それらの成果が長期的に存在するかどうかに関わらず、それらは依然として価値を創造している。
Gergely:就像当年普通人可以买得起个人电脑一样,如今也有很多原本不在行业内的人开始写软件。我刚和楼上的邻居聊过,她是一名会计,但已经在用ChatGPT帮团队写代码,提高流程效率。
Grady:初期パーソナルコンピュータ時代、アーティスト、ゲームプレイヤーがこの新しいメディアに流入し、前所未有的活力を創造した。今日も同樣である。多くのいわゆる「職業危機の物語」は、分野に対する狭い理解から来ている。実際に起こっているのは、ソフトウェアがより広い人々に広がっていることだ。非専門の開発者がより多くのソフトウェアを書くようになることは、極めて積極的な変化だ。就像当年的个人电脑反主流文化一样,历史正在重演。
Darioの判断が根本的に間違っている理由:ツールは変わるが、ソフトウェア工学の難題は変わらない
Gergely:AnthropicのCEOであるDario Amodeiは、約90%のコードがAIによって生成されると予測した。当時は誇張に聞こえたが、後に事実は彼が完全には間違っていなかったことを証明した。最近、彼はさらに不安な言葉を言った:「ソフトウェア工学は12ヶ月以内に自動化される」。コードングはソフトウェア工学の一部に過ぎないことを考慮すると、この主張はさらに過激だ。你怎么看?
Grady:私は一言二言言いたいことがある。
まず、私はClaudeを使っている。Anthropicの製品だ。私はそれを私の首选のシステムだと思っている。私はそれをJavaScript、Swift、PHP(そうだ、PHPさえも)、そしてPythonの問題を解決するために使っている。私は確かにそれを使っているし、それは私にとって非常に役立っている——主に私が特定のライブラリを使いたいからだ:Google検索は酷いし、ドキュメントも酷いので、これらのエージェントを使ってそれらの理解を加速している。
しかし忘れないで:私はこれらの分野で少なくとも1、2年の経験がある——まあ、正確には数十年だ——私は基本原理を理解している。だからこそ私は言う:基本は消えない。これはあらゆる工学分野で成立する:基本原理は消えず、変化するのは私たちが使用するツールだけだ。
したがって、Dario、私はあなたの表現を尊重するが、認識する必要がある:彼と私の視点は異なる。彼は会社を率いており、会社はお金を稼ぐ必要があり、彼はステークホルダーに話す必要がある。だから彼は「センセーショナルな」ことを言うのだ。私は彼がダボスでこれらのことを言ったと覚えている?
Gergely:そうです。
Grady:もしこれを「技術用語」で評価するなら、それは:根本的に間違っている(profoundly wrong)。理由はいくつかある。
第一に、私は彼の一部の見解を受け入れる:それはいくつかのことを加速するだろう。しかし、それはソフトウェア工学を消滅させるか?ならない。私は彼が「ソフトウェア工学とは何か」に根本的な誤解があると思っている。
最初に言ったことに戻る:ソフトウェアエンジニアは、様々な力のバランスを取る責任を負うエンジニアだ。コードは私たちの一つのメカニズムに過ぎず、私たちを驱动する唯一の要因ではない。そして彼や彼の同僚が議論しているものは、どれもソフトウェアエンジニアが直面しなければならない那些決定問題——それらは現在のいわゆる「自動化」の範囲内には含まれていない——には触れていない。
彼の仕事は主に最低層の自動化に焦点を当てている——私はそれを当年のコンコンパイラがしたことと類比する。だから私は言う:これは新たな抽象レベルの上昇だ。開発者たちは恐れる必要はない:ツールは変わるが、問題は消えていない。
私が彼に反論する第二の理由は:Cursorのようなシステムは、私たちが何度も見た問題のセットで訓練されていることが多いことだ。これは問題ない。最初の、最初の黄金時代のように、私たちは比較的固定された問題のセットに直面していたため、それらを中心にライブラリを構築した。今も同樣である。
もし私がCRUDの上にUIを構築したい場合、あるいはWeb中心のものを作りたい場合、もちろんそれは可能だ。更重要的是、这种能力开始“下沉”——很多原本需要专业工程能力才能完成的事情,如今被更高层抽象直接交付给了更多人。多数人不会因此去做一门生意,当然也会有极少数人能把它做成产品。但关键在于:更高层抽象让他们能做以前做不到的事。
そしてDarioが忽略している点——私はシェイクスピア的な言い回しを借りて言う:「計算世界には、あなたの哲学が夢見る範囲を超えるものがまだたくさんある。」計算世界は、「スケーラブルなWebシステム」の一部だけではない。私たちは今日確かに多くのものを、このWeb中心の大規模システムに応用している。私はそれは良い、素晴らしいと思っているが、这也意味着:外面还有大量东西尚未被自动化。我们会不断把“边界 / 前沿”继续往外推。
私が最初にあの話をしたのは、歴史が繰り返しているからだ——あるいは有人说、历史在押韵。今日起こっている現象は本質的に同じだが、異なる抽象レベルで起こっている。
これが第一点だ:ソフトウェア世界は彼が見るよりも大きい。それは「ソフトウェア密集型システム」だけでなく、彼が关注している那一小块だけではない。
第二点、もしあなたがこれらのエージェントが主に処理するシステムのタイプを見ると、それらは本質的に、私たちが何度も見た、それらも訓練の中で何度も学んだパターンを自動化している。パターン自体は新たな抽象だ:それは単一のアルゴリズムや単一のオブジェクトではなく、一群のオブジェクトとアルゴリズムからなる「社会」であり、互いに協力している。
これらのエージェントは「パターンの生成」を自動化するのが非常に得意だ。私は何かを作りたい、私は英語で説明できる——なぜならパターン本来が私たちが自然言語で説明するものだからだ。
だからこそ、私は彼が間違っていると思う。彼の幸運を祈る。しかし、私はこれは実存的にパニックになる時代ではなく、より興奮する時代だと思っている。
私はもう一つ「抽象レベルの上昇」についての話をしたい。
私は一人の人間に行って言う:「我希望システムがこれを行い、大体こんな感じだ。」そしていくつかの例を示す。私はずっとこれを行っている。そして誰かがそれをコードに変換する。つまり、私はとっくに更高層の抽象にいる:私は「私はこれを行いたい」と言う。
具体的な例を挙げよう:私は最近、以前从未触ったライブラリ——JavaScriptのD3を使っている。それは非常に魅力的な可視化ができる。私はVictorian Engineering Connectionsというウェブサイトに行った。それはとても可愛い小さなサイトで、誰かが某个博物館のために作ったプロジェクトだ(Andrewという)。あなたは名前を入力できる、例えばGeorge Boole、そしてあなたは彼の情報を見ることができ、彼を取り囲むソーシャルネットワークも見られる。你可以点进去探索,非常酷。
私は當時こう思った:「私もこんなものが欲しいが、天哪、私は全然できない、どうしよう?」彼はコードを私にくれた。私はそれがD3を使っていることに気づいた。私はD3について何も知らない。于是我對Cursor說:「给我做一个最简单的版本:五个节点,展示出来。」这样我就能研究代码。
接着我又能继续说:“我真正想做的是这个。把节点做成某种样式,取决于它们的类型。”就像我对一个人类合作者提需求一样,我是在用英语表达我的需要,而现在我不必再为把它变成现实而苦苦劳作——我可以跟工具对话,让它帮我完成。
だからこそ、それは「私が何をしたいか」と「それが何ができるか」の間の距離を短縮する。我觉得这非常棒,这是一种突破。
しかし忘れないで:私はDarioに言った:これは特定のシナリオでのみ有効だ——私がしていることが、他の人が何百回も行ったことのある種類のものである場合。Feynman流に言えば、彼はこう言うかもしれない:「自分でやれ、それだけが理解する唯一の方法だ。」私の反応は:それは正しいが、世界には私が好奇心を持つものが多すぎて、すべてをゼロから理解する時間はない。那就让工具替我做一部分吧——我来决定我想做什么。
だからこそ私は言う、これらのツールは新たな抽象レベルの飛躍だ:それらは私が英語で言う要求と、最終的にプログラミング言語に落ちるまでの距離を短縮している。
最後に言いたい:何の言語が正確で、かつ十分表現力があり、「実行可能な工件」を構築するために使用できるか?私たちはそれをプログラミング言語と呼ぶ。恰好、英語は特定の条件下で「プログラミング言語のように」十分「似ている」——COBOLに少し似ている:もし私が構造が十分明確な分野で、十分明確なフレーズで要求を表現すれば、それは私に「十分良い」解をくれる。そして、基本を理解している私として、その詳細を推進、校正、クリーンアップできる。
这就是为什么基本功如此重要。
低い実を先に摘む:上に登るとき
Gergely:每一次抽象层级的跃迁,都会让一部分技能变得过时,同时催生对新技能的需求。比如从汇编语言过渡到更高级语言之后,熟悉某块硬件指令集、并针对其进行极致优化的能力,就被更高层次的抽象思维所取代。而在当下这次跃迁中,可以说我们正在进入一个“无需再亲手写代码,计算机自动生成,我们只需检查和微调”的阶段。作为软件从业者,哪些技能会逐渐过时?又有哪些能力会变得更加重要?
Grady:如今的软件交付流水线比它本应具备的复杂得多,如果没有成熟的流水线,仅仅让一个系统跑起来都非常困难。而在Google、Stripe这样的公司内部,已经构建了规模庞大且高度定制化的基础设施体系。
正因如此、这里存在大量“低垂的果实”,非常适合被自动化取代。我并不需要人类去填补这些繁琐而边缘化的环节。在这些领域、我们很可能会看到智能代理的出现:当我需要在某个地区快速部署资源时、我并不想亲自编写那些复杂、混乱的代码、而是更愿意让代理系统来完成。这类工作在经济效率和安全性上都具有明显的自动化价值、因此确实会带来一部分岗位的消失。对应地、人们需要重新学习、转向更高层次的应用构建。
同样地、那些过去专注于开发某个iOS应用或具体前端产品的技能、也会面临岗位收缩。因为现在、很多事情只需通过提示就能完成。这并非坏事、它让新一代人能够完成过去只有专业工程师才能完成的工作、这正如个人电脑时代所发生的一切。
因此、人们应该做的不是抗拒变化、而是向上移动一个抽象层级、开始关注“系统”本身。我认为、当前的转变不再是从程序到应用、而是从应用到系统。新的技能重心在于:如何在大规模环境中管理复杂性、如何同时处理技术因素与人的因素。只要你具备这种系统性能力、你的工作不仅不会消失、反而会更加稀缺和值得被需要。
Gergely:你会建议学生、即将进入行业的新人、以及希望回过头来夯实基础的资深工程师、从哪些方面入手?
Grady:当我面对极其复杂的问题时、最常回归的、是系统理论。可以去读Herbert Simon和Allen Newell的研究成果、也可以关注圣塔菲研究所关于复杂性与系统的相关工作。这些系统理论的基本原理、为我构建下一代系统提供了稳固的支点。
我曾参与NASA火星任务的研究。当时的问题是:如何支持人类执行长期深空任务、并让机器人在火星表面自主运作。这本质上是一个系统工程问题、因为这些能力必须“具身”于航天器之中。而当今大量AI软件是去物理化的、它们与现实世界并无直接连接。
那段时间、我也在跟随多位神经科学家学习、试图理解大脑的结构。正是在这个过程中、我意识到系统工程中的某些结构模式、可以直接应用于超大规模系统的设计。比如Marvin Minsky提出的“心智社会”模型、本质上是一种多智能体系统架构、而今天我们才刚刚开始真正触及智能体编程的潜力。
类似的还有早期AI系统中提出的“黑板模型”“全局工作空间”、以及Rodney Brooks提出的次级控制架构、这些都受到生物系统的启发。生物系统本身具备高度有效的架构方式、即便没有中央控制、也能完成复杂行为。
因此、回到你的问题、我的建议是:从系统视角重新审视架构、从生物学、神经科学和真实世界的复杂系统中汲取灵感。很多问题其实早已被研究过、只是我们在新的语境下重新应用了它们、工程的基本原理并没有消失。
Gergely:回顾以往几次抽象层级跃迁和软件工程的黄金时代、那些在新时代初期脱颖而出、即便在旧时代并不出众的人、往往做对了什么?从历史中、你会给出怎样的建议?
Grady:正如我之前提到的、软件领域真正限制我们的、其实是想象力。当然、我们同时也受到物理规律、算法能力以及伦理约束的限制。但现在正在发生的是:许多开发过程中的摩擦、成本和阻力正在消失。这意味着、我们终于可以把更多注意力投入到想象力本身、去构建过去根本无法实现的事物。以前做不到、是因为无法组织足够的人力、无法承担成本、也无法获得全球性的影响力。而现在、这些限制正在被解除。
因此、你应该把这一切视为机会。对某些既得利益者而言、这可能是损失;但从整体来看、这是一次净增益。它解放了我们的想象力、让我们能够在现实世界中做出此前不可能实现的事情。这是一个令人兴奋、同时也令人恐惧的时代、但这正是应有的状态。当你站在通往新事物的门槛上、可以选择凝视深渊、害怕坠落;也可以选择纵身一跃、展翅高飞。现在、就是该飞的时候。
参考リンク:
https://www.youtube.com/watch?v=OfMAtaocvJw
声明:本文为InfoQ整理、不代表平台观点、未经许可禁止转载。