The Passionate Programmer Wo Bian Cheng Wo Kuai Le

by Chad Fowler 翻译:于梦瑄 整理:mitnk

前言:

如果生活的大部分时间都被工作占据着,那么热爱工作就是热爱生活。

尽管我不够格成为传统意义上的普通软件开发人员,但是我从乐器演奏者的工作经历中领悟到很重要的一点,使我最终跨过普通软件开发人员的这一步(其实,谁又满足于做一名普通的软件开发人员呢?)。想要找一份稳定安逸工作的音乐人成不了音乐家。音乐这行很残酷,压根也不可能安逸。能成为专业乐手的人都想成名。一名乐手要不就努力想成名,要不就根本别踏进这一行。

经常有人问我为什么是优秀的乐手的同时又是很棒的软件开发工程师。这绝对不是因为这两种工作调动的大脑功能一样。也不是因为它们都是追求细节和创造力的工作,而是因为一个渴望成功的人肯定要比那些只是单纯完成工作的人更有可能成功。即使我们不能成为Martin Fowler、Linus Torvalds那样的人,但确定高目标至少可以让我们不再平凡。

很多人总是忽略自己的计划,一味地跟随别人的计划。为了有别于他人,你应该停下来仔细审视自己的职业。不要去跟在别人的计划后面跑,你应该接着自己的计划发展。

软件是一门生意 作为软件开发人员,我们就是生意人。公司雇我们,绝不是因为他们爱我们。事实上,他们以前从没爱过我们,将来也不会。否则软件就不是一门生意了。做生意可不是说让我们每天有个地方去,有事干;做生意的目的就是盈利。要想在公司中成为佼佼者,就必须要懂得如何将自己融入这门生意,然后创造利润。

长期雇用一个人对公司来讲是一笔很大的开销。公司雇用你,是在你身上投资,而你要做的就是让公司的投资得到回报。要评定自身的表现,就要看你能给你的老板创造多少商业价值。

投资有许多方法。你可以把钱存进银行,但是利息的增长往往跟不上通货膨胀的速度。

既然外包公司的工作都是市场上需求较高的,那么你就应该关注那些特殊领域的技术。这样或许不能减轻竞争压力,但是竞争的重点会由价格转向能力——这正是你需要的。你无法在价格上与他们竞争,但是可以在能力上与之抗衡。

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

我认识到人们会取得很大的进步或者退步,仅仅是因为与他们合作的人不同了。与一个团队合作的时间长了,会对自身的能力产生持久的影响。作乐手的时候,我养成了寻找最好的乐手与之一起演奏的习惯。进入IT这行后,这种习惯自然而然地延续了下来。我下意识地去寻找最棒的IT人士,并与他们一起工作。显然,真理是禁得起考验的。

在音乐这行,要想得到别的乐手对你的真实评价,并不是难事。你优秀,那人家就会再次邀请你合作;你差劲,别人就会避免和你合作。比起你直接问起他们如何评价你,这种检验方法更能得到真实的反馈。

要从上百人中招聘出十几个,竟然发现几乎没有合适的,然后就去思考。最终加入SmallTalk关键字后,大大缩小了候选范围。符合条件的应聘者真正理解什么是面向对象的程序设计。他们认识到Java不是能解决任何问题的万应灵药。他们中的大多数人真正热爱编程!招聘团队就像发现了未经打磨的钻石,心里想,前两个星期你们都干什么去了。

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

除了可以激励你,使你更加热爱工作,更重要的是,接触这些边缘技术和方法能让你更有深度、更加优秀、更具智慧,以及更具创造力。如果你认为这样还不足以成为你学习新技术的原因,那或许你选错了职业。

在职业道路上,需要一些有目的性的冒险。别人恐惧征服了你。如果在工作中没有感到乐趣,那你就不可能出色地工作。

第1章 选择市场

你马上就要进行一次大的投资 也许并不是要投入大笔金钱,而是时间,是你的一生 大都数人对待工作的态度往往都是顺其自然 走一步看一步 正是让偶然来决定职业道路上的各种选择

  1. 稳定成熟的系统,还是未成熟的系统 在有目的地选择投资哪种技术和领域时 风险收益平衡是一个很重要的权衡因素

15年前,学会如何用COBOL编程是一项低风险的投资 那个时候,COBOL程序员的竞争很激烈,平均工资并不高

如果在那一时期你或许会发现Java的特别之处 你可能会预感到Java一定会火 投资越早,你就越有可能成为这个新技术潮流的领导者 如果你做事用心,恰到好处 那你在Java上的投资会给你带来可观的收益 也就是我们所说的高风险,高回报

