时常看到应聘要求里面写着"熟练掌握XX",我也来谈谈我的看法吧.
拿C++来说,我现在可以在我的个人简历里面写着"熟练掌握C++",诚然,不是C++的每个细节我都能十分熟悉,但是我可以做到以下几点:1)C++的整体观念我都大致的清楚,继承多态封装虚函数等等 2)基本的错误我不会犯,比如空指针调用等等 3)出了问题的时候我可以马上的反应过来问题可能出在哪里并且通过网络或者书籍来解决我的问题,我不必为了忘记某个函数的名字或者写法而发慌,因为我心里有数.
也就是说,我认为,某一门知识,如果建立起了整体的概念,这样就可以不必为了细节上可能出现的问题而发慌,并且可以迅速的解决出现的问题,那么这一门知识可以称之为"熟练掌握".这是因为我认为很多时候,做事情也好学东西也罢要抓住根本或者说基础的东西,至于细节,那要实践过才能十分的熟练的.比如C++中的流和异常处理,我基本没有用过,所以不是拿来就能马上上手写的,但是我不会因为这个而发慌,因为我知道我在哪里可以找到我想要的答案并且实践我的想法,这就足够了.
回过头来,说一下我对学习方法的看法.我认为,学习一门知识的时候,刚开始时应该马上建立起整体的观念,然后在慢慢的在实践中扣细节.比如我最近在看的<<windows核心编程>>,里面大量充斥着对某个API其中参数的解释,一般看到这些地方我都是一扫而过的,因为我认为如何选择API参数这样的细节除非到了我真正要用到这个API了否则靠死记硬背或者简单的看书是无法真正的理解的.相反的,我把对这本书的关注更多的放在了对概念的解释上,比如线程,进程,内核对象,临界对象等等的.所以,刚开始学习一门知识的时候,建议找一些薄而且五脏俱全的书籍来迅速入门,把握最最基本的概念,这样的典型有Lippman的<<Essensial C++>>等,初学的时候不推荐用那种砖头式可以作为字典察看的书籍,这样你的入门会比较慢而且不容易抓住重点.
其实,作为程序员,我们日常工作中遇到的大部分问题以前都曾经有人遇到过,我这里指的是细节性的问题,其他如如何设计一个系统如何架构等等的就要靠经验和知识面了.所以,不在学习的时候过早的陷入与细节的纠缠而把重点放在基本概念的建立上我认为才是比较好的入门方法.
综合起来,应该把What(是什么?),When(什么时候使用?),Why(如何使用?)这三个W放在最前面,而How(如何实现)则是优先级别比较靠后的了,细节性的东西只要你有实践做过项目慢慢的就会熟悉了,因为并没有太多自己需要创新的地方,书上网上很多前人都有了例子了,看一看就可以明白(前提是前面的三个W已经掌握的足够好了).
但是话说回来,照猫画虎依样画瓢的事情很多人都会做,如果仅仅满足与此也许到了一个瓶颈的时候就很难进步了.比如前一阵我和一位同事聊天,我跟他说我最近要好好看看算法和数据结构这些基础的东西,他说这些是最不必看的,因为STL里面都有,我承认STL里面确实是包含了很多实用的算法,但是如果不去明白其中的原理那么在选择合适的容器和算法的时候也许不能做到十分的准确.
同时,在平时工作的时候,还需要积累解决问题的思路,这不仅是程序员的一个素养,也是一个人需要具备的一个基本的能力,这个能力包括--避免问题的能力(如果能避免问题了就不必解决了:),发现并且逐步定位问题的能力,提问的能力,搜索问题答案的思路等等.这方面的书很多,<<程序设计实践>>里面提到过很多实际编程的时候会遇到的问题,比如代码风格,注释,assert如何使用,如何测试等等的,注意里面的一些基本的写代码的原则可以帮你避免许多问题.除去这一本程序设计方面的书,还有一些和写代码关系不是很大的书,比如温伯格的<<你的灯亮着么?>>,波利亚的<<怎样解题>>等等的,都不错.
一点愚见,欢迎拍砖~~