第1章 引言

我被代码逼疯过——两次。

第一次,是我在大学一年级上的一门编程课。这是一门必修课,我就选了。结果这和我小时候看过无数次的电影场景完全是两码事。我并没有敲上几个简单命令,按下回车,然后就看到一个垃圾桶样的机器人和我说“你好”。

课堂上甚至连个垃圾桶机器人都没有,而全是一堆什么指针啊,内存分配啊,对象实例化之类的。我为了弄清楚这都是些什么玩意儿搞得焦头烂额。不过,有一件事是明摆着了——我根本不是编程的料。

我想成为一个艺术家,或者当个数学家。我想要有创造力还要能够精确——就像人们说的,左脑右脑一起上。编程似乎太偏向左半球了,可是我也想不出什么其他的职业道路,同时能够在两个世界施展。我迷茫了。

短短几年后,互联网的大潮彻底改变了编程的景象。编程突然就变得那么实际,那么触手可及,而且还和设计关系紧密。艺术和逻辑几乎被看做同样重要。第一次,我真的觉得能够享受这份工作,可以把我对于创造力和逻辑的热情都倾注到网络应用上。所以,虽然心怀忐忑,我又回来编程了。

讲句老实话,我回来完全是另有原因。在之前的两年里,我学习了其他很多学科,都似乎有太多太多的未解之谜。是去构思粒子物理里的大统一理论,还是去找最大的素数?毫无疑问,这些任务简直难到无法想象,让人望而生畏。我实在干不了这个。还有,那个讲存在主义的课也没能把事情说清楚。我是个年轻人,我想要的是答案,而不是越来越多的问题

编程。我曾经唯恐避之不及的那个科目,现在成了我的避风港。不管怎么说,计算机科学还是人搞出来的。所有的事情肯定都有个答案。我期待的职业生涯,应该能让我这种寻求答案的人大展宏图——你能把甘醇的代码变成顾客、同事和客户常在的笑脸。规则都已经定好了,我们只要做就是了。困难无非就是在代码里面而已,我当时是这么想的。

我第二次来做编程,才发现又上当了——显然,实际远不是这么回事。

谁是21世纪的程序员

就像我在接下来的十五年中发现的那样,隐士不适合搞编程。什么有个超级技术狂,躲在幽暗的地下室里,挥汗如雨几个月,然后拿出最终产品,石破天惊,尽享荣华。绝对不是这么回事。

现在,应用程序是主流。即我们为每一位用户做的那种。客户可能了解我们如何工作,也可能完全没什么概念。我们的交付周期有时候是按照白驹过隙的星期来算的,而不是按照月或者年算的。人可能突然一下子就觉得疲惫不堪,而拖延可能是最容易走的那条路。对于我们——当今的开发人员来说,软件生产中所涉及的障碍已经远远超出了开发环境。

我有个好朋友经常和我开玩笑。“你工作的时候到底都干了些啥?”她知道我是个程序员,但并不是很确定程序员具体都做些什么。她问我问题时的那种刻薄质问的口气,就像《上班一条虫》①里的那个办公室顾问Bob Slydell一样。

①《上班一条虫》(Office Space) 是1999年出品的一部美国电影。——译者注

我是这么和她说的:我是一个无认证但是超级有逻辑的心理学家、理疗师、机械工、外交官、商人和教师,我所在的行业,迄今仍然每时每天都有着新的诠释。

这就是我对当今的程序员能够给出的最简洁的定义了。

吸取第一手教训

我叫Ka Wai Cheung。我是个程序员、设计师,还是芝加哥We Are Mammoth②(我们是猛犸)公司的创始合伙人。我们为各行各业的客户制作应用软件,也制作我们自有的一些基于网页的软件。后面会再谈到这一点。

②我们的网站是 http://www.wearemammoth.com,我们的博客网址是http://blog.wearemammoth.com。

这本书集合了我自己在行业里总结的第一手的教训、体会和走过的弯路。对于编程老手来说,你可能会发现我写的某些轶事自己也经历过。我们可以一起大笑、欢呼或是流泪。对于刚刚开始征程的菜鸟来说,希望这本书能够为你进入行业的头几年助上一臂之力。

过去十五年中,我得到的教训数不胜数。下面仅举几个这本书里谈到的话题:

  • 为什么软件行业中许多传统的开发流程和职责分配已经过时了,以及如何找出这些问题
  • 为什么要对消闲项目说“不”,为什么开放的时间表对生产力至关重要
  • 协作的工作环境如何大幅提高我们的效率,又如何大大降低我们的效率
  • 如何让代码生成成为开发流程中自然而然的一部分,以及它除了让生成代码更快还有什么好处
  • 如何更好地与不能面对面交流的客户打交道,以及如何面对不管软件做了什么新改动都会大发雷霆的客户
  • 为什么大幅加薪和“员工是我们最宝贵的财富”这句古老的口号并不意味着更好的技术工作
  • 如何认识到软件本身已经太过复杂了
  • 如何成为更好的老师,让我们能够把知识在程序员中一代代传下去

这本书写的是我们自己

这本书是写给各种各样的程序员的。不过,它和代码本身关系不大。不管你用的是C#、Ruby、Python、PHP、Java、JavaScript抑或是ActionScript,都没什么要紧的。也无论你是在搞数据库,写服务器端代码,还是做界面脚本,都无所谓。这本书讲的是在标识符和对象这个层面之外,专业程序员的方方面面。

这倒也不是说我们就把编程弃之一旁,会有些地方谈到代码。不过,在谈到代码的时候,我们会用一种不那么技术化的全局眼光来看。我们不会一下子给你列出一堆什么最佳实践或者设计模式之类的。这些东西有很多别的书都讲得很好了,我们只会适时提到一些。

这本书讲的是真正的、现代的程序员是怎样让我们的行业欣欣向荣的。我们开始吧。

目录