【我编程,我快乐】读书笔记

只会编程是不够的,在思维上投资,学习行业是如何运转的,练习,练习,再练习。


供应和需求

Web设计师行业的历史发展证明了一个众所周知的经济规律——供求规律。提到供求,大多数人都会想到一件商品的价值是多少,应该卖多少钱。如果市场上这种商品供大于求,价格就会下降;如果供小于求,那么价格就会上涨。

不要在价格上竞争,你承受不起。You can’t compete on price. In fact, you can’t afford to compete on price.

发现市场上的不平衡。Exploit market imbalances.

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

研究当今技术市场的需求。利用招聘广告和招聘网站找出哪些工作是高需求,哪些是低需求的。登陆外包公司的网站(如果你在这些公司工作,可以直接与员工交流),把这些公司的技术与你发现的高需求工作进行比较。记录下那些在国内市场中高需求且没有流到外包市场的技术。然后再将这些外包公司的技术与前沿科技相比较。密切关注外包公司还没有涉足的上述两类技术。思考它们需要多长时间才能为相应的市场提供服务。这个时间差就是市场不平衡的阶段。

只会编程是不够的

只思考在哪种技术上投资是不够的。毕竟,技术只是一种商品。你不可能只掌握一种编程语言,或者只能够操作某种系统,然后把生意交给老板打理。如果他们只想找个懂代码的机器人,那不如雇个外国廉价的程序员。如果你想站稳脚跟,必须要深入了解你所处的领域。事实上,软件工程师不能只会开发软件,应该要成为这个业务领域的专家

或许你只是一个程序员,但是如果你能用客户所处行业的专业语言与他们交流,那这就是一项非常重要的技能。就像如果与你工作的人都真正了解软件开发是怎么回事,你会不会觉得一切都会变得更加得心应手呢?你再也不用向他们解释为什么不能在Web应用程序中的一个页面上返回30 000条记录,或者解释为什么他们不能向开发服务器发送链接。你的客户也有同感。换位思考一下,如果你是客户,为你服务的程序员了解你的行业,不用什么都得由你来做决定,你也不用紧张担心哪个小细节会出问题,你会不会觉得工作起来更容易呢?你从事的行业也是这样。

仔细思考在哪个商业领域投入时间。Now is the time to think about business domains you invest your time in.

做团队中最差的

爵士乐的传奇人物,爵士乐吉他手Pat Metheny给年轻音乐演奏者提出了一条建议——“做乐队中最差的乐手。”

做乐队中最差的乐手。Be the worst guy in every band you’re in.

进入IT这行之前,我是一名专业爵士和蓝调布鲁斯萨克斯风演奏者。作为一名乐器演奏者,我很幸运地早早就学到了这个道理并且一直坚持这么做。做乐队中最差的乐手意味着你总是在与比你优秀的人一起演奏。

所以我认识到人们会取得很大的进步或者退步,仅仅是因为与他们合作的人不同了。与一个团队合作的时间长了,会对自身的能力产生持久的影响。

你身边的人会对你产生很大的影响,明智地选择你的圈子。The people around you affect your own performance. Choose your crowd wisely.

试图做一个团队里最差的人可以让你不再小看自己。可能你的能力应该是在甲等乐团演出,但你自己却认为自己属于乙等乐团,这都是因为你恐惧。清楚地知道自己不是最好的,就不会总担心被人发现你不是那么优秀。事实上,即使你在尝试做那个最差的,也并不意味着你就是最差的。

在思维上投资

比起那些经验单一的候选人,我们更倾向于那些具有丰富经验的候选人。我认为优秀的程序员之所以寻找变化和多样性的工作,是因为他们喜欢学习新东西,或者是因为他们很清楚要想成为更加成熟、更加全面的程序员,就必须去学习新的技术、在新的环境下工作,获取新的经验。

作为招聘经理,我认为判断你适合不适合一个职位的首要因素就是你是否对这行感兴趣。如果我知道你为了自身发展,或者更理想的是,你单纯因为兴趣而学习新的东西,我就会知道你热爱你的职业,把你的职业视为动力。当我问候选人有没有用过某种非主流的技术时,最不愿意听到的答案就是“没有人给我机会使用”。没有机会?从来也没有人主动给我提供过这种机会啊!机会是要自己争取的。

