一个程序员前辈教给我的学习方法

今年转行开始做前端程序员,新入职场公司安排一个全栈大牛带我。
从决定转行起,自学了大概半年,感觉还不错,比传统的老师授课模式效果好多了。在这个过程中我领悟了一个道理:

学习说到底还是自己的事,有人教自然好,但是主要还是依赖自己下功夫。

事实上,今天我还是这么认为的,所以当初对于公司的安排我不以为意。没有想到,在三个月后前辈给了我两个意外:

  1. 他刷新了我对学习编程的认识。
  2. 他在我入职三个月后离职了。

工作已经半年了,我在实践中不断反思他说过的话,也逐渐能明白他当时的意思,现在做一下总结。

注重实践,理解放后面

工作中会遇到各种难题,然后我去找前辈请教时, 常常本被前辈说问了一个错误的问题,并念叨着:“注重实践,理解放后面。”学习就是对知识的理解,为什么要放后面呢?我们来剖析一下这个问题:

  1. 没必要讨论原理,每个人的理解不同
    所谓的理解,就是对代码实现原理的理解,当前代码实现逻辑的背后往往还有源码,而源码的背后还有更深的源码,所以原理本身是复杂且有相对性的。因为这种特性,导致了每个人对原理的理解是不同的。对于这种复杂且没有标准答案的问题,讨论起来对现实的意义很小,所有没有必要讨论。

  2. 若理解是正确的话,可以找到方法来证明,不需要跟人讨论
    代码是可以不会骗人的,所以相比于跟人讨论,不管从效率角度还是不被误导的角度来看,用代码验证理解都是最佳选择。

  3. 没有足够的前置知识,无法谈理解
    当双方没有具备在一个层次上的相关的知识来谈原理, 往往不构成交流,只是鸡同鸭讲,浪费时间。

  4. 关注解决问题的方法才能离真相更近
    在不断遇到问题,寻找方法解决问题中,自然会对代码产生理解,而这个理解是不断变化的,也会离真相越来越近。
    重要的是不断找方法解决问题,在这个过程中加深理解。

  5. 小心复述的陷阱
    我一直有一个复述的习惯, 在别人对我讲话后, 我会复述一遍以确定是否理解正确。通常情况下这个习惯有利于提高沟通效率,在某些时候这个习惯也会有害。
    当我们在复述的时候,会强化自己的记忆,比如大声朗读有助于记忆,能被唱出歌词也跟容易被记住。同样复述理解时会强化它们在大脑中的印象。
    之前已经讲了理解是在实践中不断变化的,所以当前的理解往往是片面的,而这些片面的理解有可能阻碍我们之后正确得理解代码。
    所以我们应该重视重现方法而不是复述原理,因为复述原理可能会强化我们错误的理解。

经验路线和深度路线

程序员在经历过职场的3年野蛮成长后,大体会分化为两种路线:广度路线和深度路线。

所谓广度路线就是在有一定基础后,将更多的精力花在接触各种不同方面的技术或工具上。

所谓深度路线就是将更多的精力投入到进一步加深工作领域内的知识和能力中。

在实践工作中,我们依赖的东西很多,单纯追求深度路线,并不能很好的适应不断变化的 IT 行业。

由于技术间有很多东西是相通的, 所以在学习新技术的时候,学习效率和掌握水平往往由之前已掌握的技术深度决定。而单纯追求广度路线,由于深度不够,所以新技能的能力不足以有效解决工作中的各种问题。

总体而已, 深度和广度需要平衡发展。

另一方面, 做了几年的程序员,容易自满,再加上深度路线需要持续的钻研和实践,且很容易自以为懂了而停滞不前,所以有些程序员再不往深度方向走了。于是整天嘴里都跑着新名词,谈着架构,但是不能解决工作中碰到的难题。

避免赶代码

现在都在追求小步快跑,快速迭代,在加上行业节奏快,老板催得紧,所以加班对程序员来说是家常便饭。

