|
武蔵流プログラマ
山崎敏 YAMAZAKI Satoshi
vol.11 |
|
|
この話はフィクションです.フィクションと言うからには,「ですます調」より「である調」のほうが似合うと思うので,今回(前編)と次回(後編)はそのようにします.
|
|
|
●●不安 |
|
|
●眠れない
私はひどく不機嫌だった.眠むいのに寝れないときほど不機嫌なことはない.とにかく,上下さらには左右からやってくるステレオをとおり越した過激なサラウンド状態のイビキが私を異常にイラつかせていた.夜中の2時に仕事を終え,近くのビジネスホテルを巡ってみたが空きがなかった.
しかたなくカプセルホテルを利用したのだが,このありさま.これでは一向に眠れない.
●上田君
その場にいることが苦痛だったので,フラフラとロビーへ行き,飲みなれないビールを注文する.
そこには一緒に会社を出た後輩の上田君がすでにビールを飲みながら座っていた.彼も慣れないベットで眠れない様子だった.上田君は学生時代からスポーツマンで,彼の体格ではベットが小さいかもしれない.
我々は同じ会社の開発チームで働いているプログラマである.以前,上田君のチームの手が足りないとのことで,私は応援として投入されたのだ.
上田君のプログラマとしての腕は私よりも数段高く,私は彼を応援しに来たのか邪魔しに来たのか判断の難しいところだった.私は仕事でもスポーツでも天才の上田君にはかなわない.ただ,私が先に入社したため先輩だった.
●沈黙
このところ会社で仕事をしているか,ビジネスホテルで寝ているかのどちらかの時間しかない.
そんな生活がしばらく続いたので,世の中で何が起こっているのかまったくわからない状態になっていた.上田君と世間話でもしようと思ったのだが話題もなく,しばらく沈黙が続いた.
●この話題しかないか…
やはりこの話しかないか…,と私は重い口を開いた.
「この仕事,キツイね.最近自宅に帰ってる?」
「もう1ヵ月近く帰っていないですよ.いいかげん新しい服に着替えたいです.」
「…納期まであと1ヵ月しかないけど,本当にこのシステムは完成するのかな?」
「いや,完成するとは思えないけど.完成させないと….」
「『完成させないと』って,いくら上田くんが天才でも無理なものは無理だって言わないと体が壊れるよ.」
「もう壊れてますよ….」
そうだった,彼が自律神経関係の症状で頭痛や吐き気がするという話は,かなり以前から聞いている.もう通院しなくても良いのだろうか?治ったという話は聞いていない.だが,この状況で彼に休まれると本当にこのシステムは完成しなくなる.上田君もそのことを気にして自分に嘘をついているのだろう.なんということだ.
●足りないのは人か?
あー,いやだいやだ.なんでこんなキツイ仕事になったのだろう.給料がもらえても,こんな状態では割が合わない.自分の体は1つしかないのだ.
いくらお金を出しても買えるものではない.
あー,もっと早めに人を投入していれば….
いや違う,人は投入してもらったのだ.人じゃない.みんな凄くがんばっている.開発も少しずつではあるが進んでいる.とにかく時間が足りないのだ.残り時間に対して仕事量が多すぎるのだ.
●働く時間を増やせばいいのか?
では,働く時間を増やせばいいのだろうか…,しかし夜中の2時まで働いたって頭は回らない.それなのに今回の責任者ときたら,プログラマがちゃんと夜中まで仕事をしているかどうか帰らずに見張っているのだ.それが彼の仕事だと思い込んでいるようだ.
おかしい.何かがおかしい.どこかに解決の糸口があるはずなのに….とにかく今はこのデスマーチから1秒でも早く抜け出したい.その思考だけが頭の中を駆け巡った.
「早く終わらせましょう…」
と上田君の言葉には力がない.
●次はない
私はすこしでも希望のある言葉を探した.
「次は楽な仕事かもしれないしね.」
「いや,次はもうないです.」
「え?」
「次はないんですよ.この仕事は辞めることにしました.体がもちません.田舎に帰って両親のラーメン屋を継ぐことにしました.」
「そ,そうなんだ…」
正直驚いた.十数年システム開発だけを手がけてきた自他ともに認める天才プログラマの上田君が,ここまで真剣に将来のことを話したのは初めてだったからだ.
●システム開発という仕事とは
まったくシステム開発という仕事はいつからデスマーチと呼ばれるようになったのだろうか.辛い仕事だ.本当に体が壊れていく,そして精神もズタズタになる.私も退職を真剣に考えるべきかもしれない.しかし,辞めてどうする?先の見えない不安だけがただただ重くのしかかった.
|
|
|
●●転機 |
|
|
●見たこともない人が
誰だろう?見たこともない人がいる.もっとも,私がこのチームに合流したのは3ヵ月前だし,知らない人はたくさんいる.
しかし,この人はどこか雰囲気が違っていた.
我々の上司が集まっていろいろ話をしている.どうやら,今開発中のシステムについてあれこれ相談しているようだ.残り1ヵ月だというのに,これ以上余計な仕事を増やさないでほしい.そう思いながら,近くにいた上田君に聞いてみた.
「あの太ったオジサン,だれだか知ってる?」
「池田本部長ですよ.このビルの中で一番偉い人ですね.」
「へー,よほどこのシステムが気になるんだね.」
「何か凄いことが決まったらしいです.午後から発表があるとか….」
「納期を延期してくれるとか?」
「そうならいいですけど,それはないと思います.その程度の話で池田本部長が直に来ることは考えられないですから.」
「なるほど,それは言えてる.」
●重大な決定
その後,予想どおり我々のチームは池田本部長に呼び出された.池田本部長は我々に言った.
「みんなにはがんばってもらっているが,このシステムは我が社にとってどうしても失敗できない重要な案件だ.私はこのシステムはこのままでは完成できないと判断し,重大な決断をした.」
今ごろ気が付いたって遅いよ…,と私は小さな声で愚痴った.
「君たちに代わって,このシステムに精通している新しいチームに開発を引き継ぐことにした」
ということは,我々はクビになったのだろうか?まさか…,そんな….
その後の池田本部長の話を要約するとこうなる.
「今開発中のシステムは予算をオーバーし赤字が確定した.しかし,顧客との契約は厳守するために納期はそのまま開発を続行する.そして今ある我々のチームとは別に,このシステムに精通しているスペシャリストチームをまるごと雇い,残り1ヵ月で完成させる」のだそうだ.
●二軍落ち
要するに,我々のチームは戦力外なので二軍落ちということらしい.なんのために今まで必死に開発してきたのかという怒りも込み上げてきたが,それ以上に,やっとデスマーチから開放されるという安堵感のほうを強く感じた.それほど疲れきっていたのかもしれない.しかし,我々のチームはなぜか解散されなかった.
我々のチームは二軍に落ちたものの開発は続行し,その開発経過を報告することになった.要するに,一軍のチームとの生産性の比較を行いたいのだろう.なるほど我々二軍チームは一軍のチームの練習相手ということなのだ.
しかし,最後に池田本部長は妙なことを言った.
我々のチームに,新しいプログラマを加えると言うのだ.
|
|
|
●●投入 |
|
|
●3ヵ月ほど前のこと
3ヵ月ほど前.このシステムが納期内に完成しそうにないということが発覚し,私を含めて6人のプログラマが投入された.もともと3人で開発していたので合計9人の中規模チームになった.これで開発速度は3倍になる予定だった.
しかし,実際にはチーム内は混乱し,開発速度は3人のときと変わらなかった.いやむしろ悪くなっていた.まず,9人が座る机と椅子を確保するだけでも大騒ぎだった.開発マシンの用意とネットワークを構築するのに,さらに数日かかった.そしてシステムの現状を把握するために「仕様書」という名の紙が何枚も書かれ,会議が何度も開かれた.こうして貴重な時間は何時間も,何日も浪費され,その間,開発はまったく進まなかった.
むしろ進んでいるはずの時間を食いつぶしていたのだから,後退していたと言えなくもない.
そんな混乱した時期をなんとか乗り越えて,今では皆の役割が決まり,徐々に開発は進み始めていた.しかし,お世辞にも開発速度が上がったと言える状態ではなかった.確実に言えたことは「人件費が3倍になった」ということだけだった.
予算はすべて使い切ってしまった.当然,利益なんてゼロだ.
●そこにもう1人とは…
そこに池田本部長はさらに1人投入すると言う.
同じ赤字なら金額の大小は気にしないというのだろうか.まったく何を考えているのか….その投入に時間を使っていたら,さらに納期が遅れてしまう.
とりあえず,わけを話して納期までの1ヵ月間おとなしくしていてもらおうと私は密かに思っていた.
|
|
|
●●スーパープログラマ |
|
|
●女性プログラマ
池田本部長推薦の優秀なプログラマの山田さんは女性だった.女性のプログラマというだけで珍しいのだが,山田さんは学生のような顔立ちをしていた.スーツを着てはいるものの,着慣れない服にぎこちなさが感じられた.
昼食のときに彼女を社員食堂を案内した.食事をしながら,たしかに山田さんがスーパープログラマであることは間違いないと確信した.なぜ確信したのか?言ってみれば私の直感だ.具体的な説明は私にもできないのだが,その一言が重いというか,十分な経験からでないと出てこない言葉を簡単に話していたからだった.
●実は私よりも先輩
中でも驚いたのは,私よりもプログラマとしての経験年数が長いということと,年上であるということだった.プログラマとしても,さらに人生においても先輩であったのだ.人は見かけによらないとはこのことだと思った.
|
|
|
●●波乱 |
|
|
●開発室を明け渡し
次の日は朝から大騒ぎだった.二軍落ちした我々のチームは,いきなり開発室から追い出されたのだ.開発室にはここ数ヵ月をかけて構築した開発環境がそろっており,やっと快適になったと思ったその場所をあけ渡すのはかなりの抵抗があった.正直に言えば頭に来た.
しかし,一軍チームの人間に当たっても,それはただの八つあたりでしかない.あたるべき相手は上の人間,もしくはただただ流されていた我々なのだから.
●新しい部屋は会議室
我々二軍チームに用意された部屋は,昨日まで会議室として使っていた小さな部屋だった.残り1ヵ月をその会議室で開発しろということだった.二軍チームは,スーパープログラマの山田さんを加えて10人の大所帯になり,どう考えても入りきらない.
かろうじて座る場所は確保できるが,窮屈で仕事をする状態ではない.座っている人の後ろを通るだけでも苦労する狭さなのだ.10人が一度に入ったら,最初に入った人は部屋から出られなくなる.
●リストラ部屋?
さらに問題なのは,この会議室には開発マシンがない.ネットワークもない.電話すらない.あるのは大きめの白い机とちゃちな椅子,そしてコピーのとれる電化されたホワイトボードだけだった.「リストラ部屋?」そんな言葉が脳裏に浮かんだ.
こんな環境で一軍のチームとまともに戦えるとはそのとき誰も思っていなかった.…山田さんを除いて.
|
|
|
●●窓際族 |
|
|
●皮肉か?
山田さんは簡単に言ってのけた.
「この部屋を選んだのは私です.電話など,何もないところがいいですね.なにより,眺めがいいのが気に入っています」
私は一瞬自分の耳を疑った.彼女は何を言っているのか?あまりにもひどい状況に,皮肉を言っているのだろうか.そんな皮肉を言っている状況ではないことが理解できないのか.
●今日から彼女が責任者
そして彼女はこう付け加えた.
「今日からこのシステムの責任者になりました山田です.よろしくお願いします.私はこのシステムは納期どおりに完成できると思っています.日にちは少ないですが,大丈夫です.私の指示どおりにしてください.無茶な仕事は要求はしませんから」
やれやれだ.たしかに今までの肩書きだけの責任者よりは頼りになりそうではあるが,この部屋の状態では,なんとも信じられないと思うしかなかった.先が思いやられる.
電話がないというのに,どうやって顧客と連絡をとればいいのだろう.ここにはネットワークもないし.まさか個人持ちの携帯電話を使うというのだろうか.
私は山田さんをスーパープログラマだと確信した自分の直感に疑問を感じていた.
|
|
|
●●仕様書はいらない? |
|
|
●ホワイトボードと付箋紙
さらに山田さんの言葉には驚かされた.
「仕様書は必要ありません.現状をこのホワイトボードと付箋紙に書いて壁に貼ってください.」
上田君が驚いた表情で山田さんに聞いた.
「ちょっと待ってください.仕様書を見ないでコードが書けると言うのですか?」
「いや,そうではなくて,仕様書は紙に書くものではなくて,壁に貼るものなんです.簡単に言うと…,上田さんはゴルフをしたことはありますか?」
「ゴルフクラブなら家にあります.」
「では,ホールインワンの経験はありますか?」
「いえ,そんなことできませんよ.プロではありませんから.」
「そういうことなんです.」
「は?」
私を含み,おそらくここにいた全員が理解できていなかったと思う.
●仕様書はホールインワン