没人给过我机会……?要学会抓住机遇!I haven’t been given the opportunity…? Seize the opportunity!

不要听从父母

另外一个决定职业规划的因素是跳槽,父母也不会赞成这个观点。一个成熟的职业软件开发人员需要从各个角度了解这个行业:产品开发、IT支持、内部业务系统开发以及管理工作。作为软件开发人员,你看到的角度越多,攻克的技术难题越多,就意味着你越有足够的能力来面对艰难项目。对一个程序员来说,只在一个公司工作,加强单一业务技能,会局限职业发展。“铁饭碗”的时代已经不复存在了。以前,这种进入某个公司并为其服务终身的行为被看作是一种奉献。但现在这是一种障碍。如果你只在一个公司工作过,只看到了一种系统,那么当那些明智的经理决定是否要雇用你的时候,它就成为了一个不利因素。就我个人而言,比起那些只知道一种做事方法的人来说,我更愿意聘请在不同的环境中经历过成功与失败的人。

我曾经和一个朋友提起过想换个公司,他却说:“没准你下半辈子注定要在大公司工作。”上帝,不要啊!于是我马上找到了一份新的工作,离开了原来的公司。这也是我在软件界走向成功的标志性起点。我看到了以前从来没有见过的领域,我开始应对更难的问题,我得到的回报比以往任何时候都多。刚开始我确实有点害怕,但是当我改变了出于担心的保守职业规划后,我的事业和我的生活都变得更加美好了。

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

做一名通才

如果你想在这个行业站稳脚跟,那我建议你要成为通才。如果你害怕你的部门裁员,那你就该知道精简团队的时候,一个只会测试或者只会编码的人肯定会被裁掉的。如果你就是单纯地想要卓越,那更好,你要动动脑筋掌握大局。

通才很少,所以很珍贵。Generalists are rare… and, therefore, precious.

首先,你可以选择成为一名团队负责人、经理、技术人员,或者一名架构师、程序员、测试员。很多人都不明白能够适应和胜任不同角色的价值所在。例如,一名强大的团队领导者应该尽力成为多面手。现在国内的编程团队十分精简,团队领导应该既能领导团队做项目,又能在外包团队偷懒的时候,卷起袖子亲自修复紧急严重的漏洞。软件架构师也一样,他要是再能写一些代码,那可能会大幅度地提高整个项目的进程。当工作要跨越职业阶梯的等级时,人们不是不愿意去做,而是没有能力去做。程序员不会领导团队,团队领导人不懂编程。能够把两样做得都很好的人,太稀有了。

你的技术水平应该超越技术平台。Your skills should transcend technology platforms.

成为一名专家

很多人认为专攻某种技术就简单地意味着不知道其他技术。Too many of us seem to believe that specializing in something simply means not knowing about other things.

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

不管你使用的编程语言是不是依赖虚拟机,花点时间学习编写源文件。你敲打出来的代码是如何从可阅读的文本转变成可被计算机执行的命令的?编写你自己的编译程序又意味着什么?

当你输入或使用外部函数库时,它们是从哪里来的?输入一个外部函数库到底意味着什么?你的编译程序、操作系统或者虚拟机是如何将多个代码段连接起来,形成一个连贯系统的?

切忌孤注一掷

以特定技术厂商为中心的观点,缺乏远见。Vendor-centric views are typically myopic.

供应商的软件实施细节是秘密的,导致以特定技术厂商为中心的观点不能成立。你对某一个软件了解得再多,也会遇到专业服务障碍。

热爱它,不然就离开它

工作,因为你无法停止工作。Work because you couldn’t not work.

一门技术或者一个商业领域可能会使你感到兴奋;相反,或许是某一特定技术或者商业领域拖累了你。也许你更适合一个小团队或者大团队,而你处在不合适自己的组织里;或者是在挑选偏呆板和偏灵活的程序上出了差错。不管是什么原因,想想自己到底适合什么。短时间内你可能可以伪装,但是缺少热情总会影响你自己和你的工作。

