我编程,我快乐(The Passionate Programmer)

Table of Contents

https://book.douban.com/subject/4923179/

笔记本导出 我编程,我快乐:程序员职业规划之道(图灵图书) 福勒(Fowler.C.)

1 第1章 选择市场

但是,旧的系统不是灭亡,而是被取代。在新旧交替的过程中,旧的系统需要与新系统对话。必须有人知道如何将新系统与旧系统融合,反之亦然。但是一般来说,新一代的程序员和那些即将退休的老程序员都不知道或者很想知道如何才能将两代系统的特点很好地融合起来。所以,这就需要精明的技术人员来充当“技术收容所”的角色——帮助旧系统舒服且有尊严地消失。这项工作的重要性是绝对不能被低估的。就像大多数人在沉船之前会跳海一样,那些老的程序员要么就干脆退休,要么就向另一技术领域跨一步。作为一项仍然重要的技术的最后支持者,你当然是权威。但这也是极具风险的,一旦这个技术彻底退出游戏,那你就成了一种根本不存在的技术的专家了。但是,如果你行动得够快,还可以选择下一个正在衰退的系统,然后再来一遍。

从供求规律中,我们可以学到重要的一点——需求的增长会加剧价格的竞争。如果只想做稳定可靠的工作,并且跟随着工作发展,那么你就会卷入与国外开发人员的价格竞争中,因为你的技术决定了你只能进入平衡的外包市场。如果在主流技术市场中竞争,你就必须在更高层面上竞争,否则,你就要去发现市场上的不平衡,找到外包公司无能为力的工作。这两种情况,你都必须找到工作的动力,提高自身的技术和灵敏度来应对一切变化。

现在的软件开发界, Java和. NET大行其道。如果你会这两门技术,那你就能在使用这两项技术的公司找到工作。选择商业领域也是同样的道理。在选择从事哪个行业的时候,你应该像选择掌握哪门技术时一样谨慎。鉴于行业选择是十分重要的,那么选择在哪个公司、哪个领域工作对你来说也是重要的。如果你还没有仔细考虑过这个问题,那现在开始思考吧。机遇每天都在流逝。就像利息马上就涨了,但你却把钱存在了一个低利率的死期账户里。把自身的发展限制在一个静止不前的行业里,可不是什么好的投资选择。

作乐手的时候,我养成了寻找最好的乐手与之一起演奏的习惯。进入 IT这行后,这种习惯自然而然地延续了下来。我下意识地去寻找最棒的 IT人士,并与他们一起工作。显然,真理是禁得起考验的。做编程团队里最差的程序员和做乐队里最差的乐手产生的效果是一样的。你会发现自己变得出奇地睿智。你写的东西,和你的谈吐都会变得越来越有智慧。你编写的程序和设计会越来越高雅优美。你会越来越有创造力,难题也迎刃而解。

由于他们很优秀,所以有资格提出条件。可惜,我们给出的薪酬有限,不足以吸引他们。大都数人都选择留在原来的公司或者继续寻找工作。尽管没能留住他们,但我们学到了宝贵的招聘经验:比起那些经验单一的候选人,我们更倾向于那些具有丰富经验的候选人。我认为优秀的程序员之所以寻找变化和多样性的工作,是因为他们喜欢学习新东西,或者是因为他们很清楚要想成为更加成熟、更加全面的程序员,就必须去学习新的技术、在新的环境下工作,获取新的经验。我认为这两方面因素都奏效。现在我仍然使用这个技巧来招聘程序员。

有句话是“什么都懂点,但什么都不专”,一般来说,这句话是贬义的,是说这个人没有专注于某一项领域,并深入学习,成为这方面的专家。但是,当你的购物网站“提交订单”出了故障,每个小时你都会损失上百个订单时,那这个“什么都懂点,但什么都不专”的人可能既知道这个程序代码是怎么运行的,还会做些简单的 UNIX调试,分析 RDBMS规范中潜在的性能瓶颈,并能检查网络路由器配置看是否存在某些隐蔽的问题,更重要的是,找出这些问题后,这个人可以很快做出架构和设计决定,纠正代码,部署一个新的系统。这样看来,机械化生产模式看起来就非常奇怪,而且具有很多的缺陷。

成为通才就是说让你不要只专注于一种技术。在工作中,有很多方法可以让我们扮演多种角色。为了使成为通才这个概念形象化,我们可以把 IT职业分解成几个独立的部分。我想到了五个,但肯定还有更多,就看你是如何划分了:职业阶梯的各层平台和操作系统代码和数据系统和应用业务和 IT