そんな表情を見て,山田さんはホワイトボードにゴルフ場の絵を描いた(図1).
「我々の仕事は,ホールインワンを狙うことではなく,確実にカップにボールを入れることなんです.」
そう言いながら,山田さんはホワイトボードのゴルフ場の絵に大きく×印を書き加えた.
「仕様書を書くというのは,ボールを1打でカップに入れようとする行為なんです.実際にはそんなことは不可能です.顧客の要求をたった1つの書類で言い表すことなんてできないんです.仕様は生(なま)ものですから,カップに入るまで状況は変化し続けるのが普通です.」
「なるほど,変化に対応するための付箋紙なのか….」
思わず私は発言した.
「そうです.開発時に仕様書は必要ありません.必要になるのはメンテナンスのときなんです.なので,カップに入ったあとに仕様書を書くべきなんです.世界レベルのプロだって3打は叩くでしょ.世界レベルのプロでない我々なら10打は覚悟しなさいってことです.」
「うーむ.なるほど.」
上田君も唸る.
●やってみよう
たしかにそうかもしれない.しかし,このやり方で本当にシステムが完成するのだろうか?仕様があやふやのままコードを書いてもいいのだろうか?私はモヤモヤしたものを振り払いながら,ここは山田さんについていくことに決めた.どの道このシステムの仕様は最初からあやふやだった.
そんな状態を続けるよりは幾分マシに思えたのは確かだった.
●付箋紙の使い方
付箋紙の使い方には大きく2種類あった.1つはToDoリストのような作業の優先度を表し,もう1つはシステムの全体図を表していた.
・付箋紙の使い方@

