1. 极端的社会舆论
每每看到大学生就业报告里提到计算机系学生失业人数最多时,我就想mn,什么原因导致了这种现象的发生,在中国软件还处于比较初级的阶段时,市场对软件人才的需求应该每年在大幅的递增,可是大学里培养出来的计算机科班人才质量却每况愈下,甚至还不如一个软件培训机构两三个月训练出来的人好用,为什么?想想现在的计算机科班毕业生的水平吧,大学四年下来,90%的学生写的代码没有超过2000行,不Linux操作系统为何物,不知道C++和Vc的区别,没有开发出一块实用功能的简单软件, 没有使用过STL,甚至不知STL为何物,更不用提设计模式之类的比较高级一点的东西了……这样的例子还能举出很多…
就是这样的人才质量,如何让一个以营利为目的的公司接受,如何为企业创造价值? 但是也有那么一些人,能进入微软、IBM、google、百度这样的公司,拿着年薪几十万。
2. 失败的计算机教育体制
我也是一名毕业不久的计算机科班毕业生,从我目前了解的情况看来,大学时,没有几个学生真正的对计算机编程感兴趣,体会不到通过编程解决问题带来的乐趣,只是单纯的跟着课程的设置学习,这样没有目的性的学习效率如何之底?大学里的学生又有几个人能对自己的职业规划有一个基本的了解?大学里有几个人能理解学习的课程在具体的实践中的作用? 这些惨痛的例子说明了我们大学对计算机系学生的引导是非常不够的?没能激起对学习计算机技术的兴趣?不能告诉大家一个将来一个明确的职业规划方向,没有很好的引导学生去思考自己的职业规划方向?如果是这种状态去学习,大学四年基本是废掉了……
另外一个就是大学课程的设置,各种各样的课程,填鸭式的教学方式…. 纯粹理论式的教学方式….到头来,学生真正学到了什么?几个术语名词而已…..一样对操作系统是那样的迷茫….不知道编译原理的语法分析为何物? 不知道数据结构中的树和图将有何用?
3. 四年后,我能骄傲的说我是计算机系的学生
上面发了那么多的牢骚,其实都是有感而发….下面在结合自己的工作的感受具体谈谈计算机学生应该如何规划自己的大学四年
大一:
一个新兵蛋子,刚走进象牙塔的大门,什么都是新鲜的,不断听着学长们说着天书般的技术术语… 天天争论C++和java哪个好,.net是否比Vc更智能先进…. 还有什么Asp.net …. 一堆的技术摆在自己面前了…
然后自己就糊涂了….去问学长吧…学长告诉你..好好学习java吧…将来有钱途…..
其实大一,没必要学习各种新鲜的技术…..把高等数学学好吧….这才是正事,是决定了着将来你是否能称为一个大牛还是一个编程语言的熟练操作工人的因素…. 也许这时候的你还不知道高等数学有什么作用…
但我要告诉你的是如果你的悟性高…. 工作一两年也许就能体会到数学的做用…. 学高数..不是简简单单的学习微积分…. 在掌握这些知识的时候….锻炼自己的逻辑思维….. 锻炼自己的思考问题解决问题的方法和能力。作用在将来一定大大的….. 等将来如果你涉足密码学…你会发现各种积分方程和矩阵变化…. 将来在计算一个算法的复杂性和证明算法的可靠性时,也离不开数学知识…. 如果你涉足人工智能和语音识别,各种统计模型就会呈现在你面前。在你毕业找工作时,这个才是你和专业培训机构培训出来的学生的差异能力。这才是企业更看重的能力。如果你还有时间的话,学习C语言… 但是不要再用谭浩强的书了…. 看
The C program langue 吧… 如果能真正领悟书中70%的例子话,那就足够了. 如果能把这两门课程学到十分优秀,恭喜你,你已经成功了一半了…..
大二:
如果你在大一学习了C之后,这个时候大学的课程就要涉及操作系统和数据结构、还有汇编语言了…… 这也是大二一定要学好的两门课了……大学的操作系统太失败了,上完课后,很多的学生不知道所云,更加感觉操作系统的神秘了,课程设计也就是什么银行家算法的,然后大家在网上一顿搜索,然后交给老师就算完事了…
其实,我的建议是自己写一个操作系统内核,实现内存管理,进程管理和切换 等一些基础的东西了就可以了,《自己动手写操作系统》就是很好的教材…… 如果还有时间,学习《Linux内核设计与实现》,看看现实商用的操作系统是怎么实现的? 当然最好和原码结合的一起看,效果最好。还有赵炯博士的 “.012Linux内核完全剖析”什么的。如果能仔细阅读,收获一定不少。当然还有数据结构,这个也是重中之中,这也是和非科班出身的学生的差别,关键是你学的好坏,这个的实践主要在ACM上,当学习完数据结构后,最重要的是使用,不断的在Acm上做各种各样的题目,不断的提升自己算法设计的能力。从大二开始,如果能坚持两年下来,那么一般的算法设计肯定是难不住的了,也许这时候高数打下的基础就会起作用了。
当毕业的时候,进入一家好的公司应该不是太难的事情了。再说说汇编语言,本质上这也是一门编程语言,可能刚入门的时候比较困难,但是程序写多了,和C也没有差别了。我还想说一点,就是现在Windows内核也逐步开放了,至少有很多的逆向的资源可以学习。如果对Windows有兴趣,一样可以学习操作系统的实现原理。
大三:
离散数学和编译原理是个重头戏,离散数学虽然我现在还没体会到他的作用,但是和高数一样,这中内在的东西才是最重要的,代表着内功,如果没有学好,这些债迟早还要要还的。 编译原理,学习完以后一样会让你云里雾里,整天做那些无聊的题目。还是说实践吧,网上有开源的C编译器的源码,下载下来然后好好学习下,结合编译原理书中讲的东西,好好的消化一些这些知识,最后,自己如果能写出来一个C编译器的话,那你的编译原理也就通过了。当然这个时候可以学习一些C++或Java之类语言,但是学到够平时用的就可以了,没有学非常深。选择一本教材学习两三个月就行了。
当然,这个时候,可能你的同学已经能做出来各种漂亮的网页,也可能熟练的使用MFC类库做出各种各样的漂亮的软件,这些没什么,如果三年下来,如果你能够按照上面我写的那样坚持学习。也许他们用三年学习的这些东西,你用三个月就能熟练。
大四:
到了找工作的时候,如果你按照上面一步一个脚印的学习,我相信你会收到很多大公司的offer。因为大公司更看重的是你的内功的深厚,而小公司才会看重那些花拳绣腿的技术。但是这个时候,千万不要忘记继续学习,很多的学生大四一年都浪费掉了,真实太可惜了,在前面三年的基础上,到了厚积薄发的时候了,
开始要思考自己的职业规划了,你要选择Linux方向还是Windows方向,要选择底层方向还是应用方向,
要选择网页方向还是桌面应用方向。是选择自然语言处理还是人工智能。这个时候你要选择自己的一个方向,当然你可以向你的导师求助,然后确定自己的发展方向,大四一年就可以专心的学习了。
4. 附上我认为计算机学习比较好辅助教材:
C语言: the C Program Language
操作系统; 于渊:《自己动手写操作系统》
《Linux内核设计与实现》
《Linux内核完全剖析》
《Linux内核情景分析》
《Windows内核情景分析》
编译原理: 龙书《编译原理》
汇编: 王爽老师《汇编第二版》
5. 后记
以上都是自己在工作后对大学四年的反思,可能很多人有不一样的看法,我没有任何异议。毕竟每个人经历是不一样的,但是如果你向想做真正的计算机科班出身的学生,学好上面介绍的课程吧。在以后的职业生涯中,你会终身受益的。当然上面很多的课程我没有提到,并不代表他们不需要学习,只是分量没有那么重而已。因为你还是要毕业的,每门功课还是要过的。zds
当然,我现在认为,计算机的本科四年真是一个打基础的四年,之后才是学习各种招式,如果基础打好了,招式的学习会事半功倍的。当进入公司后,一样要持续不断的学习,才能让你不断的进步。自己文采不好,写的比较乱,但都是肺腑之言,各位将就看吧。zds
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!