プログラミングと料理は似ていない

全く料理をしないプログラマですが、プログラミングと料理は似ていないと思います。

  • 「プログラミング」は、「設計書」をもとに「プログラム」を作ること。
  • 「料理(調理)」は、「レシピ」をもとに「飲食物」を作ること。

とすると似ているような気もしますが、 「プログラム」と「飲食物」が対応するところに違和感を感じます。

「プログラム」は処理の手順を表現したものですが、「飲食物」はそうではないからです。 料理の世界で処理の手順を表現したものといえば、「レシピ」だと思います。

「プログラム」も「レシピ」も、一度完成すれば再度作る必要はなく、必要に応じて流用でき、 繰り返し使うことができるという共通点もあります。

そうすると「プログラミング」に対応するのは「料理(調理)」ではなく、「レシピの作成」ということになります。

少し強引ですが、プログラミングの世界における「設計書」に対応するものを、料理の世界における「献立」とおくと、

  • 「プログラミング」は、「設計書」をもとに「プログラム」を作ること。
  • 「レシピの作成」は、「献立」をもとに「レシピ」を作ること。

となり、まあまあです。

では、「料理(調理)」に対応するのは何になるのかというと、それは「プログラムの実行」に当たるのではないでしょうか。

少し強引ですが、

  • 「プログラムの実行」は、「プログラム」に従って「入力データ」を「出力データ」に変換すること。
  • 「料理(調理)」は、「レシピ」に従って「食材」を「飲食物」に変換すること。

とすると、まあまあです。

ありものでささっと料理を作ることは、即興でプログラミングをしているようなものと形容されがちですが、 コンソールでコマンドを叩いてデータ加工しているようなもので、「プログラミング」とは認めにくいです。

やはり「プログラミング」とするならば、成果としての「プログラム」が欲しいです。

ありものでささっと料理を作ることの成果は「飲食物」だけで「レシピ」がないので「プログラミング」と似ているとは認めにくいのです。

改めて対応関係を整理すると、

プログラミングの世界 料理の世界
設計書 献立
プログラミング レシピの作成
プログラム レシピ
プログラムの実行 料理(調理)
入力データ 食材
出力データ 飲食物

となり、意外ときれいに整理できたのではないでしょうか。 こうなると、プログラミングの世界と料理の世界は似ていると言えそうです。

そういう意味では、プログラミングと料理は似ていると思います。