码迷,mamicode.com
首页 > 其他好文 > 详细

如何学习(3):迭代学习,精益求精

时间:2015-12-14 01:30:26      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

古人云「十年寒窗无人问,一举成名天下知」,这是中国古代为数不多的读书人的真实写照。大多数读书人只有十年寒窗,却不见得成名。

在软件开发领域有瀑布模式的软件工程方法论,它将软开发的几个过程「需求分析,概要设计,详细设计,编码,测试,发布」严格串行起来,只有需求分析充分分析后,输出需分析文档,才开始做概要设计,依次类推,直到每个过程都完成后才给最终客户发布软件。但很多时候出现双方都不愿意看到的结果,那就是交付的产品并不是客户所期望的。

这两件事情有类似的地方,那就是它们运行在

封闭的系统,只有内部循环

在实际的工作环境中,技术学习是另一番景象。项目组安排一个新任务给你,你需要了解问题本身的各种因素,比如会有该问题。如果你对该问题所涉及的技术一无所知,需要求助技术经理。经过一到两天的学习(没错,只有两天时间)将技术梳理清楚之后,拿出可行的解决方案。然后拿到方案评审会上讨论,评审专对方案按多维度进行“评头论足”,指出该案的缺陷,提出一些建议。给过这一轮PK之后,对该问题和所涉及的技术了解更深入,然后再想方案,进行评审。经过多轮评审之后,最终得出从技术和交付上都比较适合的方案。整个学习过程可能被K过多次,有种头破血流的感觉,但技术成长很快。

最近15年流行敏捷软件工程方法论,它采用小步快跑的方式将「需求分析,细设计,编码,测试,发布」组成一轮一轮运作,每轮称为一个迭代。需求分析,细设计,编码,测试在执行时,每个过程都对前一个过程进行验收,确保整个团队的理解与客户的想法是一致的,当然每轮迭代出口可交付的(即每个迭代都发布可用的新增功能),然后由客户进行验收。整个过程一旦出现理解偏差,马上进行交流和修正,达成交付即为客户所需要的。

同样地,这两个事情也有类似的地方,它们运行在:

开放的系统,存在正向反馈

学习规律与软件工程中敏捷方法论有异曲同工之巧,它需要经历多次循环(迭代)和正向反馈(考试检查,或者应用),才能一步步建立「全栈式知识结构」和实现「系统化知识」。

迭代式学习

作家格拉德威尔在《异类》一书中指出:

人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。

想要成为某个领域的专家,需要达到1万小的专业训练。如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。

在这1万小时的学习中,并不每天学习一点,经过5年之后,才将该知识(技术)掌握,而是不断地进行周期性的迭代过程中。实际的过程中按如下顺序进行:

遇到问题 -> 搜索解决该问的知识(技术) -> 使用已有知识去理解新知识 -> 将新知识融入到知识体系 -> 应该新知识

每个过程都会产生冲突,学习的过程就是解决这些冲突的过程。

分享学习计算机网络的经历

开始接触计算机网络是在大三的专业课上,由于对计算机网络不感兴趣,只了解一些计算机网络的基本概,对协议的细节一无所知,结果计算机网络成了我大学唯一一门不合格的专业课。

考研究生时阴差阳错地考入了分布式与计算机网络这个研究方向,幸好遇到一本外国经典的计算机网络教材,深入浅出,通俗易懂。结果不到一个见时间,我就将数据链路层和网络功能的功能看完了。当看完网络层功能时,合上书本,想到了它与实际生活中的运输交通整个网络体系统是类似(其实现在发达的物流网络与计算机网络更为类似)。看完网络层之后,理解完数据是如何通过网络层进行互联之后,好像任督二脉打通,所有知识点完全连在一起了,剩下的知识都是协议本身的细节,但网络的背后的互联协作却一览无余。

第一份工作,竟然也是跟计算机网络强相关。我在那个项目里面负责VRP(Virtual Router Protocol)协议的测试工作,对TCP/ICMP/VLAN各种协议行为做了充分的测试,还帮同事一起分析出现的各种奇怪行为。在工作之余,我阅读了RFC协议规范,甚至将VRP协议修改成多实例模式。

同样在第一份工作,出于对Linux内核的感兴,将内核协议栈源代码,从网卡驱动开发,IP层协议,TCP协议,UPD协议,到Socket的处理,翻了个朝天。最后还发现:网络协议栈在实现时,经常使Adpater和装饰模式,原因是协议像水管一样,一层接一层:加一段水道,就可以烧出热开水,再加一段,就可以煮出咖啡,任君组合

然后,然后是到了我现在供职的公司,工作内容与计算机网络不相关。有次客户遇到了个tcp协议的性能问题,老大不知从哪里收到风,知道我对网络比较了解,决定让我出差到客户那处理这个网络问题。和客户那边的网络专家一起,经过一周的分析和数据采集,终于定位到是缓冲区由于内存不足而变小,导到大量链接发送速度降了下来。接下来,部门内外的网络问题,我都是重要角度投入,并形成了很多定位经验。

我就是这样从网络小白菜,变成计算机网络工程师,整个过程不知经历了多少次迭代,多少次实验对知识的修正。从原理,再到协议试,以及协议问题定位。每次冲突的出现,都是需要解决的问题,一旦解决之后,能力会得到提升,知识体系更加完善。

小结

学习不会是一蹴而就,也不是经历漫长阶段才能将知识学到,而是迭代式的。每个迭代都有知识进帐,但在多次的迭代学习过程中,才能做到建立「全栈式知识结构」和实现「系统化知识」。

迭代式不习,让你们的知识更系统化,精益求精。

如何学习(3):迭代学习,精益求精

标签:

原文地址:http://blog.csdn.net/linyt/article/details/50288197

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!