当然也会有如果高风险,零回报的投资

选择是把双刃剑,决定权还是在你手里

  1. 供应和需求 从供求规律中,我们可以学到重要的一点: 需求的增长会加剧价格的竞争

如果只想做稳定可靠的工作 并且跟随着工作发展 那么你就会卷入与国外开发人员的价格竞争中 因为你的技术决定了你只能进入平衡的外包市场

如果在主流技术市场中竞争 你就必须在更高层面上竞争

  1. 只会编程是不够的 只思考在哪种技术上投资是不够的 毕竟,技术只是一种商品 如果你想站稳脚跟 必须要深入了解你所处的领域

事实上,软件工程师不能只会开发软件 应该要成为这个业务领域的专家

  1. 做团队中最差的 找一个团队,让自己成为"最差"的 不需要立刻调换工作 你可以试着找一个志愿者项目 通过与这个项目中其他程序员的合作 提高自身能力

  2. 在思维上投资 《在印度招聘程序员的故事》 学习一种新的编程语言

除了可以激励你,使你更加热爱工作 更重要的是,接触这些边缘技术和方法能让你 更有深度、更加优秀、更具智慧,以及更具创造力

如果你认为这样还不足以成为你学习新技术的原因 那或许你选错了职业

  1. 不成听从父母的

我们的文化要求我们听从父母的建议 但在我们这个行业,这条真理是行不通的 父母总不希望儿女去冒险 所以他们并不期望儿女有一个多么卓越的职业 只要差不多就行了

想着如何避免失败绝对不是取得成功的方法! 成功是要冒险的!

在上一代人选择职业的时候 乐趣绝对不是一个决定因素 但是后来我们认识到,如果工作没有乐趣 那我们就没有动力去做好它

作为软件开发人员,你看到的角度越多 攻克的技术难题越多 就意味着你越有足够的能力来面对艰难项目 对一个程序员来说,只在一个公司工作 加强单一业务技能,会局限职业发展。 "铁饭碗"的时代已经不复存在了

等我老了,驾鹤西游之前,回想过去 我希望我会说“上帝,这辈子真是险象环生啊!” 而不是说“嗯,这辈子过得还算稳当。”

  1. 做一名通才 如果装系统,如果重启IIS

  2. 成为一名专家 “仅仅使用Java,如何编程一个程序使Java虚拟机崩溃?”

  3. 切忌孤注一掷 “你的职业规划是什么?你将来想要成为什么样的人?” “我想成为一名J2EE架构师。”

J2EE只是一门特定技术,并是由一家公司创造的。 尽管投资在一项技术上不是明智的选择,但是如果你必须这么做,那么别选择商业性质的,考虑一下开源的。

“任那些厂商来去自由吧——我知道如何设计一个系统。”

  1. 热爱它,不然就离开它 如果你想在工作中做出成绩,就。。。混在这些接受过培训的专业人士中干嘛?毕竟,与我一起工作的人都是有高级计算机技术学位的人。而我,拿着个音乐专业的学位,却在这里滥竽充数。 几周后,真相渐渐浮出水面。那些和我一起工作的人,他们根本不知道自己在做什么!事实上,有些人居然还在看我如何工作,然后做笔记!

想想你读过的人物传记或者看过的那些关于伟人的纪录片,虽然这些人身处不同的领域,但是他们都有一个共同点——痴迷、热情。当然在工作能力上,天赋占了很大的比例。不是每个人都能成为莫扎特或者Coltrane。但是,我们大可以通过找到自己热爱的工作来摆脱平庸。

(做日志,早晨给工作的感受打分,1-10分,是不是一分钟也不想多睡 两周后检查,然后做计划,使明天得到10分,再过两周,复检。如果还是很低,或许是时候考虑做一次大的改变了。)

《做一名机会主义者》程序员和摄像师 James Dunhcan Davidson

第二章 在产品上投资

《The Ten-Day MBA》十天可以读完

直到亲眼见识某人突破你所熟悉的极限时,你才知道什么才是一切皆有可能。

系统支持的三件事:目录服务功能、习惯Unix变体和掌握一种脚本语言

[有本事不如认对人]

在软件开发这行,大家都知道软件开发师经常会对着宠物或者什么无生命的物体讲述如何解决一个问题。

Marin Fowler是谁?

当今的经济环境很不稳定,帮助别人这项工作是不会使你下岗的,而且这份工作带给你的收入是不会随着通货膨胀而贬值的。

  1. 练习练习再练习

  2. 让人们听到你的声音 建一个文本文件,列出一切可能的日志话题 不要局限在宏大的观点上 尝试那些10到20分钟就可以写出相关文章的小想法 当列表到10项时,就停止 随时保持这个文件的打开状态

