★第一步: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. HTML5新增及移除的元素
  2. 如何换ionic里面的图标
  3. HDOJ(1348)二维凸包
  4. jetBrains phpstorm/webstorm 编辑器使用诀窍
  5. 自动化测试selenium+java 第三章
  6. 【python游戏编程之旅】第二篇--pygame中的IO、数据
  7. CUBRID学习笔记 24 数据类型1
  8. JavaWeb高性能开发(一)
  9. 如何在tomcat安装部署php项目
  10. 用Gradle 构建android程序
  11. iOS开发——面试笔试精华(一)
  12. tomcat 正常启动,无法访问。且项目启动无问题。。。的解决办法。。
  13. BAK文件怎么恢复到数据库中
  14. linux dhcp 设置路由及主机名
  15. java 中的JDK封装的数据结构和算法解析(集合类)----顺序表 List 之 ArrayList
  16. 05_ switch 练习 _ 今天星期几
  17. java代码中实现android背景选择的selector-StateListDrawable的应用
  18. 移动端实现上拉加载更多(使用dropload.js vs js)
  19. ios项目开发(天气预报项目):使用正则获取 weather.com.cn站点信息
  20. apple 下安装mysql 以及 碰到的问题

热门文章

  1. Bootstrap历练实例:基本按钮组
  2. 661. Image Smoother@python
  3. centos7 samba配置完成后不管怎么登陆都会显示密码错误的解决方案
  4. 欧拉函数φ(x)简要介绍及c++实现
  5. shell脚本中使用echo显示带颜色的内容
  6. perl学习笔记之:模式匹配,模块,文档
  7. 【编码】【转发】enca 转换编码
  8. 数据结构( Pyhon 语言描述 ) — — 第6章:继承和抽象类
  9. shell-code-2-传参
  10. PAT Basic 1019