用事があって久しぶりにマコネルのCode Completeを読み返していたら、タコマ海峡橋の写真が目に入った。タコマ海峡橋と言えば、有名な工学的失敗事例で、フレデリック・ブルックスの本でも写真が掲載されていた。というわけで興味が出てきたので、改めてどんな事故だったのかを調べてみた。
タコマ海峡橋(タコマナローズ橋)
タコマナローズ橋(タコマナローズきょう、Tacoma Narrows Bridge:タコマ橋)はアメリカ合衆国ワシントン州のピュージェット湾口の海峡タコマナローズ(Tacoma Narrows)に架かる吊り橋である。
初代の橋は設計上の問題により、架橋後間もない1940年11月、予想に満たない強風の影響で落橋する事故を招いた。この事故は、技術史の中でも共振が生じた結果の被害現象として、たびたび実例に挙げられている。
タコマナローズ橋 - Wikipedia
Wikipediaでリンクされている失敗知識DBの内容がかなり興味深い。
- (背景引用)タコマ橋の設計者モイセーエフは、当時最も信頼される先進技術者の1人であった。
- (原因引用)破壊の原因は、横風によってつり橋が自励振動したためである。ただしこの原因は、無知によるものではなく、未知による。
未知による・・・と言われると見もフタもない。対策のしようもないのだろうか。まさにこの点についてはブルックスの「人月の神話」でも触れられている。
ソフトウェア開発の技術書に登場するタコマ海峡橋
ブルックスの「人月の神話」では、1975年の初版でまず、「第11章 一つは捨石にするつもりで」の扉にタコマ海峡橋の写真が入れられたが、その後二十周年記念版で追加された章でもう一度触れられている。
第11章の扉を飾ったタコマ河峡橋の忘れ難い写真は過激なことを推薦していた。すなわち、「一つは捨石にするつもりでいなければならない。どうしたってそうせざるをえないのだから」と。今になって、私はこれが誤りであると考えるようになった。といっても、あまりに過激だからということではなく、あまりに単純すぎるからである。
人月の神話 第19章 人月の神話から二十年を経て
また、「デザインのためのデザイン」の「第14章 熟練したデザイナはいかにして失敗するか」の扉もタコマ海峡橋の写真である。
Henry Petroskiは、材料や技術に革新が起きた場合、デザイナは実際に以下の行動をとると述べている。
- 最初は注意深く進む。
- 新しいやり方を習得する。
- 大胆にそのやり方を拡張し始める。多くの場合、基礎をなす仮定を忘れて。
- 大胆になり過ぎ、自信過剰になる。おそらくはうぬぼれと競争原理とに圧迫されながら。
彼は、大規模な橋の倒壊は確実に30年ごとに起こっていることを述べた研究を引用し、次の倒壊が近づいていることを示した。
デザインのためのデザイン 第14章 熟練したデザイナはいかにして失敗するか
Code Completeでの紹介内容はこんな感じ。
これはやっかいな問題の見本である。橋が崩れ落ちるまで、エンジニアたちは空気力学をそれほど考慮する必要があるとは思っていなかった。橋を建設する(問題を解決する)ことによって初めて、問題の検討を重ねることを学び、それによって今でも建材する新しい橋を建設することができたのである。
CODE COMPLETE 第2版 上 完全なプログラミングを目指して 5.1.1 設計はやっかいな問題である
結局のところ、われわれはどうすればいいのか
この事例を見て、ソフトウェア開発としては何を考えればいいのだろうか。思うところを列挙してみる。