|
: e, D- {3 h1 n" O
编程和音乐创作有什么共同点?
; w& C7 ?# @3 L8 _3 J6 F4 i$ d* I
* u0 j% Q5 R( p" {( K
V0 l& Z& C: X; y
& d. P' ]% @# ^2 r0 p& g" y G
5 V& f; Z) P& q, x, Q在过去的几十年时间里,对音乐作品和编程同时感兴趣的计算机科学家成功地将两者结合在一起。现在的人工智能谱写的音乐,几乎与由专业音乐人创建的没有区别。" m4 |1 `# T; Q; V$ @
; k# q# J9 X- v! P% V- \
$ b/ [' t8 @: [$ h
3 Z; H3 l! p; ?: I4 y4 f' {- G3 c5 Q很多专业的开发人员对音乐有着真正的激情,以及许多音乐家涉足过编程,这些已经不是什么秘密。例如,Elvis Costello,一位多产的英国音乐家,被誉为“他那一代最优秀的词曲作家”,在他的音乐生涯腾飞之前(上世纪70年代),他的工作就是操作IBM 360。
1 ?% Z' n/ L! g" }& C
5 B1 K! x* |& F# l. K) o9 t5 o; w3 B, c
" e/ ~: [3 s# p$ C1 F6 A# ~7 L7 L你会发现为什么人们会沉溺于这两个领域:因为创作旋律和编写算法之间有很多共同之处。从表面上看这两者似乎颇不相同,但是开发有创造性的一面,而谱曲亦有机械化的一面。那么,编程和谱曲有什么相似之处呢?2 `/ w9 E+ y) `8 p! S
. [# b+ p1 F( p; `4 @, |7 n* a3 S
. s( o# M- d3 |$ H" {+ I2 @相关阅读:程序员眼中的古典名画7 q8 q9 [/ ?% ~
" Q1 r3 c! n/ b
1.它们都遵循关于以下逻辑规则
1 [8 [# f5 k3 v8 O! ^* F- h% [1 [* R/ J1 t( ^" `
1 h, l3 }/ [6 w5 j5 _ ^; D. `6 _) c; r) j A% h# {0 k
谱曲,和编程一样,需要古希腊人所谓的三艺。即:
) T5 A! M, p: n( j( j# E- U/ b3 X+ Z6 G
1 o! r, q4 x* I! I2 r! Y2 M
% A- c, {' m, m0 r; A语法:扎实理解基本原理——乐谱和编程语言规则的理论或知识。4 H5 P$ G q' E. e. a
6 j0 X+ [; J( C p9 C4 n# a
逻辑:你需要能够创建“逻辑推理”。当音乐创作或编码时,你需要遵循逻辑规则使得“活动件”一起正常工作。
' Z1 `. N _; m( M& O7 Z1 L: W* E* f l: A; F+ T3 w4 M- k/ D
修辞:和语法和逻辑一样,你需要说服听众和新方法的使用者接受标准做法。, O1 m; |3 |. v8 B. P2 I
( R4 ?( r0 ]* Y: y8 V3 k: j
% n" p6 J4 K8 W' q: R
- U! W9 Q( @3 v) ~! O# Z( j y
如果不遵循作曲和开发的基本原理,一切都无法正常运转。一个胡乱编写的程序将充满bug,在相同意义上,病态的和弦结构会造成乐曲的不和谐。
V# P2 N! o$ u% O5 c/ ~1 e9 v/ q' K- F2 `2 j
, ?$ b4 `- f( T& V5 h: @
& x" b3 A. Q3 ~ r0 l% k2.它们从一件件小事开始构建了美的东西
# ?7 A+ H1 W# S" L( Z! Z$ z) o i M9 X' }+ w5 B! f' @
$ I9 S2 J* H, B* z0 @4 b' ?要成为一个伟大的钢琴家,你必须先练习和完善基础知识:简单、重复的音阶和琶音。要成为一个伟大的开发者,你需要花费大量时间来确保即使是最简单的表达式,也能够优雅和被正确编码。从一件件小事开始,你渐渐打造出了一个个伟大的东西,这一点也同样重要。
% G/ E9 R4 o; F3 u: d1 a
1 T( Q, s5 Q' S! R0 G0 r# Y6 u! l# ^$ @9 f! u# V4 o& W
0 Z2 J& g$ I( x) s" Y: q- R6 M
3.你需要能够见微知著
, A7 [, M2 N0 {' A7 I. V! r3 T I- A% x, u8 `
5 M# C* L! i! e7 N) ~' ?
正如作曲家必须考虑到乐团的不同乐器组以及这些乐器组是如何组合在一起的,而开发者则需要在他们的头脑中保持一个抽象的“大局观”,当他们开始构建程序架构的时候。这两个学科都需要构建一些更大,更好的东西。
4 f o# i ]/ e# A8 N
. ]" u( I$ { @9 O9 z
8 ]# B! R0 z# H* E. P: `. c( k3 |+ e; a' O& X8 G
4.自我表达是关键' M4 K* b5 Q4 ]7 Q7 R4 G1 ]
+ L4 n7 J1 @# [, s6 c2 k
4 E& `; K# \/ i$ A: H7 U
音乐和软件开发都需要创造力和自我表达能力:两者都需要培养自己的风格,创造一些新的和令人振奋的东西。2 e8 t1 Y0 h' s% @- T5 p: U
/ z0 `% B/ p+ _; J( ]+ d
$ Y! f# o1 D$ }
: y) Z( s% b+ k0 v; j ~5.你需要涉猎技术
8 A( Q1 l8 E5 Y2 c5 O% k! Y! ~0 u% T/ _7 f+ t9 a* _9 o+ @
- O5 L2 ]( z1 k) V音乐家和开发人员需要花费很长的时间来思考他们的创作如何与其他产品交互,以及如何呈现在“最终用户”的手中。作曲家可能会增加重音符号以指示乐团成员要演奏的风格。吉他手可能会考虑使用外部硬件(amps,效果器等),或他们希望在录音室里制作他们的歌曲。同样的,开发人员需要牢记别人将在哪种设备和什么上下文中如何使用他们的最终产品。$ u$ S ^2 g# o4 @7 O. W6 M. w
; ?- h$ k! X& h. r# U9 X; w
5 _. a" K7 n' y+ w6 O. S8 f( J0 M+ e% {; i7 @
6.两者都包括协作和个人主义
' L0 g4 R3 V/ H) Z/ S2 i; d8 f% J `
u5 D7 Z4 l& G/ p/ ?+ g, N莫扎特单独花了很多时间来想他的下一个曲谱,尽管如此,他依然需要与他人合作——也就是他指挥的乐师。同样,最成功的开发人员绝对不是一个纯内向的人:他们需要与最终用户、经理和用户体验设计师等人员合作。 |
|