程序员职业规划之道笔记

程序员职业规划之道阅读笔记

2018年2月份读的,现整理出来。

程序员职业规划之道阅读笔记

第一章:选择市场:

  1. 稳定成熟的技术还是未成熟的新技术?
    无论做出哪种选择,最终目的是产生利润。(Both ends of the technology adoption curve might prove to be lucrative)
    风险收益平衡:成熟稳定的技术风险低,收益低;新技术风险高,收益高。
    练习:从左到右列出技术所处的时期

表1-技术所处时期表

技术 所处时期(早、中、晚) 自己的擅长程度 做过但是并不精通
Java
Python
C
C++
C#
Object-C
Swift
JavaScript
HTML
Ruby
PHP
Assembly
Shell
Scala
R
Perl
SQL
Matlab
Go
Perl
Visual Basic
Arduino
Node.js
Angular
  1. 供应与需求
    供求规律:供大于求,价格就会下降;供小于求,价格就会上涨。
    不要在价格(薪水)上竞争,你承受不起。(You can’t compete on price, In fact, you can’t afford to compete on price.)
    通常,一件商品的价格越低,购买者越多。
    发现市场上的不平衡。(Exploit market imbalances)
    练习:从招聘广告与招聘网站找出哪些工作是高需求,哪些是低需求。登录外包公司网站,查看外包公司技术与你发现的高需求工作进行比较,记录市场上高需求且没有流到外包市场的技术。将外包公司的技术与前沿科技相比较。密切关注外包公司还没有涉及的上述两种技术。思考它们需要多长时间才能为相应的市场提供服务。这个时间差就是市场不平衡的阶段。

  2. 只是编程是不够的
    深入了解你所处的领域。
    仔细思考在哪个商业领域投入时间。(Now is the time to think about business domains you invest your time in.)
    练习:选择一本与你公司行业或你打算投入的商业领域有关的杂志或网站。坚持阅读,列出你可以向用户询问的问题:注意大事件和专题文章,把你所处的行业正在为什么而努力?现在的热门是什么?思考这些潮流是如何影响你的公司、你的部门、你的团队,以及你自己的工作的。

  3. 做团队中最差的
    你身边的人会对你产生很大的影响,明智地选择你的圈子。The people around you affect your own performance. Choose your crowd wisely.
    练习:找一个钦佩的开源项目,且它的设计者是你下一阶段的发展目标,浏览项目的待处理列表和官方讨论区,或者编写一个功能或者修正一个大错误。你的代码要模仿这个项目的代码风格,但是又要让你的代码和设计与其他项目完全不同,甚至让原作的程序员都认不出来。在你觉得一切都妥当之后,把它作为一个补丁提交。如果你做得好,这个项目就会接受它。

  4. 在思维上投资
    接触边缘技术和方法,能让你更有深度、更加优秀、更具智慧,以及更具创造力。
    没人给过我机会……?要学会抓住机遇!I haven’t been given opportunity…? Seize the opportunity.
    练习:学习一种新的编程语言。这门新的语言可以让你的思维方式产生变化。Java程序员可以尝试学习类似Ruby这种不需要采用强类型的静态编程方式的语言。你不需要成为专家,可以感到这种新的编程环境与你之前所处的环境的不同之处即可。

  5. 不要听从父母
    想着如何避免失败绝对不是取得成功的办法!成功是要冒险的。胜利者想的是他们想要做什么,而不是其他人会怎么做。出于担心的职业规划不会让你走向成功,而是会局限你的发展。
    一个成熟的职业软件开发人员需要从各个角度了解这个行业:产品开发,IT支持,内部业务系统开发以及管理工作。
    练习:在职业道路上,你最担心什么?你从事了什么特殊的工作,或者你申请了一份新的工作或升职?把选择罗列出来,逐一做出诚实的评价:这些决定受到“担心”这一因素的影响有多少?如果你没有“担心”,那你会做到什么程度?如果这些决定确实是受到了“担心”的影响了,那你现在如何逆转它,寻找新的机会做出新的选择。

  6. 做一名通才
    成为通才就是说让你不要只专注于一种技术。
    通才很少,所以很珍贵。(Generalists are rare… and, therefore, precious.)
    你的技术水平应该超越技术平台。Your skills should transcend technology platforms.
    IT职业分解:

  • 1)职业阶梯的各层:团队负责人,经理,技术人员,架构师,程序员,测试员。
  • 2)平台和操作系统:unix,linux,windows
  • 3)代码和数据:软件开发师,数据库管理员
  • 4)系统和应用:如何安装他们用来开发和部署的系统。
  • 5)业务和IT:本章第3小节
    练习:找出你要学习的一门技术。
  1. 成为一名专家
    很多人认为专攻某种技术就简单地意味着不知道其他技术。
    练习:(1)如果在虚拟机上编译并执行编程语言,就花点时间学习虚拟机内部是如何工作的;花点时间学习编写源文件,编写你自己的编译程序又意味着什么?当你输入或使用外部函数库时意味着什么?你的编译程序,操作系统或者虚拟机是如何将多个代码段连接起来,形成一个连贯系统的?(2)讲课是最好的学习方法。

  2. 切忌孤注一掷
    以特定技术厂商为中心的观点,缺乏远见。
    练习:试着做一个项目,做两次。第一次尝试使用在家里就能使用的技术;第二次,使用你最惯用的竞争性技术。

  3. 热爱它,不然就离开它
    工作,因为你无法停止工作。Work because you couldn’t not work.

