皮皮灰将分别从专业学习,就业前景,考研选择介绍计算机与软件的区别。
专业学习
计算机科学与技术,简称计科(CS)。一般来说CS的学习偏重学习计算机的原理。学习偏理论,学习内容涉及软件也涉及硬件,还有两种相结合,一般来说CS两者的比重是1:1,按学校的不同可能会出现不同情况。
软件工程,简称软件(SE)。SE的学习主要是围绕着软件的应用、设计、开发、维护架构这几个模块等。偏应用、工程、实践。学习内容涉及一些基本的硬件,但更多是工程的理论和大量的软件实践知识。
国内的大学似乎把软件工程当做了一个马甲,以软件工程之名,行计算机科学之实。它们可能会淡化较为理论的电路、物理、数学内容,并以一些软件工程的方向课体现与“软件工程”的相关性。
为什么呢?因为学校不得不这么做。首先,本科的学生没有任何专业背景,直接上软件测试、软件分析、软件开发生命周期这种软工内容,同学无法理解。其次,我们的软工教学还处于纸上谈兵阶段。真正懂软件工程的老师太少,他们能做到的只有读PPT,或教你画画图这种东西了。
那为什么要分设计科和软工两个专业?我认为这是某段时期响应*治号召、创造变现方式的产物。如果读一读一些大学软件学院的创院历史,你就会发现它们一般创院甚晚于计算机系(年前后),且字里行间会渗透出“响应国家号召培养更多信息技术人才”这种信息。间接的证据就是,这些专业都很默契的收取更高的学费。
不过,这到底是不是好事?不一定。从严肃的学术/科研角度说,CS在大一大二打造的理论功底非常重要。各种数学课、算法分析课、乃至底层的编译、操作系统、计算机组成原理都对长久的发展很重要。就好比一个培训班出来的码农,如果只在意写代码,是达不到科班出身的工程师那种深入的理解的。因此,我个人表示顾虑。可喜的事,软工和计科选课上可能没有本质区别,那这样的话,似乎就只是名字的区别了。这样的话增加了你成功进入理想专业的机会,这就是个好事。
此外,软工的学费是计算机的两倍左右(大学四年软工平均要4万,计算机2万。研究生阶段北大软微4W的学费,华科2万1年的学费),另外计算机学的会偏底层一些(汇编,硬件都有涉及),软工多的偏上层,例如“软件工程”(这也是一门课的名字)。
软件开发就像是盖房子一样,一般来说,要造房子,主要要完成两部分内容,一是要备齐各种建筑材料(砖瓦,水泥,钢筋等等),另一方面要画好设计图纸,最后请工人来按照设计图纸来施工建造。建成之后,房子的质量主要取决于这一下两点:
(1)材料过不过关。
(2)设计图纸合不合理。
两者缺一不可,至于最后的建造过程,我觉得只要监督合力,劳动力充足,基本上是不会出什么问题的。
其实最初到大学的时候,一直不明白为什么很多学校要单独成立一个软件学院(当然你可以说新成立一个学院可以更好地“骗钱”啦)直到随着时间的推移,才越来越觉得,其实软件学院与计算机学院的最本质的区别是培养目标不一样。软件学院的培养目标是工程师,计算机学院的目标是科学家。那上面所举的例子来说,软件学院就是负责设计图纸的,而计算机学院就是负责提供水泥,钢筋的(但是目前的现状是,本科生阶段软件与计算机都在彼此渗透着,原因在后面会讲到)。
所以你说是造钢筋,混凝土困难?还是设计楼房困难呢?虽说因人而异,但是个人觉得,还是建造钢筋混凝土更困难些。因为越基础的东西越难突破,就好像我们一般盖的小房子一样,只要材料准备好了,图纸大致设计一下,随便请几个工人就能开工,但是还没听说过在集市上随便拉几个工人就能造出合格的钢筋,混凝土这等建造材料的例子。
好了,回到我们软件开发上来,软件开发其实主要就是由算法+代码逻辑组成(细分可以分成很多,但是你目前还没接触到真正的软件开发,所以就按最简单粗陋的说了),算法就是上面提到的建筑材料(钢筋,混凝土等),代码逻辑就是设计图纸之类的,那些大量的编码工作主要就交给那些小工好了。
所以理论上来讲,在公司中软件开发是这样的:学计算机的提供算法,学软件的提供构架设计,培训班出来的负责写具体的代码。这就要求了学计算机的/算法工程师脑袋要好(数学要求高),学软件的/构架师逻辑要好(数学要求一般),培训班的/码农要能吃苦耐劳(数学基本没啥要求)。
就业前景
近几年的CS和SE的就业情况相当不错。如果经常去了解就业市场的话(可以上一些招聘网站看看),你会发现,公司无论大小,招人上,除了技能的要求,对于专业的要求一般是“计算机相关”,几乎没有见过有公司点明必须是SE或者是CS,也就是说无论是SE还是CS其实HR都不太