这一周来被发烧感冒扁桃体炎折磨到半生不死的,十分之难受。现在刚好点,接下来要准备大腾讯的2017实习生招聘,虽然觉得可以进入的机会可能比较渺茫,但人要是没有些梦想的话,岂不是和咸鱼没什么区别?所以觉得还是要好好准备一下,博客这里可能会冷落一阵子了,3.28号如果没有收到考试通知,那么就把这个月说好的一周一篇补回来吧,现在,要准备加油了。
逛一些技术群的时候,经常有人问这一门语言该怎么学,这个知识点怎么理解,为什么我老是记不了这些东西等等诸如此类的问题。我觉得学习一门技术,不是看几本书,也不是对着代码一遍一遍漫无目的的敲就可以学会了的,真正要把一门技术吃透,就要把自己陷进去,带着强烈的目的性去学,不管是兴趣,还是其他,有目的的人,才能让自己更专注。当然,新手阶段如何起步,我自身总结了一些小技巧。但是否适合所有人,不得而知。权当记录自己的学习方式吧。
我学习的第一个编程语言,就是c语言。作为一位怀着忐忑心情入坑的苦逼文科生,其实周围没有什么人给你多少的指导。就连搭建一个IDE,并且在里面输出一句hello world,都是从网上看教程,一点一点搞起来的。而后,在后来的学习中,因为没有专门的老师来教,一切就只能靠自己来摸索,于是从网上找了不少的教学视频,一步一步跟着来学。但这并不是说只是看完了视频,敲完了视频说的代码,结果能够运行起来就可以了。而是视频中所讲的那些知识点,是必须理解的。比如指针这一块,我用了1个月的时间去专门研究,不断地看书,尝试着自己去理解书中说的指针是什么意思,对着实例去画图,推断这些代码的流程是怎么走的,觉得自己对指针有点感觉了,再来敲一遍代码,敲完了,尝试举一反三,做一些改动,确认每一行代码都有什么作用,然后再看视频,再去看书,再敲代码,循环反复。
后来,为了工作考虑,在寒假的时候去问了一些培训机构的老师,决定选择Android这一块,但是Android的编程语言是java,怎么办?没办法,也唯一只能重新开始学。但是和学c不一样的是,因为有了学c的基础,再转到java的时候,其实根本就没有多少问题。唯一要注意的可能就是对OOP的理解,但对于一些基础的知识,真的就是在一个月内就入了门。方法也还是:看视频,看书,理解,实践狂敲,这几乎就是个循环反复的过程。当然,在敲的时候,还要考虑出错的问题,所以从百度或者谷歌上找答案,也间接让我接触到了csdn博客。我的很多知识点,来源就是csdn以及书上,看视频是因为有人会把这些知识点给你过一遍,但还不是你的,所以你需要针对某一方面的知识点,去看书或者看其他人的博客,并且最好参照着去看两到三份不一样的博客,你会发现,这些知识点很多是类似的,但总有一部分是和其他人是不一样的地方,可能也正是帮助你理解的一部分。当然,天大地大,编码最大,不管你对这些知识点理解有多深刻,但不亲自弄出个成品过来,你就不会知道里面到底有多少坑坑道道,代码出错不打紧,重要的是知道为什么出错,能够自己改正过来,才是你的经验,也是你的理解之一。
总述以上,我的学习方式可以归纳为:
1.先看视频,相对于直接看书来说,看网上的教学视频可能会更容易使你直观地去看到一个项目从无到有的过程,同时讲师也会给你比较详细地讲解一些知识点,但是这些知识点,你只是听了一遍,或者说你只是跟着敲了一遍而已,本质上还不是真正属于你,你了解得到的,也不过是它在这一个项目的运用而已,或者说,这个视频知识带给你对这个知识点的一些基本的理解。
2.再看书,既然你对知识点有了一些基本的理解,那么就要开始去深入学习。这时候,推荐看书+看博客,看书是因为它就在书上,不会跑掉,你多看自己,自然慢慢也会有理解,而看博客,是因为前人会把它对这一部分的知识点的理解记录下来,你学习的其实就是他理解的方式和角度。在这个阶段,对知识点有一个较为深刻的理解是很重要的,它直接影响到你能否正确地去运用这个知识点。
3.当你对知识点有较为深入的理解的时候,就要去实践,狂敲代码。这里的狂敲,不是叫你对着书籍或者教材或者视频区敲了一遍又一遍,单纯的肌肉记忆是无意义的。你需要做的是,把你的思考和理解融入进去,按照知识点,这一步应该是做什么才对?这个算法该怎么实现?有没有可以优化的地方?能不能换种更简单的方式?不断去思考,不断去改代码,直到你敲出的代码既可以得到你想要的结果,同时你也知道为什么要这么敲,每一行代码有什么作用,会产生什么结果。那么,你就对这个知识点入了门了。
4.对知识点入了门,不代表它就一辈子就属于你,就好像现在,专注于Android开发已经一年多了,你再让我回头去弄指针,我可能也会觉得困难。因为很久没有接触,已经开始生疏了。但是,对于它的理解,其实还是有的,只要多敲几遍c,激活你大脑中的对它的印象,你也能很快将这部分知识点收回来。这也涉及了一个很重要的问题,就是复习。你可以不做笔记,不预习,甚至聪明到不敲代码都可以理解这些知识点。但你不能不复习。如果你经常不去理睬这些知识点,那么自然也不会一直记住它。所以,不断地复习,不断把自己融入到代码的世界中去,疯狂到走路的时候你偶尔还可以研究一下代码的时候,你就可以说你掌握到了。
有人说,那么多的知识点,按这么学,该学到什么时候??呵呵,这就涉及到另一个问题,目的性。技术这条路就是条不归路,日日新,苟日新,日又新,每天或许都能够诞生一门新的技术,你不及时去学习这些技术,技术自然也会将你慢慢淘汰。所以,不管是为了强烈的兴趣而学习,还是为了以后就业有保障而学习。你都需要有一个目的。就是,我再不好好学习,新的技术就没机会学了。通过一种近乎催眠的方式,让自己投入到忘我的学习中去,你会发现,再怎么多的知识点,其实也不过是多花一点时间,在你不知不觉的时候,或许你已经学完了还不自知,已经开始踏入其他的新技术领域了呢。
最后,关于学习一门编程语言,还有一点,就是实践。你觉得你的知识点学得差不多的时候,就可以试着写一点项目,不论是参照网上来写,还是自己按照自己的思路去写,都没关系。在这个阶段不是考虑你的创造性,而是考虑你的这些知识点能否融会贯通,以及处理错误的能力和边界检测的可靠性的问题了,也就是我们常说的能否写得一手好代码。
最后,贴上我自学期间看过的书和视频,仅供参考:
c语言:
视频:自学网的飞哥录制的基础c语言视频教程/宁采臣大神的《c语言,好爽系列》/中国大学mooc中哈工大苏晓红老师的网络教学视频
书籍:老谭的《c语言程序设计》,虽然有很多人喷,但有的地方还是有助于理解的/c语言学习宝典《c prime plus》
java:
视频:一个培训网站上的一位老师录制的基础视频,因为有基础,这一块反而没有多看视频,看书的多。当然,对于Android学习来说,还是看了很多的视频。
书籍:《Head first java》真的是通俗易懂,十分精彩
《java 开发实践经典》《java 疯狂讲义》 《java 程序设计》等等
Android书籍:《第一行代码》《Android开发完全讲义》《Android开发进阶-从小工到专家》《Android开发艺术探索》等等
学习网站:CSDN/博客园/百度/谷歌