天天看點

程式設計和音樂的相似之處

目錄

  • 程式設計和音樂
    • 音符
    • 休止符
    • 音名
    • 音程
    • 音色
    • 反複
    • 跳音/重輕音/升降記号等
    • 小節
    • 樂句
    • 樂曲
    • 和弦、聯彈、交響等

很多大師都會把程式設計比作建築,比如架構、設計模式,基本就是用的建築的語言,其實我個人覺得程式設計和音樂也是極其類似的。比如最近在斷斷續續在看的一本《代碼大全》,裡邊提到了變量的“跨度”,這就非常像音樂中的“音程”。

從通俗角度來說:

亂寫的程式跑不起來或全是bug,亂彈的音符則擾人心弦。

程式設計和音樂都有相應的原理支撐,兩者都或多或少依賴一些數學知識。

從專業角度對比,網上搜尋了下,貌似還沒有寫這個的,那叔叔就簡單總結一下兩者相通的地方吧。

下面由偉大的詩人chenqionghe給你簡單類比一下,are you ok ?

先來一張康定斯基的音樂抽象畫《構成第七号》開場

程式設計和音樂的相似之處

比如四分音符、二分音符、全音符、八分音符、十六分音符、三十二分音符

程式設計和音樂的相似之處

基本規律就是二進制,程式設計語言就是靠二進制玩的,這不用說了吧。

舉個例子:int32 int64 float32 float64

休止符和音符一樣也是基于二進制的,比如有四分休止符、二分休止符、全休止符、八分休止符、十六分休止符、三十二分休止符

程式設計和音樂的相似之處

這就類似程式設計語言中的:break、sleep、return

比如有:

C D E F G A B

這基本就可以了解成程式設計語言中的變量,變量被組織成了程式,各種音被組織成了音樂。

程式設計和音樂的相似之處

比如幾度音程,簡單了解成包含了幾個音

代碼有一個類似的概念:

跨度:衡量一個變量的不同引用點的靠近程度,即兩個引用點之間相隔的行數。

程式設計和音樂的相似之處

在這段代碼裡,a變量的跨度是3,因為它最開始引用和結束引用占用了3行。

程式設計和音樂的相似之處

雖然音的高低、長短、強弱可以都一樣,但是由不同樂器演奏的音色不同,比如有:鋼琴、小提琴、琵琶、二胡、古筝等等

程式設計一樣,雖然最終呈現的都是一樣的結果,但可以是由不同的語言寫的,比如有:C、GO、Java、Python、PHP、JavaScript等等。

程式設計和音樂的相似之處

程式設計和音樂的相似之處

音樂中有的N種反複,基本就可以了解成程式設計中的循環了:for、do-while、whie

程式設計和音樂的相似之處

程式設計和音樂的相似之處

這樣的特殊處理,就可以了解成程式設計中的if了。

if 遇到這個音符或者語句,特殊操作

if a == ".":
   # 跳音
if b == ">"
   # 重音  
if c == "<"
   # 輕音
if d == "#"
   # 升調
if e == "b"
   # 降調
           

程式設計和音樂的相似之處

可以了解成一個函數,比如下面是一個簡單的c函數

def c():
    print("chen")
           

程式設計和音樂的相似之處

可以了解成大函數中調用了N個小函數。

比如這裡有三小節,一個小節可以了解成下面函數的一個子函數

def cqh():
    c()
    q()
    h()

def c():
    print("chen")

def q():
    print("qiong")

def h():
    print("he")
           

可以了解成樂句cqh包含了c、q、h三個小節

程式設計和音樂的相似之處

比如,這是一首《river flows in you》的樂曲,樂曲中包含了多個樂句、小節。可以了解成一個程式的一個類,或者一個包。執行類或包相應的入口方法,會發生後邊一系列的函數調用,運作出一個完整的應用。

比如下面是一個完整的包,當執行main函數時,會觸發樂句cqh和chenqionghe的執行

if __name__ == '__main__':
    cqh()
    chenqionghe()
           

程式設計和音樂的相似之處

多種音同時發出、多種樂器同時演奏,基本就可以了解成程式設計中的并發、并行了。

比如當我們使用APP或網頁,執行一整套流程的操作時,背後是N種程式設計語言的共同協作下完成的,這不正是類似于交響樂中各種樂器的結合嗎。

既然網絡世界是由各種程式設計語言“交響”出來,那再用一幅應景的交響樂抽象畫《構成第八号》收個尾

程式設計和音樂的相似之處