下一个要说的是平台和操作系统。现在如果一个做 UNIX的人拒绝做 Windows,那就太不实际了。同样,做. NET的也不可能不做 J2EE,任何基础平台都是这样。要想在这行站稳脚,就必须做个多面手。任何人都有自己喜欢的技术,但是我们不能太理想化,自己喜欢什么就做什么并不实际。现状是我们要成为某一项技术的专家,同时还应该再擅长几种别的技术。技术平台只是一种工具,你的技术必须要高于它。如果我们想雇一个只做 Windows的人,那我们会去国外找。如果我们想找个真正了解 Windows和 UNIX开发,又能帮助我们把这两者结合起来的人,我们会在国内寻找。这就是团队精神的本质。

那么,在软件界,什么样的人才能称得上是专业人士呢?我在招聘的时候找遍了每一个角落,寻找真正深刻了解 Java编程和部署环境的人。我想要寻找的人是已经处理过我们工作中可能遇到的 80%的问题,并且拥有足够的知识来应付另外还未出现的 20%的问题。我需要的人是不仅可以处理高水平的抽象,同时应该了解那些实现高端抽象的低端细节。我需要那些可以解决部署问题的人,或者如果他们解决不了,至少应该知道找谁来帮忙的人。

2 第2章 在产品上投资

我记得当我还是一个年轻的程序员时,参加一个员工会议。我呆滞地盯着一位公司的高管,他向我们展示着一组又一组的数据图表。我永远也不会直接与这位高管共事,他所展示的数据与我完全没有关系。我低声嘀咕着“我就想回到办公桌前,完成我手头上的应用程序功能。”我的团队成员们坐在一起,就像是长途旅行车上局促不安的孩子。我们没人关心会议内容,根本不知道为什么叫我们来参加这个会议。我们责怪这个无能的经理召开这个会议,浪费我们的时间。现在回想起来,我才知道我们当时是多么无知。我们来这个公司工作,目的就是为它赚钱或者省钱,但我们根本就不懂这行是怎么赚钱的。更糟糕的是,我们根本就不认为这是我们应该知道的知识。作为程序员和系统管理员,我们认为自己正在做的工作就是我们应该做的。但是,如果连这行是怎么赚钱的都不知道,又怎么能创造性地帮助公司赚取利润呢?

最后,就像在爵士乐这个行业里一样,你不仅建立了对你良师的依赖和责任,反过来也一样。当我帮助某人时,我就是在这个人的成功上投资。在他的职业道路上,我向我认为对的方向轻轻地推了他一把;如果这个人沿着这条路走取得了成功,那这也是我的成功。这样就激励了老师帮助他的学生取得成功。通常,经验丰富的成功人士都会受到一些重要人物的尊重。这个良师就成了你与这个人际关系网之间的桥梁。这种桥梁作用是不能被小看的。毕竟,有句老话是“有本事不如认对人。”这种师徒关系的形式不重要。不需要特别清楚地要求某人成为自己的老师(当然你要这么做也不是坏事)。事实上,你的导师可能并不知道他在扮演着这个角色。重要的是你要有可以信赖钦佩的人,他可以帮助你做出职业导向,帮助你磨练技术。

你不应该低估帮助别人的感觉——那感觉棒极了!如果你能随时想着别人的利益,那这就是你在用你的技术来帮助别人。当今的经济环境很不稳定,帮助别人这项工作是不会使你下岗的,而且这份工作带给你的收入是不会随着通货膨胀而贬值的。寻找学生的方法不是你声称自己是权威,而是使自己具备真才实学并且有耐心愿意与别人分享你的知识。如果你并不是某方面的绝对权威,也不要惊慌。有时候你只需要具备某方面的经验,然后去帮助那些比你经验少的人。想想看自己有没有这样的机会去帮助别人。

3 第3章 执行

根据帕金森定律:“工作会自动膨胀到占满所有可用的时间。”可悲的是,即使你不想这样,你还是会掉入陷阱,如果这些工作是你根本就不想做的,这种情况则会更明显。就比如说这个周末进行的编程比赛,时间非常紧迫,所以你也就没有机会拖延时间。没时间让你熬着迟迟不做出决定,所以你也就不会拖着时间不做决定。你无法躲过这无聊的工作,你知道你必须得尽全力第一时间完成工作,所以你也就没时间觉得这工作无聊了。帕金森定律是一种经验观察——不是一种无法逃脱的宿命。即使是人为制造的一种紧迫感,也足够使你的效率提高两三倍了。尝试一下,你会体会到的。你可以更快地完成工作。现在就去试验,不要总是只动嘴,不动手。

