任何一个程序员不能做到随便动手就写出任何一个你指定的算法,那也只能算是一个残废。基本功有很多,算法与数据结构是基本功的核心,除此还有计算机系统原理(操作系统内核和编译链接装载加上网络)
如果你是个学习计算机专业的学生,你有幸看到哥这个文章,不管你大几,不管你研几,甚至是博几,请你扪心自问,你能做到常用的数据结构与算法烂熟于心吗?
如果不能,而且也不愿意改变,而你又不想浑浑噩噩过一辈子的话,那么,可以考虑自己真正喜欢做的事情是什么,然后重新选择你的职业方向。
常常有人在强调要培养自己的编程能力,要多动手编程,可是看看实验室,亲,几个人在写代码,编程?有几个人在疯狂地思考,奋不顾身地写代码?大部分人只是在借着学校提供给你的温床在继续享受着这种学生时代所特有的舒适与安全区。说白了就是对自己不负责任,当你在阅读一段段代码的时候你可曾想过,其实效率可以更高的?编程可以更快的?人性有一种本能,就是趋利避害。当我们高度集中注意力全神贯注地思考问题的时候,我们的学习效率是最高的,但是这样也是最累的,消耗的脑力也是最大的。但是因为人性的这种趋利避害的本能,我们往往选择了做一个昏暗的蜡烛,而不是一盏释放最强能量的明灯,似乎,燃烧过快就会油尽灯枯。笔者在第二次考研的时候因为一些感情方面的问题,发自灵魂深处地渴望获得成功,那时,我疯狂研究如何获得成功,然后付诸实践。在那段日子里,我阅读了很多的书,也思考了很多,我明白了很多人生的道理,其中最重要的是一个字:做,而不是想或者计划或者跟人谈论,这是一种实用主义。求学,求职,求爱,求财……这些是人生中必须要做的事情,或者说人的一生其实一直在追求。这里不谈求爱和求财,只谈程序员的求学与求职。
算法与数据结构这么重要,那怎么快速学呢?
1 搭建环境:
linux下:vim + gcc + gdb + ctags + cscope
这个环境给你用C/C++做算法训练,简单高效。不要提集成开发环境,特别是那些写一个HelloWorld都要建一个复杂的Project的IDE。有些人就要问了那还要IDE干什么?他们是开发用来做大项目的,不是用来强化训练算法的。
2 选一个优质的博客和 一本神书
现在是一个发展非常迅速的互联网时代,任何一个人都可以非常方便地获得海量的学习资源,但也正是海量让我们又无从下手。从哪开始呢?
http://blog.youkuaiyun.com/v_july_v/article/details/19131887 这个博主是一个实用主义的人,跟我比较契合。不信可以看这个帖子:blog.youkuaiyun.com/v_july_v/article/details/7382693
纯干货,记住,唯有干货才能让你快速进步,让你事半功倍,一切不以迅速动手秒杀核心的学习资料都是外围。但是这种资料太少啦,只能是靠自己平常刻意去总结出这类似的干货,再反馈社会。
神书的作用是用来帮助自己框架化知识体系的,神书不是一上来就看,而是在研究博客,做题的时候逐步渗透,不懂就去看看书上有没有提到,有就看。
3 核心:结合博客,动手编程,不怕难,每天坚持,每周复习,反反复复,考前冲刺
其实核心就在这里,1和2都只是外围,方法是每天坚持做题,但是即使这样屁用都没有,因为,人的大脑不是计算机的存储体,一两周足够让你忘个干净。所以每周必须重新捡起这一周的所有题目。但是,我依然能告诉你,这屁用都没有。还是因为人脑会忘记,你必须,一有空闲时间就复习你这段时间所做的题目,反反复复。大概在有大公司的面试接近的时候开始冲刺,继续强化记忆和巩固自己所做的所有题目。真正做到随便可以写出正确的常用算法代码,向你抛出橄榄枝的不止是国内的互联网公司。
最后,我写了这么多,我自己会真正坚持去做吗?