但有一点我可以肯定,我是一个机会主义者。当某事引起了我的兴趣,让我感动兴奋,我会立刻奔向它,不惜一切努力使之成功。通常这都需要学习新的技术,开发新的潜能。有人会觉得学习新东西是缓慢费力的过程,但是我喜欢学习新事物。毕竟,新技术可以让你展开新的工作。我永远不会用自己的技术来定位自己,而是用我已经做过的和我将要做的事情来定位自己。技术只是一种做事的方法

学习钓鱼

要主动问,不要等着别人来告诉你!Don’t wait to be told.Ask!

如何与为什么?——在你读书或者工作的时候,想一想工作中你不完全懂的问题。你可以问自己这两个问题:它是如何工作的?为什么会发生这种情况?对这两个问题,你可能给不出答案,但是只要你问了,就会形成一种新的思维模式,也使你更加关注自己的工作环境。

学习行业是如何运转的

不管你在哪一个行业工作——制造业、医疗部门、公益机构或者教育系统都是一个行业。行业本身就是一门你必须要学习的知识。

我记得当我还是一个年轻的程序员时,参加一个员工会议。我呆滞地盯着一位公司的高管,他向我们展示着一组又一组的数据图表。我永远也不会直接与这位高管共事,他所展示的数据与我完全没有关系。我低声嘀咕着“我就想回到办公桌前,完成我手头上的应用程序功能。”我的团队成员们坐在一起,就像是长途旅行车上局促不安的孩子。我们没人关心会议内容,根本不知道为什么叫我们来参加这个会议。我们责怪这个无能的经理召开这个会议,浪费我们的时间。

只有了解了一个行业后,你才能创造性地有所建树。You can’t creatively help a business until you know how it works

现在回想起来,我才知道我们当时是多么无知。我们来这个公司工作,目的就是为它赚钱或者省钱,但我们根本就不懂这行是怎么赚钱的。更糟糕的是,我们根本就不认为这是我们应该知道的知识。作为程序员和系统管理员,我们认为自己正在做的工作就是我们应该做的。但是,如果连这行是怎么赚钱的都不知道,又怎么能创造性地帮助公司赚取利润呢?

  1. 通读一本基础商业教程,一本MBA教程是不错的选择。我推荐一本非常有用的书The Ten-Day
    MBA[Sil99]。你真的可以在10天内读完,占用不了多少时间。
  2. 找一个人带你到公司的财务部门看看,并请他们向你讲解财务状况(如果你的公司不介意与员工分享这些信息)。
  3. 听完财务状况讲解后,再向他们复述。
  4. 弄明白为什么“账本底线”要被称为“账本底线”。

寻找良师

可以依赖别人,但要确保这个人是靠得住的。It’s OK to depend on someone. Just make sure it’s the right person.

一名良师最首要也是最重要的任务就是做一个榜样。直到亲眼见识到某人突破你所熟悉的极限时,你才知道什么才是一切皆有可能。榜样的作用就是定义何为“好”。

良师还可以将你的学习过程形成体系。在上一章中,我们说过选择在哪种技术和行业领域中投资时,你会有很多的选择。有时候,太多的选择会让你不知所措。按常理说,前进总比静止不动要好得多。良师可以帮助你削减这些选择,避免你白费精力。

良师还是值得信任的朋友,他们可以观察并判断你做出的决定和取得的进步。如果你是一名程序员,你可以把你的代码拿给他们看询问他们的意见。如果你计划在公司或者本地用户组会议上做一次演示,你可以先在良师面前做一次演示,从他们那里得到回馈。良师是值得你信赖的人,你甚至可以问他们:“作为职业程序员来说,我与其他人有什么不同?”你知道他们不仅会帮你分析,还会帮助你取得进步。