所以,我们需要与公司的目标一致,也就是说,努力确保自己能够对公司的业绩有影响力,这么说完全没错。但是,说真的,以我们所掌握的信息,很多人都不知道我们应该如何做。只见树木,不见森林。或许这并不是我们的错误。或许我们对自身的要求太高了。或许想要直接对公司业绩造成影响就像是想把大海里的水煮沸,是不可能完成的任务。所以,我们需要一个更加独立的视角,把整片大海的海水分解成一个一个可以煮沸的小水坑。

你可能担心经理会把你的功劳据为己有,但别忘了你的职业发展前景把握在你经理的手中(至少,在你现在工作的公司中)。在大部分公司中,直接总管负责绩效考核、工资、奖金和升职。所以,你的功劳最终还是在你的经理那里折现了。

作为经理,我可以告诉你最棘手的事情就是有个总是想要往上爬的雇员。每次和他一起吃午饭,都会听他说又有谁升职了。这种人总会在办公室里散播点小道消息,死死盯着企业政治,就像对肥皂剧对白一样沉迷。他愤愤不平地完成每天的任务,无休止地抱怨领导部门的无能,总觉得要是自己来做领导工作,肯定能做得更好。还会认为领导们没有发现的他的潜质,是因为他们都太无能了。这种人认为许多任务根本就不配他来出手做。遇到这些工作的时候,他能躲就躲;实在躲不了的时候也是极不情愿(而且很慢)地去做。他对工作精挑细选,有时候会下意识地挑选那些自认为配得上自己的水平,并且能帮助他实现晋升目标的工作。

这样做一开始会很难。让你抛弃每天走向成功的动力,这听起来是一个不可能达到的目标,但一旦你尝试这么做了,就会发现它是非常实用的。专注于现在的工作,你就会享受日常工作中的每一个小成功:你工作干得很出色,当出现难题的时候,你就会被人当做专家一样请来解决这个问题。在一个具有凝聚力的团队中,你会成为不可或缺的一员。这种感觉都会让你感到喜悦。但如果你总是头脑不清醒,做白日梦,那就会错失这些成功的喜悦。你会一直在等待那个巨大的成功,却无视每天工作中的那些小成功,但其实正是这些小成功赋予你工作的价值。专注于现在的工作,不仅会让你更加快乐,也会让你身边的人更加快乐。你的同事、上司和客户都能感觉到。你的工作成绩会反映出你的态度。客观地来讲,放弃你想要成功的期望可以提高你的能力,让你走向成功。

在遭遇最艰难的系统问题和逾期仍未完成的任务时,这种兴奋的陶醉情绪使我保持清醒,工作非常有效率。为什么在没有压力的时候,我们就无法如此狂热地工作呢?在处理最无聊烦人的任务时,如果你也可以如此狂热地想要把它做好,那么你的工作表现会有多出色?

最后一个问题这样讲也许会更好,在处理最无聊烦人的工作时,如果你也可以如此狂热地想要把它做好,那么能为你的工作增添多少乐趣?当我们觉得有乐趣的时候,工作就能做得更好。相反,当我们对某个任务毫无兴趣的时候,我们就会觉得无聊,工作结果也就令人失望。

做维护工作还有一个不易被察觉的好处,维护工程师经常有机会和他的客户直接进行交流。这在现在很多项目团队的合约性工作环境下是很少见的。这样,作为维护工程师,会有更多的人认识你,你就有机会在业务上建立更广泛的支持者。你可以利用这个优势来更深入地了解业务的运作情况。比如你全权负责一个商业应用程序,你会经常与终端用户接触以解决他们的问题。这样,你不怎么费劲就可以慢慢像程序的使用者一样非常了解这个程序到底是用来做什么的。商业规则被转变为编码写进了应用程序逻辑中,商业人士往往读不到这些应用程序逻辑。很多时候只有维护工程师才是唯一懂得公司中某个特定商业过程是如何运作的。其他人都没有机会直接接触到这个权威的商业逻辑编码。

我们惊慌是因为丧失了判断力。出现问题的时候,要想不完全关注问题本身是很难的。某种程度上来说,关注问题本身是解决问题的好方法。但是,这通常会制造问题,不管你碰到的问题多小,看上去都会比它本身更严重。随着问题不断膨胀,压力就会越来越大,我们的大脑就不再运转了。

4 第4章 推销……不仅仅是迎合

