《软件开发者路线图 从学徒到高手》 - 书摘精要

【英文书名 Apprenticeship Patterns : Guidance for the Aspiring Software Craftsman】

(P2)
最强大的模式是那些可以反复运用并取得成功的模式;

模式并不一定非要新颖才实用。事实上,不新的模式才更好;

(P2) 掌握不只是知晓。掌握是能帮你减轻负担的知晓;

(P5)
不知而不知其不知者,愚者也 —— 避之!
不知而知其不知者,惑者也 —— 授之!
知之而不知其知者,寐者也 —— 醒之!
知之而知其知之者,觉者也 —— 从之!

(P7)
向任何一门学科的高手学习,我们都能收获很多;

(P8)
模式是用来修正以适应具体情形的,而不是用来生搬硬套的;

(P10)
彼此的关联不见的一下子就能看清,而每次回顾时,你都会发现新的东西;

(P15)
孩子们带给他们父亲的一样东西就是让我有了对自身责任的高度关注;

(P22)
对于那些拥有熟练地软件开发技能并热爱学习的人们来说,软件开发将是可以持续一生的职业,而且会是一次风光无限的旅程;


(P24)
对于任何一个精通其“入门语言”的程序员来说,当他学习一门新的语言时,都会遇到求助于已有语言的标准和惯用法的诱惑;

(P26)
如果你愿意钻研一件事,你就能做得更好,一切也将得以改善;

努力是使得你聪明能干的东西;

(P27)
“并非每种实验和想法都是好的,但只有尝试新的想法我们才能获得真正的进步。要做的事情总是可以更多。每一次进步都可以被继续改善;每一种新的想法也会使更多的组合成为可能。”

掌控自己的命运并为之负责,而不是等待别人给我们答案;

(P28)
没有哪种过程或工具能使每个人都同样成功。尽管我们都能提高自己,但我们的技能水平总会有差异;

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

(P29)
你的学徒过程由你自己掌控,而最终的训练成果就是你的责任感;

尽管学徒期的进展过程都由你自己来决定,但是否有人指导,以及指导认得品质也会对你的技能产生持久的影响;

(P31)
你认识到自己处于起始阶段,哪怕你已编程多年;而且你想采取措施从你所处的环境中建立自己的学徒过程;

(P32) 我们可以从容不迫地培养学徒开发者,因为我们面对的是过剩的问题,而不是短缺的问题。如今的开发者数量比我们需要的多,而我们缺少点是好的开发者;

(P33)
软件设计模式就是从许多运行系统中提取出来的,那些系统中使用同样的方法来解决类似的问题;

(P34) 学徒期是你关注自身成长超过所有其他东西的一段时间;

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

(P38)
让大脑放下所有不重要的东西,一种好的记号(notation)能使大脑关注于高级问题,效果上就相当于提高了人类的智能水平。任何专业和行业的技术名词,在那些没有经过专门训练的人们看来都是难以理解的。但这并不是因为它们本身很难,相反,它们无一例外地是为了让事情更简单才被引入的;

(P39)
如果你想获得一份工作,而这份工作要求你使用某种特定的编程语言,那就使用那种语言来构建一个玩具应用,最好是个开源项目,这样你所期望的雇主就很容易看到你写的代码示例;

解决一个问题是花费几分钟还是几天,就看有没有一个可以随时帮助你的人;

但还要记住,不能依赖那个更有经验的朋友来解决你所有的问题;

(P39)
在学习第一门语言的过程中,一种改善学习体验的基本方法就是找一个实际问题来解决。这可以使你的学习根根植于现实世界,从而为你提供第一个较大的反馈回路(feedback loop);

基于书本或文章中那些短小的、人为设计的例子来学习是有局限性的,你将失去学以致用带来的好处。毕竟,你在工作中要做的是解决问题;

(P41)
学习语言的最好方法就是和一位该语言的专家一起工作。一位专家就够了,但一定要有一位;

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

(P42)
要领悟到它们为何重要,以及何时使用它们,则需要社区分享的经验;

语言的精妙之处常常被总结在一些书中,像《Effective XXX》系列。在掌握基本语法后马上阅读这样的书籍能大大加速你的学习过程;

(P43)
几年之内,第一门语言将是你学习其他语言的框架。第一门语言学得越好,下一门语言学起来就越容易;

深入挖掘入门语言也有危险性,那就是深陷其中而止步不前;

健康的职业生涯会把你带入软件开发领域多姿多彩的语言洞天;

每一种语言都为你提供了使用不同模式来解决问题的机会;

在逐渐超越第一门语言的过程中,你应该寻找机会去学习一些采用迥然不同的方法来解决问题的语言;

—— 惬意与面向对象语言的学徒应该探究一下函数式(functional)编程语言;
—— 畅然于动态类型的学徒应该钻研一下静态类型;
—— 安逸于服务器端编程的学徒应该考察一下用户界面设计;

(P44) 你不应该“嫁”给任何特定技术,而应该有足够宽的技术背景和经验基础,使自己能针对特定的情景选择好的解决方案。 —— 《程序员修炼之道 从小工到专家》

(P45) 通常,每一步都该有进门的感觉,这是初学者的心 —— 一种正在“成为”的状态 —— 《禅者的初心》 铃木俊隆

(P45) “你必须忘记已经学到的东西” —— You must unlearn what you have learned;

(P46)
“可以随时犯蠢的自由很可能是打开天才成功之门的钥匙。”

《Working Effectively with Legacy Code》 Michael Feathers

(P47) 为了攀登高峰,你必须离开原来那个稳当的落脚处,放下已经取得的成果,甚至可能需要滑到一个峡谷中。如果你永远不肯放下已经取得的成果,你仍可能不断取得平稳的进步,却永远不能抵达高峰。 —— 《技术领导之路 全面解决问题的途径》 Jerry Weinberg

