Apprenticeship Patterns软件开发者路线图
chap4:准确的自我评估
a."只求最差"【让自己有更广阔的成长空间,总结自己养成了哪些习惯,学习了哪些
技术和知识】
快速学习的人们面对的主要风险之一就是变成小池里的大鱼【不要沾沾自喜,目标是
巨型鱼】
目标是度量自己的能力,并找到比昨天的自己做得更好的方法【找到自己的方法,模仿
更强的开发者,集中精力向团队学习】
思考:如何进入更优秀的团队,自己成为“最差”?【对团队快速增长的贡献】
如果在团队中从“最差”开始成长,有什么方法?
自己团队中有”最差“,如何给予指导?
b."找人指导"
实践:加入邮件列表
思考:如何寻找高手?如何与高手沟通?
扩展阅读《software Craftsmanship》,《Mastery》
c."同道中人"
问题:自己无人指导,束手无策【参加线下聚会,甚至自己可以组织】
思考:如何做到一直有能力问一些使整个社区吃惊的问题
扩展阅读《Hackers&Painters》,《Extreme Programing Explained》《Refactoring
to Patterns》《Refactoring》《Design Patterns》
d."密切交往"
问题:生产率稳定后,感觉有更高级的技术和方法自己掌握不了?【结对编程的开发
】
思考:如何了解结对编程是否被有效使用?学徒又能做些什么?
如何做到”吸收那些只可意会,不可言传的知识;靠每天的点滴进步积累成一
种实践习惯“【学习他们日常工作习惯,观察他们靠什么方法将习惯磨炼成技能】
扩展阅读:乒乓编程,《The Craftman》
e."打扫地面"
问题:不确定自己在团队中的位置,团队不确定自己的水平?【主动完成简单无趣但
却又必须完成的任务】<eg.维护构建系统,产品支持,响应维护需求,bug修正,代码
复查,清除技术债务,搭建项目wiki,更新文档>
思考:解决团队里拖延了几个月的最邋遢的任务
扩展阅读《Situated Learning 情景化学习》
chap5:恒久学习
扩展阅读《Pragmatic Thinking and Learning 注重实效的思考和学习》
成功学徒的显著特点就是能证明自己的学习能力
a.提高带宽
多维度的给自己学习机会,懂得怎样为自己“提高带宽”,理解何时“提高带宽”
思考:不要光学习而降低了开发速度
扩展阅读《Agile Software Development Ecosystems敏捷软件开发生态系统》
b.不断实践
通过练习反思自己的技能,找到更有效的工作习惯,并开发出基于更加抽象的知识“块”来“看”问题的能力。
行动:找练习题做,一个月内每星期都将这个练习重做并观察自己的解决方法是如何演化的。---抽象出方法后如此反复
扩展阅读《Programming Pearls》《More Programming Pearls》 《Etudes for Programmers程序员练习曲》
c.质脆玩具
失败,并从失败中学习,然后再尝试
d.使用源码
实践:下载最新源码,这样可以查阅它的历史,跟踪未来的发展;试着重构代码,从而理解为什么它的编码者做了那样的决定
扩展阅读《Programmers at Work》
e.且行且思
经常反思自己的工作习惯;有意识地写下自己所做的事情以及这些事情之间的联系
观察团队中熟练工和师傅,思考他们使用的实践,过程和技术,看这些东西能否跟自己经验中的其它部分关联起来
anti-experience:每一次新的时间经历仅仅强化了你所养成的坏习惯。
技能水平的提高,是自己在研究,适应及改善工作习惯方面所付出努力的唯一有效的证明
扩展阅读《Project Retrospective》
f.记录所学
不从历史中学习的人注定重复历史【定期去读以前写的东西,试着每次重读时找到新的关联】
扩展阅读《Better》
g.分享所学
扩展阅读《The Creative Habit》
h.建立馈路【这个要提高及熟悉应用场景】
有用的反馈,是自己可以基于它采取行动【如果认为一样东西有趣,你就能学到有趣的东西】
学会交流思想,学会聆听而不打断别人
i.学会失败
你的学习技能增强了你的成功,但你的失败和弱点仍在。【真正的目标是让你对导致失败的模式,条件,习惯和行为有所自知】
行动:迭代实现二分查找,并写好测试用例,直到满意后再调试运行,
自我反思,通过反馈回路找到不足,了解自己的弱点,但这些模式会帮助你削减自己的无知.
chap6:安排你的课程
依靠自己去寻求建议,安排自己的课程
扩展阅读《Zen and the art of Motorcycle Maintenance》
a.阅读列表
问题:搞清楚哪些书需要读,按什么次序读
b.坚持阅读
在构建“阅读列表”的过程中,要更加重视书籍而不是博客。
c.钻研名著
实践:请教藏书人为什么保留某本老书
扩展阅读:《The Psychology of Computer Programming》
d.深入挖掘
学会深入挖掘一些工具,技术和技艺.【对知识的学习要达到“
知其所以然”的程度】
深度意味着要理解导致一种设计的推动力,而不仅仅是设计的细节
愿意在一个系统中从上到下层层跟踪某个问题,愿意花时间弄清能够解释这一切的知
识。
要真正理解任何思想,你都需要重建它第一次被表达时的上下文。
找出是谁第一次提出了那种思想,弄明白他们当初想要解决的问题。
对一种认为有用的思想,跟踪它的传承路线是一次重要的练习
在自己学习的知识背后,是否隐含着一种更基本的计算机科学的概念,在你采用的实
现中存在着怎样的权衡与取舍
阅读教程的时候,寻找可用于放置新知识的思想结构
目标应该是理解某个概念的历史上下文以及它是否是另一种思想的特例
在不影响自己对软件开发各方面相对重要性的前提下,让自己获得足以解决任何问题
的专业化知识。
了解自己的知识边界
e.常用工具
工具,不需要阅读文档的工具,在心里知道最佳使用方法,难点,FAQ
实践:写下自己的常用工具列表,不能少于五项
扩展阅读《The Algorithm Design Manual》,《The Creative Habit》
《Reflections on the Human Condition》