事实上,对知识型工作者的能力以及他们的工作质量进行客观的评价是根本不可能的。还是不同意我的观点吗?那再想想你驳斥我的根据,看到漏洞了吧?因此,既然说公司(或者整个行业,职场或者任何地方)对你的评价是主观的,那就意味着对你做出的评价总是基于别人对你的感觉。你升职加薪的可能,甚至是公司决定是否再继续雇用你的决定因素完全取决于别人对你的感觉。主观上来讲,其他人依据个人喜好对你做出的评定,肯定不会出现两个相同的意见。不同的人有不同的喜好。有人喜欢严格的代码结构,有人喜欢松散自由的结构。有人喜欢通过邮件沟通,也有人喜欢电话沟通或者面对面地沟通。有些上司喜欢有上进心的雇员,也有的上司就希望员工表现得像个下级,上司说什么,就是什么。

这不能仅仅归结为个人喜好。人们的角色不同,与你的关系也不同,就会导致他们评价你时的侧重点也不同,而出发点是如何让你们的关系正常运作。如果我是项目经理,那比起你编写的源代码的质量,我会更看重你的沟通能力。如果我是你的同事,同为程序员,我会更看重你的天赋和创造力,而不是你跟进项目的能力。但是,如果我是你的上司,如果你没能做出什么成绩,那么对我来说你的天赋就没有半点意义。

很多人认为迎合别人的感觉是不体面的。但是,就像你所看到的,它是非常实用的。当你明确地了解其他人判断你的因素后,你就会更加明确如何可以让他们满意。对那些非技术层面的商业客户来说,他们不会对你面向对象的程序设计技巧留下深刻的印象。你可能是一个设计天才,但是如果你无法与他们进行良好地沟通,也无法按时完成工作,客户就会认为你非常差劲。这不是他们的错误,而是你的确差劲。感觉非常重要。公司是否继续雇用你,提升你或者让你常年留在同一岗位上,加薪还是减薪,这些都会受到别人对你的感觉的影响。你越早明白这个道理,并且能够控制别人对你的感觉,那你就能越快回到正轨上。

通过面对面地互动,我们不仅提高了工作效率,增进了沟通,还形成了更加紧密的人际关系。如果你没有见过某人,要想建立友谊就要花费很长时间。现在,互联网无处不在,不见面就能建立友谊也是比较普遍的,但在 15年前,这是不可能的。但通过电话、邮件和聊天工作效率比较低,通过这些方式建立人际关系的效率也不高。而且这种通过邮件和聊天软件的对话也不是很舒服(下一代人可能不会有这种感觉)。大多数情况下,这种远程工作环境中建立的关系都是以完成任务为中心的。通过有效、高带宽的交流建立的团队关系可以更快更好地生产软件。在大多数环境中,重要的项目决定都是在喝杯咖啡的时间和在闲聊的时候做出的。如果你是其中一员,优势也是显而易见的。当然对我们来说,最重要的是能够被别人看到。

把目光放得更远一些。不要把自己局限在某一特定公司中的程序员——毕竟,你不太可能永远在一个公司里工作——因此,要把自己当做是某一个行业的人员。你是一名手工业者或者是一名艺术家。除了你为公司人力资源部开发的开销报告系统,或者是你发现的公司问题追踪系统中的漏洞之外,你还有更多可以与人分享的东西。公司都想要雇用专家。列出一长串项目经历的简历当然是展示自己工作经验的好办法;不过,如果在面试前,面试官已经听说过你的名字了,那可没有比这更好的了。要是面试官读过你发表的文章或者撰写的图书,或者他们听过你的演讲,那就棒极了。如果你正想要开发某种技术,你难道不想雇用一个撰写过此类技术和方法的相关书籍的专家吗?

那以后,我在不同场合都碰到过这样的人,古典音乐乐手中、软件开发行业里,甚至是在一间小小的办公室里都有这样的人存在。 Chris将其称之为“建立关系”,这让我更加反感。但事实是,非常出色的人是不会介意有人想要认识他们的。人们喜欢被别人欣赏的感觉,而且他们也愿意谈论他们所热衷的话题。没错,他们是专业人士、大师、领军人物或者是著名的作者,但是他们首先是人,人是社会动物,喜欢与人交流。根据我的个人经验,我认为我们这些凡人和那些我们所仰慕的人之间最大的障碍就是我们自己的恐惧。与那些聪明、人际关系好、能教你东西或可以帮助你找到工作的人结识,是取得进步的最好的方法,但是我们却没有胆量尝试与他们结识。音乐家、美术家和其他艺术家通过结成联系紧密的团体,才能够保持出色,他们的艺术作品才得以流传。在社会和职业关系网中,权威就是“超节点”。创建这个关系脉络所需要的就是要少一些谦卑。