指导自己——我们都希望有人主动来教我们,但事实是我们很难在自己周围找到这么个人。所以要学会自己做自己的良师。想想在你工作的领域中你最钦佩谁。大多数人在不同阶段都会有一个名单。这个人可能是工作中的同事,或者你很欣赏这个人做出的某项成果。列出这个榜样的10种特性,这些特性必须都是视他为榜样的理由。这些特性可能是某一特定的技术方面,比如技术广度或者某一特定领域的知识深度。或者是他们的某种人格魅力,比如他们是很好的团队协调者,或者他们的言辞总是具有吸引力。

做一名良师

要想真正学点东西,可以试试向别人传授这些知识。清楚知道自己是否对某一知识真正理解的最好的办法就是把你的理解讲给别人听,让他们明白。这个简单的方法是公认的帮助你理清思绪的灵丹妙药。在软件开发这行,大家都知道软件开发师经常会对着宠物或者什么无生命的物体讲述如何解决一个问题。

想要弄明白自己是不是真正懂得某一知识,那就把它讲给其他人听。To find out whether you really know something, try teaching it to someone else.

Marin Fowler曾经在班加罗尔的一次开发师讲座上说,当他想要真正学懂一些知识的时候,就把它们写出来。Marin Fowler是著名的软件开发师和作家。如果我们把他当成是一名作家,远程传授知识,那他就是这个行业中最负盛名、最有影响力的老师。

做导师不会下岗。Mentors tend not to get laid off.

不应该低估帮助别人的感觉——那感觉棒极了!如果你能随时想着别人的利益,那这就是你在用你的技术来帮助别人。当今的经济环境很不稳定,帮助别人这项工作是不会使你下岗的,而且这份工作带给你的收入是不会随着通货膨胀而贬值的

寻找学生的方法不是你声称自己是权威,而是使自己具备真才实学并且有耐心愿意与别人分享你的知识。如果你并不是某方面的绝对权威,也不要惊慌。有时候你只需要具备某方面的经验,然后去帮助那些比你经验少的人。想想看自己有没有这样的机会去帮助别人。

无需去建立一个正式的师生关系,就从帮助别人开始,好处会自然而然随之而来。

练习,练习,再练习

当你在练习的时候,演奏出来音乐或许总是难听的。如果你在练习的时候,总能演奏出悦耳的音符,那就证明你一直无法突破自己的极限。这就是练习的意义所在。运动也是一个道理。运动员在训练的时候总是将自己推到极限处,这样他们才能在比赛中突破自己的极限。他们让丑陋的东西都暴露在平时的练习中——而不是真正的比赛中。

在计算机这行,经常会有开发师突破自己取得进步。但是,很多时候都是因为他们本来就不胜任自己正在做的工作。我们这个行业习惯于在工作中练习

在极限处练习。Practice at your limits.

那对于我们软件开发师来说,这些基础练习又是什么呢?那些初级编程语言中,有没有你基本不怎么使用的?比如,你选择的编程语言支持正则表达吗?在很多的编程环境中,正则表达式非常强大但却很少被使用。大多数开发员即使可以用到它,也不去使用,因为他们的技术没达到那个水平。结果,创造出了很多不必要的字符串解析编码,并且不得不延续使用。

这条规则也同样适用于API和库。乐手们常说,对于技术,你要是没达到手到擒来的地步,那它们真能帮到你的时候你也想不起来它们。这就需要尝试深入研究,比如,在你选择的编程环境中,多线程编程是如何工作的。或者stream库、网络编程API,甚至是一切可用的处理集合和列表的工具。大部分现代编程语言都提供了丰富和强大的库,但是软件开发师们只学习了其中的一小部分子集。如果他们掌握了如何使用一整套工具,那么编程的效率就会提高很多。

作为软件开发师,视奏又是什么呢?是需求规格,还是设计?开源社区是找到用来练习的代码的绝佳场所。有没有哪个开源软件是你最喜欢的?你可以给它加个功能。挑选一个你想要用来练习的软件,浏览它的待办事项,给你自己规定时间来实现这个新的功能(或者至少决定要实现这个功能需要哪些步骤)。选择好功能之后,下载源代码然后开始开发。怎么知道要看哪里?有什么好方法在一组重要的代码中理出头绪?又要从哪里开始呢?

