Whatsappが買収された時、月間4億5000万人のユーザーがおり、エンジニアの人数はわずか32名でした。 Imgurは、わずか7名のエンジニアで月間の画像の閲覧数が400億を超えるまで成長しました。Instagramが10億ドルで買収された時、ユーザーは3000万人で、エンジニアはわずか13名でした。
これが新たな標準です——エンジニアの人数と費用を抑えて、かつてないほどの人数のユーザーにコードを出荷しています。ソフトウェアエンジニアの一人当たりの潜在的な成果はうなぎのぼりです。エンジニアが1名のスタートアップに対して10億ドルの買収を提案するようになるまで、あとどれぐらいでしょうか。職人技とも言える独自のソリューションを制作するというエンジニアの役割が丸ごと消滅するまで、あとどれぐらいでしょうか。
それぞれのソフトウェアエンジニアの影響力が拡大するにつれ、ソフトウェア開発者になる障壁が急速に崩れています。WhatsappやImgurの成長を可能にした同一のソフトウェア基盤(オープンソース・ソフトウェア、Githubなどの開発ツール、Digital Oceanなどが提供するサービスとしてのインフラなど)は、ソフトウェアを書くことについての経験や技術の重要性が小さくなっていることを意味しています。
今や個人が、Digital OceanやHeroku、(おそらくMesosphereのコーディネーションによる)AWSを用いて、何百万人ものユーザーを持つまでウェブアプリを成長させることができます。Google App Engine上でデータベースを拡大するために、もはやMySQLの複雑なパラメーターを理解する必要はありません。ちょうど、これらのすべてを可能にしているCPUチップの知識がもはや必要ではないのと同じです。
あとどのくらいで、エンジニアが1名のスタートアップに対して10億ドルの買収を提案するようになるでしょうか。
このソフトウェアのコーディングの連続的な変化は、(その極端な形においては、ソフトウェアのすべての部分がアセンブリで始まる)基盤構築前と、(ソフトウェアがLegoのように、部品をパチンとはめ込んで組み立てるだけである) 基盤構築後とで説明できるかもしれません。
基盤構築前は、最も単純なタスクでさえ、途方もない知識量と労働量が必要でした。なぜなら、何もないところから作り出す必要があったからです。ウェブサイトに関しては、これは、(スタックの上部層で)自分でサーバーOSの修正や管理を行うことを指していたかもしれません。手作業で構築した分析プラットフォーム、構成手順、不具合報告ツールを用いて、自家製の、または、手作業で調整したウェブサーバー、キャッシュシステム、データベース、アカウント管理システム、レンダリングエンジン、フロントエンド・ライブラリを運用します。管理すべきものが多いと感じるなら、それは現にそうだったからです。
基盤構築後は、取り組む抽象度のレベルは1つだけで、重視するのはユーザーが直面する目下の機能のみです。Facebookの構築のために、全データセンターを構築する必要があったことはもちろんのこと、ウェブサーバーのソフトウェアを調整する必要があったことは、いつの日か笑い話になるでしょう。 スタックの他の階層は完全に取り除かれ、ソフトウェアを書くことは、引き続き、Githubが提供するライブラリおよびAPIのコレクションの組み立てにますます似たものになります。
私たちは現在、ウェブとウェブが作り上げたオープンソース・コミュニティが功を奏して、急速にソフトウェア基盤の世界に突き進んでいます。私たちはソフトウェアのツールやプラットフォームの中核となる共通のものを構築しています。これにより、より少ないコードを書くことで、より多くのことが達成できます。そして、より多くのユーザーがそれを利用できます。私たちはLegoのようなソフトウェアを目指しているのです。
そしてさらに、こうした途方もない進展のすべてにもかかわらず、私たちはまだこの移行期の初期段階にいます。ここに、Objective-CのクリエイターであるBrad Coxが24年前に書いたものがあります。
配管工事のような成熟した業界は私たちの業界ほど複雑ではありません。それは、ソフトウェアが本質的により複雑だからではありません。複雑さ、不適合、変化のしやすさに由来する問題を配管業界が解消してきたのに対して、私たちはそうできていないからです。彼らは、生産者 / 消費者の階層を利用して、異なる時点に、あるいは組織全体に、これらの問題を分散させてきました。配管工事の供給市場のおかげで、配管業者は生産者 / 消費者の階層の1つのレベルにおける複雑さだけを解消すればよく、下の階層については考える必要がありません。例えば、第一原則に立ち戻り、菅、蛇口、自動温度調節機、水ポンプを刷新する必要がありません。
CoxはLinuxやStack Overflowよりも前にこれを書いていますが、それでも彼の言っていることは合っています。現代のエンジニアは、目先の問題に注力するために複雑なものを排除するライブラリや枠組みに恵まれてはいます。しかし依然として、抽象度のレベルの梯子を上下する必要性に拘束されています。ソフトウェアエンジニアは、まだ配管工事とは同じでありません(あるいはレゴとは同じではありません)。その理由は、私たちの基準が不完全で、私たちのライブラリに互換性がなく、拡大は依然として自由ではなく、私たちのソフトウェアがまだ不具合だらけだからです。これらすべてのことが、クリエイターに、複数の抽象度のレベルを行き来するように要求します。
しかし、私たちはそこにたどり着こうとしています。ソフトウェアは、ソフトウェア開発に取って代わろうとしています。オープンソースのソフトウェアプラットフォーム、インフラ、知識、最善の実践に基づいた基盤は、引き続き拡大しています。私は、Stack Overflowが単体で、プログラミングの生産性を数パーセント、向上させてきたと断言できます。そこに、無料または安価な開発者ツール(GitHub、IDEは枚挙にいとまがありません)、自動化されたインフラ(Mesosphere、AWS、Google App Engine、Heroku、DigitalOceanなど)、データベース(MySQL、MongoDB、PostgreSQL、Firebaseなど)、高水準言語(Python、Ruby、PHPなど)、枠組み(Meteor、Angular、Django、Rails、Bootstrapなど)が、15年間利用されることを加えてみてください。これらはプログラミングの蛇口、菅、水ポンプです。そのすべてがオープンソースに根づくもので、そのすべてが、ユーザーのためにソフトウェアを作成するクリエイターが気にかける必要のない情報のレベルを排除しています。
ソフトウェアエンジニアは、まだ配管工事とは同じでありません(あるいはレゴとは同じではありません)。その理由は、私たちの基準が不完全で、私たちのライブラリに互換性がなく、拡大は依然として自由ではなく、私たちのソフトウェアがまだ不具合だらけだからです。
さて、これは10xエンジニアにとってどのようなことを意味するのでしょうか。「10xエンジニア」は依然として基盤構築に必要とされています。AWSやMesosの構築は依然として非常に困難です。しかし、私たちが共通基盤を構築し終えたなら、現在必要とされているほどの技能や経験が個人になくても、プラットフォーム上のタスクを完遂することができます。
「10xエンジニア」は、結局のところ、とんでもない誤称です。10xエンジニアは、必ずしも10倍の生産性を発揮する必要はありません。彼らは単に「1つ上のレベル」の優秀なエンジニアということであり、タスクの難易度や成果の影響力によって、ある状況では1.5倍、時には100倍の能力があるということです。しかし、ソフトウェアの基盤の構築後では、ソフトウェアは職人の熟練の技の成果というよりは、Legoに似てきます。そこにおいて、基盤をもとに「10x」エンジニアが取り組んでいる仕事の成果の相対的倍数は、1xに近づきます。
このように、ソフトウェア自体がソフトウェアを書く能力のレベルを左右する原動力となり、問題を解消します。これはよいことです。ソフトウェアは、影響力が大きく、あまり技能を要求しないものとなりました。そのため私たちは、厄介なソフトウェアを書くために必要とされる技術的能力や経験と、人々のための問題解決能力とを切り離しています。
私たちは、問題の解決者と事業構築者を手助けするために、成功の最適化を始めています。はじめからその両方の素質を兼ね備えており、12歳からプログラミングをしてきたという人々に向けてではありません。私たちは、今までにない経歴と視点を持つ開発者による、新たなカテゴリーのスタートアップを後押ししています。私たちは、上で述べたような軋轢がなくなったことで構築が可能となった、何千もの新たなスタートアップを後押ししています。さらに、ここでは主にウェブについて話してきましたが、私たちは、同じ現象がビッグデータや、バイオコンピューター、人工知能などの分野で起こっていることをすでに知っています。
今のところ、すばらしいソフトウェア製品のアイデアがあるなら、エンジニアになるか、エンジニアを探さなくてはいけません。明日になれば、10億ドルのスタートアップの買収がエンジニアを必要とはしなくなるかもしれません。
著者紹介
記事情報
この記事は原著者の許可を得て翻訳・公開するものです。
原文: The Happy Demise of the 10X Engineer (2014)