码农如何主动学习?

作为码农,工作以来我一直在断断续续思考和实践主动学习这件事,不过效果一直不尽人意,直到最近,我感觉状态有所改善,偶有所得。所以,在这篇文章中,我整理了 我对码农主动学习这件事的感悟以及可能有用的主动学习的方法 ,抛砖引玉,无论你是同意或是不同意,欢迎和我交流,对我意义重大。

郑重声明:本文内容不保证正确性。

 

为什么要主动学习?

我是一个实用主义者(虽然在写出这句话之前我都不知道我还有个“主义”),我也深信人性贪婪自私且虚伪,嘴上说的“不要妄想不劳而获”其实是心里最想要的东西。

为什么要主动学习?选了码农这个行业, 技术就是我们的吃饭家伙,想要吃得好,而且一直有饭吃,就得有足够的技术 ,怎么能获得足够的技术?学习可以让你获得足够的技术,但为什么要说主动学习呢?因为在日常的工作中也可以学到很多东西,那些当然也很重要,但是很慢,而且大家都可以从工作中学到东西,我怎么保证我学到的比别人多?保证不了,但我想要进步,所以寻求主动学习。

我所谓的主动学习,是指 在工作之外,学习那些在工作中接触过但是没时间深入了解的东西,或者是工作中没机会接触但是感兴趣的东西,或者任何可以让技术获得提升的东西 。比如,我会在  shell 中  echo 一个  Hello World ,但是对  sed 和  awk 不熟,所以一直想系统的学习一下这两个东西的用法,以便在下次需要在  shell 中处理字符串的时候不用薅头发;再比如, docker build 我会敲, kubectl get pods 我也会敲,但对原理是一窍不通,所以也一直想好好了解一下火爆的容器技术到底怎么回事;我还对各种开源项目感兴趣,想了解如何他们是如何运转的,以及如何贡献代码,想知道自己有没有机会掺一脚,也做过一些这方面的尝试。简单的来说,主动学习就是, 花时间、想办法完善或者扩展自己的技术栈。

 

主动学习的困难

学习难,主动学习更难,码农主动学习尤其难。

我认为码农主动学习的困难是来自两方面的,分别是:

1. 时间、精力和注意力的不足 2. 学习方法的不恰当

第一点无需多说,工作加班多,空闲时间本来就少,好不容易有时间休息,再去啃书啃文档啃代码,确实是很大的挑战。不过, 足够的时间投入是做成任何事的必要条件 ,这一点每个人情况不同,如何面对这个问题不做赘述,而且我主要想分享第二点。

第二点,学习方法的重要性无需多言,但我感觉离开学校之后,我学习很多东西的时候不是方法不对,而是几乎毫无方法可言,我尝试过学习不少东西,比如 MIT 的分布式系统课程 [1] ,比如 Hadoop 的源码,结果怎么样呢?花了很多时间,但几乎啥也没学到,感觉自己笨笨哒,再也不想学习了,那么我是怎么学习的呢?论文和文档好好读了,也做了笔记,代码一行一行的看,用各种工具看,但是最后都半途而废了,为什么呢?

人的劣根性(我想不到更合适的精炼的话了)。

当我说想学习的时候,其实我心里真正的想法是: 我要在尽可能少的时间里做尽可能少的事情达到尽可能好的学习效果,如果不能的话,我就不干了。 这个创意四舍五入一下,就是上面所说的“不劳而获”。

但是没办法,我就是这样恶劣的人,贪婪懒惰是我的一部分。为了顺应我的劣根性,让它不要影响我做事,在花了一些时间思考和尝试之后,对于码农的学习方法,我总结出了一个理论,叫做“庖丁砍牛”(今天起的名字),其实并没有什么新东西,应该都是前人总结过的东西,但我还是我自己的语言再传达一下,见笑。

 

“庖丁砍牛”理论

我认为码农持续深入的主动学习有两个关键点,一个要,一个不要:

1. 要给自己提供反馈,越快越好 2. 不要按部就班、完完整整的学

这两点中,我认为第一点的反馈和学校里的学习方法是一致的,课堂提问、课后作业、小测验、单元考、期中考、期末考,这些东西的作用就是 提供反馈,让你知道自己每个知识点学的怎么样,哪些学漏了,哪些理解不到位,哪些不熟练,然后根据反馈去重新学习、改正、练习,这样才能提高 ,不然就是没有指南针在大海上划船,一直看不到岸选择跳海是完全可以理解的。举一个不知道恰不恰当的例子,为什么刚学编程的时候,我会喜欢 Python 多于 Java 呢?因为 Python 在交互模式下,可以立马对我的输入返回一个结果,而 Java 要编译了才能运行,他们之间存在严格的好坏吗,不存在吧,但是 劣根性就是让我更喜欢有即时反馈的东西 。

