《软件开发者路线》笔记之--第01章 绪论

来源:互联网 发布:小管家进销存软件 编辑:程序博客网 时间:2024/05/22 00:30

20110731~20110731

#

学徒期的重要性

学徒期(apprenticeship)很重要,因为它能把掌握技能的必胜热情灌输给你。它把永远学习的热情灌输给你,并且在此过程中,是软件学徒变成了卓越的开发者。

#

刚刚启程的人

#

鼓励那些热爱创作软件的人专注于他们的技能

#题外话:在中国,如果你做了几年技术,还是在做技术一般情况下会遭遇到别人的耻笑。

#我觉得,一个人无论专注于任何正当的事情都是值得尊敬的,即使是修鞋。

#

我们的职业过程总是开始于”HelloWorld“,但它什么时候结束呢?

是结束于一次向中层管理职位的晋升?

还是结束于自己的放弃?

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

#

作者(Dave H. Hoover)在这里讲了自己的学习故事,大概是:

经历了两次学习失败后入门了Perl语言

两次失败为:

    >12岁时的BASIC语言学习,觉得无趣

    >25岁时的Java语言学习,觉得自己真的成了傻瓜

#《C for Dummies》、《C++ for Dummies》、《Java for Dummies》

在这两次学习失败之后,碰到了两位指导者:

    >在Irv Shapiro的指导下,通过啃完《ProgrammingPerl》重新踏上了软件设计之路,并给他布置了一个”质脆玩具“作业;

    >在Steve Bunes的演示下,学会了强大的调试技术

#

向周围的Perl程序员和系统管理员收起面子”暴露无知“,并得到了一些快速的指导,并作者弄清楚了程序中的一些问题,并理解了UNIX文件权限,并很快的完成了Irv老师给他布置得那个”质脆玩具“作业。

#

两年之后,开始了极限编程(Extreme Programming,XP)和敏捷开发(Agile Development)之旅,成为了这方面得先驱。

找到并学习了一些好书《Refactoring to Patterns》(重构与模式)、《Object-Orinted Software Construction》(面向对象软件构造)、《A Pattern Language》(建筑模式语言)等。

#

从2002年开始学习Ruby,直到出现了Ruby on Rails,才开始在日常工作中真正使用Ruby。

#

2005年,作者再次拾起Ruby,努力寻找一些在日常工作中使用它的方法。并发现自己的思维方式太想Perl程序员。

#

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

#

Ruby拥有优雅、简捷的美誉,而作者认为自己的代码让人感觉极丑陋又蹩脚,并认为自己是在做错误的事情。

#

最后作者决定把自己Perl的经验丢在一边,开始深入钻研Ruby文档。

#

为了让所有这些新知识留在作者的大脑中,作者继续决定”暴露无知“:在网上记下了自己学到的东西,让所有人看。

#

有点像疯狂英语的创始人李阳老师的观点---“热爱丢脸,寻找机会丢脸”。(上高中那会儿跟着他也疯狂了一段时间,上大学后就停止了,这也造就了我现在的哑巴英语,应该继续加强口语的训练。决定站在中海日辉台的顶上读英语,练习口语。)

#

什么是软件技能??

“工艺(craft)”、“技能(craftsmanship)”、“学徒(apprentice)”、“熟练工(journeyman)”、“师傅(master)”这些词语之间存在着循环解释。如:

“工艺”:“一个几十所拥有的技能”

“师傅”:“表现出技能水平的人”

“技能”:“将手工艺传统中的技师连接在一起的一种品质”

#

Pete McBreen的《Software Craftsmanship》认为:软件开发是一门工程学科或一门科学。其没有把今天正在实践者的软件技能跟他希望实践的软件技能区分清楚。

#

从敏捷开发运动中学到的经验之一是:仅仅告诉人们去做事情并不能带来长久和可持续的变化。

#

按照你的要求去做事的人如果遇到你的规则没有囊括的新情况,他们马上就会迷失。

#

只有理解了支撑规则的底层因素,才能想出新的规则来适应任何情况。

#