第二章:在产品上投资

  1. 学习钓鱼
    学习各个基础流程是怎么样的,不要过度依赖向导。
    要主动问,不要等着别人来告诉你。
    练习:(1)如何与为什么:它是如何工作的?为什么会发生这种情况。(2)“提示”时间——在工具箱中挑选一种非常重要确经常被忽视的工具,选定了工具后,每天花一点时间学习这项工具的新知识,帮助你提高工作效率。

  2. 学习行业是如何运转的。
    财务基础知识——既不属于技术范畴也不是特定于某一行业的,而且也不会很快就过时。
    只有了解了一个行业后,你才能创造性的有所建树。You can’t creatively help a business until you know how it works.
    练习:(1)通读一本基础商业教程;The Ten-Day MBA。(2)为什么“账本底线”要叫账本底线。

  3. 寻找良师
    可以依赖别人,但要确保这个人是靠得住的。
    练习:想想你在工作领域中最钦佩谁。列出这个榜样的10中特性,这些特性必须都是视他为榜样的理由(技术广度、知识深度、人格魅力、团队协调者、言辞吸引力)。为这些特征按重要性排序,1最不重要,10最重要。想象你的榜样会给你打多少分(10分最高)?在这个名单上加一列,将分数标注在特征旁边,尽量站在你所选择的榜样的角度上,以第三者的身份来评定自己。在最后一列记录最终得分(重要程度分数-你当前得分)

  4. 做一名良师
    想要弄明白自己是不是真的弄懂得某一知识,那就把它讲给其他人听。
    通过讲授,我们的那些知识死角就会暴露出来。
    练习:(1)找一个你可以帮助的人。(2)找一个网络论坛,并挑选一个主题,开始帮助别人。

  5. 练习,练习,再练习
    让丑陋的东西都暴露在平时的练习中,而不是真正的比赛中。
    在极限处练习。Practice at your limits。
    练习类别:

  • (1) 基础练习:编程语言中不怎么使用的。(如正则表达式,stream库,网络API,处理集合与列表的工具)
  • (2) 以最快的速度读懂你正在看的代码:要尝试不同的编程语言,不同的编程风格。有什么好方法在一组重要的代码中理出头绪?又要从哪里开始?记录下如何使整个过程增加或降低难度的,你使用了什么方法帮助你理解这些代码?面对复杂的函数层次,你是以什么线索,让调用栈有迹可循,带领自己穿梭其间呢?
  • (3) 即兴创作:在某种结构或限制的基础上创造新的东西。训练思维敏捷和提高即兴编码技术的好方法是通过自我限制的方式来练习。选择一个简单的程序,试着来限制你的编程过程。如最短时间、程序最小、不做变量赋值等限制。
    练习:topcoder练习室。Code Kata。http://codekata.pragprog.com/
  1. 做事的方法
    想要拥有自己的步骤,那就执行它。If you want to feel you own a process, help implement it.
    一个能使你的团队更有效率,帮助你们生产出更好的产品的步骤就是最好的选择。
    练习:选择一个软件开发方法论,并且挑选一本有关此方法论的书,登录相关网站,加入一个讨论此问题的联络组。从批判的角度来研究此方法论。此方法论的优势和弱点在哪里?在你的工作中,执行它的障碍是什么?研究完一个,再换一个继续研究。对比他们的优势和弱点,想想如何能把它们结合起来。

  2. 站在巨人的肩膀上
    用现有程序来反思自己的程序。Use existing code to reflect on your own capabilities.
    练习:选择一个项目,像读书一样研读并且做笔记。归纳出好的方面和坏的方面。发表一篇评论。(1)至少找到一个你可以借鉴的技巧或者模式。再找到至少一处缺点,提醒自己在开发软件的时候不要犯这类错误。(2)找到一些志同道合的人,每个月聚会一次,每次聚会由一个人提出一段代码——2行或2000行都可以。分解它,然后讨论这段代码背后的东西。思考做出这个程序所做的决定,权衡没有包含在这个程序中代码。

  3. 在工作中,将自己自动化
    生产率=项目数量 / (程序员数量*平均时薪)
    练习:

  • (1)挑选一个你经常重复做的工作,为它编写一个代码生成器。从简单的部分做起。不要管这个代码生成器的重复使用率,只确保这个代码生成器可以节省你的时间。想办法提高生成代码的抽象等级。
  • (2)研究模型驱动架构(MDA)。尝试一些可以使用的工具。看看工作中哪里可以使用MDA概念。想想如何用你日常使用的工具来应用MDA概念。

