ソフトウェア・クリエイション

昨日のエントリに、事前に設計を固めるなんてことはユーザーの意見を無視しかねず、危険であるという話に絡むことで、プログラミングに関しては、そもそも設計とコーディングを分けること自体が何かおかしいという話。


まずは、前川徹の「日本のソフトウェアに未来はあるか」 連載第2回 ソフトウェア開発におけるパラダイムシフトの、「「計画を立てそれを実行する」方式は正しいか」を読むと、下のような図がある。

http://f.hatena.ne.jp/images/fotolife/v/viver/20070422/20070422191219.gif

Hotwired Japan 前川徹の「日本のソフトウェアに未来はあるか」より引用



この記事ではこの図が間違っていることが説かれているのだが、この図にもその先の説明にも、どうも違和感を覚える。

私がプログラムを作るときの感覚は、次の図のようなものである。
http://f.hatena.ne.jp/images/fotolife/v/viver/20070422/20070422191148.png


ウォーターフォールモデルの図と比べると、全然違う。


「要件定義」と「つくりたい」を、「使う」と「保守」を同じ地点だとすれば(そこのところは今回の話題ではない)、私の感覚では「設計」と「コーディング」と「テスト」は不可分で、一緒くたにして「つくる」になる。


感覚的になってしまうが、コーディングとは設計である。もう少し正確に言うと、頭の中にある設計をコンピュータの分かる言語に変換する単純作業がコーディングであり、コーディングとは設計のオーバーヘッドである。そもそも最初からコンピュータの分かる言語で考えていれば、オーバーヘッドがなくなって良い。




仙石浩明の日記 - 「ソフトウェア開発」は「モノ作り」ではないに、この感覚に近いことが分かりやすい文章で示されている。

自動車とソフトウェアを比較するなら、「自動車の設計図」が、「ソフトウェア」(より正確に言えばソースコード) に相当する。「自動車の製造」に相当するのは、ソフトウェアを出荷するときに行なう「ビルド」「コピー」「パッケージング」であろう。


ソフトウェア開発はモノ作りではなく、仮にモノにたとえるならばモノを作るための設計の段階に相当する。そもそもコーディングと設計は不可分なので、コーディング=設計なのある。


と、ここで「コーディング」という言葉が、どうも的を得た用法で使われていないのではないかと思えてくる。コーディングとはコードを書くことだが、コードを書くことは設計のオーバーヘッドであるから、実際「コーディングしている」とは「設計している」と同じことになる。
しかし世の中で「コーディングしている」と言っても、「設計」の意味で取られることはほとんど無いと思われる。
「プログラミング」あるいは「プログラマ」という言葉もほぼ同じである。


そこで、「コーディング」と言う言葉を別の言葉で置き換えるのはどうかという提案をしたい。


「ソフトウェア開発」という言葉はかなり的を得ていると思うのだけど、他の場面で過去にも良く使われてきた言葉なので、「コーディング」を置き換えたことを明示的に示せない。
それに、ぱっとしない。名前なのだから、「Ajax」とか「Ruby on Rails」のように、見た目で「おっ」と思わせないといけない。



「ソフトウェア・クリエイション」というのはどうだろうか。「プログラマ」は、「クリエイター」になる。
(どうもIPAはクリエイターと呼びたがっている節がある)



「クリエイターと言うと、もっと芸術的な分野で使うのではないか」と思われるかもしれない。それで合っている。設計にはある程度のひらめきとセンスが要求されるから、どちらかというと工業的と言うよりも芸術的である。
話がずれるが、「数学は芸術的である」と言うのとは少し違う。数学は芸術的であっても、数学者は数学を作り出しているわけではないので、数学者はクリエイターではない(と私は思っているが、数学者に言わせると違うかもしれない…)。しかし、ソフトウェア開発者はクリエイターである。


あるいは、プログラマとクリエイターを分けた方が良いという意見もあるかもしれない。
Life is beautiful - ソフトウェアの仕様書は料理のレシピに似ている
仙石浩明の日記 - プログラマ 35歳 定年説