你可以经常进行这种练习,而且这种练习的周期不会持续很长。你并不一定要去实现这个功能,就把它当做是一个开始,练习真正的目的是以最快速度读懂你正在看的代码。但是一定要确保这个软件与你平时工作时使用的软件不同。要寻找不同风格、不同编程语言的软件进行练习。记录下是如何使整个过程增加或者降低难度。你使用了哪些方法帮助你理解这些代码?面对复杂的函数层次,你是以什么为线索,让调用栈有迹可循,带领自己穿梭其间呢?

训练思维敏捷和提高即兴编码技术的好方法是通过自我限制的方式来练习。选择一个简单的程序,试着来限制你的编程过程。

Topcoder——Topcoder.com是一个很早就存在的编程竞技网站。你可以注册然后通过线上竞赛赢得奖励。就算你对竞争没兴趣,Topcoder还为你提供了一个练习室,里面有很多可以练习的问题。现在就去注册尝试一下吧。

Code Kata——Dave Thomas是《程序员修炼之道》的作者之一,他接受编程练习这个想法,并使之实用化。他创造了一系列的很小却深具启发性的练习,被称之为Code Kata,程序员可以使用他们选择的编程语言来做这些练习。每一个Kata都针对某一特定技术或者思考过程,这样程序员的思维就可以更加灵活。