第二点所说的不要按部就班、完完整整的学,是和学校里的学习方法相反的,在学校里,我们参照一本教材,跟着老师一页一页的学,觉得哪页难了就多学一节课,为什么我觉得现在不能再这样学呢?因为环境变了,虽然我想要提高自己的技术,但并没有打算也没有时间把一门技术的所有细节全部吃透,还记得上文提到的“实用主义”吗, 我不需要“全”,我只要“够用”就行 ,而按部就班学习的问题在于战线拉的太长,学习内容多且杂,很难分清主次,最后淹没在各种细节里面,热情被消磨殆尽,然后只好放弃(读 HDFS 代码有感)。所以,我认为码农学习也要 讲究“轻量级”,不要依赖太多上下文,做到来了能学,学了能用。

当然,我并没有在否认基础知识的重要性,相反,我认为在深入学习之前掌握好基础知识是必要的,就像厨师要先学会切菜和和面才可以逐步学习更高深的厨艺,本文讨论的方法的前提是已经具备必要的基础知识,基础知识没有捷径可走。

为什么叫“庖丁砍牛”呢?因为如果技术水平存在客观标准的话,那么最高水平可以比作庖丁解牛,而技术进步的过程就是不断熟悉牛的筋骨纹络的过程,这个熟悉的过程当然可以先对照牛的解剖图进行观察研习,全部掌握后再开始练习杀牛,但上面所说的方法其实是在建议不要在解剖图上花太多时间, 直接拿刀砍牛 ,可以立马感受到刀是怎么劈开肉,斩断骨头的,当然也可以立马感受到“牛血淋头”是什么意思( 有反馈 ),而且,如果觉得解剖整头牛费力的话,可以分部位来,先砍一个月的牛腿,再砍一个月的牛屁股,每砍一个部位就可以熟悉一个部位( 轻量级 ),用不了几个月,牛身上的主要部位就被我砍了个遍,也许还有没砍过的地方,但不要紧,我已经可以把一头牛解剖的很好了,尽管没有达到庖丁解牛的地步,但“够用”了。

在整理文章的时候,我发现这个理论叫“盲人摸象”也可以。

 

方法论

虽然道理说得啪啪响(谢谢掌声),可是实际中怎么操作呢?其实还是很难,而且为了让文章读起来顺畅有趣,我在上面的段落中加了很多初听起来很有道理但禁不起细琢磨的东西(当然大体内容还是 OK 的)。总之还是很难,我分享两个我正在尝试的方法,分别对应上面理论中的 反馈 和 轻量级 。

 

公众号写文章

把学到的知识、技能或者遇到的问题和解决方法以公众号(博客)文章的方式分享,这个方法主要是能给我提供反馈,我写一篇文章,别人夸一句“写得好!”,你说如果是你,你会不会想要再写一篇,我会,因为我就是这么的肤浅(而且听说文章读的人多,微信还给你发钱)。

好处:有反馈,通过输出刺激输入,提供反向驱动力(自创词),降低半途而废的可能。

问题:这个方法一方面需要花费很多时间,因为要兼顾技术性和可读性,我都有点遭不住了,另一方面如何组织安排文章的内容,以及匹配文章内容和学习内容也是门学问,还在摸索中。

电脑刺绣绣花厂 http://www.szhdn.com 广州品牌设计公司https://www.houdianzi.com

解决别人的问题

注意,我没有说“帮别人解决问题”,因为我做这件事的目的不是帮助别人,而是为了自己。

解决别人问题的过程是一个绝佳的学习机会,因为 软件或系统中每一个出故障的点都对应了它整体结构中的一个模块(或者是配置、机制等等),将这个故障排除的过程就是学习了解这个模块的过程 ,碰到并解决的故障越多,对这个软件和系统的了解和理解就越深刻,但是我一个人能够碰到的问题有限,所以当别人遇到问题时,其实是一个非常好的学习机会(且不论你也可能在日后遇到相同的问题,而你已经提前准备好了解决方法,到时你肯定会感叹自己的机智)。

好处:问题或故障的解决一般只需要局部、少量的知识,每解决一个问题都会有相应的提高,多次的小进步累积起来会是很大的提升。

问题:这是被动的学习机会,有质量的问题可遇不可求。有时我在想,能不能把认同这种观点的人聚合起来,每个人把自己遇到的问题抛出来,其他人可以在有兴趣、有时间的情况下和遇到问题的人一起解决这个问题,解决之后,能够将这个问题出现的原因、相关的原理整理出来进行分享,这样对于每个人都是一次学习,当然解决问题的人会理解更深刻。咦,怎么听起来有点像 StackOverflow,忽略。

posted @ 2020-10-21 12:58  笑人  阅读(214)  评论(0编辑  收藏  举报