目录

《软件开发者路线图—从学徒到高手》读书笔记

该书并非一本关于如何设计软件的书,而是一本关于如何设计软件开发职业生涯的开端并为你在该领域创造成绩的书。该书是以模式语言的形式组织的。 ** 模式语言是针对特定领域中常见的问题的一组相互关联的解决方法。 **

模式都包含一个“情景分析”、一个“问题描述”和一种“解决方法”,然后是一组单一或多重的行动。在每种模式接近尾声的地方都有一个“行动指南”的小节,这一小节描述了你可以立即付诸实践的具体事情。 任何模式都应包含给定情景中一大类问题的一揽子解决方案,记住这一点很重要。模式是用来修正以适应具体情形的,而不是用来生搬硬套的。

做软件学徒意味什么?

1、必须学会自我成长,学会如何学习。对自身的关注和提高自身技能的要求。

2、空杯心态,已有的经验越多,你就越需要更多的努力进入到“空杯”状态,清除思想中的坏习惯,放下对技能水平的自鸣得意,敞开自己,从更有经验的同行那里学习不同的而且常常是违反直觉的新方法。

学徒期做什么赢得新团队的信任?

主动完成简单无趣却又必须完成的任务。因为这表明你能完成高质量的工作。

这类任务包括维护构建系统,产品支持,响应维护需求,bug修正,代码复查,消除技术债务(technicaldebt),搭建项目wiki,更新文档,为其他人的想法充当传声筒,等等。通常,你会关注风险更低的系统边缘部分,而不是常常带有大量依赖性和极高复杂度的核心。

摘要

1、定期更新简历,定期面试。养成定期把自己的简历审查一遍的习惯。一边看一边把具体技能提取到一份单独的列表中。定期到去外面面试,看看自己处在什么位置,与市场需求由什么差距。看看自己的简历技能项还差什么。

2、写下跟工作有关,而且自己不甚了然的五件事。将这份列表放到自己经常可以看到的地方。然后随工作内容的改变养成不断更新这一列表的习惯。

3、要在编程方面真正擅长需要一生的努力,还有不断学习实践的进取心。

4、老板付你工钱是让你构建能为客户解决问题的东西。

5、做你自己喜爱的事,钱自然会来。

6、准备描述自己的职位头衔,确定它反映你实际的工作内容和技能水平。准备自己打算晋升职位的要求

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

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

9、使用开源项目,阅读分析开源项目源码

10、在软件开发领域做一名会思考的从业者。这包括经常反思自己的工作状况。考虑一下自己的实践是新颖的,创新的,还是过时的。对那些团队中其他人都想当然的事情,多给自己画几个问号。 如果觉得目前工作中有些让人特别痛苦或开心的事情,问问自己事情是怎么变成这个样子的,如果问题是负面的,如何能改善它?我们的目标是通过将每一种经验拆分开,然后再以新的、有趣的方式组合起来,从其中提取最多数量的教育价值。

11、记录所学,不要低估写作的力量。写博客

12、分享所学,呈现自己出来,扩大自己影响力。

13、维护一张待阅读清单,用它来跟踪你打算读过的书,并记下已经读过的书。阅读清单里要包含经典名著和现代的、注重实效的图书

14、坚持阅读,即使每两个月读一本编程相关的书,每周也就35页,用不了多久,你就会对IT行业由深入的了解,并使自己不同于周围人。

15、拿出一本笔记簿,开始简单记录你对于本书的想法,或者它所激发的任何思想。所做的笔记一定要有个日期。读完这本书以后,针对所学的其他东西,继续按同样的方式使用这本本子。经过一段时
间,记下的条目就会成为博客、杂志文章,甚至一本书的基础。

16、Brooks法则,FredBrooks1975年在他的《The MythicalMan-Month》(人月神话)一书中提出:向进度落后的项目中增加人手,只会使进度更加落后。Brooks还打过另外一个有趣的比方:一个女人可以用九个月时间生产一名婴儿,但九个女人却不能用一个月时间生产一名婴儿。

17、深入了解挖掘一些工具、技术。知其然,更要知其所以然。

18、学习一个新概念,要去理解它的背景、历史上下文、它要解决的问题。这是个好习惯。

19、写下自己的常用工具列表,提升工作效率。定期考察是否有更好更强大的工具替代当前工具箱的工具。

本书附录,模式列表:

1.** 另辟蹊径(A DifferentRoad) ** : 你发现自己想要去的那个方向跟通往软件技能的道路并不相同。

2.** 只求最差(Be theWorst) ** : 当快速超越了周围的每一个人,你的学习速度下降了。

