这是发到我的邮箱中的一封信,本来呢,我觉得不算大问题,随口回了几句,但是,这两天我翻看邮件,越来越觉得这封信里面的问题比较重要,再加上《明日世界》录像放出后,很多朋友都发信息来问,怎么学习,我觉得这个问题带有较高的普适性,因此,单独拿出来,再做一次回复。
还是那句话,一家之言哈,欢迎拍砖。
原文如下:
     肖舸老师,你好!首先说明一下这篇邮件的缘由。我是在《IT学生解惑真经》里看到的。看了你对很多问题的回复,有两方面使我向您发这封邮件,一是你很全面的分析问题,二是你会很认真很仔细的回答问题。因此,希望也能从你那里去点经。
    下面,我先介绍下我自己。我目前是一名本科大二学生,计算机科学与技术专业。接下来,说下我计算机方面的经历。刚上大学学校就教c++,在大一没怎么学习的情况下,大二第一学期学了数据结构。从大二起,就逐渐努力,c++语法看了几本经典之作,但感觉基础还是很一般。数据结构只随课程学,一学期下来的情况是考试只能保证及格的程度。接触的也就仅此而已。
    当然我知道应该自学,所有目前正在学习MFC,看过了《深入浅出MFC》,把MFC当做故宫的话,感觉看完侯大侠的书仅仅站在故宫的门外了解了它的全貌,所有最近在看《Programming windows with MFC》。
    接下来,说一下我的性格,以方便您能对症下药。
    第一,最重要的一点就是,我非常注重效率,可能个人性格,我不喜欢长时间做同样的事情,这也导致我看书都会想在尽可能最短的时间内看完,并且学会,所有也由此产生了困惑,也就是我想向您请教的问题之一,荣我稍后再讲。
    第二,我想学习最全面的东西,至于原因当然也跟性格有关,也因此引发了第二个问题。
    在提出我的问题之前,我先表达一下我对肖舸老师您关于回复方面的看法,也算是我的小小要求。
    首先,你会对向你请教的人夸奖评价这类的,我并不希望有太多关于此类的内容,可能我性格方面需要改正,但目前我并不需要,当然说的不对的情多多包涵啊。
    其次,我想要的是直接的围绕问题的答复,对于就业,企业管理,人生之类的,我目前不想考虑太多。还有,我想向你讨教的更多的是学习方法。
     下面就是我的问题:
    第一,为了提高效率,我每天不止一次的总结自己看书的方法,但由此产生的疑问是,我这样做真的可以吗?
    下面是我这几天看《Programming windows with MFC》的例子。看了本书前两章,我发现跟《深入浅出MFC》在内容排版方面有本质的不同,后者注重解释原理,通过对源代码的层层分析向读者解释了MFC中的基本原理,但就想我前面所说的,这本书只能让我看到MFC的大概面貌。而前者主要向读者介绍各种MFC类、API函数的用法,并在某些段落说明MFC原理,使用各种函数的原理。
    基于此,我的方法是主要看解释MFC原理,各种MFC内部的规则、运作、方式,对于书中大量介绍的使用函数的方法不看,原因很简单,因为有MSDN。因此我担心的是我这样的学习方法,以后的基础能扎实吗?我一直以为有了一定的理论基础后,再在以后练习编写软件过程中查阅MSDN,以此了解函数的用法所得到的体会要比看着书介绍个函数老半天来的更深刻。
    我想知道我这种方法是否有可行性。我说的是此类方法,MFC只是个例子。当然,如果可以的话,我想听听肖舸老师您关于效率学习的方法。
     第二,说句题外话,我很深信在社会上,能力越强者,头抬得越高,不用看别人脸色,相信您也会认同我这样的观点。
    但可能我下面的想法你不太认同,就是我学习尽可能多的计算机领域的知识。虽然现在社会需要的是综合型人才,但我并不是因此才想学的,更多的是一种挑战自己满足自己的欲望。比如摩斯密码,密码学,社会工程学,网络,系统,编程,数据库,***技术,等等各种计算机所涉及的学科。
    也许您会强烈建议我说“术业有专攻”,但是,我想请问下,如果能都学会的话不就好很多吗?但是,正如你所想的,我所担心的是如果都学不精的话怎么办?
    其实,我是一个很不自信的人,就像现在,我对自己每天都在总结的方法还存在怀疑。毕竟人生是自己的啊,走歪一小步就有可能越走越歪。所以,我的第二个问题是:对于计算机领域浩瀚如海的知识,我应该如何系统地去学习,才能达到最好的效率,或者较好的效率?
     说了这么多,有点泛泛之谈的感觉(不知道这成语用得对不对?)也不知道能不能收到回信。。。相信您会说我太急性子了,但我深有体会时间是不等人的,大家都说时间就是金钱,我觉得就算金钱也买不了时间。更重要的是,有时候自己的时间与能得到的时间是不对等的。
    换句话说,大多数时候自己需要的时间是根据别人来决定的。我相信您能真正理解。同时希望您能指条明路。可能喜欢做白日梦的缘故,您有可能的回复我有想到了。所以,再次提醒一点,希望能撇开个人因素谈谈我以上两个问题的不解。如果您看到这里,无论回复与否都非常感谢能花费时间看完晚辈这几段文字。。。希望以后学习中能多多指导。。。
