さらに、もう1つの転換があります。私たちは当時、割り当てられたシステムで仕事をすることに満足していたのですが、その後モバイルコンピューティングが現れたのです。今では何でも、信じられないほど個人向けになりました。このことで、また何かが変わりました。活気に満ちたコミュニティがまた1つ現れたのです。これをソフトウェアエンジニアリングの次の黄金時代と考えたいと思います。
「アジャイル・アライアンス」(図表139)は2001年に結成されました。Linuxをもたらしたリーナス・トーバルス(Linus Torvalds、図表140)は、のちのGitの基礎を作りました。マイクロソフトのジャネット・ウィン(Jeannette Wing、図表141)は、計算論的思考(computational thinking)という手法を開発しました。ジョエル・スポルスキ(Joel Spolsky、図表142)は、スタックオーバーフロー(Stack Overflow)というアイデアをもっていました。そしてロバート・マーチン(Robert Martin、図表143)は、Clean Codeというアイデアをもっていました。
図表139 アジャイル・アライアンス *ホームページ
図表140 リーナス・トーバルス(Linus Torvalds) *Wikipedia
図表141 ジャネット・ウィン(Jeannette Wing) *Wikipedia
図表142 ジョエル・スポルスキ(Joel Spolsky) *Wikipedia
図表143 ロバート・マーチン(Robert Martin) *Wikipedia
突然、ソフトウェアエンジニアリングに関わる人が増え、誰でもコードを書くことができるという考え方が現実に普及するようになったのです。今では、かつてはできなかったことを作り上げられるようにしてくれる無限の構造がWebに存在しています。率直に言って、GitやGitHub、Stack Overflowなどに支えられたこうした構造が、現代のソフトウェア開発者にとって基礎となったのです。
1つの発見ですが、現代の多くの開発者は、コンピュータサイエンスを正式に学んだことはありませんが、特定の分野を研究したことがあり、その過程でプログラムの組み方を、公開されているこうしたさまざまなリソースから学んだのです。
現代のソフトウェアエンジニアは計算論的思考の持ち主です。だから、今私たちはワクワクするような場所にいます。今はクラウドへの変化に対処しているので、すべてのスタックの開発者の考え方すべてが影響を受け始めました。
私たちは、初期にはハードウェアとソフトウェアを1つのものとして扱い、のちに2つを分離しましたが、私たちは発展して行く中で、再び2つを一緒にしたのです。
クラウド上のシステムを築き上げるときは、すべての要素について考える必要があると言われます。DevOps(図表144)によって、私たちがクラウドデータセンターを用いてシステムを築くときは、ソフトウェアそのものだけではなくそのシステムが稼働した先にあることも考えなくてはならないという観念がもたらされました。DevOpsは次のステップになりました。金の問題はあとからついてくるのです。
図表144 DevOps *Wikipedia
私は、Amazonのアーキテクトのうち何人かと一緒に働く機会がありました。Amazonの黎明期、ジェフ・ベゾス(Jeff Bezos、図表145)はマイクロマネージメントする人でしたし、今でもそうです。AmazonではSOAPが重要だった時期があったことを私は知っています。
SOAPとは、ブラッド・コックス(Brad Cox、図表146)のアイデアから発展し、マイクロソフトが強く推し進めてきた標準的なプロトコルです。ジェフ・ベゾスは部下の開発者に、SOAPは実に素晴らしいと言いました。開発者たちはすでにAmazon.comを築き上げていたのですが、ジェフはすべてをサービスにするようにと命じました。開発者が、できたらやりますと答えると、ジェフは死に物狂いで必ずやり遂げるのだと命じました。ジェフは開発者たちに、文字どおりすべてをサービスに転換するよう強要したのです。そこから、魔法のように素晴らしいものが生まれました。アーキテクチャに関する決定がビジネス全体を変化させることができるという例がここにあるのです。
彼らは、最初のマイクロサービス・アーキテクチャと呼ばれるものを生み出し始めました。彼らはAmazon.comに、マイクロサービスとして機能するさまざまなサービスを組み入れましたが、当初は今よりずっと使いにくいものでしたが、その後素晴らしい方法を発見しました。Amazon.com専用に作られたものを、他のものと別に扱えるようにしたのです。だから、突然、Amazon固有の決済などのサービスを切り離すことができるようになって、Amazonのブランド名がついたストアを作ってサービスとして利用できるようにして、実際には他社が販売しているのにAmazonが販売しているように見せかけ、他社の製品をAmazonストアで購入できるようにしました。それはAmazonをより繁栄させたのです。
彼らが始めたもう1つのことは、Amazonのネットワークで稼働しているシステムの一部を自分用に利用できるようにしたということです。そうして生まれたのが、AWS(Amazon Web Services)です。それはすべて、Amazonを圧倒的な存在にするという、ジェフ・ベゾスのアーキテクチャに関する決定から作り出されたもので、確かに今日、Amazonは圧倒的です。
図表145 ジェフ・ベゾス(Jeff Bezos) *Wikipedia
図表146 ブラッド・コックス(Brad Cox) *Wikipedia
しかし、別の面白いことも起こりました。統合されたIT企業が、それぞれ独自のゲーテッドコミュニティに囲い込みを始めたのです。Appleも、マイクロソフトも、Facebookもある程度、そしてIBMはWatsonで築いています。私たちにはそれぞれ独自の独立したサービスがあるので、理にかなった話です。そうなると、基本的に考えなくてはならないのは、そこに参加するべきかどうかです。
いまは、相互に運用できるクラウドベースのエコシステムがあります。今、ソフトウェア開発は2面性をもつようになっています。サービス内部では新たなサービスを構築し、外側からそうしたサービスを利用して統合するのです。インターネット時代の今、多くのソフトウェア開発者はそんなやり方を好みます。前にも申し上げましたが、今も確かに再びはっきり言えるのは、ソフトウェアエンジニアリングの動向を見ると、面白いことに振り子があちこちに振れているということです。
振り子の1つは重量級の方法論と軽量級の方法論です。もう1つの振り子は、クラウドコンピューティングとエッジコンピューティングの間を揺れています。エッジとクラウドの間を揺れる振り子のほかに、アーキテクチャが数多くあるか、逆にアーキテクチャがほとんどないかという振り子もあります。
今日のソフトウェア開発に変化をもたらしているのが、これらの3つの振り子です。こちらではジェフ・ベゾスに会い、向こうではジェフ・ディーン(Jeff Dean、図表147)に会います。ジェフ・ディーンはGoogle側で、ジェフ・ベゾスとはAmazon側です。彼らは実際にこうした世界を自分たちで構築し始めた人たちです。
図表147 ジェフ・ディーン(Jeff Dean) *Wikipedia
今、私たちは今までとは違った場所にいます。私たちはいま、ソフトウェアエンジニアリングの次世代が現れ始めたところにいます。あなた方が力を発揮すべきときです。
ですから私は、ソフトウェアエンジニアリングやソフトウェアあるいはコンピュータサイエンスが、物理学やアルゴリズムの領域にあったころの歴史を振り返り、これまで考えなければいけなかった速度や熱、その他さまざまなことや高速トランジスタをいかに構築するかといったことすべてを振り返っているのですが、それはかつて私が、まずは特定の種類のアルゴリズムに移行し、次にアーキテクチャ、組織、それから、ソフトウェアエンジニアリングの領域にある経済学や人間的要素へと移行していったからです(図表148)。
図表148 コンピュータサイエンス/ソフトウェア・エンジニアリングの歩み ~ブーチ氏講演資料から
つまり、ここには科学があり、それ以外の(工学的な)領域があり、さらに、自分が帰属している(会社や社会のシステムのような)領域もあるわけです。
さらに、別の見方もあります。これまで構築されたシステムの歴史を振り返ると、初期には数学的な時代があり、FORTRANが生まれました。それからシンボリックなものが登場し、C言語とCOBOLが誕生しました。やがてパーソナルになり、SmallTalkやSIMULAが登場しました。さらに、分散型で最新のものができて……今では「想像上の現実」(imagined realities)と呼ばれるものになっています(図表149)。
図表149 数学的な時代から想像上の現実へ ~ブーチ氏講演資料から
『Sapiens』(邦訳『サピエンス全史』河出書房新社、図表150)という素晴らしい本には、「想像上の現実」という考え方が紹介されています。「想像上の現実」の例を1つ挙げましょう。ここに千円札があります。これは、一定の価値があることを皆が共有できる「想像上の現実」です。食事もできますし、お金があれば何でもできます。私たちには共同幻想があって、そこにシンボル(象徴・記号)を当てはめています。
図表150 邦訳『サピエンス全史』河出書房新社、表紙 *Amazon
ソフトウェアでは誰もが行っていることです。私たちは、自分の想像力から、自分の世界を構築しています。私はバーチャル・リアリティの世界を構築します。私は世界を構築し、自分が話せるこうしたスライドを抜粋しようとします。物理学の場合は原因と動作を観察してそれを法則として用いますが、それとは違って私たちは、最もシンプルな法則を選び、それを使って素晴らしい世界をつくりだしています。
ここに興味深い課題があります。私は、エンジニアリングとは力に取り組むことだと思います。つまり、ソフトウェアエンジニアリングの力です。数学的システムの時代から、私たちは主に構成要素(エレメンツ)に取り組んできました。アルゴリズムをどう書くのか? ソースを書く最適な方法は? どうしたら非常に速く処理できるか? 私がシンボリックなものに移ったころは、ちょうどSAGE(半自動式防空管制組織:Semi Automatic Ground Environment、米空軍が冷戦期に構築運用した防空コンピュータシステム)やアポロ計画、IBM/360の時代でしたが、その力は以前よりも複雑になっていました。
複雑性にどう対処したかといえば、マイクロコンピュータやミニコンピュータに移行し、次に、人とコンピュータの相互作用の力を導入しました。それにより突然、シンボルが行ったり来たりするようになりました。それは、人間それ自体との相互作用でした。
私たちは分散型システムに取り組み始め、スケールアップやスケールアウトに取り組み始めました。こうした1つ1つが、ソフトウェアエンジニアリングの各時代を牽引する主力となりました。今の私たちは「想像上の現実」の時代にいます。そこで私たちは、まさにどっぷりと浸かる世界を構築しています。
コンピュータは街中のいたるところで使われていて、その威力を発揮しています。私の上でも下でも、横でも目の前でも。実に驚くべきことです。私も、こうした共有現実の一部です。このためソフトウェアエンジニアリングは、今では倫理的・道徳的な問題をはらむようになっています。
どのコードも倫理的・道徳的な決断を示しています。そうは見えないかもしれませんが、誰かが行っていることは、予測もつかない方法で世界を変えています。したがって私たちソフトウェアエンジニアは、基本的なことを心配する必要があります。複雑なことについても心配しなければなりません。こうしたことすべてを心配しなければならないのです。
ソフトウェア開発の多くは3つのカテゴリーに分けられます。どこかに犬小屋を作るようなとき、プログラムは必要ありません。設計もいりません。多くの人の手を借りる必要もありません。ただ作業を進めて作ればいいのです。失敗したら新しい犬を連れてきて、もう一度作ればいいのです。
それから、家屋の建築に近いシステムがあります。それなりのコストがかかり、失敗した場合のコストも高く、建築中に誰かの命を奪いたくないので、より厳格な建設方法を採用します。
これに対して、最も現代的なソフトウェア開発は、都市の管理に似ています。私がここ東京で、今いる場所を通り抜けるような新しい地下鉄や新しい幹線道路を作りたいと言ったらどうなるでしょうか。技術的にいえば作ることは可能ですが、一方でそんなことは力づくではやれず、周辺のあらゆることに取り組まなければいけないことはわかっています。これが現代のソフトウェア言語の本質なのです(図表151)。
図表151 現代のソフトウェア開発は都市の管理に似ている ~ブーチ氏講演資料から
世界は再び変化しています。私たちは今、人工知能(AI)の偉大なる新世界にいます。昔、1950年代か1960年代に我々が書いたシステムはもともとシンボリックなものでした。それが(今のAIブームによって)突然再登場しました、新しい考え方ではないのです。そして、2つの重要な要素をまとめ上げるモデルが出てきたのです。
1つはデータ量の爆発的な増大で、もう1つは、主にGPUを用いてデータを処理するコンピュータの膨大な処理能力の出現です。突如として現れたこのアイデアを今現在私たちがもっています。それは、ニューラルネットワーク時代の基礎的な部分となっていて、私たちが今日手にしているものなのであり、それがすべてを変えつつあります。
刺激的な時代ですが、恐ろしい時代でもあります。それでも、この新しい世界が、後戻りさせることも避けることできないとしても、あなた方ソフトウェアエンジニアは常に、いくつかの基本原則(ファンダメンタルズ)に沿って開発するでしょう。
こうした基本原則は、私にとっても役に立つものでした(図表152、図表153)。それは、あらゆるソフトウェアエンジニアリングの原則であって、エンジニアはまず、簡潔で明快な抽象概念を構築したいと考えます。そして、問題を明確に分離したいと考えます。これらの要素をバランスよく分散し、全体的にシンプルに構築したいと考えます。段階的に実行できることを少しずつ実行していけば、ほかはすべてうまく収まるでしょう。これがあなたに本当に必要なことであり、現代のソフトウェアエンジニアリングの本質なのです。
図表152 ソフトウェアエンジニアリングの基本 ~ブーチ氏講演資料から(一部改変)
図表153 「Software Engineering Body of Knowledge」(ソフトウェアエンジニアリング基礎知識体系―SWEBOK) *Wikipedia *Amazon
私には、次世代のソフトウェアエンジニアリングがどうなるのかはわかりません。少なくとも当面は、現在起きているさまざまなことがハイブリッドなシステム上で起きると思います。
私たちはAIベンチャー企業3社を設立しましたが、そのアイデアはちょっと面白いものです。というのも、2010年、2011年、2012年に私たちが発見したことの多くは、計算機論的ネットワークが実際に役立つということです。これは驚くべきことです。この数年間、漸進的なブレークスルーが続いてきましたが、主な焦点は、どうやってより速く動作させるか、トレーニング期間を短縮するかということです。ちょっとした停滞期も時々ありますが、これは問題ないでしょう。ディープラーニングのアイデアを思い付いた人でさえ、「おい、ちょっと待ってくれ、我々が取り組める新しいモデルがあると思うんだ」と言っているのですからね。それは、ディープラーニングの拒絶というわけではありません。ディープラーニングは依然として重要です。しかし、あなたたちのディープラーニングに対する認識は、コンピューティングの一部であってすべてではないというものです。
ですから、これは私が過去3年にわたって取り組んでいることなのですが、現代のソフトウェアエンジニアリングの多くは次世代において、コンポーネントを連結し、シンボルをもったシステムを構築していくことになると考えています。
私たちが近ごろ目にするAIのほとんどは、私が信号系のAIと呼ぶものです。信号系AIは興味を引く、視覚や画像、映像、音声に取り組んでいます。しかしこれはシステムの端っこにすぎません。最近構築されているシステムで目にするものは、端には数多くのニューラルネットワークが、中央には数多くのシンボリックな領域があります。これらが一体化したものを今後目にするのではないかと思います。私たちが見るシフトはそういうものになるでしょう。だから、例の振り子に話は戻るのです。
それは、上手に統合されたシンボリックなコネクション・システムです。振り子を行ったり来たりするアーキテクチャです。行っては戻るエッジです。エッジについてさらに言えば、IBMのスパコン「Summit」は、メディア処理系に多く依存しています。NVIDIAのGPUがかなり使われています。これは今でも、単にエッジに働きかけるだけでなく、エッジに取り込むことができるようになっています。実にパワフルです。突如として、クラウド上のAI領域に振り子が揺れているのを目の当たりするようになり、私たちはクラウド上にAIシステムを配置し始めています。
次に起きることは、どうやってシステムを信頼するかという課題でしょう。私たちは継続的なシステム構築の中で、全体像もわからず、制御も効かないようなシステム、結果として、問題がインターネットのスケールに拡大してしまうようなシステムを構築するようになってきています。
これは、私たちにとっては刺激的な時代です。ソフトウェアは、ハードウェアの可能性の物語を囁く、目に見えない書き物です(図表154)。そして、ソフトウェアがハードウェアに可能性の物語を囁く、目に見えない書き物になるとき、その語り手はあなたなのです。
図表154 ソフトウェアは、ハードウェアの可能性の物語を囁く、目に見えない書き物 ~ブーチ氏講演資料から
ソフトウェアエンジニアリングは刺激的なものです。私たちは、世界を変えてきた驚くべき伝統の一部なのです。私から皆さんにお願いしたいことは、今後も努力を重ねて、世界を変えていっていただきたいということです(図表152)。
図表155 次はあなたが・・ ~ブーチ氏講演資料から
[了]
・・・・・・・・
◎グラディ・ブーチ氏講演 「ソフトウェアエンジニアリングの歴史」
第1回 エンジニアリングは高級神官イムホテプから始まる
第2回 ソフトウェアエンジニアリングのさまざまな定義
第3回 Adaから始まりエンジニアリングの基礎が築かれる
第4回 ソフトウェアエンジニアリングへ
第5回 サブルーチン、コンパイラ、FORTRANの誕生
第6回 ソフトウェアが現実のものになる
第7回 アルゴリズムからオブジェクト指向へ
第8回 ソフトウェアエンジニアリングの第3の黄金時代
第9回 ソフトウェアは、ハードウェアの可能性の物語を囁く
・・・・・・・・
◎グラディ・ブーチ(Grady Booch)氏
グラディ・ブーチ(Grady Booch)氏は1955年、米国テキサス州生まれ。オブジェクト指向ソフトウェア開発方法論Booch法とソフトウェア開発モデリング言語UMLの開発者。現在、IBM フェロー。ACM フェローおよびIEEEのフェローでもある。*Wikipedia
[IS magazine/i Magazine]