第三章:执行

  1. 就是现在
    帕金森定律:工作会自动膨胀到占满所有可用时间。(帕金森定律是一种经验观察,不是一种无法逃脱的宿命)
    练习:查看你的工作日志,看看已经在这上面挂了很长时间的任务,那些已具雏形的项目,或者是某些让你头痛的工作——可能是因为官僚作风,也或者是因为分析瘫痪。在其中找出一项你可以在日常工作的间隙时间完成的工作,把一项以前需要数月完成的工作,在一周内做完。

  2. 读心术
    读心术用的好,人们就会信赖你。
    主要的风险和降低风险的方法:
    (1)使用公司的钱来做没人要求你做的工作,要是做错了怎么办?从小事做起。
    (2)如果你猜测的工作可能会迫使这个系统偏离原先的特定构建路线,或者在某种情况下限制这个系统的工作,那就不要做。
    (3)在猜测出来的工作涉及用户界面的时候,一定要特别小心。
    练习:开始下一个项目或系统的时候,做些笔记,记录下你认为用户或者经理,或者开发组长想要让你做的事情。有点创造性。试着从他们的角度来看这个系统。当你记录下这些有可能会被提出的不太明显的功能之后,想一想如何才能最有效地执行它们。想想用户在短时间内想不到的边缘功能。然后当你接到执行工作的要求时,看看你的列表,你的命中率怎么样?你猜到的这些功能有多少是现在要做的?在做这些工作的时候,你之前思考过的方法用的上么?

  3. 每日成绩
    制定目标(每日,每周或者无论什么你能做到的)并且记录下可以彻底改变你工作中表现的工作内容。
    练习:(1)想想每天你的团队都在忍受的那些吹毛求疵的小问题。把它们写下来。哪些烦人的任务每天都要耽误整个团队好几分钟的时间去讨论,却没人有时间或精力来完成这些任务?
    (2)现在做的项目中,哪些工作是可以自动完成的,而你却在手动完成?记录下来。你来构造或者部署一个过程如何?你可以解决哪些问题?又将如何增加成功率?记录下这些想法。
    给自己实实在在的30分钟,记录下所有的想法,不管是好的还是坏的。一定要坐满30分钟。列出清单后,在另一张白纸上理出你最感兴趣的(也是任务开发中最烦人的)5项任务。下星期一,瞄准这个清单上的第一项任务,做点儿成绩出来。周二,第二项;周三,第三项;以此类推。

  4. 别忘了你在为谁工作
    确保你的目标和工作与你公司的目标一致。
    团队可能存在的问题:提高工作效率,增加收益,降低错误等等。
    经理的成功,就是你们的成功。Your managers’ success are your successes.
    练习:计划一次与经理的会面,目的是了解经理对整个团队下个月、下季度及来年的目标。问问他你能做什么。会面之后,检查自己的日常工作是否与这个团队目标一致。以这些目标来决定你的工作动向。以这些目标为基础,为你的工作排出先后顺序。

  5. 安分守己
    要有雄心,但不必路人皆知。Be ambitious, but don’t wear it on your sleeve.
    比起只专注在目标上的做法,专注于现在的工作会使你离最终目标更近。
    练习:一周内不去想你的职业目标。写下你当下工作的目标。别去想下一步要做什么,想想你从手头的工作中得到什么,你又能做出怎样出色的成绩?制定一个既有战略性又具实用性的计划。以完成当前工作为目标,用一周的时间来执行这份计划。 午餐或休息时,与同事交谈中,避免涉及任何关于职业发展或者公司策略这类内容,专注于手头工作的目标。 这周的最后一天,把你的进度和你制定的工作目标作对比。就现在的工作而言,你认为需要完成的任务中,有多少还没有完成?你又是如何评价自己已经完成的工作?制定下周的工作计划,坚持下去。

  6. 今天我能把工作做到多好
    你能为工作增添多少乐趣?How much more fun could you make your job?
    练习:与你的同事展开竞赛,竞赛的内容就是这些无聊的工作任务,看看谁能把这些工作做到最好。(例如单元测试,将测试断言打印出来,标注每个人各自的测试通过数量与失败数量)

  7. 你的价值是多少
    问自己“今天实现自己的价值了么?”Ask, “Was I worth it today?”
    如何把价值量化,怎么帮助公司节省开支,如何提高团队的工作效率?考虑一下使用你们软件的终端客户。目标:2倍的薪水。在达到这个目标前,千万不要放弃。
    练习:最低预期资本回报率。理解“最低预期资本回报率”。找出你公司的最低预期资本回报率,用它来衡量你的工资。

  8. 一桶水中的鹅卵石
    永远不要高枕无忧。谦逊能让你更加清楚地审视自己的行为。
    小心!别让成功冲昏了头脑。Beware of being blinded by your own success.
    练习:把你编写并维护的代码,以及你做过的所有工作编成目录。把你的团队完全依赖你完成的工作记录下来。把这些全部列入你的待办事项中。自动化或者分解你的代码,或者为这些代码提供说明,使其他团队成员很容易明白你编写的代码。按这样,做完所有待办事项列表中的工作。主动与你的团队成员和团队领导分享你所做的说明,确保团队成员可以很容易看到这些说明。定期重复这一练习。

  9. 爱上维护
    修复错误、实现小的功能需求、维持系统运行。——这就是你全部的工作。
    维护也可以成为自由和创造的沃土。Maintenance can be a place of freedom and creativity.
    练习:评估、改进、评估——在你所维护的所有重要应用程序和代码中,把所有可以评估程序质量的元素列举出来,比如应用程序的响应时间、数据处理过程中抛出的未被处理的异常的数量、或者是程序的正常运行或(可运行)时间。支持请求周转时间(你应对问题的反应时间和解决速度)对你的使用者来说,是非常重要的。
    从中挑选最重要的特征,开始对它进行评估。在有了一个基本的测量准线后,确定一个可实现的目标,改进这个应用程序的(或者你自己的)表现以达到这个既定目标。当完成改进工作后,再做一次评估来证实你确实完成了你想要做的改进。如果你确实完成了,那就和你的团队成员及你的客户分享。
    再挑选另一个测量标准,做一遍上述工作。完成第一个标准之后,你就会发现这就像做游戏一样,很有乐趣。

  10. 8小时激情燃烧
    “8小时激情燃烧”:工作的时候不容一丝松懈,高度集中,以至于连续工作的时间无法超过8小时。
    做项目像是马拉松,而不是全速短跑。Projects are marathons, not sprints.
    当你离开工作一段时间后,才会更喜欢工作。
    练习:投入地工作4个小时,吃午饭,然后再投入地工作4小时,确保4个小时后你肯定没有力气再做其他的工作了。然后,回家放松。

  11. 学习如何失败
    每个错误地音调离正确的音调不过一步之遥。Every wrong note is but one step away from a right one.
    以下规则适用于解决技术、沟通或者项目管理中出现的错误:
    (1)发现问题后第一时间提出,不要企图隐瞒错误。
    (2)接受批评。我们的目标是在最短的时间内解决这个问题。在谁来负责这个问题上纠缠不清的后果就是拖延解决问题的时间。
    (3)提供解决办法。如果你没有想到解决的办法,那就提供一份有计划性的进程。陈述要按照具体可预测的时间顺序。
    (4)寻求帮助。放下自尊,保持一种良好的心态接受团队成员的帮助,那么你工作的伙伴、经理和客户都会欣赏你的表现。
    充满压力的时候是赢得忠诚的最好时机。Stressful times offer the best opportunities to build loyalty.
    公司对错误处理方式的不同,会产生不同的结果。

  12. 说“不”
    为了避免失望而说“是”,就是在说谎。Saying “Yes” to avoid disappointment is just lying.
    经常说“是”的人,要么就是天才,要么就是在说谎。后者通常占多数。
    “我不知道”并不代表我不可靠。
    “这是一次挑战,但我想要试一试”。
    练习:记录下做出的每一个承诺:
    (1)到期日,你要完成什么?
    (2)你承诺的内容是什么?
    (3)如果你无法完成,记录下你的想法和你要接受的内容。
    (4)做出承诺的时候,记录下来。
    每天检查这个记录。在你知道不能实现诺言的时候,第一时间与对方沟通。每月检查这个记录——你做出的承诺中,有多少是实现了的?你又有多少次能做出正确的承诺?

  13. 不要恐慌
    英雄从不恐慌。Hero never panic.
    我们恐慌是因为丧失了判断力。
    练习:做一份关于恐慌的日记。更好的分析自己的反应,说和做是两回事。每天定时记录下使你惊慌的境况,即使只让你感觉到一点点小惊慌也要记录下来。每周回顾一次上一周的日记,观察每一个引起惊慌的情况造成的持续影响。这个状况值得惊慌吗?对这种境况最有帮助的反应应该是什么?电影里的英雄人物要是碰到你这种情况,他们会怎么做呢?
    当你能够在碰到问题的时候理智地分析引起惊慌的原因,惊慌就会黯然隐退,最终消失。

  14. 说出来、行动、展示
    从不做出承诺最容易导致一事无成。没有截止期限,你也就没有压力或者说是动力来完成某项工作,特别是当任务不是十分有趣的时候。
    计划也不一定是大计划,也不需要有很长的延续性。
    今天下午找个时间,把明天要完成的事情做个列表,并将它们按先后顺序排列出来。一天的计划,可以非常详细,也可以是泛泛的。
    你计划的时间跨度越长,你做计划的水平就应该越高。一天或者一周的计划可以看成是战场上的短期战斗计划,让30天,60天,90天的计划关注你想要实现的战略性目标上。
    强迫自己想象90天后系统、团队进程,或自己工作的最终状态,这会使一些出乎意料的事情浮出水面。同环顾四周相比,鸟瞰全局会带给我们完全不同的感受。
    状态报告可以帮助你推销自己。Status reports can help you market yourself.
    更长远地想,计划出你想对项目或者你维护的系统做出什么高端有建设性的改进。
    做计划的时候要谨记的是,出现在计划上的每一项工作必须要与后续工作相关,要么被完成、推迟、去除、或者被代替。