每天,从这个列表找一个话题来撰写文章 不要过多思考,就是写一篇关于这个观点的文章 然后在网络日志中发表 在文章中加入其他网络日志中相关文章的链接 每天挑选话题时,可以向列表增加新的想法

三周后,挑选出你最喜欢的两篇文章 提交到类似digg和reddit这类由用户审查文章的网站上 如果你列表中还有未撰写的想法,就继续写。

  1. 创建自己的商标 用google搜索自己 根据前4项的搜索结果 别人会推断你是怎样的人 会根据你在论坛、邮件列表里看出你是不是个傻瓜

第五章 保持技术领先 研究、投资、执行、市场,然后重复 在任何一个环节花费过多时间 都会有突然间过时的危险

  1. 已经过时的技术 “你引以为傲的新技术已经过时了。” 你掌握的知识越主流,过时的危险就越大 时间就是一切,学习之前要先动动脑子 现在看起来不可能的事情,2年间会发生什么变化呢?

实践:每周至少2个小时研究尖端技术,并动手尝试 制作简单的应用程序

如果你的工作是编程,别把自己当成一名程序员。 继续工作,但是不要满足于你的工作 永远不要把自己的身份定位于程序员或者设计师或测试员 把自己与现在的工作过于紧密地联系起来已经不安全了(从未安全过)

如果你想要射中移动的物体,就不能瞄准物体本身 应该瞄准这个物体要移到的下个位置 (这个过程不是一个直线,最好情况是一个弧线,大多数情况是一条曲线)

尝试做一两天测试员,你会发现你工作的方式发生了改变。

  1. 没有终点的道路 社会有一个严重的问题,就是它是以上的为导向的社会,大到学习、职业发展的过程,小到开车旅行,人们关注的总是结果。我们过于关注事件的结果,却忘记了全局。

仔细考虑一个,在逻辑上我们应该要花时间关注的恰恰是结果的反面。基本上我们大把的时间都花在了做事情的过程中,而结果基本上不会占用时间。

所以,(对工作来说,相对于晋升或加薪),更重要的是抛开一切忘我工作的过程。

关注结果会让人们忘记应该做好过程。 所以不要不停地问:我们完成了吗?我们完成了多少?

在下次洗碟子时,不要只想着洗完它们。试着享受整个洗碟子的过程。不要关注洗完它们,而是要关注“洗”这个过程本身。

  1. 给自己做一份蓝图 除非你不想在这个行业干了,否则你就需要一份蓝图 这不仅可以帮助你一直处于正轨上不断向前发展 还能够帮助你纵观全局,告诉你应该要做什么

尽管学些不同的技术是绝对正确的——这会拓宽你的思路 但是,想想“你的技能包会向自己展示什么样的前途”这个想法也不错

  1. 要注意观察市场的变化 把钱投进变化莫测的股票市场然后置之不理是非常愚蠢的 就算你做足了研究,慎重地选择了要投资的股票 市场仍然有很强的不确定性

只投资不管理是行不通的 即使现在股票的价值在增长 但这不意味着明天它就不贬值

在知识上的投资也是如此 要留意那些技术达人

实践:开始尝试做技术达人 或者至少结识一位技术达人 与他建立紧密的联系

  1. 镜子里的胖子 我不知道自己长胖了还是长瘦了 是因为我天天都能看到自己

如果你每天看着相同的事情 也同样很难看出它的变化 除非是突然间的改变

作为软件开发师 没有磅称可以衡量你的市场适应能力或者你的技术 既然没有,你就必须找到衡量的标准 即便你有一个神奇的磅称 那前提也是你要使用它 要制定自我反省的时间表

  1. 南印度捉猴陷阱 价值僵固:当你过于坚信某事的价值时 就会无法客观地来评判它。

  2. 避免瀑布型职业计划 用敏捷开发来做

  3. 每天都有进步 减肥时,为什么坚持一星期的健身和健康饮食后 体重一点没变,所以开始放弃

但秘密就在于你改进了什么 而不是结果出现了

如果有一天你没能坚持 那明天你会有一个新的基线

  1. 独立 一个网络漫画网站 http://toothpastefordinner.com

评论家Sammy Larbi 建议一种独立的方法: 如果你现在在一家大公司工作 考虑换个小公司 如果你在一家老企业里工作 换个新成立的公司

在刚成立的小公司工作 可以一箭双雕: 一份全职业带薪工作和 直接对失败负责的挑战