如何学习编程技术

关于学习编程技术,我认为,没有最好的方法,只有适合自己当前水平状态的、可以达成自己目标的学习方法。每个人有不同的适应自己的学习方法,每个阶段有不同的学习方法,学习的目的不同使用的方法也不同。简而言之,方法不是固定不变的。

学习方法一般有:

  • 看官方文档。
  • 看书籍。
  • 看博客、教程等技术文章。
  • 看视频教程(倍速)。
  • 看源码。
  • 跟着教程敲代码,写demo,做练习。
  • 在真实的项目中应用该技术。

学习的目的一般有:

  • 入门,学会基本概念和使用。
  • 熟悉,查漏补缺,加强熟练度。
  • 精通,深入理解架构设计和代码实现原理。

学习主要考虑两个问题:质量和速度。有的时候需要优先考虑质量,有的时候则需要优先考虑速度。

(一)入门/了解

入门在于理解,表现为能够使用简单的几句话将这门技术的核心概念描述清楚。

如果是比较急(速度优先),则优先考虑看入门视频教程,或者入门博客教程等。文档和书籍一般都会比较权威、严谨和全面详细,然而缺点就是比较枯燥和繁琐,概念特别多,容易抓不住重点。然而入门视频教程通过通俗易懂的讲解、简单的示例代码、和抓重点内容,能够让你更好地快速入门。

如果不是很着急,可以先尝试看官方文档,如果官方文档写得对新手不太友好,可以尝试找一些初级的书籍看看。如果文档和书籍都看不下去,最后,再去找一些入门视频教程和博客文章去看。如 Spring Security 的官方文档就对新手不太友好。

总之,先找一个可以理解的资料看(官方文档 -> 入门书籍 -> 入门视频教程和博客文章),理解之后还是要看一遍官方文档,官网文档必须得看。官方文档是最重要的一手资料。

另外,入门的话,跟着教程敲 demo 代码也是很有必要的。虽然 demo 代码都比较简单,自己能够看得懂,但是还是要自己敲一遍。至少能够加深一些印象。

注意事项:

  • 入门时尽量不记或者少记笔记,在大量练习使用后,再做笔记。这时候才知道哪些是重要的或经常使用的。

(二)熟悉/熟练

熟悉在于大量练习,表现为对这门技术的大部分的功能用法(如:注解、配置等)和 API 调用可以熟稔于心、信手拈来。

想要熟悉一个技术,首先需要认真地多看几遍权威的资料的,如官方文档和书籍。另外,大量的练习也是必不可少的。站在岸上学不会游泳,可以做一些 toy project 或者在真实的项目中应用。

如果一个技术平时很少用到,那么我们可以通过解决别人遇到的问题来不断地接触到它。比如:Spring Security 只会在项目搭建的时候用到,项目搭建好了,就很少能够接触到它。常见的帮助别人解决相关技术问题的方式:1)Stack Overflow 上有专门的技术标签,标签下有很多其他人在使用技术过程中遇到的问题;2)混技术论坛,偶尔会看到有人提出自己遇到的相关技术问题。

在准备面试的时候,我们通常需要去背很多知识点。因为这些知识点平时用的很少,但面试需要我们流畅地表达出来。想要对某些技术知识点做到脱口而出,要么死记硬背,要么大量使用。所以面试的时候,对于用的少的知识,要去记忆和背诵。虽然短时间能记住很多,但没使用过或使用得很少,复述出来还是不太流畅。

熟练:理解上比较深,使用上比较熟悉、轻松。首先,在一定次数的使用中不断地加深理解和熟悉使用,再结合阅读源码了解其实现原理。

(三)精通

何为精通?这似乎是个很模糊的概念,很难去定义。就算是领域高手也很少说自己精通某个技术。

我认为,精通就是有较深的理解,有丰富的使用经验,能够灵活、恰当、熟练地使用它。

似乎精通没有极限,我们只能在通往精通的道路上不断前进。学无止境,不必为了精通而精通。以目的和兴趣去驱动,不断提高技术水平。

(四)最后

学完不用就会忘,技术还是得需求驱动。比如:没有经历高并发场景的人很难学习分布式/微服务相关技术。学习只是入门了解,要熟练掌握一门技术,还需要大量的使用,在大量的重复使用中不断加深理解、熟悉用法。后面,再进一步阅读源码,深入理解。

知易行难,唯有行动,才能改变。不断努力,不断成长。

References

[1] 学习编程是看文档还是看视频教程