只是解释你的难处是不够的,你应该更深地探索管理人员这样做是由哪个商业因素造成的。久而久之,你会学到更多这个商业领域的知识,也会更好地分析、判断待解决的难题。这一能力再加上你的专业技术,就会使你从一个总是说“不”的人变成一个公司管理人员不可或缺的合作伙伴。

5 第5章 保持技术领先

更加可能发生的是,如果你对当前的技能非常满足,当下一个热门技术来临的时候,你可能会无视它的出现。 10年前,你可能会吃惊于带有垃圾收集的面向对象的程序语言会发展到如此之大,但是如果你细心观察了,是绝对可以看出迹象的。谁又能预测出 10年后的大事记会是什么呢?你必须要时刻细心留意。注意技术方面的新闻——不管是商业方面的还是纯技术方面的。 O’ Reilly and Associates公司的 Tim O’ Reilly ①曾说,要留意那些技术达人。技术达人是指那些总是站在技术最前端的人,至少在他们感兴趣的领域中他们总是走在尖端。通过我的观察, Tim的意思是说如果你能找到这类人,观察他们热衷于什么,那你就能够大致了解到什么技术将会成为热门,或者预测出两年后的热门是什么。这招非常灵。

职业也是一样。事实上你根本就不去观察注意。这就是问题所在了。每天你都看着相同的自己,一点变化也看不出来。你看起来和以前一样适应那个环境;你看起来和以前一样具有竞争力;你的技术看起来和以前一样处在时代尖端。但是,突然有一天你的工作(或者你所在的行业)不再适应你了。刚开始会有点不舒服,但是这其实已经是关键时刻了,你要不就赶快做出行动,要不就换个行业。

当然,猴子们可以放弃食物,获得自由。但是,猴子非常看重食物,看重到根本无法强迫自己放弃食物。他们会一直抓着那些米直到把米拉出来,丧失生命也不会放弃。基本上它们都会为了食物失去生命。 Pirisig讲述这个故事是为了阐述一个概念,他称之为价值僵固。当你过于坚信某事的价值时,就会无法客观地来评判它,这即是价值僵固。猴子过于看重米的价值,所以它们无法看清放弃米就能得到自由。猴子这样做看起来非常地傻,但是我们每个人都有自己的“米”。

在困难时期,我总是回想在大公司工作的日子。那时候,我被安置在办公室的格子间里,公司有着繁琐空洞的管理组织架构。在大公司里,一个聪明的员工可以什么都不做,却依然能在公司里生存下去。那时候对我们来说这是个笑话,但却也是事实。大多数情况下,如果项目没有完成,由于中间经手的管理组织架构和人过多,根本无法找到问题到底出在哪里。如果项目完成的时间比应该使用的时间长,是因为根本没人知道任何项目到底应该花费多长时间完成才是正确的,这也是因为繁琐的管理组织架构造成的。所以,如果有一天你真的累了,大公司允许你坐下来休息休息,上网冲浪或者早点下班回家,甚至“请个病假”。尽管我一直抱怨在大公司里工作多么多么糟糕,但是不得不说,在大公司工作确实也有它的好处。问题是,尽管公司的层层组织架构降低了运营风险,却也因此降低了工作效率。如果你可以隐藏在平庸的盾牌之后,就会丧失变得卓越的动力。即使是像我们这样的人,也无法抵挡 YouTube或者我们最爱的网络漫画 ①的诱惑力。

这样看来,如果你筋疲力尽,大公司是个不错的选择。但是如果你在为了成就卓越的自我而奋斗(你正是在这么做!),那么大公司可不是个正确的选择,就像如果你正在努力甩掉腰间的赘肉,那绝对不能去蛋糕店工作。解决方法是什么?学着独立!你有技术,并且是经过自己不断磨练的技术。你知道自己的价值是什么。成为一名独立承包人是最终考验的一部分。没有任何组织结构可以成为你的庇护。你要直接对付你薪水的人负责。你所做的任何一件事都直接反映在你的工作业绩中。如果你犯错误了,没有任何人和你一起承担责任。只有你自己,你的专业和你的执行能力。成为一名独立的承包商还会迫使你学习如何推销自己,同时在你专注的领域和技术中检验你的选择。在大公司里工作的时候,都是别人分配工作给你。但是当你独立承担工作的时候,就不能等着客户主动来找你。你必须要走出去,主动去找客户。一旦你找到了客户,你还必须要说服他们,让他们相信你的价值。