オープンな作業空間か、静かな作業空間か

今更ながらJoel on Softwareを読んでいる。・・・無謀にも原書で!

正直、ちょっと僕の英語力ではこれは苦しくて、「世の中には自分の知らない単語がたくさんあるんだなぁ」などと妙な感心をしているところ。

さて、この本にはJoel Testという、開発チームの健全さを測るチェックリストが載っているのだけれど、その中の一つにこんなのがあった。

8. Do programmers have quiet working conditions?

このセクションでJoel氏は、Peoplewareを引きつつ静かな作業空間の重要性を力説している。曰く、プログラマは作業に集中すると「フロー状態」あるいは「ゾーン」という非常に生産性の高い状態、つまり没頭した状態に入るのだが、この状態に入るには最低でも15分は必要であり、そしてそれは僅かな割り込みでも簡単に崩れてしまう。だからプログラマには静かな環境が保証される個室を用意するべきだ。
これには一定の説得力もあるのだけれど、他方エクストリームプログラミング(XP)ではOpen Workspace(開かれた作業空間)をプラクティスに挙げている。いったいどちらが正しいんだろう?


個人的な体験談を書いてみる。
僕は2年前まではC++プログラマだったが、それ以降はC++を見限って(!)C#に乗り換えた。C++は大好きだったけど、その魅力というのは、なんていうかな、じゃじゃ馬を馴らして乗りこなすような楽しさ。あれはプログラマとしては楽しくて、C++プログラマが集まるとディープなハックに話の花を咲かせてしまうのだけれど、多分その楽しさにお客さんはお金を払ってはくれないだろうと思ったのだ。
作業空間の話に戻ろう。C++プログラマだった時代は「静かな個室」のほうにより大きな魅力を感じたのだが、C#を使い始めてからはそうでもなくなった。何故だろうか。C++時代はゾーンに入る必要性を強く感じていたが、今はあまりゾーンに入らなくてもプログラムが書けてしまう感じがするのだ。


プログラミングにおいては、仕様/設計で悩むときと実装で悩むときがある。僕の感覚では、仕様/設計で悩むときには「広い思考」が要求され、実装で悩むときには「深い思考」が要求される。広い思考というのは、様々な状況を広く捉えてどんな仕様/設計にするのがベストかを模索するような思考であり、逆に深い思考というのはある機能の実装するためのデータ構造やアルゴリズムを突き詰めて考えるような思考のことだ。
相対的に、C++時代のほうが深い思考が要求される場面が多かったと思う。
そして、深い思考にはゾーンに入ることが必要だ。深い思考は基本的にシングルスレッドなのだ。深い思考はスレッドセーフではないので、割り込みが入ると簡単に思考が「落ちて」しまう。集中力を高めないと脳がスタックオーバーフローを起こしてしまう。だから深い思考には静かな個室が望ましい。
一方、広い思考にはむしろ人との会話が重要な役割を果たす場合がある。これには開放的なオフィスのほうが望ましいだろう。


結局、どちらが正しいという結論はないのだと思う。自分の会社、自分のプロジェクト、自分のタスクが、深い思考と浅い思考のどちらがより要求されるものなのかによって、望ましいオフィス環境も変わるのかもしれない。
状況に応じて簡単に選べたら素敵なんだけど。