0%

关于学习的两三事

昨日开周会leader在会后又一次强调了自己对于编程生涯的一些经验,也提出了一些对我们团队的一些告诫。以前参加过很多会议但是很少有人直接拿出自己的经验进行”传授“,所以作此文,对leader传授经验的经验进行复述。毕竟现在听到肺腑之言的机会也不是那么多。

经验的核心可以分为几个基本问题

  1. 如何对待需要精通的知识
  2. 需要熟练的知识该如何处理
  3. 检验成长的方法

如何对待需要精通的知识

这个问题其实还有个前置,我们需要去精通什么?最直接的就是我们需要精通使用的语言。leader指出,对于常用的语言一定要精通,我们对于语言本身的用法至少要阅读”三遍“。这三遍指的是学习语言本身的知识,并非是关于语言经验的总结。这三遍之中一定要包含一遍原版的文档。比如学习rust,那rust官方文档(英文版)是一定要严格过一遍的。要这么做的原因有下面这几条

  1. 阅读原版文档,避免了信息的损失和误传。毕竟翻译的再好,也有翻译者自己的理解在里面,会造成二手资料的问题。我们一定要有把握第一手资料的能力。
  2. 阅读原版文档会对语言本身的功能做一个全面的认识,一开始不阅读语言经验的知识也是这个原因。完整阅读文档之后,我们要用一门语言去做一件事能够清楚的认识到”能与不能的问题“。避免了因为认知不足造成的偏差。因为我们知识点不全,就完全不会在相关的方向思考,对于解决问题是个巨大缺陷。
  3. 原版资料可以提供对概念最精确的定义,一旦我们出现了问题,去搜索就可以非常精准的描述问题。对于编程(或者说学习)”精准的描述问题“,是一项非常重要的能力。如果我们能非常准确的描述问题标志着问题离解决已经迈进了一大步。

那其余的两遍做什么?其实还是阅读语言本身的知识。如果本身外文水准差,可以找一本自己母语的文档看,但这一遍必须是在阅读原版材料之后做。当然三是泛指,你可以阅读很多遍。对于精通,阅读再多遍也不过分。按照我的理解,知识需要覆盖型学习,因为”一遍就非常熟悉“是一种奢望。一遍就精通是个不切实际的目标,所以我们需要一遍一遍过来加深熟练度。我们对语言有一定的认识之后(懂了语法,写了一定量的代码),自然总结出语言的重点,这时候就可以阅读别人关于这门语言的经验。类似于《Effective Java》这类书籍就是在有一定经验之后总结出来的。我们也可以组织出自己的经验(这是必须的)。

需要熟练的知识该如何处理

在需要专精的知识之外,是对于熟练知识的把握。直接点说,对工具的把握就是这类知识。比如写代码需要使用Clion。我们初始要做的很简单,就是直接用Clion写代码就可以了。用了一段时间之后发现网络不好,我们再去搜索”Clion如何设置代理“这类知识。或者用到另一个阶段了,我们需要debug,按照常理IDE肯定是有设置断点Debug的功能,我们再去搜索”Clion如何设置断点进行Debug“之类的知识。大部分情况下,我们并不需要像上面的精通类知识那样,先阅读一遍Clion功能文档再开始用(也不是不可以)。总结起来就是:面向需求学习,用到现学即可。

检验成长的方法

无论是精通类知识还是熟练类知识,我们都有一个从无到有,从生疏到熟练的过程。整个过程必然伴随大量的思考。按照学习的理论,一个完整的学习过程包括输入,思考和输出三大过程。当然更好的学习模型还伴随着反馈和再学习的过程这里先不谈。学习过程没有输出是不完整的。如果我们学习了一门知识,一个语言,一种工具如果什么东西都没有产生,那这个过程就是失败的。学习是一个不断发现问题,解决问题的循环。我们大部分时候都可以记录这个过程,不犯同样的错误就是巨大的进步。当然大师们亦可以总结出《Effective Java》这样的经典之作。这也是我不断完善这个博客的理由。一个更简单的标准就是,你学习了一门语言有新人进来学习这门语言,”如果你拿不出有效的建议,说不出语言的重点,没找到语言的坑“那你的学习就是有问题的。当你内心产生,”这些问题都很简单没什么值得一提的“这个观念的话,那你学习问题就大了,建议再读一篇这篇文章。