Googleのシステム管理と再稼働問題

Googleを支えている大規模なサーバシステム。その管理方法は従来のシステム管理の方法とは大きく異なっているらしい。つまり、1台1台のサーバの状態を監視するのではなく、ある一定時間が過ぎたものから順次廃棄し、新しいものに入れ替えるそうである。

機械システムを信頼性の高いものにするためのこれまでの方法は、堅牢に作る、ということである。負荷やリスクを見積もり、投資対効果を判断して(経営リテラシーの高い経営者であれば)最大限の丈夫なシステムを作る。しかし、エントロピーが増大しないシステムはない。すべてのシステムは、摩耗し、酸化し、劣化し、運用ミスが蓄積され、さらに(経営視点からすると)”想定外”のトラブルに見舞われる。

一方で、生物は、エントロピー増大によってシステムが修復できない状態になるよりも先回りして自らを能動的に壊し、再構築を繰り返すことによって、38億年もの間、環境に順応し進化を遂げてきた。生物が採用しているこの戦略を、Googleのシステム管理は採用しているのである。

壊れるまで使い、壊れたら修復する。そして、再稼働するという対処方法は、短期的な視野からすると低コストであるように思える(そもそも、「コスト」という考えかた自体が、短期的ライフサイクル視点であるが)。しかし、システムが次の世代へもわたる継続性を得るためには、生物が採用しているような、長期的視野に立ったシステムのエントロピーをコントロールする戦略を考えるべきである。そのような視点を持っていたのであれば、「千年に一度の」未曾有のアクシデントによって取り返しのつかない事態に陥いる、という事態にはならかったのではないだろうか。

 

手段が構えに及ぼす影響

「Smalltakはテスティングの習慣がある。ちょっとプログラムを変更したら、ちょっと動かしてみる。というインクリメンタルなサイクルを回す。」Kent Beck

「肩凝り」に相当する英語は無いらしい。英語でそれに近い表現は、”pain on the back”であり、単純に、肉体的に痛む部位を示しているにすぎない。一方、日本語の「肩凝り」は、肩を中心とした筋肉が痛いというだけではなく、社会的、精神的なストレスの訴えをも表明している。

私たちは、言葉を使うことによって、私たちの周りの価値観や価値体系を、自立的に表現していると思っている。しかし、事実はその逆であることをソシュールは教えている。私たちが、満天の冬の星空からオリオン座を切り出すことができるように、言葉を使うことそれ自体によって、ものの見かたや考えかたが、私たちの中に強く存在するようになる。私たちは、言葉を使うことによって、すでにある価値体系や概念、そして思考体系の中に無意識的にも取り込まれているのである。

アジャイルは、しばしばプロセスのテーマとして議論されている。しかし、開発に使用する言語が、アジャイルという作法を強く誘導している(していた)ことについては、多くが語られていない。

現在、主流であるC、 C++や Javaなどの言語は(モデリング方法の如何を問わず)、その動作を検証する(つまり、人から見て意味のある動きをしているかどうかを確認する)ために、早い段階での結合が求められる。すなわち、遅延結合ができない言語である。そのために何が起こっているかというと、学習曲線の低い段階で、実装の対象である現実世界をできるだけ正確にモデル化することが求められる。さらに、固定化した現実世界のモデルからシステムモデルへ正確につなぐ技術が必要となる。というのは、現実世界をモデル化し、それを入力としてシステムモデルを作成するという変換モデルに従っているためである。

学習曲線の低い段階での結合が求められる早期結合言語では、What -Howのギャップが大きくなる。C、 C++や Javaなどの言語でテンプレートが利用されているのは、そのギャップを埋めるためである。

このような、遅延結合ができない言語の場合、工学的には、ソフトウェアというよりも、むしろ、建築やハードウェアの構築モデルに近いといえる。学習曲線の低い段階で決めなければならないという状況が、ソフトウェア開発がかかえる本質的問題として語られ、その解決方法としてアジャイルなどのメソッドが議論されているが、本質的には、使用する言語の特性が現象しているのかもしれない。

マクルーハンは、メディアそのものがメッセージであると語った。メディアの本質はコンテンツではなく、メディアそのものである。

ある社会(つまり、システム)に見られる振る舞いが、文化に誘導されるものなのか、文化が社会システムへの適用の結果なのかは、社会学での長年のテーマである。

言語に関しては、ソフトウェアサイエンスの領域であり、ソフトウェア工学では、言語の差異による振る舞いの違いに関しては、長らく議論の遡上に上ってこなかったように思える(もしくは、ハードウェア的な言語をいかに使いこなすかが価値のある行為のような思い込みもあるのかもしれない)。

 

よくわからない段階で決めなければならない

「ソフトウェアに関係する仕事をしています」と自己紹介すると、「ゲームですか?」と聞かれる場合がある。ソフトウェアは、「私の仕事はコレです」と手のひらに乗せられるモノを示すことが難しい。おのずと、モノとしてイメージしやすい“ゲーム”が想起されるのであろう。

マウリツィオ・ラッツァラートは、「出来事のポリティクス」の中で、“Immaterial Labor(無形労働:伊藤訳)”という言葉を用いて、ポスト構造主義の現代を生きる我々の生きかた(新しい労働のしかた)を示そうとした。

ソフトウェアは実体を有しない無形物である。ソフトウェアを作るという行為は、ラッツァラートが定義した無形労働の典型であり、ラッツァラートの言葉を借りれば、商品に内包される社会や文化を作り出す労働であるといえる。

一方で、ソフトウェア開発は学習の行為であるとも言われる。対象を理解し、設計し、構築する行為の中で、対象の理解がより深まる(もしくは変わる)。そして多くの場合(というよりも、すべての場合)、我々は、よくわからない段階で決めなければならいという状況のなかでモノゴトを作り出している。つまり、商品に内包される社会や文化に対する仮説を、仮説という荷姿のまま社会へ送り出しているともいえる。

人間は生産・労働を通じて作り出したものを媒介にして自分が何ものであるかを知る(ヘーゲル=マルクス主義)のであるとすれば、ソフトウェア開発とはどのような活動なのかという命題は、ソフトウェア開発に関わる人間として、意識的にも無意識的にも共通して持ち続けるテーマである。

たとえば、「ソフトウェアは本当にソフトな、つまり、柔軟な構築物なのか」、「共通の理解はどのように形成されるのか(もしくはされないのか)」、「知識の所有権はどこに帰属するのか」といったようなソフトウェア開発にまつわる課題は、視野を少し広げてみると、現代の社会が抱えている問題につながる部分が多いと考えられる。ソフトウェア開発のなかで意識される問題を、社会的な視点から眺めていきたい。

 

語ることによって語ること

「僕らにできるのは、執拗な反復によって自分を変更させ(あるいは歪ませ)、そのプロセスを自らの人格の一部として取り込んでいくことだけだ。」村上春樹(走ることについて)

ブログ形式でホームページを更新することにした。
と言っても、これが最初の投稿なので、「しようと思う」が、意思としては正しいのではあるが、ブログ形式にするということは、つまり、定期的に更新するということである。

語るということは、星空から星座を切り出すようなもので、日々のなかから何に対して問いを立てているのかを、自分自身が認識することでもある。
語ることを反復することによって、自分の星座が見えてくればと思う。