zoukankan      html  css  js  c++  java
  • 编程和音乐的相似之处

    编程和音乐

    很多大师都会把编程比作建筑,比如架构、设计模式,基本就是用的建筑的语言,其实我个人觉得编程和音乐也是极其类似的。比如最近在断断续续在看的一本《代码大全》,里边提到了变量的“跨度”,这就非常像音乐中的“音程”。

    从通俗角度来说:
    乱写的程序跑不起来或全是bug,乱弹的音符则扰人心弦。
    编程和音乐都有相应的原理支撑,两者都或多或少依赖一些数学知识。

    从专业角度对比,网上搜索了下,貌似还没有写这个的,那叔叔就简单总结一下两者相通的地方吧。

    下面由伟大的诗人chenqionghe给你简单类比一下,are you ok ?

    先来一张康定斯基的音乐抽象画《构成第七号》开场
    image

    音符

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

    基本规律就是二进制,编程语言就是靠二进制玩的,这不用说了吧。
    举个例子:int32 int64 float32 float64

    休止符

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

    这就类似编程语言中的:break、sleep、return

    音名

    比如有:
    C D E F G A B
    这基本就可以理解成编程语言中的变量,变量被组织成了程序,各种音被组织成了音乐。

    音程

    image
    比如几度音程,简单理解成包含了几个音

    代码有一个类似的概念:
    跨度:衡量一个变量的不同引用点的靠近程度,即两个引用点之间相隔的行数。

    image

    在这段代码里,a变量的跨度是3,因为它最开始引用和结束引用占用了3行。

    音色

    image

    虽然音的高低、长短、强弱可以都一样,但是由不同乐器演奏的音色不同,比如有:钢琴、小提琴、琵琶、二胡、古筝等等
    编程一样,虽然最终呈现的都是一样的结果,但可以是由不同的语言写的,比如有:C、GO、Java、Python、PHP、JavaScript等等。

    image

    反复

    image
    音乐中有的N种反复,基本就可以理解成编程中的循环了:for、do-while、whie
    image

    跳音/重轻音/升降记号等

    image

    这样的特殊处理,就可以理解成编程中的if了。
    if 遇到这个音符或者语句,特殊操作

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

    小节

    image

    可以理解成一个函数,比如下面是一个简单的c函数

    def c():
        print("chen")
    

    乐句

    image
    可以理解成大函数中调用了N个小函数。

    比如这里有三小节,一个小节可以理解成下面函数的一个子函数

    def cqh():
        c()
        q()
        h()
    
    def c():
        print("chen")
    
    def q():
        print("qiong")
    
    def h():
        print("he")
    

    可以理解成乐句cqh包含了c、q、h三个小节

    乐曲

    image
    比如,这是一首《river flows in you》的乐曲,乐曲中包含了多个乐句、小节。可以理解成一个程序的一个类,或者一个包。执行类或包相应的入口方法,会发生后边一系列的函数调用,运行出一个完整的应用。

    比如下面是一个完整的包,当执行main函数时,会触发乐句cqh和chenqionghe的执行

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

    和弦、联弹、交响等

    image

    多种音同时发出、多种乐器同时演奏,基本就可以理解成编程中的并发、并行了。
    比如当我们使用APP或网页,执行一整套流程的操作时,背后是N种编程语言的共同协作下完成的,这不正是类似于交响乐中各种乐器的结合吗。

    既然网络世界是由各种编程语言“交响”出来,那再用一幅应景的交响乐抽象画《构成第八号》收个尾
    image

  • 相关阅读:
    C# private public protected internal
    VS2008 的计算代码度量值
    vs2008安装失败
    DataGridView 结束编辑不用鼠标点其它地方
    常见的C #单元测试工具介绍
    只运行一个实例的写法
    C# WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
    C#中的深复制和浅复制
    Prototype源码浅析——String部分(二)
    从URL中提取参数与将对象转换为URL查询参数
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/15325228.html
Copyright © 2011-2022 走看看