代码整洁之道:程序员的职业素养
上QQ阅读APP看书,第一时间看更新

你选了这本书,那么我不妨认为你是一名软件工程师。很好,我也是。既然如此,我得和你谈谈,我为什么会读这本书。

事情是这样的:不久以前,在不远的地方。来,背景、灯光、摄像、演员,一切就绪,那我就开讲了……

几年前,我在一家中等规模的公司工作,公司销售的是政府严格管制的产品。这类公司的样子你肯定想象得出:办公场所位于一幢三层小楼里,我们坐的是格子间,总监级以上人物则可以拥有私人办公室;把相关人员召集到会议室里开个会,可能得花一周左右的时间。

我们所在的市场竞争非常激烈。这时,政府放开了一个新产品。

突然间我们拥有了一批全新的潜在客户,我们所要做的就是让他们购买我们的产品。这意味着必须在某个截止日期前向联邦政府提出申请,在另一个截止日期前通过评估审计,并在第三个截止日期前完成交付。

管理层一遍又一遍地向我们强调这些截止日期的重要性。如果延期一次,政府就会把我们列进当年的黑名单。如果客户们没有在第一时间和我们签约,他们无一例外会选择其他供应商。如果拿不到订单,我们就彻底出局了。

在这种环境下,有些人会抱怨,有些人则会说:“艰难困苦,玉汝于成。”

我那时是从开发部门晋升上来负责技术方面工作的项目经理。我的职责是确保网站按期上线,这样潜在客户便可以从网站上下载资料,其中最重要的资料是注册表单。负责业务方面的项目经理是我的搭档,我叫他Joe。Joe的工作职责是销售、做市场推广和分析非技术性需求。这位老兄平素也挺喜欢拿“艰难困苦,玉汝于成”这样的调调说事。

如果你在美国公司工作过,肯定知道指责、过失追究和工作厌恶症都是司空见惯的。不过在我们公司里,Joe和我有个十分有效的办法来解决这类问题。

我们这对搭档有点儿像蝙蝠侠与罗宾,任务就是要把事情搞定。我每天都会和技术团队会面;我们每一天都会调整计划,找到关键路径,扫除在关键路径上所有可能出现的障碍。如果有人需要什么软件,我们就去弄来。如果有人一边抱怨“天哪,我该吃午饭了”,一边说自己更“喜欢”配置防火墙,我们就会给他带午餐。如果有人想去搞定配置问题,但手上还有其他更重要的事项要去处理,Joe和我便会去找他的主管协调。

如果不行,就去找经理。

再不行,就去找总监。

总之,肯定会把事情搞定。

如果说我们常常大动肝火、踢翻椅子,以大吼大叫的方式来沟通,这可能有点儿夸张了,但我们确实使尽了浑身解数来搞定遇到的每件事情,还想出了一些新办法。让我一直自豪的是,我们并没有违背职业道德,没有为达目的不择手段。

我认为自己是团队的一员,而非凌驾于团队之上、只会中途插进去写一句SQL语句或做点儿结对编程写一两句代码的那种人。当时,我也是如此看待Joe的,认为他也是团队成员之一,而不是凌驾于团队上,置身事外。

后来我才明白,Joe自己并不是这么看的。对我来说,这是令人很郁闷的一天。

那是个星期五下午的一点钟,下周一一早,网站就要按计划上线了。

完工了。*DONE*。每个系统都已就绪,我们已经准备好了。我把整个技术团队召集在一起,召开最后一次Scrum会议,准备上线。与会的不只是技术团队,还有市场营销、产品负责人这些业务人员。

我们感到十分自豪。这真是个美妙的时刻。

这时,Joe进来了。

他大致是这样说的:“有些坏消息。法务还没准备好注册表单,因此网站还不能启用。”

这没什么大不了的。在整个项目过程中,我们时常受阻,不是因为这样的事就是因为那样的事,但是,对付这些障碍,我们的“蝙蝠侠与罗宾”这招却屡试不爽。我对此已有对策:“好的,伙计,我们再试试老办法。法务在三楼,对吧?”

气氛不太对头。

Joe并没有同意我的提议,而是反问:“Matt,你是什么意思?”

我说:“你知道的。我们的经典配合。我们现在谈论的就只是四个PDF文件,对不对?这些PDF文件已经准备好,就差法务批准下就可以了,是不是?我们只要在他们旁边盯牢他们,应该就可以把这件事情搞定的!”

Joe不同意,他回答说:“我们下周只需迟些时候上线网站就可以。没什么大不了的。”

