本文是阅读《软件开发者路线图-从学徒到高手》笔记摘要

仅仅告诉人们去做事情并不能带来长久和可持续的变化。按照你的要求去做事的人如果遇到你的规则没有囊括的新情况,他们马上就会迷失。

如果你愿意钻研一件事,你就能做得更好,一切也将得以改善。用她的话说,“努力是使得你聪明能干的东西”(《Mindset》(心理定向与成功),第16页),而失败不过是引导你下次尝试不同方法的激励机制。这跟以下信念是相反的:我们每个人天生都带着固定数量的禀赋,而失败就是我们天资不够的证明。

从你所做的事情中寻找不足之处并寻求解决办法

一种对注重实效而非教条主义的向往。这包括一种肯于牺牲理论上的纯洁性和未来的完美而达到“今天把事情做完”的意愿。

一种认为分享知识胜过隐藏独享的信念。

一种敢于实验并被证明错误的意愿。

争论、反对、分歧(而不是盲从于自诩的权威)正是到达目标的途径。

最好的学习方法,就是同那些使用你要学习的技能来达到某种目标的人处于同一个房间里。

一个人帮助一个知道自己正在做什么的人,从而让他学到东西。

靠自己也可以学习一门语言,但除非与专家交流,否则你需要更长的时间来领悟语言的精神。

你不应该“嫁”给任何特定技术,而应该有足够宽的技术背影和经验基础,使自己能针对特定的情景选择好的解决方案。

通常,每一步都该有进门的感觉。这是初学者的心——一种正在“成为”的状态。

永远不要忘记:可以随便犯蠢的自由很可能是打开天才成功之门的钥匙。

当我不能做自己喜爱的事情时,我就完全是个懦夫

上帝只让一小部分人开开心心地通过自己喜爱的工作谋生。感谢上帝,让我成为其中之一。

不要因为他们没有走在你所走的路上,就认为他们已经迷失了。

对初学者来说,不论他是从培训班开始还是通过自学,走上软件技能之路的第一步都是找一名技师来带他。

我喜欢有足够的自由度,这样才能理解或者想出一些东西,但我也喜欢合作。我会寻找那些能让我从共事的人那里学到东西的项目,并会因此而更有活力。

最理想的技师工场是这样一种地方:你在那里可以吸收那些只可意会、不可言传的知识;靠每天的点滴进步积累成一种实践习惯。

如果我们放纵自己,我们将总是需要等待一些消遣或其他事情结束才能安心工作。只有那些对知识非常渴求,以至于在不利的环境下仍能坚持探索的人才会取得更大的成就。从来就没什么“有利条件”。

学会那些本来不会做的事情,常常比去做已经会做的事情更加重要。

为[成为一名程序员]做准备,最好的方法就是写程序,并学习其他人写过的优秀程序。我当初所做的是:到计算机科学中心的垃圾筒中,去寻找他们操作系统的清单。

挑选一个算法精深的开源项目,如Subversion、Git或Mercurial这样的源码控制系统。浏览项目的源码,记下让你觉得新奇的算法、数据结构和设计理念。然后写一篇博客,描述一下项目的架构,着重突出自己学到的新思想。你能在日常工作中找到可运用同样思想的场合吗?

你也不应该低估写作本身的威力……你会失掉更大的目标感。但写作能让你后退一下并完全想通一个问题。即使最怒气冲冲的演说也能使一位作者达到某种程度的深思熟虑。

“一个人教的时候,两个人在学。”

天赋常常被误解。它并不是超常的智力,而是一种性格。它最需要的是一种承认失败、不遮掩缺点并努力改变的意愿。它来自于刻意的,甚至强迫性的对失败的反思,以及对新方案的持续探索。

他将不再是个靠学习成绩激励的人,而成为一个靠知识激励的人。他不再靠外部的推动来学习。他的动力来自于内部……这种激励,一旦抓住它,就会成为一种强势的力量。