第四章 推销——不仅仅是迎合

宣传自己的目标:让别人知道你的存在,以及让他们知道,当他们碰到难题时,你是那个可以解决问题的人。

  1. 不要忽视感觉
    绩效考核永远都不会是客观的。Performance appraisals are never objective.
    公司是否继续雇用你,提升你或者让你长年留在同一岗位上,加薪还是减薪,这些都会受到别人对你感觉的影响。
    练习:在人际交往关系中,你要弄清楚哪一因素对哪一种关系圈是重要的,这样你就可以给你周围的人留下可靠的感觉。
    把你人际交往圈中的人分组,并罗列出来,在每一项旁边记录下你的哪些特质会影响他们对你的感觉。
    组 影响感觉的特质 需要作出哪些改变
    妻子
    父母
    后台组成员
    师傅
    大数据成员
    项目经理-M
    客户-买家
    经理-Z

  2. 探险向导
    请站在经理和客户的立场上来思考问题。
    “客户”寻找的是可以帮助他们完成项目的人。
    客户害怕你。Your customers are afraid of you.
    一般来讲,非程序员和程序员一样聪明。
    决定升职和人员安排的时候,你最有力的支持者就是一个无法离开你的客户。
    练习:(1) 自我检查——检查邮箱,尝试站在同事、经理和客户的立场上或第三方的立场上再次阅读这些邮件。
    (2) 跳过围墙——寻找一个自己知之甚少、需要依靠别人的境况。在你未知的领域,你希望队友如何与你沟通?

  3. 学会沟通,善于写作
    文字表达能力非常重要。写作能力不但非常必要,而且还很紧缺。
    一个时代——工作沟通将借助文字,无论是通过即时消息还是邮件。
    你自己就是你要解释的内容。You are what you can explain.
    沟通,特别是以文字方式进行沟通,是你所有绝妙的想法必须要通过的瓶颈。
    练习:(1)开始记录开发日记。每天写一点,记录你做了什么工作,解释你的设计决定,检查棘手的技术和专业决策。
    (2)开始打字。使得写作更加舒服和自然。

  4. 到场
    能够与上司和客户面对面地沟通是你的优势,不要浪费这个机会。
    到场:(1)让别人感受到你的确在场;(2)让自己的举止看上去像个领导。
    在大多数环境中,重要的项目决定都是在喝杯咖啡的时间和在闲聊的时候做出的。
    要与人打交道,要与人打交道,要与人打交道。人类的天性是喜欢与人一起工作。
    了解你的同事。Learn about your colleagues.
    练习:(1)下周的某一天,强迫自己不发邮件(在合理范围内)。当你想要发邮件的时候,打电话给对方或者到他的办公室面对面地与他交谈。
    (2) 想想你与哪些同事、上司和顾客的交流不够,列出名单。在日历上标注出给他们打电话或者与他们联系的时间(通过电话或者面对面)。谈话要简短且有意义。与他们谈论工作或者只是单纯进行人际沟通。

  5. 适当的言语
    请用行业术语推销你的成就。Market your accomplishments in the language of your business.
    商业本身关注的是结果,经营者关注的也是结果。
    作为软件开发师,要把你所完成的工作放在你所服务的行业的框架里。工作是什么,有什么用,怎样才能证明你所谓的成绩不是在浪费公司的时间呢?
    练习:(1)罗列出你近期完成的工作,并写出每项工作的商业意义。(2)准备好“电梯演讲”,并牢记心里。

  6. 改变世界
    带着任务去上班,并确保别人知道你的任务。Have a mission. Make sure people know it.
    你所做的改变必须要让你的团队、组织或者公司看得到。这种变化可大可小。
    你做这些事情是因为内心里觉得必须要这么做。
    这种改变不要太突然太猛烈,但也不要总是小心翼翼、畏手畏脚。
    如果你不知道要做的改变是什么,那你就没有在做任何改变。如果你没有主动让自己获得承认,那你就还没有获得承认。
    练习:(1)记录下工作中你亲眼看到过的改变。想想哪些同事是带着任务在工作,哪些同事是最努力最有效率的。他们的任务是什么?(2)你能想到这些任务中哪些是不合适的吗?努力和狂热的界限是什么?你的同事中有没有人越过了这条线呢?

  7. 让人们听到你的声音
    把目光放的更远一些。不要把自己局限在某一特定公司中的程序员,要把自己当做是某一个行业的人员。
    公司都想要雇用专家。撰写过此类技术和方法的相关书籍的专家 > 发表过相关文章 > 面试官听说过你的名字 > 面试官听说过你的名字 > 一长串的项目经历
    如果只把自己局限在现在工作的公司里,就会严重限制你形成新的人际关系网的机会。
    还有什么比出版文章和公众演讲更好的方法让人们听到你的声音、记住你的名字呢?如何才能从一名程序员到出版作品再到公众演讲呢?从互联网开始。
    第一步:阅读网络日志。如果不知道读什么,就挑选几位你最喜欢的技术类书籍作者,然后通过网络搜索,通常他们都会有自己的网络日志。接下来:开始撰写自己的网络日志。一开始你可以写你的模块中有趣的故事,慢慢你就会发现,网络日志这个环境本身就是一个社交网络——你开始建立的职业网络的缩影。你的想法会出现在别人的日志链接中,他们会撰写关于你的想法的文章,然后传播你的观点。
    网络日志是训练场,要抱着为你最爱的杂志写专栏文章的态度,撰写网络日志。随着写作技巧的增长,你也会越来越自信。
    也可以使用网络日志上的内容作为下一步工作的范例。既然你已经在自己的论坛上撰写文章了,不妨将这些文章在社区网站、杂志甚至书籍上发表。这些作品就是你写作能力的证明,也为你撰写文章或者出版图书提供了材料。文章成功发表后,你的人际关系网也会随之扩展。写的越多,得到出版的机会也就更多,而这些又为公众演讲奠定了良好的基础。
    就像在网站上练习写作一样,可以在当地开发员小组会议上开始你的演讲生涯。孰能生巧,不要小视这些演说,一定要在其中放入你的思想。尽管你演讲的对象只是你所在城市中的一小部分人,但这是你生活和工作的地方,成功的演说一定会带来收获。如果你给予这些小范围的演说足够的重视,那你就会发现做这些小演讲的收获并不亚于那些在重要行业会议上的演讲,也就是你的下一步。
    所有这些让人们听到你声音的方法中,最重要的一点就是要尽早行动,而不是一味地去想自己是否已经做好了准备。大部分人都会低估自己的能力。你一定有某种可以传授给他人的东西。你永远也不会觉得自己已经做好了100%的准备,所以不妨现在就开始行动。
    练习:(1)如果你还没有网络日志,现在就创建一个。
    (2)在电脑上创建一个新的文本文件,列出一切可能的网络日志话题,这些就是你要撰写的专题文章。不要局限在宏大的观点上。尝试那些10到20分钟内就可以写出相关文章的小想法。当这个列表达到10项的时候,就停止。(如果你的灵感停不下来,那就继续)
    保存文件,但是仍然保持打开的状态。如果你重新开机了,那就再打开这个文档。为自己设定三个星期的期限。每天,从这个列表中找一个话题来撰写文章。不要过多的思考,就是写一遍关于这个观点的文章,然后在网络日志中发表。在文章中加入其它网络日志中相关文章的链接。每天挑选话题的时候,可以任意向此列表中增加新的想法。
    三周后,挑选出你最喜欢的两篇文章,提交到类似Digg和Reddit这类由用户审查文章的网站上。如果你的列表中还有未撰写成文章的想法,那就继续写。

  8. 创建自己的商标
    创建商标分为两部分:认知和尊重。创建自己的商标,让人们认识它,然后确保与之关联的都是积极的特征。
    你的名字就是你的商标。Your name is your brand.
    商标的认知和尊重是值得去创建和维护的资产。唯一潜在的破坏性因素就是你自己。
    不要小视你所代表的内容。小心挑选你名字出现的地方。不要去做糟糕的项目,广泛地发送糟糕的邮件(或者撰写糟糕的网络日志)。别做傻瓜。没人喜欢傻瓜,尽管有时候他们自己就像个傻瓜。
    更重要的是,不要忘记,你选择去做的事情会对你的名字产生持久的影响。
    Google 永远不会忘记。Google never forgets.
    竭尽所能捍卫你的商标。别让自己的行为毁了它的名誉。你的商标就是你的一切。
    练习:用Google搜索自己。阅读前几页的搜索结果。根据这几页的搜索结果,别人会推断你是个怎样的人呢?这些结果是否能看出你是怎样的一个人?你对这个结果满意吗?
    再搜索一次,但这次请注意论坛和邮件列表中的对话。你是不是一个傻瓜?

  9. 发布你编写的程序
    人人都能使用Rails,但很少有人能开发出Rails。Anyone can use Rails. Few can say Rails contributor.
    开发师在某个团体中扩展自己的社交圈;为自己树立名号,在行业中建立自己的名誉。在开发开源软件的过程中,他们将自己推向了市场。
    对开源软件有所建树是一种技术的展示。
    如果你创作的产品非常实用,那你就很可能会成功。
    练习:推荐选择的开源软件:修改代码的作用可以衡量出来,并且可以在短时间内完成。

  10. 变为卓越的能力
    传统上市场营销的四要素:生产、价格、宣传和定位。
    市场的目的是在生产者和消费者中间建立起关于某种产品或服务的练习。这一联系的起点就是对该产品的认知。
    卓越的意思是人们会主动地谈论你,而不是被动要求。
    要想卓越,就必须和周围的人大相径庭。发布成功的开源软件、写书和撰写文章以及在研讨会上演讲都可能会提高你变得卓越的能力。
    关键在于“做”。
    展示或者让它死亡!Demo or die。
    如何才能像一头紫色的奶牛一样引人注意呢?编写一本书籍。编写一个代码生成器,使以往需要一个星期才能完成的工作缩短为5分钟。不仅要得到同事的尊重,还要通过研讨小组或者专题讨论会使自己成为城市中公认的某一种技术的专家。把以前从未有过的想法放到下一个项目中。
    仅仅做人群中最好的是不够的。要成为人们谈论的焦点。
    练习:从小事做起,但是要在你现在的项目或者工作中做一些卓越的事情。比如,可以力争卓越的效率。项目进程中往往会有一些拖沓的部分。从中找到其他人认为要一个星期才能完成的工作,你用一天的时间做完它,如果有需要就加班。(用非常短的时间来完成这项工作,看看其他同事会不会对此作出评论。如果他们没有评论,那是为什么呢?如果评论了,他们又是以何种方式来评论的?调整你所做出的改变,然后再尝试一次。)

  11. 建立关系
    恐惧感使我们无法接近专业人士。Fear gets between us and the pros。
    非常出色的人是不会介意有人想要认识他们的,人们喜欢被别人欣赏的感觉,而且也愿意谈论他们所热衷的话题。
    我们这些凡人和那些我们所仰慕的人之间最大的障碍就是我们自己的恐惧。与那些聪明、人际关系好、能教你东西或可以帮助你找到工作的人结识,是取得进步的最好的办法,但是我们却没有胆量尝试与他们结识。
    读过某人颇具影响力的文章,你可以把你做的工作拿给他,听听他的建议。或者,你为某人创建的系统添加了一个软件接口。这都是合理的与他人建立起联系的好方法。
    你可以面对面地建立这种联系,也可以在互联网上建立。持久的联系就是持久的联系。很多软件开发行业里最具影响力的想法都可以通过邮件甚至线上即时交谈获得。
    练习:(1)挑选出你最喜欢的软件,并给它的开发者写一封邮件。邮件一开始先要感谢他开发了这个软件,接着提出建议、问题或者其他可以与他建立联系的尝试。请他对你的邮件做出回复。如果这一软件是免费或者是开源的,主动提议来帮忙。(2)在你生活的城市,找一位你敬仰的或者愿意向他学习的人。找一个可以碰到这个人的机会(用户小组会议或者演讲会上都有很大的可能性)主动开始与他交谈,即使这样做会让你感到不舒服。

