Help us understand the problem. What is going on with this article?

料理?音楽?結局プログラミングは”何と”似ているのか

More than 1 year has passed since last update.

Ateam Hikkoshi Samurai Inc. Advent Calendar 201715日目です。
本日はエイチーム引越し侍のWebエンジニアの中川(@kawanakashotaro )が担当します。

背景

よく、音楽をやっているプログラマーが「音楽とプログラムは一緒だからね」と言ったり、
料理が得意なプログラマーが「料理とプログラミングは似てるからさ」と言ったりするのを聞きませんか?
そしてときどきはその内容によって、「ぶっちゃけそうでもないと思うけどな」と思うことありませんか(笑)?

だって、動作の手順を書いていく作業がプログラミングとするなら、
大体の行動当てはまるじゃんと言ってしまいたくなります。
「人間と魚って似てるよね!だって目と口があるもん!」と言われたら
「いや、え、鼻は?ヒレは?ねえ!」と言ってしまいたくなるような感覚に近い違和感。。。

そこで今回は、一体何がプログラミングと似ているのか、
要素を数値化し決着をつけたいと思います!
・・・と言ってもどうしても評価に主観が入るので、
できればアンケートにお答えいただき、みんなの投票で似ているものが決まっても面白いのかなとも思ってます。

"似てる候補"のピックアップ

試しに「プログラミングと似ている」とかでググってみたところ…
本当にいろんなものとプログラミングが似ていると主張されています(笑)
ざっと巷に出回っている”説”で強そうなのはこんなところです

  • 料理・・・Chefのおかげもあってかスムーズに結びついている人が多そう
  • 音楽・・・なにがと言われると説明は難しいが似ている気がする
  • スポーツ・・・体に染み込ませる的な?
  • 家事・・・取り組むスタンスとかその辺かな
  • 車の運転・・・よくオブジェクト指向の説明に使われるから?
  • セッ**・・・記事見てみないとまだ結び付けられない(笑)

どれくらい、似てると言われてるか

いったん、「hoge プログラミング 似ている」とググって何件ヒットするのか、
ヒット数を調査してみました。

似てる候補 ヒット数
料理 989,000 件
音楽 564,000 件
スポーツ 707,000 件
家事 802,000 件
車の運転 1,090,000 件
セッ** 445,000 件

意外にも「車の運転」が1位でした。
ただ、上位のサイトをざっと見ると、自動運転の記事などが多く
AI技術関連の内容でプログラミングが関わっていると思われるので、
その辺りは今回はノイズです。

今回の評価軸定義

そもそも何をもって「似ている」と言うことが多いのか。
ひとまず、「似ている」と主張している記事などの情報を元に、
なぜ似ていると主張されているのか、最大各3つまでピックアップしてみます

料理とプログラミングが似ているとされている点

  • 材料と調理方法の組み合わせであらゆる料理が作れる

プログラミングで言えば、簡単な関数や文法の組み合わせって感じですね。

  • ソースコードが「レシピ」そのもの

ソースコードは、「まずこれをこうして、次にこうして、もしこうだったらこうして・・・」という指示書、レシピであると。

  • 効率を重視する

「これを煮ている間にこれを炒めて、洗い物も同時にして・・・」てやつですね。
開発でも、似た処理はまとめたりライブラリ使ったりと効率重視な面はあるんですが、ちょっとニュアンスが違う気もしなくもない。

音楽とプログラミングが似ているとされている点

  • 音の組み合わせでメロディができたり、メロディ、パートの組み合わせで曲になる

色々なライブラリの色々な関数を組み合わせて使うところとかですかね。

  • 作曲時だとひとつの不協和音や演奏時だと1回のミスで台無しになる

言うまでもなく、1文字のタイプミスで大きなバグに繋がります。

  • バンドの解散理由の定番「方向性の違い」。01で決められない部分がある

実装方法の流儀や正義は人によって違う場合も多い。開発スタンスとかも。

スポーツとプログラミングが似ているとされている点

  • 筋肉の動き、呼吸、身体の仕組みを深く理解することが成長・成功に繋がる

言語の細かい仕様まできちんと把握できていることで、より速く適切な実装ができます。

  • 反復練習し、「体で覚える」

