システム開発とは工場のラインをつくる仕事だと思う

ウォーターフォール型の開発で設計書をプログラムのコードに落としこむ工程を製造と呼ぶのが今でも一般的なところが多い。 この製造と呼ばれる言葉はおそらく製造業の工場からきてると思われる。 工場のライン生産と同じように運ばれてきた部品を指示通りに組み立てれば製品ができあがるという構図だ。

システム開発における製造も同じように思われているらしい。 設計書に書かれた通りの内容でコードを書けば製品ができあがるという目論見である。

しかし本当に製造という言葉が適切なのだろうか。 プログラミングという行為は運ばれてきた部品をくっつけるだけの作業なのだろうか? 工場のラインでは間違いは一切許されない。図面通りの組立が要求される。

対してプログラミングはある機能を実現するための実装方法は千差万別であってなにを選択するかがプログラマーの創造性を発揮する場面である。 工場のラインでは効率だとか生産性などといった費用対効果が1番に追求される。目指すところは原価低減だ。 一方、プログラミングは将来の拡張に備えたアーキテクチャやデータ構造を柔軟に考えることが要求される。 それぞれ必要なスキルが違うのではないだろうか。

むしろプログラミングという行為は工場のラインそのものをつくる行為ではないかと考える。 機会の配置、人員の並び。生産計画をインプットとしたときに最大限に効率的にラインが動く仕組み。 その流れを設計して実装する行為こそがプログラミングだと考える。

製造というとむしろプログラムのソースコードをコンパイラがコンパイルしてオブジェクトファイルをリンクして実行ファイルを作成する行為を想像する。

工場のラインの仕事はやったことがないけれど、効率と生産性と稼働率を最適化して徹底的な原価低減に取り組むものだと想像する。 限定された箱の中でどれだけ効率的に動けるかまたは動かないかということを追求していくものだと思う。

プログラミングは箱の外で行うものだ。大きな世界の中で生き物を育てるようなものである。 ハードウェアは一度作られたらそれ以上に変化することはないが、ソフトウェアは無限に変化することができる。 プログラマの腕次第でいかようにも姿を変えられる、日々成長していく生き物のようなものだと思っている。