这本书的印刷过程中,Dave已经创造出了21个Kata,你可以在他的博客上免费使用(http://codekata.pragprog.com/)。在这个博客上,你还可以看到通讯名单的链接,以及别人解决这个问题的方法和相关讨论。你的挑战:练习这21个Kata,并撰写使用Kata练习的日记(或者是博客)。当你完成这21个Kata后,开发你自己的Kata,并与别人分享。

做事的方法

想要拥有自己的步骤,那就执行它。If you want to feel you own a process, help implement it.

你工作的环境中,步骤也有可能是由上级传达下来的。当这个文件到达开发团队,可能已经变了味,或者被重新解释成了新的模样。像中国的一个游戏“耳边传话”,要传递

选择一个软件开发方法论,并且挑选一本有关此方法论的书,登陆相关网站,加入一个讨论此问题的联络组。从批判的角度来研究此方法论。此方法论的优势和弱点在哪里?在你的工作中,执行它的障碍是什么?研究完一个,再换一个继续研究。对比他们的优势和弱点,想一想如何能把它们结合起来。

站在巨人的肩膀上

作为爵士乐手,我会花大量的时间听音乐。我听音乐,不只是在阅读或者开车的时候把它当做背景音乐,而是真正在聆听。如果爵士即兴创作就是演奏你听到的琴弦拨动出的乐曲,那么认真听音乐是一种非常重要的灵感源泉,也可以帮助你判断什么是可行的,什么是不可行的;什么是出色的,什么是一般的。

从现有程序中得到领悟。Mine existing code for insights.

爵士唱片的丰富历史是一套惊人的知识

这方面讲,软件设计和编程与音乐是相同的。我们可以从大量的现有程序中寻找模式和技巧。设计模式运动(见Design Patterns[GHJV95])关注可重复使用解决软件开发问题的方法。设计模式使现存程序的研究正式化,使大量专业软件工程师得以进行这项工作。但设计模式也只是我们读程序编码的时候可供使用的知识中的一个小子集。

用现有程序来反思自己的程序。Use existing code to reflect on your own capabilities.

阅读这些程序的另一个作用就是能让你知道哪些方法是已经存在的。当你碰到一个待解决的问题时,你可能会记起曾经在处理这样或者那样的项目时,看到一个执行MIME类型的库。如果这个方法是正确的,那你就会因为使用已经存在的方法而节省了很多时间,同时也为你的公司节省了开支。当你意识到在软件这个行业中,正因为我们一遍又一遍地重复发明轮子(发明这个词用在这里太笼统了)而浪费了多少金钱时,你会大吃一惊。

选择一个项目,像读书一样研读并且做笔记。归纳出好的方面和坏的方面。发表一篇评论。至少找到一个你可以借鉴的技巧或者模式。再找到至少一处缺点,提醒自己在开发软件的时候不要犯这类错误。

在工作中,将自己自动化

挑选一个你经常重复做的工作,为它编写一个代码生成器。从简单的部分做起。不要管这个代码生成器的重复使用率,只确保这个代码生成器可以节省你的时间。想办法提高生成代码的抽象等级。

研究模型驱动架构(MDA)。尝试一些可以使用的工具。看看工作中哪里可以使用MDA概念。想想如何用你日常使用的工具来应用MDA概念。

就是现在

就现在,我们能做些什么?What can we do? Right Now?

读心术

但Rao真正的出色之处在于他做的准备工作。他有一种神秘的能力能预测出你要让他做什么,而这些事情甚至连你自己都没想到呢,他就像变魔术一样。我甚至指责过他跟我耍过什么花样,但是这不太可能。比如我说:“Rao,我一直在考虑改变在应用程序框架中封装控制器的方式。如果我们做一点改变,它就能被应用程序使用而不是被网络应用程序使用。你觉得呢?”

他会回答:“我已经做完了。你看,已经在版本控制中检测过了。”

这种事经常在他身上发生,如果说这是巧合,那只能说Rao认真对待我们这个团队所维护的每一个软件,正在做所有可以想到的、与之相关工作。

读心术用得好,人们就会信任你。The mind-reading trick, if done well, leads to people depending on you.

每日成绩

每天都有可汇报的成绩。Have an accomplishment to report every day.

制定目标(每日、每周或者无论什么你能做到的)并且记录下可以彻底改变你工作中表现的工作内容(如图3-1所示)。当你开始追寻骄人的业绩时,你自然而然地就会根据你工作领域的商业价值,对你的行为做出评价,将工作划分优先顺序。

经常记录工作成绩可以确保你不会停滞不前:如果你规定自己每天都要做出一点成绩,那你肯定不能花两个星期的时间精心策划某个“完美”任务。这种思维方法和工作会成为一种习惯。就像一个对单元测试包里绿色横棒(表示测试通过)上瘾的开发人员一样,如果你没能完成今天的成绩,你就会浑身不自在。

留出半小时时间,拿一支铅笔和一张纸坐在一个安静无人打扰的地方。想想每天你的团队都在忍受的那些吹毛求疵的小问题。把它们写下来。哪些烦人的任务每天都要耽误整个团队好几分钟的时间去讨论,却没人有时间或精力来完成这些任务?

你现在做的项目中,哪些工作是可以自动完成,而你却在手动完成?记录下来。你来构造或者部署一个过程如何?你可以解决哪些问题?又将如何增加成功率呢?记录下这些想法。

别忘了你在为谁工作

经理的成功,就是你们的成功。Your managers’ successes are your successes.

如果说经理的工作是了解和设定工作的优先顺序,而不是亲自去做所有的工作,那么你的工作内容就是去做这些具体工作。你并不是在帮经理做他的工作,而是做自己份内的事情。

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

计划一次与经理的会面,目的是了解经理对整个团队下个月、下季度及来年的目标。问问他你能做些什么。会面之后,检查自己的日常工作是否与这个团队目标一致。以这些目标来决定你工作的动向。以这些目标为基础,把你的工作排出先后顺序。

安分守己

作为经理,我可以告诉你最棘手的事情就是有个总是想要往上爬的雇员。每次和他一起吃午饭,都会听他说又有谁升职了。这种人总会在办公室里散播点小道消息,死死盯着企业政治,就像对肥皂剧对白一样沉迷。他愤愤不平地完成每天的任务,无休止地抱怨领导部门的无能,总觉得要是自己来做领导工作,肯定能做得更好。还会认为领导们没有发现的他的潜质,是因为他们都太无能了。

这种人认为许多任务根本就不配他来出手做。遇到这些工作的时候,他能躲就躲;实在躲不了的时候也是极不情愿(而且很慢)地去做。他对工作精挑细选,有时候会下意识地挑选那些自认为配得上自己的水平,并且能帮助他实现晋升目标的工作。

要有雄心,但不必路人皆知。Be ambitious, but don’t wear it on your sleeve.

当然不可能。他工作平平,态度还不端正。就算他真的有很大的潜质,又能怎么样?当下,他并没有展现他可能拥有的资质。公司不是靠可能性来挣钱的。如果不能符合股东们的潜在设想,他们是不会继续投资。而且,就因为他这种不端正的工作态度,他的经理也不会再想培养他。

专注于现在的工作,你就会享受日常工作中的每一个小成功:你工作干得很出色,当出现难题的时候,你就会被人当做专家一样请来解决这个问题。在一个具有凝聚力的团队中,你会成为不可或缺的一员。这种感觉都会让你感到喜悦。但如果你总是头脑不清醒,做白日梦,那就会错失这些成功的喜悦。你会一直在等待那个巨大的成功,却无视每天工作中的那些小成功,但其实正是这些小成功赋予你工作的价值。

专注于现在的工作,不仅会让你更加快乐,也会让你身边的人更加快乐。你的同事、上司和客户都能感觉到。你的工作成绩会反映出你的态度。客观地来讲,放弃你想要成功的期望可以提高你的能力,让你走向成功。

今天我能把工作做到多好?

你能为工作增添多少乐趣?How much more fun could you make your job?

你能把一份无聊的工作变得有趣吗?如果你倒过来看这个问题,答案就会是显而易见的。你为什么会觉得这份工作无聊?为什么不能从一开始就觉得它是有趣的呢?你喜欢的工作和憎恶的工作之间有什么不同?

那么,在每天的工作中我们又如何挑战自己,发挥创造力来应对这些平凡的工作呢(我们80%的时间都是在做这些工作)?试试把这些无聊的工作做到100分,感觉怎么样?比如,你讨厌做单元测试热爱编程,但不得不去写自动化测试代码,这让你感到十分厌烦。那你可以努力让你的测试做到完美。这样的目标,会让你在工作中有怎样的改变?对于单元测试这个环节来说,怎样才称得上是完美?这和测试覆盖率有关。完美的测试覆盖率是指所有实码的功能都能测到。完美的单元测试同时也是无暇的、可维护的,并且,对于那些无法在另一台计算机上复制的外界因素,它也不会过多地依赖。只要在一台新机器上通过版本控制系统签出后,这些测试应该能直接运行。当然,所有这些测试都应该100%的通过。

明天就试试看,问问你自己,“我今天能把工作做到多好?”你发现你会更喜欢自己的工作,你的工作也会喜欢上你。

与你的同事展开竞赛,竞赛的内容就是这些无聊的工作任务,看看谁能把这些工作做到最好。如果不喜欢单元测试,那就看看你每天都要接触到的代码,将其中测试断言的总数打印出来,把它钉在办公桌隔断板上。再为整个团队布置一个记分板,获胜的人就能得到某种权利甚至是奖金。在项目结束后,获胜的人可以在接下来的一周内,把乏味的工作分配给团队中其他成员去做。

你的价值是多少

问自己“今天实现自己的价值了么?”Ask, “Was I worth it today?”

一桶水中的鹅卵石

对公司来说,你就像一桶水里的一块鹅卵石。当然,因为有这块鹅卵石在,水平面线会上升一点儿。你完成工作,做好本分。但是,如果你把这块鹅卵石从水中拿起来,然后再观察这桶水有什么变化——你基本上是看不到变化的。

我从这名信息主管那却得到了这样一条建议——永远不要高枕无忧,他一遍又一遍地重复这句话。他说自己每天早上起来都会提醒自己要清楚地知道说不定哪天自己就被公司解雇了。他会说,可能就是今天。

小心!别让成功冲昏了头脑。Beware of being blinded by your own success.

这是他的观点。谦逊不仅仅是我们需要发扬的一种美德。谦逊能让你更加清楚地审视自己的行为。这名信息主

越是成功,就越有可能犯下重大错误。当你得到很多肯定的时候,你就会很少质疑自己的决定。你使用的方法屡试不爽时,你可能就会忽视可能会有更好的方法。你开始变得傲慢。人一旦傲慢,就会产生盲点。越认为自己无可取代,就越有可能被别人取代(你在公司存在的意义也就越小)