プログラミングは料理に似ている

『週刊少年ジャンプ』で連載されている「食戟のソーマ』を見ていると、強く“プログラミングは料理に似ている”と思う。

  • シェフが料理のレシピを作る -> エンジニアがプログラムの仕様書を作る
  • シェフがレシピ通りに料理をする -> エンジニアがプログラムの仕様書通りにプログラミングをする
  • シェフが部下の作った料理の味見をする -> エンジニアが部下の書いたコードのレビューをする
  • シェフが新作の料理を作る -> エンジニアが大まかにプログラムの設計をした後、プログラミングをしながら頭の中で設計を洗練させてつつプログラムを作る

こうして考えてみると、前々職のコードを書いたことの無い人間が詳細設計書を書き、その詳細設計書を元にプログラムを書く、という環境はかなり歪なものだったことがより明確になる。

当時、学生時代からコードを書いてお金を稼いでいた自分のやり方とはあまりにも違うので直感的に「自分でコードを書いたこともない人に設計をやらせて、他の人にコードを書かせるやり方では良いソフトウェアなんて作れないですよ!」と当時の上司たちに意見をしたものだが、誰一人として理解してくれなかった(まぁ、その結果は当時の上司たちがクライアントに「技術的に不可能です(キリッ)」とドヤ顔で回答していた依頼案件を自分自身でプログラミングして解決していたのだが、それは今回の件とは別件なのでこの辺で)。

この“自分でコードを書いたこともない人に設計をやらせて、他の人にコードを書かせる”やり方は料理で言えば、

  • シェフはレシピだけ書いてキッチンに立たない
  • シェフ自らは料理をしない
  • 自分で料理をしたこともないシェフが書いたレシピを元に料理が作られる

となるわけだが、レストランに行く側の立場になって考えてみれば、こんなレストランで食事をしたいなんて思わないのは当然で、自分で料理をしたこともないシェフが書いたレシピを元に作った料理がおいしいと思えるわけがない。

料理と同じように、どんなに優秀なエンジニアでも、決して自分自身でプログラミングをせずに、良いプログラムを作ることは出来ない。

もちろん、プログラミングを始める前に大まかにプログラムの設計をするが、それは仮置きの設計でしかない。そのため、この段階で設計書を書くようなことはせず、プログラミングの作成にかかるのだ。そうやって、プログラミングをし始めて、初めて見えてくることや思いつくことがたくさんある。それらを元に柔軟に設計を変更しながらプログラミングし続け、プログラムが予定通りに動き始めてやっと、設計が完成するのだ。ただ、この作り方だと継ぎ接ぎだからでソースコードが汚くなってしまうので、この段階に来たら、読み易さやメンテナンス性を重視して、プログラムを書き直し、そうしてやっとプログラムが完成する。

このアプローチはテスト駆動開発でも実践されていて、汚く動かないコード -> Green -> 汚いが動くコード -> Refactoring -> 綺麗で動くコードいう具合に進めているはずだ。

料理でも新しい料理を作る際にいきなりレシピから作る人はいないだろう。まず、作り出したい味を作り出すと考えれる仮置きのレシピがあり、そこから試行錯誤して、望む味を作り上げていくはずだ。

“説明が下手だった”ということを差し引いてもどうして前々職の人たちはこんなことも分からなかったのだろうか?