導入
プログラミング工程を「製造」と呼ぶ現場が多々あります。わたしはこの「製造」という呼び方が大嫌いです。なぜなら、プログラミング工程は「設計工程」であり、「製造工程」ではないからです。プログラムを書くのは「制作」であって「製作」ではないからです。
そもそも「製作」と「制作」って何が違うの?
製作 ・・・ 機械や道具を使用して有形物を生産する際に使われる。
制作 ・・・ 芸術作品や映像コンテンツなど、アイデアや表現力を必要とする創作活動を指す。
もっと端的に言えば、作る人の創造力やアイデアを必要とするかしないのか、による違いです。
プログラミング工程が設計である理由(その1)
工程という側面からみてみます。これは昔からあるウォーターフォールモデルですが、ソフトウェア開発はおおよそ以下のような工程を踏みます。
・設計(基本設計・詳細設計)
・プログラミング
・テスト
・運用開始
ソフトウェア開発においては、テスト工程はプログラミング工程の後にあります。また、ソフトウェア開発における「製造」とは「ビルド」の事を指します。これは現代においては完全に自動化されており人手を介することはありません。人間は IDE で「ビルド」ボタンを押すだけで、製造物(EXEファイル)が自動的に出来上がります。つまり「ビルド」(=「製造」)には人間の創造力が必要とされることはありません。
これを踏まえて他業界で行っている「製造工程」を見てみましょう。
例えば飛行機や、ビルとか橋などのようなものです。
・設計(図面を書く)
・テスト(プロトタイプを製作してテストする)
・製造(大量生産)
・運用開始
いわゆる製造においては、製造工程の「前」にテスト工程があります。
設計においては法律で基準が定められている場合があり、これを遵守しなければなりません。さらに設計後にテスト(試験)をして設計通りになっているか安全性などを確認します。これに合格しなければ製造はできません。
また、製造におけるテストは昨今ではコンピュータシミュレーションで行うのが当たり前になっています。プロトタイプを製造するコストがかかって大変なのとテストも大変だからです。ビルの耐震テストでは実際にビルを建て地震を起こすわけにもいきません。橋の風洞テストにおいても実際に橋を建設して台風の暴風にさらすなどできません。飛行機は実際に本物サイズのプロトタイプを試作して、何十時間も飛行テストをするらしいです。
ここでソフトウェア開発に話を戻しますがプログラミング工程はテスト工程の「前」になっています。なぜでしょうか? 答えは「プログラミング工程は製造ではない」からです。換言すれば、プログラミングは設計工程であるからです。
プログラミング工程が設計である理由(その2)
プログラミング工程が「製造」であるならば、作業者(プログラマー)の創造力やアイデアなどが入り込む余地などありません。プログラマーは設計書通りにプログラムを書くことが要求されます。変数名、関数名やモジュール名をプログラマーが自分で考えるなど許されません。コードの書き方さえも自由にはできません。必ず設計書の通りに作ることが求められます。
果たして実際の現場ではどうなっているでしょうか?
ほとんどの現場ではネーミング規則などはあるにせよ、変数名などガチガチに決められていることは無いと思います。場合によっては日本語で書かれたプログラムコードのような設計書(プログラム仕様書)がある場合もありますが、日本語で書かれている以上どうしても曖昧さが残るため、細部についてはプログラマーが考える必要があります。
ちょっと待ってください。プログラミング工程を「製造」だと呼ぶのなら、プログラマーが勝手に考えた変数名などの命名方法に頼っていいのでしょうか? 製造であるなら個人の技量や考え方によって個体差が出てはなりません。それでは品質が担保できないじゃないですか? 本当にそれは「製造」と呼べるのですか?
つまりプログラムを書くという作業は、プログラマーの創造力や経験や知識、技量に左右されるわけです。「製造」は「工学」でなければならず、製作者個人によって品質にバラツキが出てはいけないのです。そんなものを「製造」と呼んではいけないのです。
プログラミング工程が設計である理由(その3)
今も流行っているのか知りませんが、一時期は
プログラミングは製造なので他の人達に造らせよう。
という風潮がありました。いわゆる「オフショア」というやつです。主に海外の人件費が安い人達にプログラミング工程を発注して安いお金で造ってもらおう、というわけです。結果は散々なものでした。ほとんどのオフショアはまったくうまくいきませんでした。少なくともうまくいってるなんて話は聞くことはありませんでした。
なぜでしょうか?
プログラミング工程は自然言語で書いた仕様書の記載内容だけでは作れないからです。プログラマーが創造力を働かせなければ製作できないからです。だから失敗したのです。
では、なぜプログラミング工程を「製造」と呼ぶのか
それはお金がからんできます。まず一般的に設計者と製造者(あえて製造とします)には、単価に差があるからです。
設計者(システムエンジニア)・・・単価が高い
プログラマー・・・単価が安い
つまり、なるべくお金を出してくないからです。プログラマーであっても設計者と同様に設計を行っているにもかかわらず、単価を安くしているのです。安い単価の人間に、単価以上の仕事をさせてこき使ってやろうという人達がいるからです。
まとめ
このように、プログラミングは立派な「設計」であり「製造」ではないのは明らかです。よって、プログラミング工程を製造と呼ぶべきではありません。プログラマーには創造力や技術力が必要であり、設計書に書かれたことを単にやるだけの「ロボット」ではありません。
プログラマーがAIに駆逐されることは当分ないでしょう。何度も言いますがプログラマーには人間としての創造力が求められるからです。現状の「AI(もどき)」に出来る作業ではありません。もし、自我を持った AI が誕生し創造力を発揮するとしたらプログラマーは職を失うことでしょう。いえ、そうなればプログラマーだけでなくすべての職業の人達が失業することになるでしょう。