尽管我们都知道只写自己熟悉的代码,不学习,能力提不高,工资也提不高,但是面对 deadline 的压力,如何能静心钻研下代码的工作原理?

想解决工作和学习的平衡问题,首先我们的觉察到自己是否正在赶代码以完成工作。

我有每天写日记的习惯,所以我的自我觉察方法就是每天写日记时,问问自己,是否在赶代码。

赶代码的标准如下:

  1. 直接 Copy&Paste 网上搜索到的代码,不管其中的逻辑。
    我们经常会引用一些代码来解决问题,引用本无可厚非,但是也需要知道插入进来的这段代码到底是在干嘛,和之前自己的写法有什么不同。

  2. 碰到问题, 试各种写法,一旦试成功后就完事了, 不考虑到底几种写法的区别。
    我这方面比较严重的是 css 代码, 只是胡乱拼凑各种参数, 而没有理解各种参数的实际作用。

  3. 只是单纯参考文档来写,不思考这个框架或工具的内部逻辑。
    比如在学习使用一个框架的时候,会在各种demo 的代码, 这时需要理解这些代码的逻辑,而不是改改能用就行了。当然不是要深入到源码去理解,对于刚开始使用的框架,只有大体知道每一块代码是干嘛用的就行了。

在察觉到自己的赶代码行为后,还需要深入的思考下自己这么做的原因, 这里列举下我察觉后的结果:

  1. 回避难点
    当代码中遇到难点时,应该试图弄清楚,而不是单纯找个 workgroud 的方法草草了事。

  2. 获得团队的认同
    团队的认同感其实就是信任,首先培养信任是一个长期的行为, 其次信任来自于任务的妥善完成, 只重视量而不重视质的赶代码行为显然不是一个好的信任培养策略。

  3. 享受做得快的快感
    快速写出一堆可以用的代码确实很产生快感,但是这种快感只在短期有效。我们应该提高快感品位,做能产生长期快感的事情。

先框架还是先语言

我们经常会碰到多看语言书还是多学习框架的选择题。之前我一直觉得显然语言更重要,框架总在不停的出新,而语言的变化性就小得多。
现在发现,对于程序员新手来说,先学框架更重要。因为掌握框架后容易找到工作平台,并快速成长到能为团队产出。一个工作平台对新手程序员的成长至关重要, 至于语言和代码能力,可以在之后来补。
至于技术的选择,对新手来说最好的方式就是跟着项目走,这样更容易实践和成长。技术和技术之间有很多是相通的,当学习到一定深度时,再转而学习其他技术也会很快。

关于工具的选择

我们是生活在“轮子”上的一群人, 整天找轮子,比较轮子,甚至造轮子。程序员界激烈的“编辑器圣战”,“什么是最好语言”可以看出我们对轮子的热爱。
但是我们在折腾轮子上也浪费不少时间。总想找到一个"完美"的轮子,优雅地解决我们所有的问题,又足够简洁。之后我明白了,关于轮子的选择,不用想那么多,也不用讨论那么多,更不没必要去争论什么。
我们只需要多尝试,然后选个大体适合自己的就行了。
别磨刀耽误了砍柴。

博客和书

读书和看博客是一般擅长阅读学习的人的常用渠道。那么这两种方式有什么不同呢?

由于技术发展很快,所以书本的出版往往滞后,所以书上的有些知识其实是过时了的。但是作者为了写一本书会积累更多,沉淀更久,所以写出来的东西也会更有深度和总结性。

因此我们若想技术进阶, 掌握核心思想,就应该多读书。

与书本相反,博客更新很快,篇幅很短,所以一些关于新技术的讨论往往只能在博客里找到。由于篇幅有限,博客的作者只会针对一个点或几个点来阐述, 相比于书会显得浅显和片面。

因此我们若想了解新技术或者快速入门,可以多看看博客。

推荐阅读更多精彩内容