《计算机本科生理想的学习计划》
虽然我不是学计算机的,如今却基本转到计算机行业了。我认为这些计划不只适合计算机专业,任何专业的都应该有个类似计划,任何时候都可以实行这个计划!
一、利用一些容易被忽视的时间:
1、最大化自己的自学时间,提高自己的自学能力。有些课如果老师讲课只是在念书,那你没有必要去上课,你完全可以利用这些时间学习到更多的东西,提高自己的自学能力。
2、不要对自己的成绩要求过高。考试成绩并不代表你学到东西的多少,特别是大学,很多人为了考到90甚至100分,花费了大量的精力去死记每一个知识点,生怕有遗漏。如果说60分万岁你觉得堕落,那么80分好了。其实从80到90~100需要花费大量的时间,80分基本上说明你原理已经学明白,只是一些无关紧要的细节没有记住,而这需要浪费大量的时间(之所以说是浪费,原因是考完试1个月,这两种分数的同学可以回忆到的知识已经差不多了)。可以利用这些时间学习更多的东西,比如参加竞赛、写程序或者阅读与课程相关的经典书籍来加深和扩展对所学到知识的理解。
二、学习方法和途径:
1、树立学习不是为了考高分而是为了提高自己的技能,为工作打下基础的观念。很多同学考完试就把学过的课程抛之脑后,而一些重要的课程需要不断地阅读相关的书籍不断加深来提高自己的技能。比如以为《数据结构》考了高分,就可以万事大吉,很多教材介绍的相对浅显,可以学习一些更高级的数据结构,比如并查集、Trie、线段树、后缀树、后缀数组、B+树等高级的数据结构,并多加练习。强烈推荐参加学校的ACM竞赛,经常去acm网站做题,这是对《数据结构》和《算法》等课程深入理解的绝佳方式,也是大学期间提高自己编程能力的绝佳的途径。
2、尽一切可能提高自己的动手和实践能力。有机会可以参加开源项目,申请学校本科生创新项目,参加学校组织的ACM竞赛,同时可以认识更多热爱编程的同学,虚心向他人学习。
3、经常去向csdn、javaeye等优秀的社区论坛中了解一些新的技术,保持对各种技术的敏感性,最好拥有自己的技术博客,这样可以和更多的技术牛人交流。
三、要掌握哪些技术:(本文只介绍了偏软方向的,不适用于搞硬件方向的同学)
1、学习好第一门程序设计语言。学好第一门语言是自己提高自己动手
能力和实践能力的第一步,理解语言具备的基本要素,会写基本的程序。推荐教材《The C Programming Language》(C语言程序设计),学习方式:先把书中的例子敲下来,能够运行出来,然后改造它完成一个类似的功能,或者把这个程序应用到实际中,最后完成书中的课后题的代码。
2、学习好数据结构和算法。数据结构和算法是程序设计的基础,写程序其实就是用一门计算机语言,利用数据结构和算法解决问题的过程,所以学习好数据结构和算法尤为重要。推荐教材《算法导论》,学习书中的算法,参加ACM比赛,到ACM在线评测系统做相应的题目,有一些对poj题目分类的帖子,也可以到joj上从易到难的做题,不要一直做水题。
3、学习好操作系统。操作系统的课程介绍了操作系统的一些概念和技术,但是如果不结合实际的操作系统,很难理解其中的一些概念。学习使用Linux/Unix,开始学习一些shell脚本、系统编程,理解进程、线程、信号、互斥量等概念。推荐参考书籍:《操作系统概念》、《Linux入门经典》、《The Design of the UNIX Operationg System》、《Unix环境高级编程》。
4、学习好数学。计算机其实是一门数学的应用科学,数学知识是计算机的基础。《概率》、《线性代数》在计算机中的应用最为广泛,另外《离散数学》也很重要,《高等数学》其实关键是个极限和离散化的概念,至于如何去按照公式去求导、积分我感觉并不重要。除了教材外推荐《Concrete Mathematics A Foundation for Computer Science》 Donald E.Knuth的经典之作。(如果此书还不过瘾的话,推荐继续阅读Donald E.Knuth的《计算机程序设计艺术》)
5、学习好面向对象的思想。咱们学校开设了《面向对象程序设计》的课程,用C++来讲述,很多同学误将重点在C++语言身上,其实重点是理解面向对象的思想。当然可以同时把C++语言学好。推荐书籍《C++ Primer》、《Thinking in C++》、《Effecitive C++》、《More Effective C++》、《设计模式:可复用面向对象软件的基础》。
6、学习好编译技术。学习编译原理课程,实现实验课中的词法分析、语法分析、语义分析。参考书籍:《Compilers Principles Techniques And Tools》,传说的龙书。
7、学习一门脚本语言。脚本语言和编译型语言不同,可以学习新的编程思维和方法。学习正则表达式,基本的文本处理。推荐Ruby、Python或者Scala语言。推荐书籍:《精通正则表达式》以及语言本身的经典书籍。
8、学习中大规模程序设计,并初步学习到软件工程的思想。可以学习Java语言或者Linux下C开发,进行大规模程序设计。可以开始写自己感兴趣方面的应用,比如从一个小游戏开始(比如单机俄罗斯方块游戏–>联机版俄罗斯方块),有机会可以参加一些开源的项目,逐渐掌握复杂的编程技术。推荐《代码大全》、《重构:改善既有代码的设计》、《程序
员修炼之道–从小工到专家》
9、另外如果你想从事其他方面的编程,比如游戏方面,你可能需要自学一些相关的技术。
10、如果你有时间和精力去实习,那么尽可能去实习,来提高自己的实践能力、积累工作经验。
11、提高自己的英语阅读能力,经常阅读原版书籍、在线文档。
当然最好是有兴趣才行,兴趣是最好的老师,以上的一些经验和教训的总结,希望对学弟学妹们有用。