ToDoリストは,各個人で好きな色の付箋紙を使って細かい作業項目を書き壁に貼る(図2).縦方向を優先順位にして,上に張るほど優先度が高い.
一番上をゴールとし,作業が進むたびに上に動かす.終了した作業はゴールに貯まっていく.これのやり方はゲーム感覚でなかなか楽しい.全員の負荷の状態が一目でわかるのもいい.私もこのやり方は気に入った.
・付箋紙の使い方A

システム全体図のほうは,まず左上に大まかな要求機能を貼り,その中から優先度の高い順に,要求を細かい機能に分割し,下に張っていく(図2).
実際にはテストコードが書けるレベルまで細かく分割され,その後テストが終わった機能から右に移す.左に張られた抽象的なシステムが,徐々に具体化され右に姿を現すというしくみだ.
・使い方は臨機応変に
付箋紙の使い方は厳密には決まっていない.その場である人が「こういう意味で張ってます」と言えばそうなるし,「やっぱりこうします」と言えばそうなる.その場で臨機応変に使い方を決めるのだ.
|
|
|
●●XP |
|
|
●プログラマは6人だけに
まだまだ山田さんの言葉は止まらない.
「プログラマは6人でいいので,残りの4人はプログラミング以外の開発支援に回ってください.開発はこのノートPCで行います.3台しかないので,2人ずつペアプログラミングしましょう.」
今まで9台のPCでやっていた作業を3台でやるというのだから,私の開いた口は塞がらない.
|
|
|
●●残業禁止 |
|
|
極めつけの一言はさらに強力だった.
「皆さん.今日から残業は禁止です.厳禁です.残業代が出ないという意味ではなくて,この部屋は退社時刻になったら閉めますのでそれまでに作業を終わらせてください.ちなみに今日はあと45分で閉めます.」
どうやら山田さんはXP(eXtreme Programming)という開発方法でいく気らしい.
その程度の方法論なら私も知っている.しかし,いまだにそれを実践しようとは思わなかったのだが,こうして実際に経験のある人物がいるだけで,こんなにも簡単に物事が決まってしまうものなのだと,あらためて感じた.
そのあと,山田さんに追い立てられるように作業を止め会社を出てみると,外の風は冷たかった.
しかしきれいな夕焼けだ.今日1日,ドタバタしていたが楽しかった.それに明るいうちに会社を出るのは何日ぶりだろうか.気持ちのいいものだ.少し元気になった気がしてくる.
しかし,本当に残業をしなくてもいいのだろうか.あと1ヵ月しかないというのに….「まぁ,我々は二軍なんだし,気楽にいこう」と自分に言い聞かせ,暖かい布団の待つ自宅へ急いだ.
|
|
|
●●次の日 |
|
|
●顧客が開発室に
次の日,山田さんはさらに驚くべきことをやってのけた.それは,顧客の矢部氏を会議室(我々二軍チームの開発室)に連れてきたのだ.顧客とはいってもこのシステムの発注側の担当者というのか,システムについてはだいぶ詳しく,現状を正直に話すと1ヵ月後の納期が厳しいという状態を理解してくれたようだ.
●彼の一言
そして,彼の一言が我々を大きく勇気づけた.
「1ヵ月後の納期には入力部が動けばOKです.出力部は最初の2ヵ月は使いませんから…」
そうなのだ.このシステムはデータベースの色合いが濃いシステムであって,本番稼動の前に膨大なデータを入力する必要があり,その入力データの確認作業もある.その作業期間として納品後の2ヵ月間が割り当てられていたのだ.たしかに,この話は以前から聞いていた.しかし,とくに気にしていなかったのだ.
よくよく聞いてみると,そこには交渉の余地がありそうだった.
●出力部分は3ヶ月後でいい
早い話が,1ヵ月後までに全体の半分以下の機能である入力部分が動けばよく,その2ヵ月後に出力部分を含むすべてが動けばいいということなのだ.
もしこの提案が通れば状況はかなり改善する.
すべての機能をあと1月というのは,すでに混乱した状態のまま「とにかく走りまくれ」と言われているに過ぎない.そんな状態で進んだとしても手戻りの発生率がグンと上がってしまう.それこそ「三歩進んで二歩下がる」という状態だ.
●山田さんが交渉に
「その方向で,やらせてください.」
と私は頼んでみた.
「たしかにそれで問題はありませんが,やはり上司の承諾が必要です.」
矢部氏の反応はパッとしない.
「私が矢部さんの上司と話しましょう.」
と山田さんが交渉役を買ってくれた.そんな山田さんを見て,私も上田君も交渉スキルの重要性をひしひしと感じていた.
●品質,時間,機能のトレードオフ
「品質,時間,機能のトレードオフですね.」
と山田さんは言った.
「品質はゆるぎないので時間を延ばすか機能を削るしかないでしょ.」
とまぁ,言っていることはもっともなのだが,それを実践してしまうあんたはいったい何者なんだ?私の目には山田さんが女神に見えた.
「おそらく,細かく削れる機能はまだまだたくさんあるはずです.顧客代表の矢部さんには毎日来てもらって,機能の確認をしてもらいます.まずは現状を見てもらいたいので,今すぐ動かしましょう.」
と山田さんの発言に,一同は動揺している.まだテストは終わっていない.
●動くコードなんてないのに…
それ以前にコーディングが終わっていなかった.
動くコードなんて1つもなかった.
「まだ,コーディングが終わっていないんです.」
と上田君.すかさず山田さんは言った.
「では,コーディングを止めてください.今から矢部さんと一緒にテスト項目を洗い出します.」
その言葉を上田君が制止した.
「ちょっと待ってください.」
さすがに私も山田さんのこの発言には度肝を抜かれた.我々プログラマの仕事は,コードを書くことと10年以上前から決まっている.そのプログラマに対して「コードを書くな」と言ったわけだ.
コードを書かなければシステムは完成しない.そんなことは今年小学生になった山田さんの娘にも理解できるだろう.いったい山田さんは何を考えているだろうか.(続く)
|
|
|
コラム●for文のスコープ |
|
|
次のコードでエラーになるCコンパイラがあります.
for ( int i=0 ; i<buff_max ; ++i )
{
...
}
for ( int i=0 ; i<size_max ; ++i )
{
...
}
|
筆者の使っているVisual C++6.0などはそうです.
「変数iが複数回宣言されている」というエラーになります.ここで「2番目のiの宣言をjという変数名に変えればいい」という解決策は武蔵流プログラマとしては邪道です.
ここでの本質的な問題は,for文の括弧の中で宣言した変数(ここではi)のスコープの範囲が問題なのです.
このiのスコープの範囲が,for文を終了した後であっても有効であることが問題なわけです.おそらくC言語の設計者が「for文を抜けたときのiの値を知りたいという需要がある」と思ってそのような仕様にしたのだと思われます.
しかし,これは武蔵流プログラマにはちょっと迷惑な話です.なぜなら,そのような「for文の抜けたときのiの値を知りたい」という需要がまったくと言っていいほどないからです.
むしろ,上記のようなコードを通したいという要求のほうが多いのです.最終的な筆者の解決策は次のようになります.
{ for ( int i=0 ; i<buff_max ; ++i )
{
...
}}
{ for ( int i=0 ; i<size_max ; ++i )
{
...
}}
|
はっきり言って,あまりお勧めできる書き方ではありません.しかし,コードは生ものですからいろいろとチャレンジしてみることで新しい突破口を開くきっかけになると思っています.
|
|