3.** 质脆玩具(BreakableToys) ** : 你工作在一个不允许失败的环境中,却需要一个安全的环境来学习。

4.** 具体技能(ConcreteSkills) ** : 你想到一个优秀的团队中工作,然而你掌握的实用技能很少。

5.** 正视无知(Confront YourIgnorance) ** : 你发现了自身知识中的许多漏洞,而你的工作需要你理解这些主题。

6.** 技重于艺(Craft overArt) ** :你需要向客户交付解决方案,你可以选择采用一种更简单且已证明有效的方案,也可以利用机会来创造一些新奇和美妙的东西。

7.** 建立馈路(Create FeedbackLoops) ** :你不知道自己是否正遭受“无意识的无能”(unconsciousincompetence)之苦。

8.** 深入挖掘(DigDeeper) ** : 你只拥有许多工具、技术和方法的肤浅认识,在尝试解决更困难问题的时候,不断地遇到障碍。

9.** 自定路线(Draw Your OwnMap) ** : 老板提供给你的职业道路全都不适合你。

10.** 提高带宽(Expand YourBandwidth) ** : 你对软件开发的理解较为狭隘,只关注日常工作中的低层次细节。

11.** 暴露无知(Expose YourIgnorance) ** : 你发现了自身知识中的许多漏洞,担心人们会认为你根本不明白自己所做的东西。

12.** 常用工具(FamiliarTools) ** : 你发现很难估算自己的工作,因为你的工具集和技术栈总是在快速变化。

13.** 找人指导(FindMentors) ** : 你发现自己花费大量的时间在发明轮子,然后不断遇到障碍,但却不清楚到哪里找人指导。

14.** 同道中人(KindredSpirits) ** : 你发现自己无人指导,束手无策,而且周围气氛看起来与自己的期望不一致。

15.** 学会失败(Learn How YouFail) ** : 学习能力提高了你的成功几率,但失败和弱点依然存在。

16.** 培养激情(Nurture YourPassion) ** : 你工作在一个不好的环境中,它扼杀你对软件工艺的激情。

17.** 不断实践(Practice,Practice,Practice) ** : 日常编程活动不会给你通过犯错来学习的机会。

18.** 坚持阅读(ReadConstantly) ** : 虽然你快速掌握了许多东西,你尚未搞懂的更深入、更基本的概念却源源不断地出现。

19.** 阅读列表(ReadingList) ** : 需要阅读的书籍数量快速增加,你不可能读完它们。

20.** 记录所学(Record What YouLearn) ** : 你一遍又一遍地学到同样的经验。似乎没有一样能持续下来。

21.** 以退为进 (Retreat into Competence) ** : 当你发现了自己的大片无知领域时,你感觉自己要被淹没了。

22.** 密切交往(RubbingElbows) ** : 你感觉有更高级的技术和方法而自己却抓不住。

23.** 分享所学(Share What YouLearn) ** : 周围的人学习起来没有你快,你感到失望了。

24.** 坚守阵地(Stay in theTrenches) ** : 你获得一次提升的机会,组织想把你提升到一个不再编程的职位上。

25.** 钻研名著(Study theClassics) ** : 你周围更有经验的人们不断地引用一些书中的概念,他们以为你已经读过那些书了。

26.** 持续动力(SustainableMotivations) ** :你发现自己工作在一个令人失望的世界里,做着含糊不清的项目,面对着客户不断摇摆而且相互冲突的需求。

27.** 打扫地面(Sweep theFloor) ** : 你是个缺少经验的开发者,需要赢得团队的信任。

28.** 深水区域(The DeepEnd) ** : 你开始担心自己的职业并没有处在稳定水平,而是陷在了泥沟中。

29.** 漫漫长路(The LongRoad) ** : 你渴望成为一位软件师傅,而你的抱负同人们的期待不一致。

30.** 白色腰带(The WhiteBelt) ** : 你正在奋力学习,因为已有的经验似乎使新技能的学习更加困难了。

31.** 释放激情(Unleash YourEnthusiasm) ** : 你发现自己为了适应团队而压抑自己对软件开发的兴奋和好奇。

32.** 使用源码(Use theSource) ** : 如果你周围的人没有能力区分好代码和坏代码,你如何能认识到自己工作中哪些地方做得好呢?

33.** 使用头衔(Use YourTitle) ** :当你在职业场合介绍自己的时候,你都会觉得自己必须道歉或者专门解释一下自己技能水平和职位描述之间的差异。

34.** 入门语言(Your FirstLanguage) ** : 你已熟悉了几门语言,但任何一门用得都不流畅。