做IT学习非常重要,但是学习的资料同时又非常多,如何选择资料对学习的效果影响也是相当大的。
选择资料是质量的内容是一方面,何时学习资料也是一个非常重要的方面。
我学习时机最为合适的两本资料是《代码大全》和《Effective c++》。
首先说第一本《代码大全》:
读这本书大概是在09年四五月份,大概用了两个月左右的时间。
首先介绍一下我当时的情况。当时我工作三年不到,两年半多一点,期间一直用c做开发,做过几个大的项目。对c的熟悉程度尚可,主要的资料是《C专家编程》。对软件设计没有什么概念,主要的资料是华为的一本《编程规范》。编程规范尚可。编程知识的广度非常有效,技术网站(比如csdn)也不怎么上。
我是在这种情况下接触到《代码大全》。记得当时只是看见同事那里有一本大块头的书,起初以为是什么字典之类的查阅书籍。正好当时空一点,就拿来看了。
我是从序言开始看起,照着里面的说明选择适合自己的章节。我就从第五章开始阅读,没有想到一下子就沉进去了,一口气从第五章读到第二十五章,而且还做了六十来页的笔记。
读完之后感觉特别爽,就像久旱逢甘霖。这本书给我打开了软件设计之门,解决了我当时开发过程中的很多疑问。他也让我看到了软件设计的本质:管理复杂度——这就好比是软件设计的总纲。以这本书为基础,后来我有扩展学习了《重构》《设计模式》等,《编程珠玑》《代码之美》《代码整洁之道》《实现模式》等已排入我的学习计划中。
这本书对外的研发生涯非常重要,可以说是我一个技术的转折点,让初步我看到了软件设计的门径。
PS:有一段时间因为工作需要了解SOA,它对我研发生涯也非常重要,主要是扩展了我的视野,比如:SCA,MDD,TDD,软件架构,流程引擎,敏捷开发等。目前我经常访问的三个技术网站:CSDN,INFOQ,IBM——也是在当时留下来的习惯,他们让我的技术视野时刻保持开阔。
第二本《Effective C++》:
这是我最近在读的一本书,读了将近一半。
我现在工作四年多一点,前三年基本上用c,最近一年基本上用c++。用C++做了三个项目。我使用C++基本上就是自学,我们公司以前基本没有人使用,所以很多东西都是自己摸索的。由于我是从C转过来的,所以我做的第一个项目(一个预研项目)基本上就是使用“C语法 + C++面向对象”。C++语法我没有系统的学习过,基本上是开发上遇到问题就去查资料解决问题。就这样慢慢的对C++熟悉了。
后来用C++做了两个比较大的项目,也主要是使用C++的面向对象特性,像其他的特性比如异常,模板等均未涉及。
最近空闲了,向提高一下C++能力。我这里有几本C++的书:《C++ primer》《C++沉思录》《c++ template》《Effective C++》。
《C++ primer》比较基础,也比较系统,我之前就尝试看过,但是看不下去。我发现现在我对这些基础的系统的资料已经失去了耐心。这可能是大学的学习和工作的学习有区别的一个地方。大学目的是为了学,而工作目的是为了用。如果没有实际的需求而去系统的学习一个东西,可能动力不足。如果为了解决一个问题去学习,那效果可能会非常好。
所以我就去找有难度一点的资料,我找的是《c++沉思录》。这本书我从第一章开始看,看了几章,发现书里面说的东西,和自己一点共鸣都没有,自己实在看不下去。读书读不下去,不一定是自己意志力不行,可能是这本书不适合你。
我又找了一个相对简单一点的,就是这个《Effective C++》。它不像《C++ primer》那样系统,只是详细描述了C++开发中的55个设计注意事项;同时他也不像《c++沉思录》那样比较深——总之,它十分适合现在的我,有一些开发经验,也有一大堆的疑问,它正好可以解答我的这些疑问。在学习的过程中,遇到自己生疏的语法,就查一下《C++ primer》,这样下来不知不觉也补了不少C++基础知识。看到现在,已经将近看了一半,做了二十来页的学习笔记,感觉有一种即将“破门而入的”的感觉。c++确实很强大!
最后总结一下:
1、那种方式学习最快?一定是有工作需求的,并且能够和实际的开发经验结合起来的时候学习的最快,
2、如果一本书读不下去,不一定是自己的意志力有问题(技术学习是一个IT人的一项基本需求,就像人要吃饭一样,不需要意志力),可能是这本书不适合你,至少是不适合现在的你。
3、实践也是一种学习方式,而且是最重要的一种学习方式。
《C++必知必会》《C++编程规范》《不完美C++》《C++编程思想》I II卷,《C++FQA》