程序员自学指南

对于程序员来说,自学的重要性无需多说了,大牛们都说一个优秀的程序员不能只懂一种编程语言,另外还有各种技术也是日新月异,可见自学能力是程序员的刚需。本文基于John Z. Sommez的《Soft skills:The software developer’s life manual》中第三部分的内容,归纳高效自学的方法。

自学的反模式

比较低效的自学方法是找一本技术书,逐页逐页地看,想着把整本书看完了再开始写代码。这种方法一是速度慢,技术书少则三四百页,多则五六百页,完整看完起码花几个月时间;二是掌握得不牢固,可能看了后100页就忘了前100页的内容。

还有一种方法我也觉得很糟糕,就是一开始就埋头写代码。有些拥有几年写代码经验的程序员,他们已经掌握了一门语言,当他们接触另一个门全新的语言时,觉得自己已经很有经验了,随便google一下基本的函数、流程控制语法后就开始写代码,遇到问题就google百度。我认为这种方法虽然可以写出点东西,但是学起来很不系统,不牢固,很可能会写出不符合该语言最佳实践的代码,简单来说就是半桶水,很不优雅。

高效自学的模式

最好的学习模式归纳起来就是两点:动手实践教会别人

动手实践从字面意思已经很好理解了,关键是要尽快动手,当你学会足以让你动起手来的知识时,就要买上行动起来,只有实践的时候才会知道你有什么不懂,带着问题才能更高效地继续学习。

还有一点是,学来的东西要输出出去,检验你真正学会没有最好的方法就是教会别人。当你教别人的时候至少达到自圆其说的程度,那就证明已经基本掌握了,而且在教别人的时候别人也有疑问有反馈,这是可以进一步检验自己的学习成功,找出自己的知识盲区。

指导思想就是以上两点了,但是,如何在learn(被动地接收知识)和play(动手实践)之间找到平衡,如何提高效率才是关键。

高效自学的十个步骤

贯穿十个步骤有如何三个要点:

  • 要掌握哪些内容就可以开始动手实践,上面说过了,实践越快越好;
  • 要学习的内容的框架,不需要了解所有细节,但是要有一个整体的概念,为了完成学习目标需要掌握哪几部分的知识;
  • 利用20-80法则,要掌握最核心的部分; 我觉得学习任何事情最难的就是要理清整体的框架,因为如果全新接触一样知识或者技术,很难再学习之前弄懂哪些部分是重点哪些部分是次要的,因而学习前要花多点时间做好规划,要善于利用搜索引擎,参考经典资料,当然最好是有经验的人士指路。下面看看具体的十个步骤:

第一步:理清框架

上文已经提到了,学习某样东西之前,你根本不知道你不知道什么,所以首先你要理清整体的框架,为了达到学习目标,要掌握哪部分内容。

第二步:确定学习范围

经过第一步之后,你了解到即将要学习的东西包含了哪些方面的内容,此时你需要精确你的学习范围。

例如要学习Python,经过第一个步骤之后,你可以已经知道学习Python要掌握哪些知识点,还知道Python可以用来开发web应用、可以用来做爬虫、还可以做数据挖掘等方面的工作。那此时你就要明确一个范围,可以把目标定在“学习利用Python开发web应用”。

第三步:明确终点

确定好学习范围后,还需要设定一个成功的终点,这个终点必须清晰、明确。例如要学习Python开发web应用,那就给自己设立一个目标,这个web应用开发到什么程度,要实现哪些功能。这个终点不一定要达到很高阶的程度,只是一个阶段性的可检验的成果。

第四步:寻找资源

在这一阶段你要广泛地寻找资源,只要与你的学习目标相关的学习资源都找过来,无论是书籍、视频、博客文章、源代码、文档,还是其他的学习资源都可以,这阶段是重量不重质的,把它们全找来再说(当然不是无下限,质量特别差的就排除掉吧)。

第五步:制定学习路径

此时你已经有了一个大致的框架,有了学习的目标了,这一步需要的是制订一个学习路径,把整个学习的内容分解成一个个小的子集,并且是一个可以step by step来完成的学习规划。如果自己不知道应该按什么先后顺序来学习,可以参考第四步找来的学习资源,看看人家是按什么样的顺序来介绍相关知识的。

第六步:筛选资源

制定完学习路径后,就根据每一个要学习的专题筛选第四步找来的学习资源,不必局限在一本书或者一个视频里面,要做的是类似专题阅读,针对某个专题,过滤出最好的学习资源。

第七步:吸收足够的知识

之前也说过,虽然说越快实践越好,但不代表不打牢基础盲目地动手,要在learn和action里面找好平衡,在这一步里,就是要学习足够的令你可以开始动手实践的知识。

第八步:随意实践

在第七步里面已经看了足够的学习资料了,因而这一步就是实践。针对第七步学到的内容,做一点小demo,找出自己还有哪些存疑的地方。

第九步:做出成型的东西

经过第八步的实践,已经找出了知识的盲区,那么就根据自己的问题再深入地研究学习。循环反复第七、第八步,直接达成第三步制定的学习终点。

第十步:输出成果

来到最后一步了,为了稳固学习成果,最后就是要把学到的东西输出出去。不单单是公开源码,而是把学到的重点用自己的语言组织复述,可以写博客,可以写技术文档,可以录教学视频,还可以做presentation,也可以直接手把手教别人。

总结

除了John Z. Sommez的十步学习法外,我还了解到一个叫做The first 20 hours-How to learn Anything. Josh Kaufman at TEDxCSU的TED。其实这个TED里面演讲者的观点和上面所说的内容异曲同工,但他还提到一点,就是学会一样东西只需要20小时。经常被人提到的一万小时定律,其实真正的含义是经过一万小时的学习可以达到很top的阶段,甚至是成为专家级了。经过Josh Kaufman的实践,只要掌握方法,经过20小时高效的学习,已经能达到一个很好很够用的程度了。

最后归纳如何:

  • 学习前一定要有框架,有方向,有重点,这是重中之重;
  • 明确目标,细化路径;
  • 有针对性的主题学习;
  • 学到足够的知识后马上实践;
  • 在实践中找问题,带着问题再深化巩固,修正自己;
  • 不要浮躁不要心急,20小时能达到效果
  • 要把学到的输出

最后的最后,兵无常势,水无常形,根据实际情况灵活调整以上步骤。


参考资料:

  • 《Soft Skills:The software developer’s life manual》
  • The first 20 hours-How to learn Anything. Josh Kaufman at TEDxCSU
::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com



自怼圈/年番新

DU21.7
关于 ~ DebugUself with DAMA ;-)


关注公众号, 持续获得相关各种嗯哼:
zoomquiet


粤ICP备18025058号-1
公安备案号: 44049002000656 ...::