不少人问我自学方法,怎么自学的问题。其实我大概猜到很多人会问这个,我不太敢写。原因第一是因为我才大二,自己虽然稍微知道点东西,但是没有经历过社会真正的检验;第二是知乎上已经有很多更细致、更详尽的各个领域的大牛前辈们写过的经验之谈了。我想一个有心人,自己可以找到这些宝贵的财富。
不过独乐乐不如众乐乐,我还是就我自己粗浅的认知,给出我自己的学习认识和一些方法供大家参考:
一、我对学习的态度
学习是一个单纯的事情
从小我们就听着家长和老师说:“学习好啊,以后可以干大事,可以成为成功的人”这样的话,其实这句话没错,但是我理解的不是这样。第一,我认为他们的意思并不是学习好,而是你考试成绩好,只要你考试成绩好,你就能上好的中学,上的大学,在他们的年代,特别是老年人的年代,成绩好,你可以考公务员,可以找到一份满意的工作。所以其实当你拿起韩寒的书读的时候,其实你也在学习,但是他们会觉得你“不务正业”。第二,我觉得学习跟成功并没有什么直接的联系。一个人学习能力好,并不意味着就能够成功。我不太喜欢把学习和成功这么功利的事情放在一起对待,我觉得学习本身就是一件修身养性的东西,它让我们三观丰富,让我们对这个世界的认识不断地进步。
学习是一个快乐的事情
这是我从小学开始就这么认为的,我也的确一直都是这样做的,对我而言看书是一种乐趣。我想很多人都能做到喜欢看书,但是是不是你真正的从内心获得愉悦感就不得而知了。在我周围认识的人中,有很多真正掌握很牛的知识、见识很广的人,他们都对学习充满热情。这里不是对分数、对考试充满热情,不是拿出课内课本读死书,应付考试,而是一种对学习的态度。
学习是一个普遍的事情
我从来不觉得学习非要是去看课本才叫学习,也不觉得非要去看书才是学习,更不觉得非要上课才叫学习。要不然干嘛不把看书和上课改名叫学习呢?
学习一直在我们周围的每个角落,我不知道学习的学术定义是什么样的,但是我认为只要是能够对你自己的人生,对你的各个方面有所启迪的都算是学习。比如你坐在大自然中,你突然领悟到了生活是多么的美好,这也是学习;你看了电视,里面某个地方说的东西你记住了,这也是一种学习(我就记得我小时候看电视知道了一个东西,第二天考试就用到了);你跟着别人后面去练习一套拳法,这也是学习,你学习到的坚韧不拔的精神,也许你以后写代码找BUG的时候就用的到。
学习是一个持之以恒的事情
活到老学到老,学无止境。你怎么能放弃学习?
学习是一个需要取舍的事情
世间万物,如此复杂,我们不可能把所有的东西都学完,势必需要我们自己认真的挑选,有所取舍。如何取舍,这对于自学来说尤为重要。我在后面的内容再说。
自学很重要
你看看汪涵,他渊博的知识都是靠自己看书习得的。
自学是一件很困难的事情
因为自学也是一件很容易擦枪走火的事情。第一、就是方向选择不对的话,学多了就很有可能跟练葵花宝典一样,都自宫了还不知道。这点说的有点过,但是的确是这样的。自学的方式不对,热情会被消磨殆尽,会觉得迷茫,不知道学什么的状态,慢慢的变得浮躁不安。二、自学主要靠自己,没有坚强的意志力和耐力,很有可能放弃,也会在困难面前就低下头。
自学是一件很有挑战性的事情
就像电视剧里面那些绝世高手一样,自学的好的话,一步接一步,越来越好,会有无限的可能性。因为上学都是一个模子里面刻出来的,所以自学很有可能就走出一条与众不同的道路。
自学只是一种方法而不是一种绝招
自学只是学习的一种方法和套路,并非是一本《九阳神经》。比如自学java,真不一定有马士兵讲java来的好。
三、一些自学方法
这里我觉得吧,说理论都是死的,很难理解。我就拿我自己去学一个东西会是什么安排和步骤来说明。仅供参考,不一定正确,不一定适合每个人,而且不一定适合去学习其他种类的事物,这里真的只是说明一些想法,而且会很偏工程,毕竟很多人都问我的是工程。
假如我现在要去学IOS开发,我之前没有接触过,只知道ios开发基于objective-c。
其实说起来蛮简单的。
第一个阶段,我不会去一头扎进细节,不是说就直接去学习怎么编码。我会先搜资料,有点类似于游戏里面那种技能图一样。我会先去了解清楚IOS开发的发展背景、现在的发展情况、未来可能的发展情况、社区支持如何、苹果公司对这个的更新和处理、现在流行的一些应用的情况。更直接的会去blog上找已经趟过水的人写的学习经验贴,看看对自己来说怎么安排一个计划。所有以上的这些了解的内容,最终的目的第一个是扩展视野,知道学这个到底是学什么;第二个是知道应该怎么去学;第三个是知道有哪些坑,局限性等等,如何避免走弯路。
当我完成了第一个阶段,我大概会建立对IOS开发的大概的认识和了解了,也知道我要学哪些东西,哪些知识作为基础。比如IOS开发如果需要C语言的基础,我审视一下自己C语言水平如何,我是不是需要先补补这个。
第二个阶段,我会搜集入门学习的资料了。现在入门学习的资料应该主要是视频教程和图书教程了。在上一个阶段,我已经知道了哪些牛逼的书值得一读,哪些视频教程不错,就会去购买,租借,下载等等把资料凑齐。该配置的环境搭建好。
第三个阶段,我会先粗学(我自定义的词)。意思就是我会先学个大概,也许一本书,我会大概跟着来一遍,视频我会先完整的看一遍,但是也许不动手。心里有个数,这个时候我心里已经是一盏明灯了,我知道哪些是重点内容,哪些已经被淘汰了,哪些是细节,哪些是很重要的概念等等。
第四个阶段,我会细学(也是自定义的词)。意思是我会找本好书(多半是厚书,几百页上千的那种),认真的学一遍,该动手该笔记该怎么样就怎么样。把这入门的坎给过掉。
第五个阶段,不断实践,不断学习新内容,积累经验。现在属于是IOS知识学了一大堆,手还是生的,内功心法熟练掌握,可是没有化成自己能用的东西。
第六个阶段之后就靠自己努力了。一般我觉得是标准化。知识学了很多,但是这些知识是否足够标准,团队合作的时候是否自己的知识能够发挥出来。当然这其实已经是比较高的要求了。这里大门就打开了,每个人的学习能力就不一样了。
前四个阶段,很重要一点就是拓宽视野,如果突然发现不适合你了,或者你发现其他新大陆了,就可以放弃去学其他的,这并不是不持之以恒,而是自我选择。我认为半途而废是你明明可以学,但是你却因为麻烦和困难而放弃。
其实我觉得说出来蛮简单的,可是做的时候,每个人的实际情况就不一样了。具体因为实在内容太杂,太宽泛,我也不能全部表述出来,还是得靠各位自己努力。
我提几点我自己觉得蛮重要的提醒:
1.厚书一般都比薄书好,但是你要会读厚书。
这一点真的是令我很捉急啊。我看很多女生,好不容易买一本厚书,看了一个月还不知道在看什么。又不是读《算法导论》字字珠玑的。特别是编程类的厚书,那很多都是作者为了全面详细,把内容一加再加的。用我的方法,先粗学一遍,再细学一遍,很快就搞定了。老外写的很多厚书,实际上很多的内容都是理解性的,你粗学的时候理解了,细学就跳过就行了。真不会的时候,书还在,你到时候再翻翻呗。经常遇到这种问题,我大三了,我该不该看某某书等等。真心的,几本书还不至于让你几个月看不完的,最多是你学的方法不对。
2.多跟别人交流,多找资料,除非必要别老在qq群讨论,论坛里面灌水,在学会提问的情况下请教大牛。
交流才知道别人学的进度,才能知道自己是不是学的有问题,是不是浮躁,还能交朋友。多找资料,互联网那么多资料,你随便搜一下一大堆。你的时间很宝贵,不要老在qq群里面聊天,或者是问问题,除非很必要的话,大部分问题不如自己去解决或者是去找资料,这样对自己的自学能力才有帮助。问题问多了,自学能力也可能会下降不骗你。大牛的时间很宝贵,除非是你男朋友,否则请不要把能自己花时间解决的问题拿来花大牛们的时间。
3.记住初心,明确目标,多看看周围的世界。
就像题主一样,还在纠结MFC的事情,其实不知道现在的编程世界有多么广阔。广度很重要的,多去了解领域的发展。
明确自己的学习目标,不要盲目的学。这里有个很需要明确提出来的问题:
很多人争论学习有无用论。这个问题我也思考了很长时间,特别是对于计算机领域的学习尤为明显吧。学习必然是要有用的,真的没有用的东西我觉得应该选学。但是这里有用的概念是要加上时间的。举个例子,你是个搞嵌入式的,你学算法,好像短时间内没啥用处,这并不是无用,只是在未来有用,所以这是你的内功,只是你还没有一个招式去启动它。什么是无用,你搞嵌入式,让你学经济学,这就是无用啊,以后也不会有用处。当然有人会说对你什么思维理解等等有帮助之类的,肯定要跟我争论了。我觉得应该选学这些,你有兴趣就去学这些。反正这个问题说死了,不可能说明白,你理解我的意思就好。
之前的答案是用手机打的,没想到被顶到了第一。首先,请各位知友原谅我当时是带着冲动来写答案的,现在用电脑更完整的表达一下我的观点。
1.我为什么要回答这个问题
为什么对这个问题我会很冲动,因为我觉得我特别有发言权。这个问题从我大学入学就思考到现在。题主的问题,就是科研和工程的选择问题,根本不是修不修内功的问题。很多次跟别人探讨这个问题,很难找到一致想法的人。前段时间读到了byvoid大牛的博文(劝君惜取少年时),发现竟然许多观点不谋而合,在此引用一下。
2.985现状
我为什么要思考这个问题,原因是我从小学开始搞信息学竞赛,一路保送,进了XX大学。我没有经历过高考,所以我自认为没有陷入应试教育的沼泽,我很反感应试教育,而且我的母校合肥一中是一所素质教育的学校,我是一个在这方面思考“与众不同”的人,一直在思考教育的问题。
我觉得我搞了这么多年的竞赛(加起来10年了),对我来说最大的好处就是培养了我的自学能力和对问题的分析能力。我人生的重大选择,基本都是我自己找资料,分析做出决定的。XX有个A班,简单来说,就是培养科学家的班。由于是保送来的,对计算机认识也比较多,就进了这个班,重点培养吧。
进来之后,我慢慢的讨厌这个班,因为它不求甚解。比如我们学C语言,我自己是高三保送之后的课余时间自学的,前后一个星期的时间把《C primer plus》过了一遍,然后就拿算法来练,自己认为学的还算可以。但是这个班里,第一是教授教的有点飘,对于刚刚接触编程的同学就直接让其自学,我觉得问题蛮大的。第二是虽然教授是说追求教授程序设计的思想,当成艺术来教,最后并没有起到这个效果,加上同学们对这个课程的不重视,大部分人都把精力放在了高数等等的课程上,我只能说学的一塌糊涂。举个例子来说,有同学把书上的代码编译通过了,就认为程序OK了。这种教学情况,我非常反感。我想楼主应该差不多是这种情况吧,没有贬低的意思。
令我更反感的事情是搞了个大作业,大家表面上提出了各种的东西,但是真正把代码写出来的几乎没有。最后期末考试之前,老师把重点一划,再加上开卷,成绩就更不知道什么标准给的了。有同学不怎么会的,都能考到90分。这就是现状。我只是举了一门课程的例子。还有很多门课程都是这样的。我后来挂出了A班,因为我没有心思在里面学习这些东西。出来之后,跟着大家一起上大班的课程,简单了很多,虽然课程状况还是一样。
我开始很不能理解,后来我慢慢的可以理解了。教授只是搞自己科研,课程就是教好了,吸引一些人来实验室。有的老师教的很认真,但是真心来说知识他自己都没有理解透彻,所以无法教的跟国外的教授一样。大部分老师都是按照考研的考纲来教学的。我愤怒过,遗憾过,现在接受了。对于大部分我们专业的人来说,都是出国或者考研的,所以他们在短时间内根本不会考虑说要培养工程能力,对他们来说就是GPA、社团活动,偶尔一些厉害的会搞搞科研。大概只会有百分之三十的人会毕业之后找工作。
因为教授是靠实验室撑着的,所以大学很自然主要就是给自己的学校去培养科研人才了。这无可厚非,因为本来就是研究性大学,应该以科研为主。只是说中国教育现状,还到不了那种专科和本科百花齐放的情况。应该来说,专科培养工程型人才,本科培养科研型人才才对。既然大学培养科研型人才,而在本科阶段很难做出来科研的成果,所以大部分教授都会推荐你出国或者考研,他们对学生的建议都是这个。那么在本科阶段的学习,只不过是为研究生阶段打下科研基础而已,或者说只要你能学到考研能过的地步就行了,出国的GPA能达到的地步就行了。这个现状我无法置评好坏,但是这个状况对于很多高考考到名校的,却准备毕业找工作的人来说就是个很不好的状况。
2.科研和工程
下面的话都是基于找工作这个前提的。
由于大学教育的现状,这种培养科研人才的模式,对于要工作的人来说就会出现题主这样的问题了。就是我明明把大学的知识都学的很好,但是我发现我比不上那些二本三本或者是专科的学生来的厉害。其实究其本质,你是在工程这方面不如他们,而在科研这个角度来说,你绝对比他们要优秀的多。但是很遗憾的是,你就是一个要找工作的人,你的大学文凭只能让你比其他人有很一个很好的证明,可是计算机行业更看重你个人的能力和专业知识。
所以对于题主而言,如果撇开你的科研能力,也就是你所谓的数理化来说,你当然在工程方面只是个菜鸟了。你也不应该去怪你的大学,因为从你报考它的第一天起,你就应该了解到它要培养什么人,你自己要成为什么样的人。
这也就是为什么你的四六级过了,可是你备考的时候,人家在工程路上却甩了你一条街的距离。而假若你正在研究machine learning,那么你的数学基础好,可能SVM你看一遍就懂了,别人还得花上大笔的时间去补数学基础。这些问题都是因为走的路不一样。
计算机行业因为互联网的发展,特别是移动互联网的高速发展,很显然的一点是工程要比科研红火的多。我觉得计算机专业是跟其他专业很不一样的。比如数学,你很显然学出来了,就是走科研这条路,你学的也是科研那套,不用思考不用纠结。比如电力,你肯定是学技术原理,学完之后,出来就是解决实际问题,投入到工程里面去。但是计算机不一样,你在科研和工程方面都可以研究。这就完全看个人的选择和发展了。
PS:这里有一点跟题主和各位说明一下。关于MFC,UI之类的这些概念,有些人会说你不用急着懂,等你学完了大学之后,练好了内功,到时候都是随后拿来的。其实我认为这是盲目的自信。还是我的观点就可以解决这个问题。你研究的一直是科研方面的内容,要想在这些开发方面的问题上有所建树,就必须在工程方面要有基础和内功才行。记得以前数字逻辑课程上,跟教授探讨过类似的问题,教授说他的博士和普通的二三本的比起来,是自学能力的高手,所以接触这些语言什么的,都是分分钟。我并不同意他的观点,因为我觉得他的博士也只是在科研方面研究了那么多年,但是在工程方面可能(这里是可能)是个渣渣。虽然计算机知识可以融会贯通,但是术业有专攻,题主还是要花点时间在这方面进行研究。
3.大牛们的状况
其实985里面有很多大牛,还有科研牛。他们的决策可以拿来参考。
顺应大学的教育-------科研很牛的人。一般GPA都很不错,然后励志出国,所以他们就跟着学校学,把专业课搞好搞的很认真,然后就可以了,他们根本不想去关心工程化的东西。他们也学C语言,但是只要学到能用能过考试就行了,对于他们来说数学比C语言重要的多。这是一种很好的决策。只不过对于他们而言,从技术角度上就根本不是那些三本二本的对手了
逆袭大学的教育-------工程很牛的人。一般GPA都很一般,但是工程能力很强,对他们来说学校的专业课就是渣渣,基本都是空中楼阁,没有实际的用途,教的内容也只是皮毛而已。所以更多的靠自学。自学能力就在这里体现出来了,而且很多互联网企业也很乐意招这种自学能力很强,对工程很有热情的人。对他们而言,那些三本二本的不足为惧啊,因为他们不仅有学院派的“内涵”,而且有非常好的自学能力,还有一张不错的文凭。
4.我的解决办法
当我意识到大学的这个矛盾之后,大一的时候就是逆袭的办法,完全抛弃学校那一套,所以挂科了,不过这种办法真的学习到了很多东西。
我一直认为学习并不是光学课内的知识,学习好,那些所谓的GPA高的学霸,在我看来,只是考试的考霸。真正的学霸是像汪涵那样的人,学海无涯。
后来我还是更改了策略。我采取的办法是以科研的高度来搭配工程的实用性。比如说学习操作系统这门课,我不仅会去把课程要求的内容全部搞定(这对工程来说远远不够,而且仅仅是设计和原理),我更会去买很多书回来,比如说linux的各种书,分析源代码等等,不知道题主学习这门课有没有看那本《操作系统概念》,我花了2周的时间,读了一遍,感触颇深,然后发现教材就是缩水版。
为了防止很多人误解我的意思,我在此多说两句。科研和工程并不冲突,两者相辅相成。目前工业界也需要很多科研方面的成果进行支持,特别是大数据时代,各种机器学习算法等等。科研方面也会需要工程的能力,来验证实验结果的正确性,能够有实际的应用用途。只是说在人生选择的时候,应该有所侧重,现在coding慢慢的越来越容易,算法要求越来越高,平台越来越多。我个人觉得,作为在校生,我们不仅要学好计算机科学,也要了解潮流,熟悉工程开发。
然后很棒的是因为大一的大作业idea流到了我的导师那里,就拉我入伙搞科研了。现在在研究data mining领域。其实科研和工程不冲突,我研究big data之后,有些创业方面的问题我有了焕然一新的想法。
目前呢,我觉得状态非常好。
这是我自己上大学的感悟和思考,也许有些地方有所偏执,欠缺检验,仅供参考。也希望大家给我提提建议。
有人说你在修内功,人家在学招式。这是扯淡。你最多在科研的道路上修内功,但是人家是在工程的路上修内功。
你大学里面高数考了满分,人家二三本的高数挂科重修,你觉得比别人厉害,殊不知别人已经用开源工具搭建了高数重修联盟,而你连微积分跟计算机有什么关系都不知道。当你英语考试虐过六级,人家英语四级落榜,准备下一次再考,你觉得比别人厉害,殊不知别人开发的背单词app已经风靡校园。当你觉得你的离散数学考了100分,群环域格无题不会的时候,别人离散数学连逻辑推理的题目都不会做,你觉得比别人厉害,殊不知别人做的社交网络分析工具已经运用了基于图的挖掘模型。当你拿到奖学金沾沾自喜的时候,别人可能正在自己的第三家公司里看着飙升的业绩图思考下一步的布局战略。当你在寝室打着游戏的时候,殊不知你的游戏用的开源引擎正是人家连夜加了一个补丁。
其实如果你所有数学成绩都很牛,英语也托福gre水平,可以在实验室找科研任务和申请国外交换。但是你选择要找工作。你不知道的是985培养的是你的科研能力,而不是你的工程能力。你在科研这条路上甩二本三本的一条街,可是你不自学的话,你工程路上被人家甩一条街。
你的优越感来自于你觉得从小到大按要求完成了学业就很牛逼,但是你突然发现,我为什么这么认真的学却不如那些曾经比我差的人。其实你心里有答案,但是你觉得是985培养的有问题,为什么学校不教我这些工程知识。
核心的几点告诉楼主:
1.如今的985培养的基本都是科研能力,工程能力基本需要靠自学。
2.数学和英语是比较重要的,但是不是考试分数高就证明你学的好,从cs来说,给你篇英文的paper和android开发文档,你未必能比人家二本三本的看的快。你和老外程序员交流未必有人家聊的来。
3.你大三才知道os,那只能说你的水平太差,不是985的问题,就算你不自学,你至少大一也会知道。
4.敢问楼主买了多少书,除去课本之外的计算机书有多少。
5.你知道你学到现在的课程知识都可以运用到哪些地方么?