(P49) 不要让任何人压抑了你对软件工艺的兴奋 —— 它是一种宝贵的财富,它将加速你的学习;

(P51) “拥有知识,与拥有运用知识来创造软件应用的技能和动手能力不是一回事。这就是‘工艺’发挥作用的地方。”

(P52)
虽然学徒能把快速学习的能力带给团队,但在技术水平达到一定高度前,在特定的工具和技术领域拥有具体的、可展示的能力还是会增大团队信任你、相信你对他们有间接贡献的可能性;

具体技能的例子包括使用各种流行的语言编写构建脚本,了解像 Hibernate 和 Struts 这样的开源框架,基本的网页设计技能,如Java script ,以及你所用语言的标准库;

对“入门语言”的深入理解能帮你建立信任度,对团队而言也是很有用的;

(P52)
随着你慢慢过渡到熟练工的角色,你将变得越来越不依赖这些技能,慢慢地别人开始给予你的名声,你以前参与过的项目,以及你能给团队的更深品质来雇用你。在这一天到来之前,你的优点必须更明显一点;

(P53) 许多雇人的经理只会看这份列表中的项目,而不愿看你的经验总结;

(P55)
把真相告诉人们,让他们知道你已经开始理解他们想要的是什么,而且正在学习怎样把这样的结果交给他们;

如果你想让他们安心,那也应该通过你的学习能力,而不是通过假装知道自己并不知道的东西;

暴露无知,最简单的方法就是问问题;

如果采用最直接的可用途径,通往熟练工的道路就可以被缩短;

经过时间和实践,直接去问团队里最明白的人会成为你的习性;

你的本能告诉你要掩饰自己的无知,装作通晓各种专家知识,但这只会阻碍你的成长,并阻止你完成正在尝试的工作;

(P58)
每天只有24小时,你无法将每项技能都研磨到很高水平,因此你必须学会在它们中间做必要的权衡;

工艺方法的一个重要方面就是要有一种意愿:把更大的团队利益置于个人利益之上,而不是利用团队和客户促进个人成长;

(P59) “如果你从来没有一败涂地,那很可能你也没尝试过有价值的东西。”

(P60)
“一直等待直到自己准备好”会变成一张啥也不做的处方;

为失败做好准备并从失败中振作将为你打开怯懦者永远看不到的大门;

(P61) 如果水位高过了头顶,你将会溺水;

(P69) “要在编程方面真正擅长需要一生的努力,还有不断学习实践的进取心。” —— 《极限编程实施》 Ron Jeffries

(P70) 在学徒期,相比薪水和抽安通意义上的领导能力,你要更看重学习和成长的机会;

(P72) 我们为客户构建的东西“可以”是美的,但“必须”是有用的;

(P75) “如果想挣钱,往往就被迫去解决那些非常难处理,没有人能够轻松解决的问题”;

(P76) “做你喜爱的事,钱自然会来。”

(P78)
“成为伟大黑客的关键在于做自己喜欢的事。要把一件事情做好,你必须热爱它。所以,只要你能坚持对编程的热爱,到了这种程度,你就做得很好了。”

“钻研名著” —— 当你的激情陷入危险处境时,可以让自己沉浸到软件开发领域额的杰出作品中,这可以帮你越过难关。这些永恒的书籍能打开你的视野,让你看到不同的世界,一个一切可以变得更好的世界;

(P84) 不要让头衔影响了你,它只是一种娱乐,你应该在意识中将它边缘化;

(P86)
在组织内部,对杰出工作的回报就是等级的提升;

“一个人一旦停止了实践,他对技艺的精通就马上开始消退。”

(P88) 他们会期望你能给出一个符合他们价值系统的合理解释,说明白当初为什么离开了,现在为什么又回来了;

(P89) 赚更多的钱意味着你对公司更有价值;

(P96)
作为团队中最弱的一员,你应该比其他人更用功;

“要么游起来,要么沉下去。”

(P97) “与优秀的程序员一起工作是一种更高的学习方法。”

(P109) 不论你来自哪里,在加入一个新项目时都是从头开始。

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

(P114)
“学会那些本来不会做的事情,常常比去做已经会做的事情更加重要。” —— 《敏捷软件开发生态系统》 Jim Highsmith

(P121) 深入领会算法复杂度和数据结构基础没有坏处,而且时时有用;

(P124) 你到底决定做什么完全不重要,只要你实践学习;

(P127) 那些能直接从源码中快速汲取知识的人很快就能成为更好的程序员,因为他们的老师就是世界上的每一位程序员写下的一行行代码;

(P130) 所有的经验都表明你已经有能力在这个行业生存。但它显示不出你所学到的知识量,仅仅是你所花费的时间;

(P131) 技能水平的提高,是在你研究、适应及改善工作习惯方面所付出努力的唯一有效的证明;

(P140)
学习新东西是痛苦的,特别当你在顶着压力而且几乎没有人指导的情况下学习;

正如运动员必须忍受艰苦训练后的肌肉痛楚,软件开发者需要忍受学习新东西后的神智错乱;

(P149)
“只读最优秀的。”

在你的阅读列表里,要确保经典名著和现代的、更注重实效的图书和文章混合出现;

(P152) 要真正理解任何思想,你都需要重建它第一次被表达时的上下文;

(P156) 在一个不断发生剧烈变化的时代,坚持学习的人才是未来的继承者;

(P172) 如果学徒拥有才干和正确的态度,其经济上的成功必然会伴随着学习的成功水到渠成;

你可能感兴趣的:(软件开发)