フロントローディングについて雑記
最近、僕の読んでいるブログに
「ソフトウェア開発におけるフロントローディング」
という話がよく出てくる。
フロントローディングは製造業の言葉で、製造の段階で見つかるミスをできる限り少なくするために、できる限り設計段階で作りこんでおこうというもの。
ソフトウェア開発におけるフロントローディングとは?ということを議論される際には、いわゆる
- 「ものづくり」と「ソフトウェアづくり」の違い
がよく議論される。この「作る」というところと「何を」をしぼって、
- 「もの」と「ソフトウェア」の違い
- いったい何を製造して、何を設計しているのか?という点
を中心に議論される。
この2点目についてu1rohさんは興味深い点を指摘されている。
まずソフトウェアでは製造(=コンパイル)は完全に自動化されている。昨今はコンパイルにさほど時間がかかることも少ない。設計(=ソースコード)に間違いがあればコンパイラが瞬時にエラーを返してくれる。
つまり、ソフトウェアにおいては設計に対する製造のコストは限りなく小さいわけで、ソフトウェアには設計工程しかないといっても過言ではないわけだ。これこそ究極のフロントローディングではないか!
ソフトウェア開発は既にフロントローディングである-u_1rohのカタチ
またこうも書かれている。
僕はソフトウェアの設計とはコーディングであってUMLではないという立場をとっている。
ソフトウェア開発は既にフロントローディングである-u_1rohのカタチ
ここでは、
「製造=コンパイル」
「設計=コーディング」
という見方だ。
しかし、製造(コンパイル)が極度に完成度が高く自動化された私たちは、コンパイルによってできたマシン語を「製造」しているという気持ちがあるのだろうか。私たちが書いたソースコードが、自動でマシン語に変換されるのであればソースコードを製造している事とマシン語を製造することは、コンパイラによって、ほぼ同義とされるのではないか。
僕が指摘したい点は、
これまで、「設計」→「製造」という流れで作っていたもので、
製造が完全に自動化されると、もはや製造に目を向ける必要はなくて(これは過言な気がするが)、これまで設計で出力されていたものを製造すればよい
という風に、
「製造するものの転移」
が起こると言う点だ。ソフトウェアの世界では完全にではないかもしれないが、もうすでにこの転移が起きていると考えられる。
設計工程という作業が残ったのではない。製造する対象物が転移したのだ。(と見るべきだと私は思う)
コンパイラが生まれた時点で、私たちはもはやマシン語を製造する必要はない。
作るべきなのはソースコードなのだ。
次の言葉でも述べられている
ソフトウェア開発の場合には、設計と製造が同時に進行しています。
フロントローディング2 - 銀髪の記憶
設計・製造がほとんど同時に進むというこの言葉はこういった意味からの言葉ではないかと思う。
いわゆる「ものづくり」というのは「実世界」が対象であるから「製造の完全自動化」が非常に非常に困難なため、この転移が起きにくいのだと思う。こう思うと、製造業がソフトウェア業界の力に頼る(シュミレーションなどで)のも自然に思える。
よって、「ソフトウェア開発はすでにフロントローディングだ」という意見は、賛成できる非常に興味深い意見であるものの、私たちが今ソフトウェア開発のために考えなければいけないフロントローディングはもっと先のフロントローディングなのではないだろうか。
「製造するのはソースコードだ」という立場の上でのフロントローディングだ。
この点については
が非常に面白い。
しかしながら、u1rohさんは最後に非常に魅力的な言葉でエントリーを締めくくっている。
僕は夢見ている。
ソフトウェア開発は既にフロントローディングである-u_1rohのカタチ
いつの日か、逆に製造業がソフトウェア産業から学ぶようになるのではないか。
いつの日か、今日のソフトウェア業界がTPSから学んでいるように、製造業がエクストリームプログラミングから学ぶようになるのではないか。
いつの日か、製造業のCADモデリングにテスト駆動開発が導入されるようになるのではないか。
いつの日か、ソフトウェア産業が製造業に恩返しする時が訪れるのではないだろうか、と。
u1rohさんが指摘されているように、コンパイラはマシン語を自動で生成する。
僕たちは今、どんどんソフトウェア開発の自動化の方向へすすんでいるような気がする。
様々な技術によって、製造するソースコードの量を減らす方向(自動化)へ進んでいるということだ。
「製造の自動化」
この言葉は、製造業からみたら究極的な言葉だろう。ソフトウェア開発の未来には、製造業へ恩返しできる時が待っているのではないかと僕も思う。