|
随着格拉德威尔的《异类》、杰夫.科尔文的《哪来的天才》等畅销书的流行,“成功的一万个小时”概念逐渐深入人心。通俗的说法就是,想要在任何领域取得卓越成就,需要至少一万个小时的“刻意练习”。
CSDN上最近一篇颇受关注的文章《软件天才都是训练出来的》,也谈到了这个话题:软件天才,或者至少说软件人才,是可以通过训练培养出来的。但具体如何训练,文中只是一带而过、语焉不详。有意思的是,国外的技术问答社区StackOverflow,有个帖子讨论得很火,说的正是“How does aprogrammer employ deliberate practice?(程序员如何应用'刻意练习')”。(链接:http://stackoverflow.com/questions/3605461/how-does-a-programmer-employ-deliberate-practice)
程序员进行“刻意练习”,最早是在《Software Craftmanship(软件工艺)》一书中正式提到,新出的《程序员应该知道的97件事》也有一小节提及。但最系统、详尽讨论的是《ApprenticeshipPatterns: Guidance for the ASPiring Software Craftsman(软件开发者路线图:从学徒到高手)》,可以称得上是程序员“刻意练习”的一本行动教科书。
(注:强烈推荐《软件开发者路线图:从学徒到高手》,可参看豆瓣评论 http://book.douban.com/subject/4924164/)
1.你需要重新思考自己的价值观和幸福观
真正的“刻意练习”,尽管其结果是超越自我的愉悦,但过程却是非常痛苦的。在学习中,需要不断人为地设置障碍,再调动各种资源去攻克它,一次又一次有意识地主动离开自我的“舒适区”。惭愧地说,大部分人包括我自己,很难坚持这一过程,正是“刻意练习”的这种难度和挑战把不同的人明显地区别开来。10年前,我第一次读到侯捷老师的文章《MFC四大天王》,后来还有荣耀的《C++程序设计之四书五经》,这些都是编程学习的路线图,列出了从基础到提高的一系列必读书籍。当时也曾雄心万丈要啃下来,但学习到《C++标准程序库》时退下阵来,以至于多年以后遇到该书译者孟岩老师,很内疚地说,你翻译了一本很好的书,但我却没有读完的毅力。
所以,希望投入到“刻意练习”的软件学徒,需要一个较为崇高的自我预期,需要持之以恒的意志力。一般人是差不多了,别再难为自己了。而有志“刻意练习”的软件学徒,是真玩命、真想要达到一个高的境界,对自我有期许、有要求,故意和自己较真,和自己过不去,如Marten Gustafson所说“本质就是这种对自身的关注和提高自身技能的要求。”
2.你需要主动为自己找一位”师傅“
”私相授受“的师傅带学徒,是比学校教育更有效的学习方式。”刻意练习“的精髓是要持续地做自己做不好的事,精确的在“学习区”内进行,要求高度的针对性。在很多情况下,这需要一个好的师傅或者教练,从旁观者的角度更能发现。“刻意练习”必须因材施教,小班学习,甚至是一对一的传授。
按说莫扎特应该是天才论的有力证据,但人们发现,莫扎特的父亲可谓当时最好的音乐老师,从莫扎特三岁起就辞职专门在家全天候地指导莫扎特,这种教育条件也是很少有人可以享受的。
如果自己身边没有好的师傅怎么办?软件工程专家林锐在《大学十年》总结的第一条经验,就是要去主动创造环境。其中提到周鸿祎对他的帮助,“于是我向只有一面之缘尚在北大方正工作的周鸿祎求助。当我小心翼翼地展示约10万行C++代码的软件时,他竟在十几分钟内就指出多处重大的设计错误。……周鸿袆放心不下,觉得我‘恶病需用猛药治’,于是意犹未尽地把我捉到北大方正插在他管辖的部门,让我学习怎样做事情。从北大方正“劳改”了两个月回来,我心服口服地承认失败了。我把察觉到的数十个毛病列出来,日后一个一个克服掉。”
程序员进行”刻意练习“,与其他领域相比有一个天然优势,就是可以充分利用网络和开源。除了《软件开发者路线图:从学徒到高手》提到的方法,Hacker News技术社区的讨论还建议了一些网络资源,如CodingDojo(编程擂台)、Code Kata(精心设计的21个编程练习),Ruby社区的Ruby Quiz邮件列表等。
优秀的开源代码也是很好的学习对象。StackOverflow问答社区建议,可以借鉴富兰克林学习写作的方法,分析一段优秀的开源代码,梳理逻辑、做好笔记,然后尝试自己重新实现,再与源代码进行比对。这个过程可以循环递进地进行。
it知识库:程序员如何应用“刻意练习”,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。