联系我

技术学习三部曲

2020.06.14

前言

在学习编程技术过程中,我们会学不少的类库、框架、甚至语言,但很多人学完就跟猪八戒吃人参果一样,只知其形,不明其味。

学习最重要的一步我认为是选定技术方向,只有有了方向我们才知道力气往何处使,怎么使。但选定方向不是今天探讨的重点,今天的重点是如何去学。

我还是将学习分为三个简单有效的认知步骤,即What、How、Why。下面详细说说这几点。

WHAT

所谓的 “WHAT” 也就是 “What is it?”—— 这是最简单的层次。在这个层次,你要搞清楚某个东东是【什么】样子的?有【什么】用处?有【什么】特性?有【什么】语法?......

举例如下:

  • 对于学习语言(比如 C++、Java、Python),大部分人都能够掌握基本的语法和标准库,然后用它写一些小程序(诸如二分查找、冒泡排序、简单文件操作等)。
  • 对于学习类库(比如 JDBC 类库),大部分 Java 程序员都能明白 JDBC 主要包含哪些类,也能够用 JDBC 进行简单的数据库查询和增删改操作。

由于这个步骤是最基本的,假如你连这都做不到(可能你的理解力不够好),IT行业混下去可能有点难。

但是光会 What 是不够的。仅仅停留在这个步骤,导致了很多程序员【只知其然,不知其所以然】。这就是很多开发人员的现状。

HOW

所谓的 “HOW” 就是 “How to do?”。在这个层次,你要搞清楚某个东西,其内部是【如何】运作的?【如何】实现的?......

举例如下:

  • 假如你在学习 C++ 语言,你是否搞明白函数传参数的实现机制?虚函数是如何实现?抛出异常时的栈回退是怎么回事?......
  • 假如你在学习 Java 语言,你是否搞清楚 GC 如何实现?反射是如何实现?......
  • 假如你在学习 JDBC 库,你是否清楚 JDBC Driver 的 4 种类型?不同游标类型的实现机制?事务的机制?......

在这个阶段,你必须多想想类似这些问题。然后通过各种途径,把问题彻底搞清楚。自然而然,你的提高就会比较明显。而且如果碰到一些深层次的问题(比如性能优化),也就知道该如何去解决。

完成这个阶段之后,你基本上就属于该技术领域最优秀的 20% 的人(根据二八原理,80% 的人不会去思考 HOW 的问题)。

WHY

一般来说,只有想清楚 HOW 之后,才能继续去考虑 WHY。

所谓的 “WHY”,就是搞清楚某个东西【为什么】设计成这样?【为什么】不是另外的样子?这样的设计有什么讲究?......

说实在的,善于问 “为什么” 有一定的天赋成分?好像某个科学大牛曾经说过 “提出问题有时候比解决问题更难”。一般来说,只有当你【深刻理解】了某个东西,才能够针对这个东东的【设计】问出一些问题。所以,我前面强调过,要先把 HOW 的问题搞清楚,再来考虑 WHY 的问题。

举例如下:

  • 对于 C++ 语言:为什么 C++ 没有类似 Java 的 finally 关键字?为什么当初发明 C++ 的时候没有考虑 GC?......
  • 对于 Java 语言:为什么 Java 没有类似 C++ 的类析构函数?为什么 Java 要同时提供 String 和 StringBuffer 两个似乎冗余的类?......
  • 对于 Python 语言:为什么 Python 不提供类似 C++/Java 的访问控制机制?......

如果你能够【自己】问出诸如上述的 “为什么” 问题,并且能够通过各种途径找到解答,那你基本上已经吃透这个技术了,并且你已经【有可能】自己去【设计】一个类似的东西了。到这时,你已经踏上了通向技术高手的康庄大道。

参考链接

[1] https://program-think.blogspot.com/2009/02/study-technology-in-three-steps.html