Preface
最近读了《我编程,我快乐》,里面有一些观点给我了不少启发,特别是一些职业规划的方面的内容。
不由得想到了《重构》这本书。第一次读《重构》,是在三年前,那时候我大一。虽然早已听闻这本书的大名,但是受限于自己只有少得可怜的编码经验,读了小几十页不到,觉得太过晦涩,就读不下去了。年初在百度实习期间,因为提交代码需要被同事review,开始有意识的思考怎么改进自己的代码,再次阅读了《重构》。这次阅读,让我后悔不已,一本好书被我错过了三年。说这一点,是考虑到或许因为我已经有了一些工作经历,所以读《我编程,我快乐》有很多共鸣、收获。
阅读的过程中,有的地方忘记做了记录。但我以后很可能也不会补充上了,所以就将记录了的部分,放在本文。
记录
如果生活的大部分时间都被工作占据着,那么热爱工作就是热爱生活。 比起那些枯燥的简单任务,充满挑战、有驱动力、有回报的工作更能让你有动力在清晨从温暖的被窝里爬起来。工作做得好意味着你在充分发挥着才能。相反,如果工作做得不好,就证明你大部分时间都只能在懊悔,懊悔自己碌碌无为。
我们最终的目标是追求快乐。一旦满足生存的基本需求,人们就会转而去追求快乐。然而,我们的行动往往与此目标相悖。这是因为人们往往纠缠于做某事的方法,而忘记了最终的目的。
或许我不会快乐。但可以肯定的是,当我们以追求快乐为核心目标,并且以此作为首要的推动手段时,那在追求目标的过程中,就会更正确地做出每一步的选择。更高的薪水或许是值得追求的,或许能带给你快乐。 但是如果你把目光放远一些,你就会发现自己为了追求更高的薪水,或许就会失去了快乐。这听起来有些荒谬,但是我经历过,你也一样可能会经历
很多人总是忽略自己的计划,一味地跟随别人的计划。为了有别于他人,你应该停下来仔细审视自己的职业。不要去跟在别人的计划后面跑,你应该按着自己的计划发展。
所以我认识到人们会取得很大的进步或者退步,仅仅是因为与他们合作的人不同了。与一个团队合作的时间长了,会对自身的能力产生持久的影响
作乐手的时候,我养成了寻找最好的乐手与之一起演奏的习惯。进入IT这行后,这种习惯自然而然地延续了下来。我下意识地去寻找最棒的IT人士,并与他们一起工作。显然,真理是禁得起考验的。
做编程团队里最差的程序员和做乐队里最差的乐手产生的效果是一样的。你会发现自己变得出奇地睿智。你写的东西,和你的谈吐都会变得越来越有智慧。你编写的程序和设计会越来越高雅优美。你会越来越有创造力,难题也迎刃而解。
一名良师最首要也是最重要的任务就是做一个榜样。 直到亲眼见识到某人突破你所熟悉的极限时,你才知道什么才是一切皆有可能。 榜样的作用就是定义何为“好”。作为一名棋手,战胜家里人可能会让你感觉不错,但是如果你和一名参加大赛的选手较量,你就会知道原来下棋是一项如此深奥的游戏;当你和一名大师下棋时,你又会得到另一个启示。如果你只是一直和你家里人下棋并且战胜他们,你可能会觉得自己是个高手;没有榜样,就没有动力进步。
最后,就像在爵士乐这个行业里一样,你不仅建立了对你良师的依赖和责任,反过来也一样。当我帮助某人时,我就是在这个人的成功上投资。在他的职业道路上,我向我认为对的方向轻轻地推了他一把;如果这个人沿着这条路走取得了成功,那这也是我的成功。
这种师徒关系的形式不重要。不需要特别清楚地要求某人成为自己的老师(当然你要这么做也不是坏事)。事实上,你的导师可能并不知道他在扮演着这个角色。重要的是你要有可以信赖钦佩的人,他可以帮助你做出职业导向,帮助你磨练技术。
当你以一种批判的视角去看这些程序的时候,你就会开始培养自己的品味,就像你对音乐、艺术和文学的品味一样。不同的风格和技巧可能会使你觉得好笑、惊讶、气愤,或者像我所希望的,让你觉得有挑战。如果你是真的在认真学习它们,在设计范例碰到问题的时候,你会更具创造力。就像在艺术这行,你学习别人的习惯时,就会发展出自己独特的风格。
记住你是在为谁工作。你不仅要按工作的要求来调整自己,还应该使工作与你自己的需求一致。如果你还可以做到日事日毕,那么你的工作就会朝着好的方向发展了。
根据帕金森定律:“工作会自动膨胀 到占满所有可用的时间。”可悲的是,即使你不想这样,你还是会掉入陷阱,如果这些工作是你根本就不想做的,这种情况则会更明显。
你把所有的时间都花费在想要得到某种东西上,可是欲望同满足是对立的。
但如果你总是头脑不清醒,做白日梦,那就会错失这些成功的喜悦。 你会一直在等待那个巨大的成功,却无视每天工作中的那些小成功,但其实正是这些小成功赋予你工作的价值。
你可以把这个问题变得更具体一些, 就是问自己你又新增加了多少价值?可以问问你的上司,如何最好地把它量化。有 想把它量化的想法就是好的。你怎么做才能帮助公司节省开支?如何提高整个团队的工作效率? 考虑一下使用你们软件的终端客户。一旦你开始考虑这些问题,你会非常惊讶地发现你可以找到很多的机会。现在,就开始行动吧。把这个数字记在脑海里:2倍的薪水。 在达到这个目标前,千万不要放弃。
我说这些不是要给你泄气。我们都需要觉得自己做出了某些有意义的贡献。但是我们太沉迷于做自己,却忘了身边有很多人和自己一样。公司里的每个人都不自觉地沉迷于自我,大家也只是从自己这扇窗户来审视自己的工作。这样想:如果你明天离开公司,对公司造成的影响(平均来讲)与其他同事离开没什么区别,或者还不及他们离开的影响大。
我从这名信息主管那却得到了这样一条建议——永远不要高枕无忧,他一遍又一遍地重复这句话。 他说自己每天早上起来都会提醒自己要清楚地知道说不定哪天自己就被公司解雇了。他会说,可能就是今天。
谦逊不仅仅是我们需要发扬的一种美德。谦逊能让你更加清楚地审视自己的行为。
当你得到很多肯定的时候,你就会很少质疑自己的决定。
人一旦傲慢,就会产生盲点。越认为自己无可取代,就越有可能被别人取代(你在公司存在的意义也就越小)。
尽管我们都希望自己有某种特殊的天赋,但是基本上没有一名软件开发师是无与伦比、盖世无双、无可替代的。
最讽刺的是,项目工作其实就是维护。只要项目团队写下来第一行编码, 每个新增加的功能都是被嫁接在现有的代码基础之上。当然,比起维护工作, 编写代码涉及的改动相对少,但是基本内容都是一样的,都是在已有代码的基础上增加新功能、修复错误。如果是一名已经完全掌握维护工作、并且致力于把维护工作做得更好的工程师,谁又能比他把这项工作完成得又快又好呢?
大多数的项目都是一项长期工作。人们不可能按冲刺的速度跑完整个马拉松。 增加工作时间,尽管在短期内大大增加工作成果,但是从长远来看,如果你为了多完成些工作每周加班加点工作80个小时,你可能会因此犯下大错误,但是修复这个错误的时间可能比加班的时间还要长得多。
你可以用看待金钱的方式来看待时间。当我还是个青年的时候,挣到的钱还没我现在浪费的多呢,但我还是非常开心。现在的我比小时候有钱得多, 花钱也就不再那么精打细算。但那时候,我也可以生存,有地方住、有车开,有东西吃。我现在也有这些东西,也没有过着奢侈的生活。很明显,当没有钱的时候,我的钱花得更加高效,最终结果都是一样的。
上午十点半,你会想反正别人下班回家之后我还得再加班几个小时,那不如现在就看一会儿最新的技术新闻吧。
当工作时间非常充裕的时候,工作的时间价值就会降低。如果有70个小时,那对你来说,每个小时的价值远比不上你只有40小时的情况。
8小时燃烧激情是一种让你提早进入仓促应考的状态,而不用喝着含有高咖啡因的可乐不眠不休。
作为脑力工作者,即使我们不坐在电脑前或是办公室里,也可以工作。 在和你的伴侣去吃饭的路上,或者你看电影的时候,都可以工作。你和工作如影随形。
好好规划你的工作时间。减少工作时间,你的收获会更多。当你离开工作一段时间后,才会更喜欢工作
如果你做的软件没有定期向你抱怨,你就不知道危险的故障隐藏在哪里。
带着防御性措施进行编程是很重要的
以下规则适用于解决技术、沟通或者项目管理中出现的错误
1.发现问题后第一时间提出,不要企图隐瞒错误。
2.接受批评。就算你可以找到一只替罪羊,也别动这个念头。即使这 不完全是你的问题,你也要承当责任然后继续工作。我们的目标是在最短的时间内解决 这个问题。
3.提供解决方法。
4.寻求帮助。说“是”是个上瘾却具有毁灭性的习惯。这是个坏习惯,却伪装成好习惯。
人们没有意识到说“是”并不总是正确的答案,“不”也不一定就是错误的答案。而我们都知道的确是这样的。毕竟,没人想得到错误的承诺。
经常说“是”的人,要么就是天才,要么就是在说谎。后者通常占多数
在适当地时候说“我不知道”也是很好的。“我不知道” 并不代表我不可靠。
但是现在回头看这些灾难,没有一个对我和我的职业发展产生长期并且明显的影响。所以,尽管在这些看上去是灾难的情况下我非常地惶恐、沮丧或者苦恼,但它们都不是真正的灾难。
我不得不承认在困难的时候不要惊慌这句话说起来比真正去做要简单得多。
我们惊慌是因为丧失了判断力。出现问题的时候,要想不完全关注问题本身是很难的。
从不做出承诺最容易导致一事无成。
一天或者一周的计划可以看成是战场上的短期战斗计划,让 30 天、60 天和 90 天的计划关注你想要实现的战略性目标上。
我刚开始编程的时候,大部分时间都花在失败上了:编写操作系统、文件系统、虚拟计算机、重新实现网络通信协议、解释程序和运行时编译程序的编译器。 这其中的大部分都没能正确运行,就算是能运行的,工作状况也不怎么样。当然,就算忽略技术层面的可行性,大多数工作从一开始就注定了要失败。我不知道仅有 1%的成功机率的新操作系统占有多大的比例,但是1%的成功率确实很小。
对我来说,做这些项目的编程才是最享受的。这些问题才是软件工程中最基本的问题。这些工作都是围绕如何在空间、速度、可靠性和复杂性之间寻找折中点,无需解决软件升级过渡或修补API的漏洞问题。
就像我通常做的,可能你沉浸在这些问题中,潜心钻研了几个月,却始终找不到解决方法。
抄写的功效是很容易就能被看出来的。抄写可以建立肌肉记忆。通过抄写你可以感觉原文的微妙之处和它的结构——如果只是粗略的的浏览,是无法发现这些细节的。
如果领导压根就不知道团队成员能够胜任什么工作,那他又怎么能开展工作呢?
就算你的产品非常优秀,史无前例,但是如果你不宣传它,那就没人会去购买。
不要认为这个公司雇佣了你,管理者就一定知道你的存在。而且,就算你上司知道你的名字,他对你的能力也是一无所知。
既然说公司(或者整个行业,职场或者任何地方)对你的评价是主观的,那就意味着对你做出的评价总是基于别人对你的感觉。你升职加薪的可能,甚至是公司决定是否再继续雇用你的决定因素完全取决于别人对你 的感觉。
当你明确地了解其他人判断你的因素后,你就会更加明确如何可以让他们满意。
你越早明白这个道理,并且能够控制别人对你的感觉,那你就能越快回到正轨上。
开始记录开发日记。每天写一点,记录你做了什么工作,解释你的 设计决定,检查棘手的技术和专业决策。时不时地回头阅读之前的日记,评论它们。通过你对之前日记的喜好,来调整你的新记录。
但是 Jack Welch 还是会转身问这名员工:“最近在做什么工 作?”然后会接着问:“这项工作的意义是什么?”(这才是真正刺痛员工的问题)。
这些人去上班,完成分配的任务,然后下班回家。他们留下的除了一连串的代码、文档和邮件,没有什么持久的影响
把目光放得更远一些。不要把自己局限在某一特定公司中的程序员—— 毕竟,你不太可能永远在一个公司里工作——因此,要把自己当做是某一个行业的人员。
你可能是最聪明的或者最快的,但是只具有某种特质是不够的,必须要做点什么。
仅仅做人群中最好的是不够的。要成为人们谈论的焦点
根据我的个人经验,我认为我们这些凡人和那些我们所仰慕的人之间最大的障碍就是我们自己的恐惧。与那些聪明、人际关系好、能教你东西或可以帮助你找到工作的人结识,是取得进步的最好的方法,但是我们却没有胆量尝试与他们结识。
但是,这行中也有一个令人沮丧的现实——我们辛辛苦苦学到的技术知识比一辆新的雪佛兰轿车贬值得速度还要快。今天热门的技术到明天就有可能成为过时的垃圾了。
你的事业越是成功,你就越有可能习惯企业的现有模式,这就会使你变得极度脆弱,抵挡不住提出新观点的人——即使是一个非常愚蠢的观点,都有可能使你成功的企业模式看上去非常陈旧,就像是你穿了一件又旧又破的外衣出现在迪斯科舞厅里。选择技术也是一样。
像J2EE这样的潮流看似永远不会过时,但是任何浪潮都是要不就消失,要不最终被后浪推到沙滩上
我的意思是,你掌握的知识越是主流,过时的危险也就越大。
必须要认识到,即使你现在处于当今潮流的尖端,也极有可能已经在下一个潮流之后了。
如果你的工作是编程,别把自己当成一名程序员。继续工作,但是不要满足于你的工作。永远不要把自己的身份定位于程序员,或者设计师, 或者测试员。其实,把自己与现在的工作过于紧密地联系起来已经不安全了(也从未安全过)。
有理想是好事,但不要对遥远的未来抱有太大的希望。如果你想要射中移动的物体,就不能瞄准这个物体本身,应该瞄准这个物体要移动到的位置。这个过程的路线不是一条直线,最好的情况是一条弧线,但大多数情况下它是一条曲线。
你的职业生涯也是一样的,最重要的部分不是晋升或者加薪,而是向这些发展方向努力工作的过程。或者,更重要的是,是你抛开这一切忘我工作的过程。
不要总是不停地问:“我们完成了吗?完成了吗?”重要的是你穿越这条道路的过程,而不是这条路的终点。
洗碟子是一项单调的工作,没人愿意做。软件开发师每天也要经历类似单调沉闷的工作,例如时间追踪和费用报告。下次再从事类似工作的时候, 不要焦急地想要赶快做完它,尝试在工作中关注任务本身。
更加可能发生的是,如果你对当前的技能非常满足,当下一个热门技术来临的时候,你可能会无视它的出现
O’Reilly and Associates 公司的 Tim O’Reilly曾说,要留意那些技术达人。技术达人是指那些总是站在技术最前端的人,至少在他们感兴趣的领域中他们总是走在尖端。
但是,突然有一天你的工作(或者你所在的行业)不再适应你了。刚开始会有点不舒服,但是这其实已经是关键时刻了,你要不就赶快做出行动, 要不就换个行业。
Pirisig 讲述这个故事是为了阐述一个概念,他称之为价值僵固。当你过于坚信某事的价值时,就会无法客观地来评判它,这即是价值僵固。猴子过于看重米的价值,所以它们无法看清放弃米就能得到自由。猴子这样做看起来非常地傻,但是我们每个人都有自己的“米”。
树立远大的目标,但是要在实现目标的道路上,根据情况不断进行更正
正是因为问题的复杂性,在重大的问题面前,我们很容易就失去了动力, 转而去关注那些容易衡量和解决的问题。这就是为什么我们经常延误了问题的解决时间,而这种拖延又导致了我们的内疚,这让我们感觉糟透了,结果 就是再继续拖延。
当我们逐渐地做出这些改变后,问题就迎刃而解了。重构一套解决方案 占用的不过是你喝杯咖啡或者和同事闲聊新闻的时间。一个小小的改变都会 起到推动的作用。一旦你做出了这些改变,你就会清楚地看到不同。
对于努力实现那些远大又有难度的目标,非常重要的一点就是不要总想着每天都要离最终目标近一些,而是应该想每天要比前一天做得更好。
如果你可以隐藏在平庸的盾牌之后,就会丧失变得卓越的动力。即 使是像我们这样的人,也无法抵挡 YouTube 或者我们最爱的网络漫画的诱惑力。