デバッグや障害対応などの勘所は単純な知識と言うより、経験で培った知見が大きく影響していそうではあります。
あとはコマンドやエディタの操作とかは体で覚えているかもしれません。

  • 体力がいる

これは解釈次第ですが、、本当に体力も要りますし、基礎技術のことを体力と言うこともできそうです。

家事とプログラミングが似ているとされている点

  • 優先度、スケジュールなどタスク管理が重要で、1日の中でなんとか終わらせなければいけない

そのまま開発の話しているみたいですね。

  • 単純作業の繰り返しに思えるが、工夫次第で質を高めることも効率化することもできる

これもコーディングの作業っぽいですね。同じことやるにも速い実装、綺麗な実装ありますもんね。

※家事で検索する際も「料理」が多く引っかかってくるので2つだけにします

車の運転とプログラミングが似ているとされている点

  • 反復練習し、「体で覚える」

スポーツと同じですね。

  • ひとつのミスが大事故に

これは音楽と一緒。

  • 慣れれば誰でも無意識に乗れるようになる

「誰でも」はわかりませんが、一度身についたコーディングスキルやベースとなる考え方はある程度キープできる気がします。

セッ**とプログラミングが似ているとされている点

  • 雑だと嫌われる

プログラミングの話ですよ。

  • 継続的なメンテナンスやサポートが必要

プログラミングの話ですよ。

  • フィードバックを受けることも大切

プログラミングの話ですよ。

※あくまで、検索時に上位に出てくるサイトをいくつか拝見した上で、総合的に有力と思われる要因のピックアップです!!

「プログラミング」という行為の特徴

ダブっているものは統合して、他の行為と比べられる際のプログラミングの特徴はこんな感じです

  • パーツの組み合わせで構成され、応用してあらゆるものが作れる
  • ソースコードという行動の指示書がある
  • 効率を重視する
  • ひとつのミスで大惨事
  • 実装方法の流儀・こだわりが人によって様々
  • 細かい仕様まできちんと把握できていることが大切
  • 反復練習し、体で覚える
  • 基礎が重要
  • タスク管理が重要
  • 継続的なメンテナンスやサポートが必要
  • フィードバックを受けることも大切

採点!結果発表!!

さて、ここまで書いてきて、「確かに!」と思う”似ている理由”もあれば、
こじつけに近いと思うものもありました。
各”似ている候補”がそれぞれの要素にどれくらい当てはまっているのか、
僕なりに5段階評価してみました。

料理 音楽 スポーツ 家事 車の運転 セッ**
パーツの組み合わせで構成され、応用してあらゆるものが作れる 5 4 2 3 2 2
ソースコードという行動の指示書がある 5 4 3 2 2 1
効率を重視する 5 1 3 5 3 1
ひとつのミスで大惨事 4 5 4 3 5 4
実装方法の流儀・こだわりが人によって様々 4 5 3 3 2 4
細かい仕様まできちんと把握できていることが大切 4 2 3 2 3 3
反復練習し、体で覚える 3 4 5 3 4 3
基礎が重要 3 5 5 2 3 2
タスク管理が重要 4 2 2 5 2 1
継続的なメンテナンスやサポートが必要 2 3 5 3 4 4
フィードバックを受けることも大切 5 5 4 4 3 4
平均 4.0 3.6 3.5 3.2 3.0 2.6

まとめ

同じ5段階評価の食べログだと3.5以上が「うまい店」と言えるという話もありますので、
今回の僕の検討では「プログラミングに似ているのは料理と音楽だけ」とさせていただきます!!

みんなで何が似ているか決めませんか?

以上をご覧いただき、似ているものを投票で決めてみませんか?
アンケートに回答後、他の方の回答も確認できます!
https://goo.gl/forms/faa9OnjpgC6UjRUx2

最後に

Ateam Hikkoshi Samurai Inc. Advent Calendar 201715日目でした。お付き合いいただきありがとうございました。
明日はエイチーム引越し侍の尊敬するリードエンジニア(自称おじさんエンジニア?)@dd511805さんの記事です。お楽しみに!

株式会社エイチーム引越し侍では、一緒にサイト改善をしてくれるWebエンジニアを募集しています。エイチームグループのエンジニアとして働きたい!という方は是非、以下のリンクから応募してください。
皆様からのご応募、お待ちしております!!

エイチームグループ採用サイト(Web開発エンジニア職)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away