模式列表:

  • 另辟蹊径(A Different Road):你发现自己想要去的那个方向跟通往软件技能的道路并不相同。
  • 只求最差(Be the Worst):当快速超越了周围的每一个人,你的学习速度下降了。
  • 质脆玩具(Breakable Toys):你工作在一个不允许失败的环境中,却需要一个安全的环境来学习。
  • 具体技能(Concrete Skills):你想到一个优秀的团队中工作,然而你掌握的实用技能很少。
  • 正视无知(Confront Your Ignorance):你发现了自身知识中的许多漏洞,而你的工作需要你理解这些主题。
  • 技重于艺(Craft over Art):你需要向客户交付解决方案,你可以选择采用一种更简单且已证明有效的方案,也可以利用机会来创造一些新奇和美妙的东西。
  • 建立馈路(Create Feedback Loops):你不知道自己是否正遭受“无意识的无能”(unconscious incompetence)之苦。
  • 深入挖掘(Dig Deeper):你只拥有许多工具、技术和方法的肤浅认识,在尝试解决更困难问题的时候,不断地遇到障碍。
  • 自定路线(Draw Your Own Map):老板提供给你的职业道路全都不适合你。
  • 提高带宽(Expand Your Bandwidth):你对软件开发的理解较为狭隘,只关注日常工作中的低层次细节。
  • 暴露无知(Expose Your Ignorance):你发现了自身知识中的许多漏洞,担心人们会认为你根本不明白自己所做的东西。
  • 常用工具(Familiar Tools):你发现很难估算自己的工作,因为你的工具集和技术栈总是在快速变化。
  • 找人指导(Find Mentors):你发现自己花费大量的时间在发明轮子,然后不断遇到障碍,但却不清楚到哪里找人指导。
  • 同道中人(Kindred Spirits):你发现自己无人指导,束手无策,而且周围气氛看起来与自己的期望不一致。
  • 学会失败(Learn How You Fail):学习能力提高了你的成功几率,但失败和弱点依然存在。
  • 培养激情(Nurture Your Passion):你工作在一个不好的环境中,它扼杀你对软件工艺的激情。
  • 不断实践(Practice,Practice,Practice):日常编程活动不会给你通过犯错来学习的机会。
  • 坚持阅读(Read Constantly):虽然你快速掌握了许多东西,你尚未搞懂的更深入、更基本的概念却源源不断地出现。
  • 阅读列表(Reading List):需要阅读的书籍数量快速增加,你不可能读完它们。
  • 记录所学(Record What You Learn):你一遍又一遍地学到同样的经验。似乎没有一样能持续下来。
  • 且行且思(Reflect as You Work):随着你装进肚子里的工作年限和项目经历越来越多,你发现自己在等待着一种质变,使你神奇地变成“经验丰富”的开发者。
  • 以退为进(Retreat into Competence):当你发现了自己的大片无知领域时,你感觉自己要被淹没了。
  • 密切交往(Rubbing Elbows):你感觉有更高级的技术和方法而自己却抓不住。
  • 分享所学(Share What You Learn):周围的人学习起来没有你快,你感到失望了。
  • 坚守阵地(Stay in the Trenches):你获得一次提升的机会,组织想把你提升到一个不再编程的职位上。
  • 钻研名著(Study the Classics):你周围更有经验的人们不断地引用一些书中的概念,他们以为你已经读过那些书了。
  • 持续动力(Sustainable Motivations):你发现自己工作在一个令人失望的世界里,做着含糊不清的项目,面对着客户不断摇摆而且相互冲突的需求。
  • 打扫地面(Sweep the Floor):你是个缺少经验的开发者,需要赢得团队的信任。
  • 深水区域(The Deep End):你开始担心自己的职业并没有处在稳定水平,而是陷在了泥沟中。
  • 漫漫长路(The Long Road):你渴望成为一位软件师傅,而你的抱负同人们的期待不一致。
  • 白色腰带(The White Belt):你正在奋力学习,因为已有的经验似乎使新技能的学习更加困难了。
  • 释放激情(Unleash Your Enthusiasm):你发现自己为了适应团队而压抑自己对软件开发的兴奋和好奇。
  • 使用源码(Use the Source):如果你周围的人没有能力区分好代码和坏代码,你如何能认识到自己工作中哪些地方做得好呢?
  • 使用头衔(Use Your Title):当你在职业场合介绍自己的时候,你都会觉得自己必须道歉或者专门解释一下自己技能水平和职位描述之间的差异。
  • 入门语言(Your First Language):你已熟悉了几门语言,但任何一门用得都不流畅。

–EOF–