SEはメニューのないレストランのウェイターか?
2006.03.21
一昨日書いた「ソフトウェアの仕様書は料理のレシピに似ている」というエントリーに対して沢山の人からフィードバックをいただいた。このように情報を発信すると、逆により多くの情報が集まり自分にとっても勉強になる、というフィードバックプロセスがあるからブログは楽しくて仕方がない。
フィードバックの中に「これでSE不要論も再燃か?」などという過激なコメントから、自分自身がSEという立場の方からのものすごく真面目なフィードバックまでが集まったので、これを機会に、ここに私なりに「SE」という職業をどう解釈しているか書いてみようと思う。もちろん、私自身がSEという職業を経験したことがあるわけでなないので、間違っているかも知れないが、その場合は遠慮なく指摘していただきたい。
私の理解では、SEという職業はレストランに例えればウェイターである。それも、メニューから料理を選んでもらう通常のレストランとは異なり、「客の注文するものなら何でも作る」という個別注文レストランである。
そんなレストランであるから、客の注文もさまざまである。「豚のしょうが焼き定食」と料理を指定する客もいれば、「今が旬の魚を使った寿司」とか、「ご飯のおかずになるものなら何でもいいけど、コレステロールが気になるから野菜を多くしてね」という漠然とした注文も来る。ウェイターの役目はそれぞれのお客さんに満足してもらうには、何を作るのが一番良いのかを見極めて、キッチンに伝えることである。
難しいのは、客が必ずしも料理に詳しくはないので、真夏に「生牡蠣が食べたい」などと無理を言って来る客がいることである。そこを相手の自尊心を傷つけずに、「お客様、今は8月なのであいにく生食に適した牡蠣がございません。牡蠣フライではいかがでしょう」などと客を説得しなければならない。そういった仕事をちゃんとせずに、「生牡蠣一人前!」とキッチンに伝えてしまうと、料理人たちからは、「あのウェイターは料理のことが分かっていない」と非難されてしまう。
優秀なウェイターになると、客の好みや健康状態、季節の食材、キッチンにいる料理人の得意料理、各料理にかかる時間、食材のコスト、などが全て頭に入っているために、客にも喜んでもらえるし、キッチンからは信頼される。そんなレストランの客席はいつも満足げな客で一杯だ。
これが私の理解する「SEの役目」である。客に満足したソフトウェアを提供するという意味で、SEという職業はものすごく重要ある。ソフトウェアエンジニアとどちらが上か、などということは決してなく、それぞれに「客が何を本当に必要としているのか見つけ出す」、「受けた注文に基づいて作る」というそれぞれに重要な役割を果たすだけのことである。
ではいったい、日本のIT業界は、どこで階段を踏み外してしまったのだろう?
ここからは私の仮説である。
そんな形のレストランも、レストランの数も少ないうちは良かった。しかし、外食をする人の増え、レストランが乱立してくるにつれ、腕の良い料理職人の数が圧倒的に不足してきたのだ(役人たちはこれを「料理危機」と呼んだ^^)。
その問題を解決するために、いくつかのレストランでは、ウェイターの役目は、客が何を食べたいのかをキッチンに伝えるだけではなく、その料理をどう作ったら良いのか(つまり、レシピ)を書くことまでしなければならないというルールを導入した。そうすれば、料理人の不足を、料理の経験の全くない、バイト君やパートさんで補うことができる、という発想だ。今まで料理を作ったことのないウェイターたちには料理の参考書を与え、これからはウェイターは客からの注文をとるだけではなく、レシピも書かねばならない、と指示を与えたのだ。
ウェイターたちは与えられた参考書を読んで一生懸命勉強するのだが、やはり実際に自らキッチンに立った経験がないので、どうもおかしなレシピを書いてしまう。そんなレシピを受け取った昔からの料理職人たちは、「こんなシロウトの作ったレシピで料理が作れるか!」と怒ってしまうのだが、ウェイターたちも上からの命令なので「そこを何とか」と頼み込むだけである。そんなことを繰り返しているうちに、腕の良い料理職人たちは怒って次々にやめてしまい、キッチンはレシピ無しでは料理の作れないバイト君とパートさんばかりになってしまう。これは本来なら危機的な事態なのだが、レストランのオーナーは人件費が抑えられると逆に喜んでおり、キッチンで働く人たちは低賃金で長時間労働を強いられているのである。
少し誇張した書き方になってしまったかもしれないが、これが私なりの解釈である。SEの役目を、本来の「客が何を欲しがっているか、何を作れば喜んでもらえるかをソフトウェアエンジニアに伝える(要求仕様)」ところにとどめておけばよかったのに、ソフトウェアエンジニアの不足を補うために「どうやって作るか(詳細設計仕様)」という所まで踏み込ませてしまったのが間違いの始まりだったのではないだろうか。そのために、ソフトウェアを作ったことのないSEが詳細仕様を書く→ソフトウェアエンジニアが単なるコーダーになり地位と賃金が下がる→労働環境が悪化する→優秀なエンジニアがやめてしまう→やむなくソフトウェアの基礎を身に付けてない人たちを雇う→ますます良いソフトウェアを作るのが難しくなる、という悪循環に陥ってしまったのではないだろうか。
こちらも自分の考えていた仮説とほぼ同じでおどろきです。想像ですが、今の日本の業務系ソフトウェア業界は、ファミリーレストランのチェーン的な企業がほとんどを占めているのでしょうね。ただしオーダーメイドのソフトウェアを作るのは、レトルトカレーをあたためるよりも難しいのではないかと思いますが…。
Posted by: 夏モード | 2006.03.21 at 21:00
前のエントリーにコメントさせて頂いたDoraです。
現状把握は概ね正しいもののように思います。
次回エントリー
「こうすれば日本のSEは救われる!」
を楽しみにしております!?
Posted by: Dora | 2006.03.21 at 21:23
こんにちは。SE になる前は SE と言えば「Sound Effect」と思っていた(音楽業界にいる人なら SE が Sound Effect なのは当たり前)、自称 SE です。レストランの例はわかりやすかったです。私は日本では 、SE は家を建てるときに図面を広げて設計図を書く 「建築家」、プログラマ(コーダー)は大工さんだと思っています。これはメタファとしてはベタですが、就活のときに某航空会社で SE をしてる人に OB 訪問したときに聞きました。建築家は必ずしも釘の打ち方などは知らないかもしれません。もちろん、知っていた方が良い建物ができるに決まっていますが、とても小さな家を自分で立てるならまだしも、ビルを立てるときは実際に建築家が釘を打つことはないでしょう(ただし家が設計書通りにできているか、水漏れはないか、ドアはきちんと閉まるか、耐震になっているか^^;などはチェックします)。日本での業界の構造自体はまったく建設業に似ていると思います。私はアメリカで働いてみて、ソフトウェアエンジニア(まぁ、日本で言ういわゆるプログラマ)は一定の地位があり、日本と違うことに確かにカルチャーショックを受けました。
#ちなみに私も文系出身ですが、文系だからこそ、理系のマスターやドクターの人に負けじと今までがんばってこれたと思っています。
Posted by: yas | 2006.03.21 at 23:01
はじめまして。いつも楽しく拝見しています(が、コメントするのは初めてです)。
個人的な感覚ですが、今回のテーマを料理でたとえるのは難しいかなぁと感じました。ぼくの考えでは、SIの本質的な困難さは伝言ゲームの難しさです。顧客がどういうものを欲しがっているのか、それをどう作ればいいのか、たくさんの人間がかかわることで伝言ゲームになり、まとまらなくなるのが本質的な難しさだと考えています。
料理はまだ、かかわる人間の数が少ないですし、形のあるものを作ります。顧客の好みも、その方の見た目(お歳や国籍、服装、注文の仕方、予算、そもそもお店に足を運んでいただいていること)などである程度判断できます。そのため、なにをどう作るべきかが比較的明確ではないでしょうか? 一方でSIでは、顧客サイドだけでもさまざまな人が利害を対立させつつ、あいまいな要求を出してきます。また開発サイドでも、さまざまなスキルレベルや文化的背景を持った人(JavaやCOBOLやCや汎用機、UNIXやWindows。そして業務知識や目的意識を持った人など)が集まっているので、伝言ゲームはより困難になります。
仕様書を作ろうという考えには、そういった背景があるんじゃないかなぁと。伝言ゲームをうまくこなし、作るべき目標を全員で共有できるよう、明文化しようという意図があるのではないかと想像します。伝言ゲームで、顧客サイドと開発サイドをつなぐSEは重要だと考えます。しかし、優秀なSEがいるだけではシステム開発の困難さが緩和されにくいとも想像します。仕様書は1つの解決策ですが、仕様変更が頻発する場合は役に立ちません(そして、悲しいことにそういうケースがかなり多いです)。
ということで、うまいたとえは出てこないのですが、SEは「メニューのないレストランのウェイター」というのは、ちょっと違うような気がしました。また、長くなってきたこともあり議論を端折ってしまいますが(スミマセン)、本質的な問題はそもそもソフトウェア業界がゼネコン体質にあることのような気がします。
Posted by: ふじさわ | 2006.03.22 at 00:10
ふじさわさん、「伝言ゲームの難しさ」に関しては、大規模なソフトウェアを作る時には常に感じます。関わってくる人の数が増えれば増えるほど、一人一人の作業効率が落ちて行くという現象はどこでも見られることだと思います。それにゼネコンのような階層構造が関わってくるとますます非効率になるんですね。
それを解決するには、大きなソフトウェアを一気に作るのではなく、小さなソフトウェアを複数、それぞれ別々に少人数で作り、それを粗結合(それも、ものすごく粗くてシンプルなもの ― APIとも呼べない、RSSフィードぐらいシンプルなもの)で結びつける、という作り方をするしかないのではないか、と思っている私です。この話は、コメント欄でするには奥が深い話なので、別途しようかと考えています。
Posted by: Satoshi | 2006.03.22 at 08:43
<< 大きなソフトウェアを一気に作るのではなく、小さなソフトウェアを複数、それぞれ別々に少人数で作り、それを粗結合で結びつける
Satoshiさんのご意見に賛成です。
いま、ソフトウェア開発で起きている問題とは、まさに、これまで日本企業が強みにしてきた『すり合わせ』に置き換えられるのではないか。かつて、汎用機システムを構築していた頃、大規模システムの設計チームには、すべてを理解・把握した『スーパーSE』の存在があった。彼らは、「お客様の要望」「業務の流れ」「システム設計」「ネットワーク設計」「モジュール設計」「マニュアル設計」「テスト仕様書」、また、お客様の良きアドバイザー・相談相手であると同時に、若きエンジニアたちの指導者であったと思う。ソフトウェア開発は才能だけではなく、根気やチームワークが大切だ。かつて、ソフトウェア開発環境を確保するため、テストランには深夜の作業が絶えず続くこともあった。時には、恋愛や結婚など、プライベートな話題も、夜明けまでお酒を飲みながら話し合った。間違いなく、そこに暗黙ながらも『すり合わせ』が機能していただろう。その後、IT(情報技術)では、大きな波が幾つか押し寄せてきた。ひとつは、クライアント・サーバシステム(CS)だ。自分にとって、CSはシステム・アーキテクチャの大革新といった技術面よりも、知らない世界(OS)との遭遇であったと記憶している。また、もう一つには、ERPアプリケーションの出現である。ERPではパラメタ設定が大きな意味を持ち、ゼロからのシステム開発が激減することになった。その結果、「スーパーSE」や「すり合わせ」がいままで以上に難しくなってしまった。さらに、最近、OSS(Open Source Software)まで加わろうとしている。
このような複雑なシステム環境では、モノシリックな構造よりも粗結合が求められてくるだろう。まるで、COBOLのプログラムから複数のサブルーチンをリンケージ・セクションから、個々の小さなソフトウェア(Module)を適宜に呼び出すように・・・。SOA(サービス指向アーキテクチャー)が目指しいるのも、このような流れに近いものになるのではないかと・・・。
Posted by: Maki | 2006.03.22 at 11:39
夢のない話で申し訳ありませんが、外食で客観的に大きな利益を出しているのは良い料理人が良い料理を出す店ではなく、マクドナルドとかそういうのだったりはしませんか?
Posted by: ν即 | 2006.03.23 at 01:09
はじめまして。
色々な観点からの分析と楽しい文章を日々楽しませて頂いております。
今回のレストランの例えも良い発想をわかりやすく文章にしておられてとても勉強になりました。
SEという話ではないですが、プロトタイピングしてお客様に実際に見てもらえるのはソフトウェアの強みですよね(しかも何回も)。
料理だと出来上がる頃にはお客さんも満腹かもしれません(笑)。
Posted by: slightly | 2006.03.23 at 04:05
typo
「ものすごくで重要ある」→「ものすごく重要である」
Posted by: とみた | 2006.03.23 at 08:38