爵士乐即代码:爵士乐队如何让你成为更优秀的开发者
在从事软件开发之前,我的职业是“职业音乐家”。这份工作花在教课、上大学课以及在酒吧或宴会厅里,对着一群刚结婚的醉醺醺的二十多岁年轻人,一遍又一遍地吹着喇叭,演奏《Don't Stop Believin'》的时间,比真正演奏音乐的时间要多得多。话虽如此,我在乐队演出中学到的一些宝贵经验,也可以应用到软件开发中。
首先是输出结果:你想听到什么?
作曲家(或者你也可以称他们为“音乐程序员”)很容易陷入乐谱的泥沼,最终却发现演奏出来的效果与他们预想的截然不同,从而感到沮丧和困惑。艾灵顿公爵找到了解决办法——他为他的人民创作,而不是为他的乐手创作。他的乐谱上不会写着“第一小号”或“第一中音萨克斯”,而是写着“库蒂·威廉姆斯”和“约翰尼·霍奇斯”。他对自己的乐队了如指掌,创作的音乐正是他能想象到演奏者将如何演绎的。
在编写代码时,我们常常会沉迷于自己最喜欢或最熟悉的工具,因为这样可以写出漂亮的代码。但它的性能是否最优?代码运行起来“听起来”如何?我发现,先思考最终结果应该是什么样子,然后反向推导,效果会好得多。
框架:行动自由与逃避自由
(想深入了解爵士乐队和团队,请观看此视频)
在爵士乐中,即兴演奏是其表演的重要组成部分。“和弦进行”(即乐曲的基本和声)是乐团成员进行“即兴创作”的共同参考。这些和弦进行为创作过程提供了必要的限制。根据演奏位置的不同,音符和乐句可分为“协和音”和“不协和音”。不协和音的使用非常普遍(大多数情况下)。
我们花费数年时间,通过创造性地运用旋律和音乐理念,来培养一种音乐语言,并且常常“借鉴”前人的成果。我们无需重新发明轮子。如今,现代爵士乐的音乐词汇对于新手来说可能相当复杂。但只要勤加练习,就能站在巨人的肩膀上,创作出属于自己的音乐。
软件框架(尤其是 Web/移动端框架,以及即将到来的物联网框架)在我们的社区中无处不在。开源软件 (OSS) 彻底改变了产品的构建方式。框架可能带有“主观性”,并有严格的约定,这可能会让人感到限制或居高临下(Ruby/Rails 社区不得不不断回应这种批评)。话虽如此,这些限制/约定并非旨在扼杀你的创造力;它们的目的是引导你的创造力,让你在最能发挥自身优势的领域大放异彩。就我个人而言,我宁愿编写美观、交互性强且实用的应用程序,也不愿重新发明 Rails 的 MVC 架构。至于 Rubygems 的神奇之处,我就不多说了……
实时音乐
对我而言,爵士乐的魅力在于它能即兴创作出美妙的音乐。无论是大型乐队还是三重奏,乐曲中总会有一些段落,所有人都“脱稿演奏”,只是单纯地聆听和回应彼此。我曾与一支能够激励和支持我的乐队一起独奏,有过一些真正意义上的“精神洗礼”。
作为程序员,我们都能领略元编程和运行时变更的精妙之处。我目前正在深入研究 React/Redux/GraphQL,并不断被组件渲染、数据获取/设置/转换以及异步协作那宛如马勒交响乐般的美妙景象所震撼。如果你也有同感,我建议你听听比波普爵士乐(我最喜欢 20 世纪 40 年代末到 60 年代的小型爵士乐队)。
TL;DR(太长不看)
爵士乐和代码有很多共同之处——它们都需要诠释,都蕴含着令人惊叹的创造力,并且都能产生无穷无尽的组合和解读。我对爵士乐的热爱激发了我对代码的热爱,我敢打赌,既然你现在了解了代码“底层”的运作原理,我这位热爱字节的朋友或许也能从中获得一些灵感。