如何学习:迭代学习,精益求精
Posted 海枫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何学习:迭代学习,精益求精相关的知识,希望对你有一定的参考价值。
古人云「十年寒窗无人问,一举成名天下知」,这是中国古代为数不多的读书人的真实写照。大多数读书人只有十年寒窗,却不见得成名。
在软件开发领域有瀑布模式的软件工程方法论,它将软开发的几个过程「需求分析,概要设计,详细设计,编码,测试,发布」严格串行起来,只有需求分析清楚后,输出需分析文档,才开始做概要设计,依次类推,直到每个过程都完成后才给最终客户发布软件。但很多时候出现双方都不愿意看到的结果,那就是交付的产品并不是客户所期望的。
这两件事情有类似的地方,那就是它们运行在
封闭的系统,只有内部循环
在实际的工作环境中,技术学习是另一番景象。项目组安排一个新任务给你,你需要了解问题本身的各种因素,比如为什么会有该问题。如果你对该问题所涉及的技术一无所知,需要求助技术经理。经过一到两天的学习(没错,只有两天时间)将技术梳理清楚之后,拿出可行的解决方案。然后拿到方案评审会上讨论,评审专对方案按多维度进行“评头论足”,指出该案的缺陷,提出一些建议。给过这一轮PK之后,对该问题和所涉及的技术了解更深入,然后再想方案,进行评审。经过多轮评审之后,最终得到从技术和交付上都比较适合的方案。整个学习过程可能被K过多次,有种头破血流的感觉,但技术成长很快。
最近15年流行敏捷软件工程方法论,它采用小步快跑的方式将「需求分析,设计,编码,测试,发布」一轮一轮执行,每轮称为一个迭代。需求分析,设计,编码,测试在执行时,每个过程都对前一个过程进行验收,确保整个团队的理解与客户的想法是一致的,当然每轮迭代出口可交付的软件(即每个迭代都发布可用的新增功能),然后由客户进行验收。整个过程一旦出现理解偏差,马上进行交流和及时修正,达成交付即为客户所需要的。
同样地,这两个事情也有类似的地方,它们运行在:
开放的系统,存在正向反馈
学习规律与软件工程中敏捷方法论有异曲同工之巧,它需要经历多次循环(迭代)和正向反馈(考试检查,或者应用解决某个问题),才能一步步建立「全栈式知识结构」和实现「系统化知识」。
迭代式学习
作家格拉德威尔在《异类》一书中指出:
人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。
想要成为某个领域的专家,需要达到1万小的专业训练。如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。
在这1万小时的学习中,并不每天学习一点,经过5年之后,才将该知识(技术)掌握,而是不断地进行周期性的迭代过程。实际的过程中按如下顺序进行:
遇到问题 -> 搜索解决该问的知识(技术) -> 使用已有知识去理解新知识 -> 将新知识融入到知识体系 -> 应该新知识
每个过程都会产生冲突,学习的过程就是解决这些冲突的过程。
分享学习计算机网络的经历
最早接触计算机网络是在大三的专业课上,当时对计算机网络不感兴趣,只了解一些计算机网络的基本概念,对协议的细节一无所知,结果计算机网络成了我大学唯一一门不合格的专业课。
报考研究生时,阴差阳错地考取了分布式与计算机网络这个研究方向,幸好遇到一本外国经典的计算机网络教材,深入浅出,通俗易懂。结果不到一个月,我就将数据链路层和网络功能的功能看完了。当看完网络层功能时,合上书本,想到了它与实际生活中的运输交通整个网络体系统是类似(其实与现在发达的物流网络更为类似)。看完网络层之后,理解完数据是如何通过网络层进行互联之后,好像任督二脉打通,所有知识点完全连在一起了,剩下的知识都是协议本身的细节,但网络背后的互联协作却一览无余。
第一份工作,竟然也是跟计算机网络强相关。我在那个项目里面负责VRP(Virtual Router Protocol)协议的测试工作,对TCP/ICMP/VLAN各种协议行为做了充分的测试,还帮同事一起分析出现的各种奇怪行为。在工作之余,我阅读了RFC协议规范,甚至将VRP开源代码修改成多实例模式。
同样在第一份工作,出于对Linux内核的兴趣,将内核协议栈源代码,从网卡驱动开发,IP层协议,TCP协议,UPD协议,到Socket的处理,翻了个朝天。最后还发现一个规律:网络协议栈在实现时,经常使Adpater和装饰模式,原因是协议像水管一样,一层接一层。加一段水道,就可以烧出热开水,再加一段,就可以煮出咖啡,任君组合
然后,然后是到了我现在供职的公司,工作内容与计算机网络不相关。有次客户遇到了个tcp协议的性能问题,老大不知从哪里收到风,知道我对网络比较了解,决定让我出差到客户那处理这个网络问题。当时和客户那边的网络专家一起,经过一周的分析和数据采集,终于定位到是缓冲区由于内存不足而变小,导到大量链接发送速度下降。接下来,部门内的网络问题,我都是以重要角度投入攻关,并形成了很多定位经验。
我就是这样从网络小白,变成计算机网络工程师,整个过程不知经历了多少次迭代,多少次实验对知识的修正。从原理,到协议测试,再后来的协议问题定位。每次知识(技术认知)冲突的出现,都是需要解决的问题,一旦解决之后,能力会得到提升,知识体系更加完善。
小结
学习不会是一蹴而就,也不是经历漫长阶段才能将知识学到,而是迭代式的。每个迭代都有知识进帐,但在多次的迭代学习过程中,才能做到建立「全栈式知识结构」和实现「系统化知识」。
迭代式不习,让你们的知识更系统化,精益求精。
更实时查看文章,请关注我的公众号 「程序员思维」
以上是关于如何学习:迭代学习,精益求精的主要内容,如果未能解决你的问题,请参考以下文章