你可能已经猜到了后续的交谈,大致像下面这样。

Matt:“但是为什么呢?他们只需要几个小时就可以搞定的。”

Joe:“几个小时可能不够。”

Matt:“但是他们整个周末都可以处理啊。时间很充裕。就这么办吧!”

Joe:“Matt,这些法务都是专业人士。我们不能逼迫他们,没理由要求他们为了我们这个小小的项目而牺牲个人时间。”

Matt:(暂停)“……Joe……那你对过去这四个月来我们对技术团队所做的事情又做何感想呢?”

Joe:“没错,但是这些法务可是专业人士。”

冷场。

深呼吸。

Joe刚才说什么来着?

那时,我认为把“专业人士”这个词用在技术人员身上最贴切不过。

但现在仔细回想一下,我对此已经不那么确定了。

让我们换一个视角,再来看看“蝙蝠侠与罗宾”技术。我认为我是在鼓励团队努力呈现他们的最佳状态,但我怀疑Joe是在和我们玩博弈,他暗地里认为技术人员是站在他的对立面的。想想看:不然又有什么必要到处巡视,在依赖别人做事的同时,又常常闹出踢翻椅子大动干戈这样的事呢?

为什么我们不能去询问团队成员项目什么时候可以完工,在获得确切回答之后就相信这个回答,也不必因此受煎熬?

当然可以,作为专业人士,我们确实应该做到这一点……但我们确实还做不到。Joe并不信任我们,只有对技术团队进行微观管理才能让他安心。而与此同时,出于某种原因,他确实能够信任法务团队,也并没有要对他们进行微观管理的想法。

这一切说明了什么问题?

法务团队肯定以某种方式展现了他们的专业精神,而技术团队尚未做到这点。

这些团队肯定以某种方式让Joe信服,他们并不需要保姆一直跟在身边,他们彼此间不是在玩博弈游戏,他们应该被视为值得敬重的合作伙伴。

不,我不认为这和那些挂在墙上的花哨证书,或是他们在学校里多待了些年头有什么关系。尽管这些年来,学校里可能已经开了不少社交培训课程,里面涉及不少与如何表现得更专业相关的内容。

自从多年前的那一天之后,我一直在想,技术人员需要如何改变才能被视为专业人士呢?

哦,我已经有了一些体会。我已经用博客记录了一些想法,也看了很多相关的内容,我设法以此改善自己的工作和生活状况,同时也能帮助其他人有所提升,但我还不知道有人在这方面有什么写作计划,把如何成为软件专业人士的全部秘诀和盘托出。

直到后来,有一天,我意外地获得审阅一本书的初稿的机会;这本书,正是你现在手中拿着的这本。

这本书将会由浅入深、详细讲解该如何展现自己,如何以专业人士的方式与人交流协作。没有陈词滥调,也非寻章摘句纸上谈兵之作,里面阐述的都是具体的行动方法和要诀。

其中的某些案例中,作者可谓用心良苦,字字诤言。

一些例子中有对话录和总结,甚至还针对别人“无视你”的情形专门提供了相关的行动建议。

嘿,看,Joe又来了,我们回到了早前那一幕。

Joe和我,我们又回到BigCo,把那个网站大项目重新做一次。

只不过这次,请想象一下,这次的做法有一点点不同。

这次,技术人员不再找借口拖延,而是勇担重任;不再推卸估算工作或置身事外让其他人来做计划(然后对计划抱怨不休),而是真正做到了自组织,并做出了郑重承诺。

现在想象一下,大家能够真正紧密协作起来了。当程序员因为运维方面的问题受阻时,他们会打电话给系统管理员,之后,系统管理员就会马上着手清除障碍。

Joe也不必大动干戈才能推进解决14321号问题;他可以看到DBA正在勤奋工作,而不是在网上冲浪。同样,他从技术人员那里拿到的估算结果看起来非常一致,他不会感觉项目在技术人员那里的优先级是无足轻重的。以往所用的试图操控进度的所有招数手段,现在都派不上用场了,技术人员现在不会说“我们尽力而为吧”,而会代之以“这是我们的承诺;如果你想调整目标,请随时联系我们”。

过了一段时间,我想Joe就会认同技术团队同样也是专业人士。是的,确实如此。

那么,想要从技术人员晋升为专业人士,该经历哪些步骤呢?本书将为你悉数讲解。

祝你迈上职业生涯更高的一个台阶。我想你肯定会喜欢这本书的。

Matthew Heusser

软件过程博物学家