作为某三本计科的学生,我相信很多同党们都是想要提前自学一些前沿内容的。当然,竞赛党不需要担心这些东西,该学的早就学完了。对于那些刚刚来到计算机科学领域的小白们,学习各种知识与技能的顺序变得尤为重要。这里我只想结合一下我的学习经历,来总结一下计科各个领域,或者说各个课程的拓扑排序,来帮助大家找到适合自己的课程学习顺序。
总体上来讲,需要学习的内容大致分为基础知识、图形图像相关、人工智能相关、软件工程相关、硬件相关。
基础知识中,最基础的就是C语言。个人认为,无论是什么人想要从零开始学习编程,都推荐从C语言学起。C代表的是计算机思维的历史,尽管在当代的计算机环境中它有种种弊端,但是它是最根本的编程语言。我自己是在学习了整整一年C语言之后才开始学习计算机领域的其他内容的,所以推荐大家也是在把C掌握扎实之后再开始接下来的学习。
C接下来还是有许多基础知识是需要学习的,语言方面,至少应该学会C++和Java这两种比较经典的面向对象的语言。同时呢,作为学习这两种语言的练习,大家可以学习数据结构基础的内容。作为大三本的学生,还是要推荐一波PAT数据结构练习网站的。学完这些,就差不多是时候学习一下汇编语言了。这里的汇编指的是Intelx86汇编,mips汇编主要是为硬件学习服务的,在大家学习计算机组成的时候可以进行一些了解。除了编程之外,基础知识还有一个主要部分就是数学。在计算机领域中应用到的最主要的数学内容就是线性代数了。
至此,计算机科学的基础我们可以算是完成了。接下来就是各种前沿领域的入门了。计算机科学作为一个一级学科,下属有非常多的方向。这里还是推荐大家把各个领域的入门课程都学习一下,然后对自己感兴趣的领域进行更深层次的钻研。
第一个方向,也是我最感兴趣的领域,就是计算机图形学。学习计算机图形学,最开始还是推荐直接学习OpenGL的应用。在可以使用OpenGL写出比较真实的三维小游戏之后,就可以算是入门了,接下来深入一点的可以学习PBRT,个人认为本科结束掌握到这种程度足以。不过,学习了图形学,图像处理这部分多少也应该去了解一下。
第二个方向,就是作为计算机科学的学生必须了解的领域,人工智能。人工智能的初步是机器学习,需要的前置课程是python语言和数值分析。在本科阶段掌握机器学习的基本原理并且会使用TensorFlow之类的工具即可。
第三个方向,软件工程部分的内容。当然,我这里指的软件工程与学校里的软件工程课程不是同一个含义。我这里只是介绍工程领域所需要的技能。第一个技能是移动端开发,安卓使用的Java语言,所以可以直接上手,IOS使用的swift语言,需要另外学习。第二个技能是网页端开发,比较流行的是html/javascript/css系列的开发,主要需要学习的是JavaScript语言,除此之外,php等也可以进行网页开发。这里再提一个个人觉得没什么卵用的领域就是数据库,目前我没有感受到这个领域的丝毫用处,不过还是建议大家学习一下,没什么前置课程要求。至于PC端,我这里当然是强推我自己的SGL库开发。不知道SGL是什么的,我的其他博客会有介绍。如果不用SGL,那就推荐QT好了,很多大的PC端工程都是用QT完成的。
第四个方向,硬件相关。个人对此没什么兴趣,不过学校要求必修,所以多少还是有一些了解的。学校的课程是数字逻辑、计算机组成、体系结构三件套,所以这里也就推荐大家这个顺序学习了。
这几个部分今后我都会写博客进行讲解,这里就仅仅说明一下彼此之间的拓扑关系。