目錄
- 程式設計和音樂
- 音符
- 休止符
- 音名
- 音程
- 音色
- 反複
- 跳音/重輕音/升降記号等
- 小節
- 樂句
- 樂曲
- 和弦、聯彈、交響等
很多大師都會把程式設計比作建築,比如架構、設計模式,基本就是用的建築的語言,其實我個人覺得程式設計和音樂也是極其類似的。比如最近在斷斷續續在看的一本《代碼大全》,裡邊提到了變量的“跨度”,這就非常像音樂中的“音程”。
從通俗角度來說:
亂寫的程式跑不起來或全是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種程式設計語言的共同協作下完成的,這不正是類似于交響樂中各種樂器的結合嗎。
既然網絡世界是由各種程式設計語言“交響”出來,那再用一幅應景的交響樂抽象畫《構成第八号》收個尾