第五章 保持技术领先

如何避免昙花一现。
研究,投资,执行,市场(循环重复)

  1. 已经过时的技术
    你引以为傲的新技术已经过时了。Your shiny new skills are already absolete.
    你掌握的知识越是主流,过时的危险也就越大。
    即使你掌握的技术是全新的,如果你没有开始学习下一个热门技术,那已经晚了。你可以领先于当今的潮流,却处在下一个潮流之后。这样的环境下,时间是非常重要的。
    时间就是一切,学习之前动动脑子:现在看起来不可能的事情,2年间会发生什么变化呢?如果磁盘空间非常便宜,那有一天会不会免费呢?如果处理器的速度比现在快2倍会怎么样?哪些是我们不用担心的优化问题?这些发展进步会对热门技术造成哪些改变呢?
    向前看,清楚地知道你的技术发展方向,是盲目和有远见之间的区别。
    练习:每周找出时间来研究尖端技术。每周至少找出2个小时的时间来研究新科技,学习相关技术,并动手尝试。制作简单的应用程序。将你正在以当前技术做的项目,用新技术来做出新的原型版本,来理解它们的不同之处,以及新技术能够做些什么。在你的日程安排中加入做这项工作的时间,一定要按时完成。

  2. 你已经失去工作了
    你不是你的工作。You are not your job.
    你的工作是编程,别把自己当成一名程序员,继续工作,但是不要满足于你的工作。永远不要把自己的身份定位于程序员,或者设计师,或者测试员。
    周围的环境在不断变化,把自己紧紧依附在工作上会使你与周围的环境不和谐,进而影响你的工作。
    练习:如果你是一名程序员,尝试以一名测试员或者项目经理的身份来做一两天你的工作。有哪些不同的角色是你从没考虑过要尝试的。把这些角色罗列出来,并尝试每天以其中一种身份来工作,看看自己是否合适。你可能看不出工作结果又什么不同,但是你会发现你工作的方式发生了变化。

  3. 没有终点的道路
    职业生涯最重要的部分不是晋升或者加薪,而是向这些发展方向努力工作的过程。或者更重要的是,是你抛开这一切忘我工作的过程。过程就是终点。
    糟糕的过程只能创造出糟糕的产品。
    不要关注结果,要关注做事情的过程。Focus on doing, not on being done.
    练习:尝试在工作中关注任务本身。

  4. 给自己做一份蓝图
    个人的产品路线蓝图是用来判断你是否在不断向前发展的依据。
    在合理的范围内做出一些标记,当你达到这些标准的时候,你就知道你不是停滞不前的。产品的“功能”就是这些标记。
    只有当你真正做出计划之后,才能看到下一个标记。把每一种新的知识或者能力看作等同于一个程序中的一种功能。一个仅有一种功能的程序算不上是程序。
    练习:做出蓝图之前,先画出你曾经所处的位置,这会对你制作新的蓝图起到鼓励和启发的作用。清楚地列出你职业发展的时间表,标注出你从哪里开始,以及在每一阶段你的技术和工作是什么。注意在哪一阶段你在持续进步,又在哪一个阶段取得了重大进展。注意你每一次取得重大进步的平均时间是多长。当你展望职业发展的时候,把这份蓝图作为参考。清楚地了解过去取得的进步,可以帮助你制定出更加实际的目标。制作出历史蓝图之后,要不断更新。当你不断向新目标前进的时候,这种方法可以很好地反映你的进步。

  5. 要注意观察市场变化
    你必须要时刻细心留意。注意技术方面的新闻——不管是商业方面的还是纯技术方面的。要留意技术达人,如果你能够找到这类人,观察他们热衷于什么,那你就能够大致了解到什么技术将会成为热门,或者预测出两年后的热门是什么。这招非常灵。
    练习:明年开始尝试做技术达人,或者至少结识一位技术达人,与他建立紧密的练习。

  6. 镜子里的胖子
    找到一个可信赖的第三方,是衡量进步的简单方法。一名良师或者一位关系好的同事不是你肚子里的蛔虫,所以可以比较客观地对你做出评价。你可以与他们谈论你作为一名软件开发师、项目领导、沟通者、团队成员等任何与你相关的工作。
    开发员们,要自我反省。Developer, review thyself.
    工作的时候,最重要的就是要弄清楚自己的盲点在哪里。
    要制定自我反省的时间表。如果你有具备提醒功能的日历,安排一个自我评价的时间。首先要制定你的衡量系统(或者借用现有公司评价系统),然后把它提上日程。把这项工作作为你工作生活的一部分,否则你是不会去做的。
    练习:(1)做一次360度评估:请同事、客户、上司和下属给出对你的评价;再列举出你认为专业人士需要具备的10项重要特征作为衡量标准;将这个列表转化成一份调查问卷,在这份调查问卷上,一定要包含下面这个问题,要求参与者按每项特征对你做出评分。最后再加一个问题:我还应该问哪些问题?根据反馈结果,制定下一步行动计划。记得想他们致谢。
    (2)开始记日志。网络日志或者日记,记录你在做什么工作,在学习什么以及你对这个行业的一些观点。坚持记录一段时间之后,回顾前面的记录,现在你仍然同意当时的想法吗?那些想法现在看起来幼稚吗?你改变了多少?

  7. 南印度捉猴陷阱
    价值僵固:当你过于坚信某事的价值时,就会无法客观地来评价它。
    无论是你职业的发展方向还是你拥护并投资的技术,都要小心那个“捉猴陷阱”。之前认真做出的选择可能就是你职业走向没落之前你抓到的那最后的一捧米。
    联系:(1)找到你的捉猴陷阱——你的价值僵固是什么?看书过于精细。
    在你完全不知情的情况下,哪些价值观在引领着你日常的行动。制作一个表格,划分出“职业”和“技术”两栏。在每一栏中列出你认为是不容置疑的价值。举个例子,在“职业”一栏中,你一直认为什么是自己的强项或者弱项?你的职业目标是什么?实现目标的正确做法是什么?
    在“技术”一栏中,列出你选择投资的技术中,哪些是你最看重的。做选择的时候,你认为什么技术特性是最重要的?你是如何制作可扩充的系统的?开发软件最具生产力的环境是什么?总体上来讲,最好和最坏的平台是什么?
    当完成这个列表之后,进行反向思考。如果你认定的事实的相反方面是正确的呢?请你诚实地向你认定的每一项事实发起挑战。
    这就是你自己弱项的列表。
    (2)了解自己的敌人——找出你最讨厌的技术,并用它来完成一个项目。
    选择一个简单项目,尝试用你讨厌的技术制作一个出色的应用程序。

  8. 避免瀑布型职业规划
    当遇到复杂问题时,以一种容许反复改变的方式来解决问题会减轻压力,使我的工作更具有效率。
    将职业道路的改变视为常态。

  9. 每天都有进步
    远大的目标会使人丧失动力,所以,对于努力实现那些远大又有难度的目标,非常重要的一点就是不要总想着离最终目标近一些,而是应该想每天要比前一天做的更好。
    练习:列出你想要做的复杂困难的改善——可以是个人问题也可以是职业问题。如果你的列表很长,也没关系。思考列表上的每一项,想想你今天能做点什么可以使你自己或者这项问题比昨天有些改善呢。明天再看一遍列表,昨天和前天比有什么进步吗?怎样做能使今天比昨天更进一步呢?把这项工作安排到你的行程表中。每天早上用两分钟的时间来思考。

  10. 独立
    如果你可以隐藏在平庸的盾牌之后,就会丧失变得卓越的动力。
    成为一名独立承包人是最终考验的一部分。没有任何组织结构可以成为你的庇护。你要直接对付你薪水的人负责。你所做的任何一件事都直接反映在你工作业绩中。如果你犯错误了,没有任何人和你一起承担责任。只有你自己,你的专业和你的执行能力。
    成为一名独立承包人还会迫使你学习如何推销自己,同时在你专注的领域和技术中检验你的选择。必须要走走出去,主动去找客户,一旦你找到了客户,你还必须要说服他们,让他们相信你的价值。
    独立不是一个简单的事情,这把你所有的技术作为一个专业来测试。但你也没有必要做足这一切,把它当做是个人发展项目,用业余时间去推销自己。制定目标,以某种速率与客户签订合同,然后利用晚上或者周末的时间完成项目。在保留安全感的同时,你可以学到很多东西。
    在刚成立的小公司工作,可以一箭双雕:一份全职带薪工作和直接对工作失败负责的挑战。