进入正题:我们这是要干什么?
做这本特刊的起因是《彭博商业周刊》的编辑来问我,“你能不能告诉我,代码是什么东西?”“不能,”我说,“首先我数学不好。我是程序员没错,但我是美国东海岸程序员,不是湾区那种正儿八经的系统平台人士。”我是将近20年前开始编程的,最初通过Oraperl学习,那是一种Perl语言的特别版,针对甲骨文数据库做了改动。搞编程工作才一个月,我就弄坏了3万个《梦幻篮球》玩家的账号。他们可没少发投诉信。从此我决心要提高自己。
就是说,我并非天生是做这一行的料。我爱电脑,但从来就没法理解它们。话虽如此,20年来我不断把信息硬塞进这颗抗拒代码的大脑,因此已经积累了足够的知识,打破了对电脑的神秘感。我现在可以毫不脸红地跟亚马逊(Amazon.com)或微软(Microsoft)的人聊他们的工作。跟谷歌(Google)或苹果(Apple)的人聊也没问题,不过他们一般不会“下凡”。
我最熟悉的领域是万维网(World Wide Web),我用过Java、JavaScript、Python、Perl、PHP、Clojure和XSLT等语言编程谋生,但是Web编程只是软件开发世界的一小部分。据研究机构IDC的统计,这个星球上有1100万名职业软件开发者(另有700万名爱好者)。这大概跟洛杉矶都市区的人口相当。想象一下整个洛杉矶全是程序员。东好莱坞是Mac程序员的地盘,西洛杉矶是做移动的,比佛利山是财会程序员,整个橘县全是Windows人。
另外还有很多街区:有些人是给比你大拇指还小的嵌入式系统写代码的。有些人是给电视机写程序的。世间万物都有专门的程序员。他们都有各自不同的文化和部族传统,进而决定着他们的工作习惯。如果你跟我说,有个系统管理员去报班学习抛球杂耍了,我不会觉得意外,而且我觉得产品经理完全可以去学空中飞人杂技。我见过信息架构师把所有朋友做成一张电子表格,根据他们跟自己的交情进行排名。安全研究专家个个爱派对。
我的意思是,我就是这1800万中的一分子。所以此文的出发点是:我,作为芸芸众程序员中的一员,来谈谈我眼中的软件开发。代码一直是我生活,也是你生活的一部分。我们该对它的原理有所了解了。每个月都会出现一些新事物,给你带来前所未有的便利,这些新事物会导致新的混乱,建立新的秩序。我的数学技能这辈子不可能有飞跃了,但我爱这份工作。代码每个月都给世界带来一些变化,有的饶有趣味,有的美妙绝伦,有的令人不安。
电脑就是一台好处多多的钟。两者的运转原理都一样,做二年级算术题,一次做一道。嘀嗒,取一个数字,放到一号盒子里。嘀嗒,再取一个数字,放到二号盒子里。嘀嗒,对这两个数字进行运算(加法或减法),把结果放到一号盒子里。嘀嗒,检查结果是否为零,如果是,去另一个盒子,执行另一套指令。
一个电脑能做的运算,其实你用纸和笔都能算出来;只是你不能以每秒几十亿次的速度去算。这几十亿次的小运算加起来,可以让手机发出“嘟嘟”声,让电梯升降,也可以让导弹改变方向。这种原始的极速让它可以同时进行多项手工操作,一个戏法套着一个戏法。提取光盘上反射的许多道光脉冲,用某种数学方法把它们解开,把解压后得到的脉冲拷贝到一些内存单元里——然后读取这些单元的信息,把光画到屏幕上。数百万道脉冲,每秒画60次。这样就可以让那帮乡巴佬以为自己在看电影了。
苹果一直在造电脑;微软以前只做软件(偶尔做些鼠标和键盘之类的周边硬件),现在也有Xbox游戏机、Surface平板和Lumia手机等硬件;Facebook会在巨型数据中心里用自己组装的电脑。
很多东西都已经变成了电脑,或者将变成电脑。包括手表、摄像机、空调、出纳机、马桶、玩具、飞机和电影放映机。三星(SAMSUNG)在做长得像电视机的电脑,特斯拉(Tesla)在做有轮子和引擎的电脑。有的东西还不是电脑——比如牙线、手电筒——但总有一天也会沦陷。
实际上,当你在Photoshop里批处理1000张图片,或者在Excel里计算数据总和的时候,你就是在编程了,至少是沾点边。电脑用得太多——也就是说使用量达到了某个水平——你就会被它改变。我做过各种梦,Photoshop梦、Visio梦、电子表格梦、Web浏览器梦。梦境还是灵活可变的,可以排序和重构。我做过编程梦,在屏幕上把文字挪来挪去。
用电脑可以做出很美妙的事,但你得明白它们的局限。它们不是万能的,完全没有意识。它们很快,但有些部位——处理器、内存——比别的部位——比如硬盘或网络连接——要更快。电脑能有今天这个威力无穷的形象,是无数程序员和营销人士辛勤工作的结果。
英国艺术家威廉·莫里斯(William Morris)曾经在上一个世纪之交说过,没有材料的抵抗就没有艺术。电脑以及各种周边设备就是材料。代码就是艺术。