こちらの記事は「コドモンAdvent Calendar 2024」の 7日目の記事です🎅
こんにちは!コドモンの諸星です。
プログラムと音楽
突然ですが、プログラム*1と音楽が似ていると感じたことはありませんか? 私は似ていると感じているのですが、人に説明できるくらい言語化できたことがありませんでした。
今回は「プログラムと音楽の共通性」についての言語化にチャレンジします!
共通点1:あらかじめ動作を記述する
まず最初の共通点は、「動作が事前に記述されている」ということです。
ソフトウェアのコードはいわずもがな、音楽においても楽譜という形で、事前に音の高さ・リズム・楽器の種類などが事前に記述されています。 ただし、楽譜だけでは音楽にはなりません。楽譜は、普通の人がぱっと見ただけでは、意味不明な記号が書かれた紙です。それと同様に、コードだけではただの文字列ですね。
これらを実際に動作させるハードウェアたるコンピュータや楽器が存在して初めて、プログラムや音楽として動き始めます。 操作する人や演奏者が意図しない動きをしたら、予期しない大惨事が起こることも共通していますね・・・!
まとめ1
- 事前に文字や記号で動作が定義されているが、それだけでは動かない
- 演奏者(またはコンピュータ)が実行するたびに、異なる体験が生まれる
共通点2:一定の構造を持っている
ソフトウェアアーキテクチャ、システムアーキテクチャの方針がなく、まったくバラバラに書かれたコードには触りたくないですね。
音楽も同じです。
人間が音楽を心地よいと感じる要素に、一定の構造をもち、その構造に慣れ親しんでいるということが挙げられます。 J-POPであれば、「Aメロ→Bメロ→サビ・・・」といった用語を聞いたことがありませんか。これはJ-POPにおける構造を分析・定義した用語になります。 時代や文化が違えば、慣れ親しんでいる構造も変わります。ソナタという形式は、モーツァルトの時代に親しまれた音楽の構造(アーキテクチャ)です。ですが、現代の私たちにはあまり馴染みがありませんね。
時代や文化によって求められるものが変われば、最適解も変わります。そうして、音楽の流行もアーキテクチャの流行も変化していきます。
まとめ2
- 一定の理解しやすい構造(アーキテクチャ)を持つことが重要な意味を持つ
- より良い構造は、社会的な要因によって変化する
共通点3:正解がない
コーディングをしているとき、こう考えたことはありませんか。
「ちゃんと動いたけど、もっと良い書き方はないかな」
「問題解決方法がAとBの2つあるけど、どちらを選択するか迷うな」
動作結果には正解があったとしても、コードの書き方には何通りもあります。でも、動けばいいってものではありませんよね。 なるべくシンプルにわかりやすく、重複を避けて・・・など、考えながら、正解がない中でコードを生み出していきます。 マイクロソフト社のCEO サティア・ナデラ氏はコードを詩に例えました。
あなたは、実に多くの文章やページを費やした散文でもって描きうるものを捉えようとしているが、それを数行の詩文に変えてもなお、本質を捉えることはできる。これぞ圧縮だ。最高のコードとは、詩なのである。
You're trying to take something that can be described in many, many sentences and pages of prose, but you can convert it into a couple lines of poetry and you still get the essence, so it’s that compression. The best code is poetry.
サティア・ナデラ - Wikipedia より引用
私はこの言葉がとても好きです。初めて読んだとき、コーディングに芸術的側面があることにはっとし、感動したことを覚えています。
まとめ3
- 「正解がない」という芸術的側面を持つ
チャレンジ失敗?成功?
私がプログラミングと音楽が似てると思う理由を言語化してみましたが、いかがでしたか? 「似てると思った」「こういうところが違うと思った」「他にもこういうところがある」などありましたら、ぜひコメントしてくださいね。
楽器を音で満たして、和音を奏でさせましょう。 ほら、音楽が聴こえてきました!
パソコンを電気で満たして、コードを奏でさせましょう。ほら、プログラムが動き始めました!
来年も、そのまた来年も、沢山の作曲家がまだ聞いたことのない音楽を作ろうと切磋琢磨するでしょう。 そして沢山のエンジニアたちも。
2025年があなたにとって素晴らしい1年となりますように!
*1:ここでいうプログラムとは、ハードウェアとソフトウェアが1つのシステムとして協調して動作し、その結果として生まれる体験を指します。