作者认为的软件技能:

    >对Carol Dweck所做的研究,即提倡“成长型思维模式”(Growth Mindset)的依属。这带来了一种信念:如果你愿意钻研一件事,你就能做的更好,一切也将得以改善。用她的话来说,“努力是使得你聪明能干的东西”(《Mindset》心理定向与成功,page16),而失败不过是引导你下次尝试不同方法的激励机制。这根以下信念是相反的:我们每个人天生都带着固定数量的禀赋,而失败就是我们天资不够的证明。

    >基于你周围世界获得的反馈,始终不断适应并作出改变的要求。Atul Gawande将这说成是一种“从你所做的事情中寻找不足之处并寻求解决办法”的意愿(《Better》page257)

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

    >一种认为分享知识胜于隐藏独享的信念。这常常关联到对自由和开源软件社区的参与。

    >一种敢于试验并被证明错误的意愿。这意味着我们可以什么都试试。我们失败了。然后我们在下次实验中运用这些来自失败的经验。正如Virginia Postrel所说:“并非每种实验和想法都是好的,但只有尝试新的想法我们才能获得真正的进步”。每一种进步都可以被继续改善;每一种新的想法也会使更多的新组合成为可能“(《Future Enenies》,page59)。

    >一种对于个体而不是群体的关注。这不是一场”领导者-追随者“的运动,而是一群想要提高自身技能的人,发现:争论、反对、分歧正式达到目标的途径。我们相信我们都处在同样的旅途中,我们追寻的是自身的改变,而非世界的改变。

    >一种包容性。不抵制企业级软件开发、计算机科学或软件工程。一种有用的系统应该能够从软件开发社区的所有元素中识别并吸收那些最好的思想。

    >以技术为中心,而非以过程为中心。拥有高超的技能要比使用”正确“的过程更重要。

    >对Etienne Wenger所谓”情景学习“的一种强烈偏好。这种思想是说,软件社区应该尝试抓住想”听力范围内的软件“这样的模式。其要旨是:最好的学习方法,就是同那些使用你要学习的技能来达到某种目标的人处于同一个房间里。

#

做软件学徒意味着什么??

    >这样的态度:对于已经做完或者正在做着得事情,永远都有一种更好、更聪明或更快的方法来完成它。

    >这样一种状态或过程:不断演进并寻找更好的方法,找到能使自己学会那些更好、更聪明或更快方法的人、公司和情景”

    >拥有这种“不依赖于任何人向你提供方案,靠自己找到处理问题的建设性方法”的内在动力是非常有价值的。

尽管学徒期的进展过程都有你自己来决定,斗牛士否有人指导,以及知道人的品质也会对你的技能产生持久的影像。

在这段时间里,你将首先内向地关注自身,下决心提高自己的技能。

你必须学会自我成长,学会如何学习。

本质就是这种对自身的关注和提高自身技能的要求。

学徒将从一个除了持续学习很少有其他责任的位置成长到一个拥有更多外向型责任的位置,我们一般会相信:这种转变只有在回首往事的时候才能看出来。

#

做熟练工意味着什么??

跟学徒一样,为了在技艺方面不断地进步,熟练工和师傅将保持一种内向的对于自身的关注。

同时,另一种新的关注会出现在熟练工身上,那就是对从业者之间关系的关注,以及对团队内外的沟通渠道的关注。

熟练工关注如何构建一些能彰显其技艺进步的更大的应用程序;他在不同的项目和是复制件移来移去,力求拓展其技艺组合的广度和深度;他力求提升自己在社区中的位置;并努力为成为师傅做好准备。

#

做师傅意味着什么??

精通意味着行使学徒或熟练工的所有职能,同时还要关注如何将行业向前推进。“达到既能和技术的炉火纯青”只是一个开端。精通还包括掌握一种技能,然后把它变成一个能将其他人的技能提升几个数量级的放大镜。比如,创建新的开发工具,训练一代熟练工。总之,师傅将高级技能的获取、使用和分享看成是身为软件技师的重要方面。

#

学徒期是什么??

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

#

现代学徒期的概念主要是一种心境;你认识到自己处于起始阶段,哪怕你已编程多年;而且你想采取措施从你所处的环境中建立自己的学徒过程。

#

大多数人都没有机会参与一次有软件熟练工指导的正式学徒训练。多数人都只能在不太理想的环境中魔力他们的学徒过程。

#

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

#

学徒的过程是学习如何成为专业软件开发者的途径。特别的,它是学习如何成为你所找到的技能最高超的软件开发者的途径。它包括寻找好的老师并利用在他们身边工作的机会来学习。它是一种不同的软件职业者道路上迈出的第一步,这种职业者想要的绝不只是“称职”。





原创粉丝点击