不管你是如何选择了这门专业,我想告诉你的是这是一个很深的领域,没有热爱不如尽早转行。
根据百度百科 计算机科学与技术专业 (以下简称计算机专业)给出的描述,该专业的主要课程包括 数据结构与算法、操作系统、编译原理、计算机组成原理、计算机体系结构、计算机网络 (划重点,这些都是计算机科学的基础课,本科期间应力求掌握主要的知识,不需要过深钻研,但也不要浅尝辄止,这对考研和就业都极为重要)
C语言
编程语言是编程的工具,计算机相关专业的学生必须具备足够的编程能力。当然,关于“最好语言”的争论从来没有休止过,这里要强调一下: 语言的选择真的没那么重要 ,你现在学了Java,很有可能将来需要做python的工作,学习语言的过程最重要是语言的机制。要记住,在入门阶段不应过多的去考虑哪种语言更有前景。
对于初学者来说,以C语言入门自然是不错的,大多数大学也乐此不疲,当然其中不乏直接上手C++、Python的学校。对于C语言来说,不要求你学的多好,但一定要学的 扎实 ,它决定了你以后学习任何一门语言的速度。
数据结构与算法
掌握了C语言之后,接下来就会接触到 数据结构与算法 ,实际上初学者很难分清什么是数据结构、什么是算法。这是一门 颇有难度又饶有趣味 的专业课,对于注重就业的高校来说,这部分的知识并没有足够强大的师资力量去支撑,这也导致了老师讲的不够透彻,学生也不愿意花精力去学习。从就业角度来说,对于开发中小型的系统,基础的数据结构与算法是足够用的,但这并不适合大型项目的开发。不熟悉这一块内容的学生,基本在工作3-5年后都会遇到瓶颈。而像BAT这类的互联网大厂招聘应届生时是非常重视数据结构与算法的,因为他们需要懂得这些知识的人才去做大项目的一颗颗螺丝钉,而非全能的瑞士军刀。计算机专业的学生都会知道ACM,这是计算机领域的顶级程序设计竞赛,能够在比赛中得奖更是难上加难。一个优秀的ACMer需要付出常人2-3倍的努力才能有所成就,如果要入ACM的坑,一定要莫大的毅力才可以,中途放弃是不会有任何回报的。对于本科生来说,即使不以ACM为目标,这部分的内容,仍然是攻坚克难,需要反复琢磨的基础知识。
Linux
计算机专业的学生不能不会Linux,不管你的学校开不开这门课程,你都要学,而且要用得和Windows一样熟才行。很多初学者以为Linux很难,其实不然,既然是操作系统,Linux开发出来也是给用户用的,只不过专业人士用的多一点罢了。很多操作都是非常简单的,而且在学习Linux的过程中,你会逐渐拓展自己的视野,你会了解到如何挂载镜像,如何配置虚拟机,如何使用命令行(linux下的命令行可以在Windows的powershell里使用,非常好用)。而且如果你要学习嵌入式开发,Linux更是必不可缺的要求。
面向对象语言
你的第二门语言可能是C++、JAVA、C#等等,这些语言都有一个共性:OOP(面向对象编程)。这和C语言的面向过程编程不一样,你不会再写一大堆混乱的函数来实现不同的功能,你要开始通过类与对象来做更好玩的事情。如果你的C语言基础打得非常好,再学任何一门语言你都会是轻松的。唯一困难的就是思想的转变,面向过程编程思想–面向对象编程思想。到这个时候你就已经真正进了计算机专业的大门了,虽然这个时候你才大一下学期或者大二上学期。这个时期你一定要多学东西,当然第二门语言并不意味他将成为你的全部,我也推荐你去接触一下C++、Python。刚刚入门的小白需要迅速增加知识储备,越广泛越好, ** 你了解的越多,你越能明白你自己以后想要的是什么 ** 。
数据库与SQL
毋庸置疑,数据库的基本操作都是要会的,无论你以后是做什么方向的工作,所有的工程都是要有后台数据库的。初学者最好使用Mysql + 可视化工具Navicat进行学习,当然学校有自己的要求就按学校的来。一般SQL的学习都是穿插在理论学习之中的,即使以后你不是专门要做数据库这方面的工作,SQL的大多数操作都是必须会的知识。
GitHub
大学课程里不会有一门课教授GitHub,这属于自学的内容。Github对于程序员的开发是非常有用的。GitHub除了可以当代码仓库,最出色的方面还是它的版本控制和协同开发,这对于开发者来说是非常有用的。GitHub的基本操作非常简单,命令行操作也就几个常用的命令,基本上1-2天都能学会,出现了不懂的地方继续充电。
web前端开发
HTML+CSS 近两年挺火热的一个方向,产生的原因在于前后端分离的趋势,前端的定义也不仅仅局限于切图、美工之类的工作,从基础的HTML+CSS到各种前端框架都是这个方向的学生要学习的。推荐直接学习HTML5+CSS3,它们是HTML+CSS的新标准,虽然有些浏览器(例如ie,前端开发者永远不可避免的浏览器)不兼容新的标准,但是随着时间的推移,新的标准必然会取代旧的标准,尤其是HTML的canvas标签要深入的学习,没有一个网页出来效果是单纯的文字。
JavsScript 前端三剑客除了HTML+CSS,当然还有JavaScript,初学者迷惑JavaScript与Java的关系,这里告诉你,它们的关系就和雷锋与雷峰塔,张三与张三丰的关系一样!!!一点关系没有。当然JavaScript也有新的标准那就是ECMAScript6(ES6),JavaScript本身并不是严格的面型对象编程的语言,但是新的标准能够更适应面型对象编程,能够提高开发者的工作效率,当然也是有部分浏览器不能实现完全支持ES6标准。当然学JS的同时要顺便把Jquery学了,它们大多数是相通的。
前端框架 学前端要比学后端更要掌握时代的趋势,不断学习新的事物,才能立足于前端。 永远不要认为前端简单而学前端 ,任何一个深入学习过前端的人都会告诉你,前端的水比后端深多了。前端三大主流框架Vue、AngularJS、React,不推荐全都学习,每个公司都有自己的标准,能够有针对性的学习也是很好的。
你以为这就完了?不不不,这才是开始。
- 对于一个工程性的大项目,混乱的外部js文件会把工程搞得一团糟,这里就继续学习Webpack打包工具了,不过去年一个新的工具项目parcle在github上获得了不少的star,简单方便,大有超越Webpack的趋势。
- 现在市面上的ES6标准还是用的不如ES5,那如果出现了冲突怎么办呢?这时候你就要学习Babel了,这个东西能够帮助你做好两个标准的兼容问题。
- JavaScript还没学好的同学,TypeScript现在又火爆起来了,还不赶快加入学习!!!
- 认为前端只能作页面?NodeJs已经开始做后端的事情了!!!
前端水很深,不是简单几段文字能够描述清楚的,如果真心想学前端,不然认真的如把上面的内容百度一翻,虽然仅仅是了解,但是你已经做到先人一步了。
web后端开发
后端开发有很多种形式,Java、Python、Go、PHP都能做。
Java全家桶 这里以Java为例,毕竟现在大学教育都主要以Java为主要课程,授课流程基本都是从Java SE 到Java Web,再到Java EE、Java ME。小白估计又懵了,这里说的Java SE就是我们平时说的Java,它的英文是Standard Edition,这也是后面所有java技术的基础,同样,如果你要做Java后台开发,Java SE的基础一定要打牢。而Java Web是Web后端的基础,Java Web工程师现在也是就业的热门岗位,是后端开发的重要内容。Jsp+Servlet+Javabean是Java Web的基本组成,这也是MVC的一种基本框架,它能帮助你做出一个简单的系统项目,但是不得不说的是,没有HTML+CSS的前端技术,做出来的东西是在是太丑了。致力于做Web后端的同学,前端的知识也要有所了解才行。而Java EE,它的英文是Enterprise Edition,它是面向企业级开发的一个语言平台,熟练掌握Java EE的各种特性是后端程序员的必修课。Java ME,英文名称Micro Edition,它是一种面向嵌入式的语言平台,学校开设课程的不多,除非是要专门学习嵌入式,不然不需要过深的研究。
操作系统与计算机网络 这两个课程是计算机专业的基础课程,java开发的一个主要特点就是多线程,而对于操作系统的整体认知都要来源于这门课程,你需要知道什么是并发运行,IO设备到底是如何管理的,计算机到底是如何运行的。Java的工程大多规模较大,需要应对高并发的一些情况,一个后端开发者应熟练的使用stream APi控制对象集合,掌握RxJava这种具有函数编程风格的库或者框架。在Java网络编程领域,哈诺德 (Elliotte Rusty Harold) 的那本《Java网络编程》是非常经典的书籍,非常有必要去踏实的学习这一部分的内容。网络开发的经典框架是Netty,它是一种异步的、事件驱动的网络应用框架,能够快速开发高性能的网络服务器和客户端。JVM的底层机制在很多情况下都有非常重要的作用,这时候你一定会接触到Vert.x,这里不需要过深的研究,只要掌握其核心组件就可以了。
后端框架 后端框架的基础就是MVC,也就是之前说的Java Web的三大组成,但是企业中通常会用更方便的SSH(Spring + strtus2 + Hibernate)或者SSM(Spring + SpringMVC + MyBatis),没有好坏之分,不同的公司也会用不同的标准,Java框架的发展虽然赶不上前端的速度,但也是不断变化的,自然是要不断学习。
你以为这就完了?不不不,这才是开始。
- Java虽然不擅长做桌面应用,这方面还是C++、JS更强大一点,但是你应该懂一些Swing、ATW的技术,甚至是更加深入的学习Java Fx技术。
- 所有的工程都是由数据库的,JDBC都不懂怎么做开发?后端程序员不能局限于Mysql,还于精通Oracle的相关技术才行,最好再去了解一下Redis。
- 组件式开发能够加快开发,Maven技术能够快速搭建工程框架,开发者应该熟练运用这种技术。
- 不懂服务器的后端不是好运维,后端开发者不能局限于Java的Tomcat,像Apache、Nginx这样的服务器软件都应该有所了解。
##Android与IOS开发
手机已经改变了人类的生活,各种各样的App层出不穷,而手机系统中80%以上都是Android系统,不到的手机系统是20%IOS,还有几乎可以忽略不计的其他系统。所以Android开发已经是现在App开发的主力军了,而Android开发一直以来都是基于Java语言的,直到这两年突然出来的黑马Kotlin。所有学习过Java的人都会了解过Kotlin,他们会惊叹Kotlin的友好,但是不得不说的是,Java还是现在的主流,Kotlin用在开发中还是有许多不稳定的情况,新技术的推广估计还要再等几年。要去熟悉Android的SDK,熟悉JNI机制,要不不断用各种项目练手,GitHub上很多不错的项目都可以fork下来自己学习。
IOS开发虽然受众不多,但也是需要App的啊,现在的IOS开发基本上也有两种语言,Objective- C和Swift,其中OC的使用还是多一点,学习IOS开发一定要紧跟IOS系统的发展,去年9月份苹果公司推出了IOS的第11个版本,不要从很老的版本开始学。
游戏开发
很多学生喜欢打游戏,对于计算机专业的学生,想做游戏的也不少,许多学生想学但是不知道该怎么学。但实际上,国内大学几乎没有开设游戏相关专业的,在这个领域最顶尖的大学是美国南加州大学(USC)。
C++与C# 在图形图像处理这方面,这两中语言是非常优秀的,千万不要以为Java能做任何事情,在游戏领域真正的老大是这两门语言。游戏开发自然离不开游戏引擎,大的游戏公司一般都有自主研发的游戏引擎,而市面上的主流引擎以Unreal(使用C++语言)和Unity 3D(使用C#语言)为主,而Unity 3D有免费的个人版本,更适合学习与小团队开发,所以市场份额更高。之前Unity还支持JS和Boo,不过已经取消了对Boo语言的支持,JS也大有被取消的趋势。端游这方面,没有基础的同学可以从C++入门,之后学习C#,并尝试使用Unity引擎开发小的Demo。
计算机图形学与Shader 如果说语言是外功,那么算法就是内功,而图形学就是游戏开发领域的必修内功。各种图形算法可能比数据结构与算法中的内容还要复杂,对数理知识的要求更高。很多开发者不屑于算法学习,认为我只要做出好看的作品就可以了,但实际上不是这样的,计算机这个领域就是这样,只要你想深入学习一些东西,算法永远是不可避免的。有的大学生做了两、三个Demo就去应聘,能够头头是道的讲出来自己是如何用引擎做出来的,但是一问到底层机制却说不出来,这就是内功修炼匮乏的原因,而且越是工作的时间长表现的越清晰。这部分你应该熟练的掌握DirectX与OpenGL两个图形接口库,深入理解图形处理的机制。在图形学领域的另一个难点就是Shader着色器,这个东西决定了你做出来的作品是基于外表的好看还是基于内在的好看,前者只要有绚丽的贴图、纹样就能做出来,但是后者确实要深入理解游戏引擎渲染机制,掌握掌握纹理映射、光栅处理、GPU机制的综合体现。这里推荐siki老师的教程,在游戏教学方面的视频都是非常好的资源。不要以为这就完了,还有GLSL和HLSL等着你去学,shader真的不是看几个视频就能学好的东西。
手游开发 手机App中必不可少的一类软件就是手机游戏软件,手游开发注定是要走向辉煌的。Unity当然可以做手游,王者荣耀就是用Unity制作的。毕竟王者荣耀同时在线人数能够达到500W,用一般的引擎会非常的吃力。不过对于学习来说我们就不用考虑那么多了,像老牌手游引擎cocos2d-x支持C++、Lua、JS三种语言的编程,是国内第一游戏引擎,全球第二游戏引擎(仅次于Unity),除此之外还有Egert、Layabox在国内也是非常受欢迎的引擎。这些引擎大多都支持的一门语言就是JS(包括TypeScript)。
数字媒体
Adobe全家桶 如果想要致力于学习这方面的内容,Adobe系统的Ps(图像处理)、AI(矢量图制作)、Au(音频处理)、Pr(视频处理)、Ae(视频特效处理)都是要会操作的。不需要精通,毕竟不是做专业的美工师。像这些软件不需要去购买高昂的视频去学习,许多网上课程已经足够学会基本操作类,如果想进阶最好是购买一本专业书籍来帮助提升。
FFmpeg 这个软件更偏向与计算机专业,其中的操作不如Adobe的简单,但是对计算机专业的学生还是很友好的,它是通过命令行来操作的,包含libavcodec(一个用于多个项目中的音视频解码器库)和libavformat(一个音视频格式转换库)。
3dmax与maya 3D图像建模领域的两大巨头,这就偏向于美工的技术了,需要一定的美术功底。这两个软件的基本功能都没有什么差别。
虚拟现实 3D立体技术包括3D建模与3D显示,虚拟现实就是基于3D显示的一种技术,这个领域最基本的语言是C++,与C#,基本都是通过游戏引擎渲染出来的。
人工智能
人工智能不同于传统的前后端开发,它对线性代数、高等代数的要求很高,许多计算都是通过矩阵来做的。许多小白会对人工智能(AI)、机器学习(DL)、深度学习(DL)感到迷惑,这里总结一下, 机器学习的目标是实现人工智能,而深度学习是机器学习的一种方法,除此之外还有决策树学习、贝叶斯学习等方法 。
Python 现在最火热的一门语言,在人工智能领域尤为吃香。Python语法简单,各类第三方库能够在许多不同的领域发挥作用,以至于已经有部分的高校开始尝试用Python作为计算机专业的入门语言来讲授。即使是在Web开发方面,Python Web也毫不逊色。不过还是让Python在属于它的领域大放光彩吧。
CNN(Convolutional Neural Network) 翻译过来就是卷积神经网络,它是一种新型的人工神经网络结结构,利用这种技术在图像和语音识别方面能够得到更优的预测结果,这种技术通常用在深度学习中。Tensorflow它是机器学习领域的一个开源软件库,它能够支持Python、C++、Java、Go等多种语言。我们在用Python做机器学习的时候大多会用到TensorFlow库和numpy库,想学习人工智能的同学一定要掌握好TensorFlow,TensorFlow是最流行的,但不一定是最好的,它也有自己的一些缺点,所以不要以为机器学习只能使用TensorFlow。
OpenCV(Open Source Computer Vision Library) 人工智能自然会涉及图像处理,计算机视觉以及模式识别,而这个视觉库。如果想学习像人脸识别,动作识别等领域的知识,这个库是一定要学好的。这个库主要接口是C++语言,在图形图像处理这部分C++是占有统治地位的语言,当然也有支持Python的接口。
大数据开发
Scala 现在的大数据人才大多还是以Java语言为主,之所以写Scala是因为在后端开发部分写了Java的相关内容,这里想讨论点别的。这门语言因为有Spark的存在,被使用的概率多了不少。它是一门非常适合函数式编程的语言,而且这种语言兼容Java,能够运行在JVM上,也可以调用Java的类库,是大数据方向的学生不可不学的一门语言。
Hadoop Hadoop是Apache公司下的一个大数据通用处理平台,它是大数据方向的必修课,学习Hadoop不仅仅是学会搭建集群,还要掌握使用 Hive (Hadoop架构之上的数据仓库)对数据进行精炼、查询、分析,通过 HDFS (Hadoop分布式文件系统)来处理大规模的数据集等等。
MongoDB 大数据方向的学生不能局限于结构化的数据库,像MongoDB这样的非结构化数据库才是将来工作使用的主流数据库。
网络安全
密码学 解密与加密永远是网络安全的重要组成部分,密码学一定要系统的学习,因为网络安全的整个学习过程都要围绕密码学展开,很多学校没有专业的密码学课程,或者根本不知道什么是密码学。这就需要多买几本经典的密码学书籍来看看了,而且要多花精力来学习才行。
黑客攻防 网络安全方向的学生一定要以一个黑客的标准来要求自己,这里的黑客是指白帽黑客(不明白的可以参考百度百科 黑客 ),这里就需要深入的学习Unix/Linux的底层机制了,市面上大多数的服务器都是以Unix/Linux为操作系统的,很少是Windows。要深入了解计算机网络模型的安全机制,理解防火墙的工作原理。对于Web安全、漏洞分析、0Day攻击、IDS(入侵检测系统)、网络渗透都要有较深的理解、
逆向工程 分为不同的平台,诸如Windows、Android、IOS等等,逆向工程要深入了解计算机组成原理,熟练掌握 汇编语言 ,能够用C/C++进行基本的编程。逆向工程有许多分析工具可以用,例如 IDA Pro 、WinDbg等等,这些调试工具能够大大提高逆向分析的效率,要熟练掌握。
计算机领域现在已经渗透到各行各业,各种计算机相关的岗位层出不穷,上面仅仅罗列了一些博主熟悉的方向,当然热门的方向还有物联网、嵌入式等等,由于博主的知识储备非常有限,对这些领域了解的不多,所以就不班门弄斧了。文章涉及多个领域的专业内容,大可挑选自己感兴趣的部分进行阅读,很多名词可能读者不甚了解,推荐看完文章进行百度或者谷歌。当然,文章仅供参考,每个人的学习路线还是要有自己决定的。 谨以此文献给仍然迷失在大学生活中的计算机专业学子!!!