编程和音乐真的很像吗?

在过去的几十年时间里,对音乐作品和编程同时感兴趣的计算机科学家成功地将两者结合在一起。现在的人工智能谱写的音乐,几乎与由专业音乐人创建的没有区别。

很多专业的开发人员对音乐有着真正的激情,以及许多音乐家涉足过编程,这些已经不是什么秘密。例如,Elvis Costello,一位多产的英国音乐家,被誉为“他那一代最优秀的词曲作家”,在他的音乐生涯腾飞之前,在上世纪70年代操作IBM 360。

你可以发现为什么人们会沉溺于这两个领域:因为创作旋律和编写算法之间有很多共同之处。从表面上看这两者似乎颇不相同,但是开发有创造性的一面,而谱曲亦有机械化的一面。那么,编程和谱曲有什么相似之处呢?

你的心中已经有音乐的脉动

让我们先来看一看谱曲和编程之间的相似之处。

1.它们都遵循关于以下逻辑规则

谱曲,和编程一样,需要古希腊人所谓的三艺。即:

语法:扎实理解基本原理——乐谱和编程语言规则的理论或知识。

逻辑:你需要能够创建“逻辑推理”。当音乐创作或编码时,你需要遵循逻辑规则使得“活动件”一起正常工作。

修辞:和语法和逻辑一样,你需要说服听众和新方法的使用者接受标准做法。

如果不遵循作曲和开发的基本原理,一切都无法正常运转。一个胡乱编写的程序将充满bug,在相同意义上,病态的和弦结构会造成乐曲的不和谐。

2.它们从一件件小事开始构建了美的东西

要成为一个伟大的钢琴家,你必须先练习和完善基础知识:简单、重复的音阶和琶音。要成为一个伟大的开发者,你需要花费大量时间来确保即使是最简单的表达式,也能够优雅和被正确编码。从一件件小事开始,你渐渐打造出了一个个伟大的东西,因此:

3.你需要能够见微知著

正如作曲家必须考虑到乐团的不同乐器组以及这些乐器组是如何组合在一起的,而开发者则需要在他们的头脑中保持一个抽象的“大局观”,当他们开始构建程序架构的时候。这两个学科都需要构建一些更大,更好的东西。

4.自我表达是关键

音乐和软件开发都需要创造力和自我表达能力:两者都需要培养自己的风格,创造一些新的和令人振奋的东西。

5.你需要涉猎技术

音乐家和开发人员需要花费很长的时间来思考他们的创作如何与其他产品交互,以及如何呈现在“最终用户”的手中。作曲家可能会增加重音符号以指示乐团成员要演奏的风格。吉他手可能会考虑使用外部硬件(amps,效果器等),或他们希望在录音室里制作他们的歌曲。同样的,开发人员需要牢记别人将在哪种设备和什么上下文中如何使用他们的最终产品。

6.两者都包括协作和个人主义

莫扎特单独花了很多时间来想他的下一个曲谱,尽管如此,他依然需要与他人合作——也就是他指挥的乐师。同样,最成功的开发人员绝对不是一个纯内向的人:他们需要与最终用户、经理和用户体验设计师等人员合作。

我不是音乐开发人员!

虽然两者有很多的共同点,但一些反对意见也值得我们听一听。不是每一个开发人员都能成为下一个贝多芬!

1.这个比喻是不是只是一种我们作为开发人员吹牛和显摆的方式?

正如Coding Horror博客的作者认为的那样,开发人员将自己的技艺与绘画,音乐或其他艺术形式之间作比较不仅仅是一种比喻,更多的是一种自我夸耀。当然,我们都希望我们正在构建的app能够像Gershwin的音乐一样棒一样好,或者我们刚刚设计好的网站能够像Miles Davis的《Kind of Blue》一样影响深远。但说实话,这的确大不相同,不是吗?

2.编程是为了解决问题

当你被要求去设计一个app的时候,通常是为了解决问题,例如,特定的业务或消费者问题。开发人员善于解决此类问题,但这是否真的可以比作音乐?从最纯粹的角度看,谱曲是纯真感情和情绪的迸发和表达。

3.编程有一个非常不同于音乐的目的

当你开发任意一种工具时,最终目标是让终端用户能够做一些具体的事情。假设你正在构建一个业务app——你的创作应该意味着为最终用户的日常工作提供便利。相比之下,音乐,则并没有一个特定的“目的”,只是一种超越纯粹的享受。

它们有多重要

我们依然无法做出决定:虽然显然,谱曲和开发绝对有着一些共同的因素,但它们也有很多区域是存在分歧的。我们所知道的是,开发人员和音乐家都可以丰富我们的生活,并给我们一些以前不知道我们需要,但是现在生活不能没有的东西。

英文原文:Is Programming Similar to Composing Music?


原文发布于微信公众号 - 大数据钻研(bigdata118)

原文发表时间:2017-04-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序工场

谈谈技术面试

只要是招一个技术人员,不管是初级的程序员还是高级软件工程师,技术上的考核都必不可少。很荣幸作为面试官参与过公司的一些技术面试,从中也体会到了一些东西。 首先...

764
来自专栏数据和云

学习Oracle的三重境界

最近在“恩墨微信大讲堂”仍然有很多朋友经常问起学习Oracle的方法,讲到学习之中的艰辛和困惑,这让我想起以前写过的一段文字,摘录在这里,供大家参考!这些文字是...

3449
来自专栏Golang语言社区

转--Golang语言 应该成为开发 android 的主要语言

前几天刚看到<Oracle 起诉 Google Android 操作系统侵犯了其 Java 知识产权>的新闻时,我就在猜想:如果 google 要摆脱 Orac...

3267
来自专栏新智元

在让机器「读懂」自然语言之前,人们走过哪些弯路?

编者注:本文节选自《数学之美》,作者吴军曾在《后记》中说,世上最好的学者总是有办法深入浅出地把大道理讲给外行听,而不是故弄玄虚将简单的问题复杂化。所以,他写书的...

3715
来自专栏ACM算法日常

新手入门 | 算法书籍推荐

公众号设立以来,很多同学都在问如何入门、提高,以及有什么好的算法书籍可以学习。这周空闲时间我就大概在网上整理了一下,由于每个人的性格、学习习惯都不...

4702
来自专栏高性能服务器开发

好不容易争取到的资源 | 叩响人工智能的大门

Python是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆创造,第一版发布于 1991 年。可以视之为一种改良 (加入一些其他编程语言的优点...

1193
来自专栏程序员互动联盟

为啥计算机语言难学?

很多人觉得计算机太难学了,里面很多专业术语都不明白,如果单纯从人类语言的角度考虑,很多计算机语言的确很难直接体现出很人性化的地方,所以要学好计算机语言,首先不是...

3296
来自专栏程序员互动联盟

【编程指导】学编程英语一定要好么?

英语这个东西到用的时候方恨少,程序基本上都是英语来编写的,但实际上涉及到的单词和我们高中学的单词没有太大的关联。不要求看什么心灵鸡汤一类的要求那么高。而国外的文...

3415
来自专栏灯塔大数据

排行 | Python 人气王,JS 比 Java 更受公司青睐

你喜欢的编程语言名列排行榜的第几位?各大企业对掌握哪种编程语言的人才更为青睐?快来看看这篇文章。

1193
来自专栏程序员互动联盟

「大学生学编程系列」第六篇:如何学习C语言?

现在很多人初学者直接选择C语言的人已经变得越来越少了,主要原因还是在招聘岗位数量上无法和java,php等高级语言想媲美,但并不代表C语言已经穷途末路没有前景了...

1345

扫码关注云+社区

领取腾讯云代金券