我的回复:
这位同学你好,ok,如你所愿,我不夸奖你,呵呵,只批评,嘿嘿,开个玩笑哈。
你的文章段落太大,我看着有点眼晕,因此,这里摘录的时候,我帮你分段了。建议下次写文章,段落小一点,看的人轻松,你自己看看,现在是不是好点了?
嗯,先说我的看法,学校里面的学生,建议“学以致用”,职场中的人士,建议“用以致学”。原因很简单,学生,要理解原理,方便以后使用知识的时候,即使不会,能够根据理论推导出来,另外,学生其实是有职业啦,我说句话,“职业学习者”,大家说对不对?
既然学生的职业是学习,因此,就要“求甚解”,知其然,还要知其所以然,我的理解,这是职业道德,做不到的,不叫好学生。嗯,我承认,我在做学生的时候,不是好学生,呵呵,我的建筑专业学得有点烂。嘿嘿。
因此,从学生角度,研究源码逻辑是可以的。因为你要去理解底层很多细节,记住,下回调用的时候,自然会用,实在不会用,抄总会吧,把人家的代码抄过来,变一变,就可以满足自己的需求。
但是,研究源码是很费时间的,你提到了两本书,《深入浅出MFC》,《Programming windows with MFC》,应该说,这两本书是有差别的,至少,它们的目标客户群不一样,后者,更多面向学生,就是针对学生的需求来设计的,而前者,应该说,侯捷先生是很标准的商用程序员,嗯,商用作者,他的书,有很强的目的性,主要针对在职程序员,因此,书的风格体现短平快,抽象度比较好,更多体现在“用”,而不是“分析”。这是我的看法。
其实,这里面已经体现职业人士学习需求和学生是不一样的,职业程序员,有个中心思想,就是快速使用,因为公司里做事,没有太多时间给你学习,大家都在忙着赚钱,一个需求过来,程序员首先评估自己的知识体系,自己积攒的工程库能否支撑,有的,打勾,没有的,就要去找,还要赶快找,因为项目有时间的。
所以,职业程序员学习,有点不求甚解的,很多时候,同样学个东西,职业程序员学习,没有学生来得扎实。原因很简单,我们研究一个库,通常要研究它的“特性”,什么叫做特性呢?我的理解,就是程序api没有讲清楚的事情。一个函数,什么参数,返回什么,这个往往一目了然,但是,它内部的实现,是空间优先,还是时间优先,有没有某种潜在隐患,是不是线程安全,等等,一个程序员,不理解这些“特性”,可以说没有掌握这个库,写出程序来,bug一大堆,肯定会有问题。
所以我说,学习使用别人的库,很多时候,比重写还累,自己写,自己拿解决方案,很多时候符合自己的习惯,其实不难的,但是,真要掌握一个库,要从源代码中“逆推”别人的思想,其实非常难,更何况,很多源代码,尤其是开源的啊,变量命名很简化,注释不规范,其实我说句话,这堆代码,只能用,不能学,但是,别人学不会你的特性,又没法用好,因此,最后还是不能用,因此,叫做垃圾。
你只要仔细关注一下,虽然,《深入浅出MFC》没有从源代码讲起,其实,它在内部以侯先生自定义的一个模型,讲清楚了MFC基本架构特性的,看见没,好的讲库的书籍,一定要讲实施特性,否则就是没用。从这个意义上讲,《深入浅出MFC》是一本好书,能不用程序员花大量时间,就讲清楚MFC类库特性,其实功力很深的,这种既是快餐式,但是又有深度,又浅显易懂的书籍,很难写的,所以这本书才会一火就是10年。
我自问做不到侯先生的高度,我的书《0bug-C/C++商用工程之道》,里面也讲并行无错化开发的特性,但是我是通过源码分析讲的,没能做到侯先生那种高度的,惭愧,因此,我的书,实际上大家看起来,恐怕要费一点时间,没那么快的。
ok,这里说一点我的看法,职业程序员怎么选书,有时间的话,找点源码分析看,可以,但通常,对于解决目前的工作,没有多大用途,更多的是用来**内功,因为真要一个项目火烧眉毛了,你再去看源码分析,晚了,时间也不够了。
项目中应对问题,一般建议开快餐式书籍,或者google,能解决问题是最好,搞不懂的,先做出来看,自己做测试程序来测,先解决问题。
当然,这里面也能看出一个程序员能不能做久,一些程序言,当时用快餐的方法解决了,但留下了问题,下来,项目不那么紧急的时候,就会去自己再仔细K一遍源码或者有深度的书籍,再多测试一下,尽量掌握透,而绝大多数人,项目一完,喝酒去咯,呵呵,大家说是不是这样?
大家说,哪个程序员可以做得很久?
大家老是说我们中国缺程序设计大师,很浮躁,但是,我想说一句,就在这些细节上,大家不妨问问自己,看自己是怎么做的?
因此,对于这位同学你的学习,我的建议,如果你是学生,按照学生的方法,深入挖掘,但不妨碍你看点快餐式书籍啊,《深入浅出MFC》很牛的,至少,我是用它入门的。但,当你以后到了职场,要学会“用以致学”,这样才能赚到薪水,有钱吃饭。
不过,如果你要做个好的程序员,想成长为牛人的话,那么,注意啊,重点来了,你要学会吃苦。
什么叫做吃苦?
项目完成了,大家出去聚餐,唱卡拉OK,你可不可以看看手表,22:00了,站起来和大家说声抱歉,我要回去看书了。
大家出去旅游,你说你们去玩,我在家里看书。
有个电视很好看,你和家人讲,你们慢慢看,你坐在电脑前,看书,做实验。到2:00睡觉。
每天晚上,19:00回到家,吃晚饭,把该做的家务做了,然后坐到电脑前去学习?
公交车上,随手拿出手机,开始看书。
这些都不是最重要的,最重要的,上述习惯,你保持10年看看。
你的第二个问题我不想回答你,因为我觉得,你如果做到上面几条,其实,你的第二个愿望,“学得全面”,很容易做到的。
有一点我提醒你,“能力越强者,头抬得越高,不用看别人脸色”这句话是错的。
真正你看了很多书,能解决很多问题之后,头会越来越低的,而且,一定会看别人的脸色。
原因很简单,看书,你看得越多,我这里摆句话,你会觉得你不懂的东西越多,你会越来越发现,这个世界需要合作,每个人都有你不知道的东东,你需要借助他们的力量。
头抬得太高,别人还会和你合作吗?
人力有时而穷,我们学习,不是说什么事情都要自己来,那会累死的。
学会合作,你的事业更容易成功。
你说是不是?
呵呵,先说到这里,有问题,再问。