【职场故事】极客(1)- 结对编程
文章来源: 亦缘2022-11-13 10:49:50

此篇取名极客,来源于英文的geek一词。相比于nerd(书呆子),geek的意义稍微正面一点。特别是IT行业兴起以来,人们对许多热爱并擅长计算机科学的人以极客称之,强化了极客一词中聪明,专业的意思,淡化了其不善言辞,不合群的意思。

这里来写一群这样的人。

那一年我因为家庭原因搬到一个城市,重新找工作。找着找着,同时来了两个Offer,一个是大公司A的合同工,一个是大学IT部门的正式工。两个职位工资差不多,但大学福利好很多,就毫不犹豫地选择了正式工。

在大学工作了一段时间,发现公司A在这个城市的影响力很大。如果碰到一个老中,说在IT行业工作,别人就会问:“在公司A工作吗?”回答不外乎这几种:(1)是的;(2)我以前在A工作过;(3)我不是,但我的先生/太太在A工作。公司A的福利非常好,本地一些博物馆的年费,旅游景点的门票,餐馆账单,健身房费用,公司A都有折扣。逢年过节,公司A会给员工家属组织活动。公司A的医疗保险也非常好。对有小孩的家庭,在公司A工作是有很多实惠和便利的。

要通过公司A正式工的面试不容易,有好几轮,哪一个环节出一点错,就被刷下来了。有些人面试弱一些,可以做合同工,一年半载地也许有机会转为正式工。还有些别的渠道,我不十分清楚。

摸清情况后,我有些后悔当初的选择。后来去公司A面试了一次正式工,失败了,需要过半年才能再面试。这期间认识了一些在公司A工作的朋友,才知道面试需要刷题。

这期间又面试了公司B。面试过程中得知B刚被公司A收购。虽然面试不出色,公司B还是给了Offer。工资只涨一点点,可见B对我不是很满意,大概有点“食之无味,弃之可惜”的味道。因为想着B被A收购了,B的员工迟早会成为A的员工,我就曲线救国,签下了Offer。

上班后,发现公司B的工作方式非常前卫,大部分组采用敏捷式(Agile)方式。那时候,敏捷式方式刚在IT行业推广起来。我们组更是采用其中难度颇高的结对编程(Pair programming)方法。

软件开发行业以前采用瀑布式(Waterfall)。软件组从用户那里取得对软件的要求,然后设计软件,开发,测试,移交。因为市场瞬息万变,软件从给出要求到移交的过程中,要求可能已经改变,导致编成的软件失去实际应用价值。

后来软件开发出现了一种新的方式,称为敏捷式(Agile),逐渐取代传统的瀑布式。敏捷式通过项目经理,不断从客户那里更新软件要求。软件组也响应需求变化作出调整。敏捷式软件开发一般采用周期制。周期可长可短。每个周期中,设计,开发,测试,演示,循环往复,逐渐完成一个个软件功能。

敏捷式软件开发有好几种方法,一般公司采用 Scrum。而我去的公司B的这个组,采用极限编程(Extreme Programming)这种方法。极限编程的一个特点是结对编程。

结对编程理论上是这样的:两个程序员面对同一台计算机一起编程, 一个人写代码(写手),而另一个人思考和检查代码(思考者)。严格意义上的结对编程,两个程序员一起编码四个小时。然后写手升为思考者,新加入的程序员成为写手。好像有研究,两个程序员一起编程若干时间达到最佳状态,然后状态开始下降,四个小时就要换对子了。

结对编程的好处有好几个。比如,新来的人容易上手,很快熟悉程序。程序在两个人的反复斟酌讨论中完成,因而程序质量高。程序员搭子达到最佳状态时,编程效率非常高。

实际工作中,结对编程往往会走样。一是两个人达到最佳状态时非常兴奋,但是脑子也很累,换了对子之后很难再达到最佳状态了。二是两个人的默契度。有些对子总是无法配合默契。三是人的趋利性。结对编程有利于资历浅的程序员迅速提升,但资历深的程序员受益不多,所以资历深的程序员喜欢找同等水平的搭子,四个小时后不会主动换对子。还有结对编程让个人的时间很不自由,除非有人监督,一般员工不愿主动结对。

我在别的公司很少看到结对编程。一般在两种情况下,程序员会短暂结对。一是让新程序员迅速上手,二是编一段很难的程序。

我的经理非常推崇结对编程,可以说痴迷到狂热。他一走出办公室,只要看到有人没结对,就会问为什么,驱使人结对编程。如果看到一对搭子很长时间结对编程,就要促使他们换对子。

经理还请来了敏捷式软件开发的创始人之一Martin Fowler到我们组,用了一周时间,一起编程,一起重构优化程序(refactory)。那段时间大家整日里就是结对,重构,重构,结对。组里像是上足了马达,拼了命地往前冲。

我到公司没多久,工作的方向是我以前从未接触过的,大家的编程水平也很高。因此结对编程时,我经常有力不从心的感觉。

本故事其他章节 -

【职场故事】极客(1)- 结对编程

【职场故事】极客(2)- 技术大牛

【职场故事】极客(3)- 怪客

【职场故事】极客(4)- 韦恩

【职场故事】极客(5)- 裁员