Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス
by Titus Winters, Tom Manshreck, Hyrum Wright, 竹辺 靖昭, 久富木 隆一
1章ソフトウェアエンジニアリングとは何か
Titus Winters 著
Tom Manshreck 編
いかなる物も、石の上に建造されることはなく、砂の上に建造されるが、あたかもその砂が石であるかのごとく建造しなければならない。
── Jorge Luis Borges†1
†1 訳注:アルゼンチン出身の作家、詩人(1899-1986)。引用文は1969年の作品『闇を讃えて』(ホルヘ・ルイス・ボルヘス 著、斎藤 幸男 訳/水声社/2006年)所収、「福音書外典断簡」41の本書訳者訳。ここでは、変化しやすい不安定な土台(砂)の上にシステムアーキテクチャーを構築しているにもかかわらず、まるで堅固な土台(石)の上に建っているかのような安定したシステムとして構築することこそが、ソフトウェアエンジニアの任務である、の意。
我々の見るところ、プログラミングとソフトウェアエンジニアリングの決定的な違いは3つある。時間、スケール、そして作用しているトレードオフだ。ソフトウェアエンジニアリングのプロジェクトにおいてエンジニアは、時間の経過と、結果的に出てくる変更の必要性に、より配慮しなければならない。ソフトウェアエンジニアリング組織内では、生産するソフトウェアと、ソフトウェアを生産する組織、それら両方のスケールと効率に関してより配慮しなければならない。最後に、ソフトウェアエンジニアとして我々は、時間と発展に対する不正確な見積もりに多くの場合基づき、比較的大きな利害の関係する結果を伴う、より複雑な決定の実行を求められる。
Google社内でときに言われるのは、「ソフトウェアエンジニアリングとは時間で積分したプログラミングである」ということだ。プログラミングがソフトウェアエンジニアリングの著しく重要な部分であることは言を俟たない。つまるところ、プログラミングこそがまずもって新しいソフトウェアを生成する方法なのだから。このプログラミングとソフトウェアエンジニアリングの区別を受け入れる以上は、プログラミングのタスク(開発)とソフトウェアエンジニアリングのタスク(開発、修正、保守)の間に線引きを行わなければならないことも明白となる。時間を加えることで、プログラミングに新しい重要な次元が加わる。立方体は正方形ではなく、距離は速度ではない。ソフトウェアエンジニアリングはプログラミングではない。 ...