一昨日書いた「ソフトウェアの仕様書は料理のレシピに似ている」というエントリーに対して沢山の人からフィードバックをいただいた。このように情報を発信すると、逆により多くの情報が集まり自分にとっても勉強になる、というフィードバックプロセスがあるからブログは楽しくて仕方がない。
フィードバックの中に「これでSE不要論も再燃か?」などという過激なコメントから、自分自身がSEという立場の方からのものすごく真面目なフィードバックまでが集まったので、これを機会に、ここに私なりに「SE」という職業をどう解釈しているか書いてみようと思う。もちろん、私自身がSEという職業を経験したことがあるわけでなないので、間違っているかも知れないが、その場合は遠慮なく指摘していただきたい。
私の理解では、SEという職業はレストランに例えればウェイターである。それも、メニューから料理を選んでもらう通常のレストランとは異なり、「客の注文するものなら何でも作る」という個別注文レストランである。
そんなレストランであるから、客の注文もさまざまである。「豚のしょうが焼き定食」と料理を指定する客もいれば、「今が旬の魚を使った寿司」とか、「ご飯のおかずになるものなら何でもいいけど、コレステロールが気になるから野菜を多くしてね」という漠然とした注文も来る。ウェイターの役目はそれぞれのお客さんに満足してもらうには、何を作るのが一番良いのかを見極めて、キッチンに伝えることである。
難しいのは、客が必ずしも料理に詳しくはないので、真夏に「生牡蠣が食べたい」などと無理を言って来る客がいることである。そこを相手の自尊心を傷つけずに、「お客様、今は8月なのであいにく生食に適した牡蠣がございません。牡蠣フライではいかがでしょう」などと客を説得しなければならない。そういった仕事をちゃんとせずに、「生牡蠣一人前!」とキッチンに伝えてしまうと、料理人たちからは、「あのウェイターは料理のことが分かっていない」と非難されてしまう。
優秀なウェイターになると、客の好みや健康状態、季節の食材、キッチンにいる料理人の得意料理、各料理にかかる時間、食材のコスト、などが全て頭に入っているために、客にも喜んでもらえるし、キッチンからは信頼される。そんなレストランの客席はいつも満足げな客で一杯だ。
これが私の理解する「SEの役目」である。客に満足したソフトウェアを提供するという意味で、SEという職業はものすごく重要ある。ソフトウェアエンジニアとどちらが上か、などということは決してなく、それぞれに「客が何を本当に必要としているのか見つけ出す」、「受けた注文に基づいて作る」というそれぞれに重要な役割を果たすだけのことである。
ではいったい、日本のIT業界は、どこで階段を踏み外してしまったのだろう?
ここからは私の仮説である。
そんな形のレストランも、レストランの数も少ないうちは良かった。しかし、外食をする人の増え、レストランが乱立してくるにつれ、腕の良い料理職人の数が圧倒的に不足してきたのだ(役人たちはこれを「料理危機」と呼んだ^^)。
その問題を解決するために、いくつかのレストランでは、ウェイターの役目は、客が何を食べたいのかをキッチンに伝えるだけではなく、その料理をどう作ったら良いのか(つまり、レシピ)を書くことまでしなければならないというルールを導入した。そうすれば、料理人の不足を、料理の経験の全くない、バイト君やパートさんで補うことができる、という発想だ。今まで料理を作ったことのないウェイターたちには料理の参考書を与え、これからはウェイターは客からの注文をとるだけではなく、レシピも書かねばならない、と指示を与えたのだ。
ウェイターたちは与えられた参考書を読んで一生懸命勉強するのだが、やはり実際に自らキッチンに立った経験がないので、どうもおかしなレシピを書いてしまう。そんなレシピを受け取った昔からの料理職人たちは、「こんなシロウトの作ったレシピで料理が作れるか!」と怒ってしまうのだが、ウェイターたちも上からの命令なので「そこを何とか」と頼み込むだけである。そんなことを繰り返しているうちに、腕の良い料理職人たちは怒って次々にやめてしまい、キッチンはレシピ無しでは料理の作れないバイト君とパートさんばかりになってしまう。これは本来なら危機的な事態なのだが、レストランのオーナーは人件費が抑えられると逆に喜んでおり、キッチンで働く人たちは低賃金で長時間労働を強いられているのである。
少し誇張した書き方になってしまったかもしれないが、これが私なりの解釈である。SEの役目を、本来の「客が何を欲しがっているか、何を作れば喜んでもらえるかをソフトウェアエンジニアに伝える(要求仕様)」ところにとどめておけばよかったのに、ソフトウェアエンジニアの不足を補うために「どうやって作るか(詳細設計仕様)」という所まで踏み込ませてしまったのが間違いの始まりだったのではないだろうか。そのために、ソフトウェアを作ったことのないSEが詳細仕様を書く→ソフトウェアエンジニアが単なるコーダーになり地位と賃金が下がる→労働環境が悪化する→優秀なエンジニアがやめてしまう→やむなくソフトウェアの基礎を身に付けてない人たちを雇う→ますます良いソフトウェアを作るのが難しくなる、という悪循環に陥ってしまったのではないだろうか。