学习技术的三部曲: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 的访问控制机制?......
如果你能够【自己】问出诸如上述的“为什么”问题,并且能够通过各种途径找到解答,那你基本上已经吃透这个技术了,并且你已经【有可能】自己去【设计】一个类似的玩意儿了。到这时,你已经踏上了通向技术高手的康庄大道。
学习技术的三部曲:WHAT、HOW、WHY的更多相关文章
- [转] 学习,思维三部曲:WHAT、HOW、WHY(通过现象看本质)
https://www.douban.com/note/284947308/?type=like 学习技术的三部曲:WHAT HOW WHY 我把学习归类为三个步骤:What.How.Why.经过我对 ...
- [AI开发]将深度学习技术应用到实际项目
本文介绍如何将基于深度学习的目标检测算法应用到具体的项目开发中,体现深度学习技术在实际生产中的价值,算是AI算法的一个落地实现.本文算法部分可以参见前面几篇博客: [AI开发]Python+Tenso ...
- 对于Java培训出身的同学,接下来该怎么学习技术?
首先恭喜从培训班出来找到工作的同学,确实挺不容易的,4个月的培训,每天从早上9点到晚上9点,也是996,主要的活动地方就是宿舍和教室, 让我现在也去培训,我估计还熬不下来. 尤其是对于从小白开始的同学 ...
- learn more ,study less(二):整体性学习技术(下)
随意信息的处理 随意信息,或者内容太多.太复杂的信息,都不容易理解,它们需要不同的技术.假 如你发现联想法不能帮助你理解材料,或者需要花费的时间太长,这时候处理随意信息的方 法就很适合了. 这些处理随 ...
- Mol Cell Proteomics. | Prediction of LC-MS/MS properties of peptides from sequence by deep learning (通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征) (解读人:梅占龙)
通过深度学习技术根据肽段序列预测其LC-MS/MS谱特征 解读人:梅占龙 质谱平台 文献名:Prediction of LC-MS/MS properties of peptides from se ...
- 如何从 ToB 企业级 IM 产品中学习技术选型和架构
如何从 ToB 企业级 IM 产品中学习技术选型和架构 多端,全端 React React Native Flutter Electron Lark https://www.larksuite.com ...
- 【转载】如何自学深度学习技术,大神Yann LeCun亲授建议
编者按:Quora 上有网友提问:自学机器学习技术,你有哪些建议?(What are your recommendations for self-studying machine learning), ...
- Java学习技术分享:Java中的原子操作
学习java需要有一套完整的学习线路,需要有条理性,当下学习java已经有一段时间了,由当初的懵逼状态逐渐好转,也逐渐养成了写技术学习笔记的习惯,今天总结了一下java中的原子操作. 1.Java中的 ...
- learn more ,study less(二):整体性学习技术(上)
前言:在学习整体性学习概念时,一个很好的方法是把它比喻成下棋,首先你要了解下棋的 基本规则和基本目标,本书第一部分可以看做是介绍关于整体性学习的一整套规则和目标. 一旦你理解了下棋的基本规则,你就要开 ...
随机推荐
- EF关于报错Self referencing loop detected with type的原因以及解决办法
1)具体报错 { "Message": "出现错误.", "ExceptionMessage": "“ObjectContent` ...
- Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
mit 分布式论文集 https://github.com/feixiao/Distributed-Systems wiki上描述的几种都明白了就出师了 raft 和 zab 是类似的,都是1.先选举 ...
- HashMap允许将null用作键 也允许将null作为值
HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null. 与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设 ...
- activiti工作流使用一般步骤
activiti工作流使用的一般步骤 一.在eclipse或Myeclipse中安装activiti插件: 二.通过activiti连接数据库,有以下两种连接数据库的形式: 1.通过java代码链接数 ...
- js解析器
1>js的预解析 找var function 参数等 所有的变量,在正式运行代码前,都提前赋了一个值:未定义 所有的函数,在正式运行代码前,都是整个函数块. 遇到重名的:只留一个 如果变量与函数 ...
- systemverilog(3)之Randomize
what to randomize? (1) primary input data <==one data (2)encapsulated input data <== muti grou ...
- LeetCode(2)Add Two Numbers
题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...
- 深入java集合系列
http://www.cnblogs.com/ITtangtang/p/3948765.html 写的很赞 需要时常复习.
- 【08】css sprite是什么,有什么优缺点
[08]css sprite是什么?有什么优缺点? 概念:将多个小图片拼接到一个图片中.通过background-position和元素尺寸调节需要显示的背景图案. 优点: 减少HTTP请求数,极大地 ...
- LINQ-进行数据转换
一.将多个输入联接到一个输出序列中 可以使用 LINQ 查询创建包含元素的输出序列,这些元素来自多个输入序列. 以下示例演示如何组合两个内存中数据结构,但相同的原则可应用于组合来自 XML 或 SQL ...