转载于知乎

点击原文链接,可进入原问题

本文适合 20考研 / 跨专业 / 不清楚区别 的同学阅读。

计科与软工的区别?就业前景分别怎么样?

下面回答大部分以本科专业讨论为主。但是【计算机科学】和【软件工程】研究生阶段的学习大都是本科阶段的延申,因此对考研专业的选择也有一定的参考作用。

nagizero,Computer Vision @ Microsoft :

我认为这种专业选择的问题,需要的是很严肃、很认真的回答。只言片语,可能决定这些同学未来几年的人生轨迹。希望在这个问题上困惑的同学不要只凭网上的信息做决定(尤其是那种随手一写,一两句的回答),如果实在找不到人问,本答案的评论区随时欢迎你。

背景/信息来源/利益相关:

我是北航计算机学院本科(计算机科学)。大三时选专业方向,四个可选方向里软件工程是其一。北航也有独立的软件学院(录取分低点,学费贵点)。后来到CMU读软件工程硕士。软件工程也是设于School of Computer Science下面,专排世界第一。

“计算机科学”与“软件工程”的区别

如果看一圈国内外(尤其国外)的项目设置,你会发现软件工程多数是安排在计算机科学之下的一门学科。他们的区别是什么?我在之前的一个问题里已经写了一篇回答,请先读完这篇回答:

软件工程 (Software Engineering) 是计算机科学 (Computer Science) 的一个子类,还是一门独立的学科?

反对全部认为“软件工程是管理学科”的回答。

Engineering的对立词是 Research。广义CS(不含硬件)= Software Engineering + Research (即狭义CS)

我认为 Software Engineering 首先是Computer Science 的一个分支,其次才是一个独立的学科。独立,也是指从CS中独立出来,而不是说两者是平行的独立。今天要定义CS,怕是需要从广义狭义两方面来理解。

为什么?因为Computer Science中的Computer一词太大了,它不仅有软件,还有硬件。所以,CS是个很早就被使用的词,它处于继承关系的极上游,它包罗万物。而随着学科的发展,CS底下本来小小的topic现在都越来越大了,这时候CS这一个词就不够用了,人们便才开始使用更具体的词来指代CS的各个分支:

首先,人们把硬件从CS中分出来了,叫Computer Engineering。它特指计算机硬件,体系架构等等,甚至略沾电路和信号。(机器人学(Robotics)兴起的时候,也本属于Computer Engineering,现在越来越大,就独立出来了叫Robotics,这是类似的道理)

这时,广义上的CS虽然包罗万物,但狭义上的CS就只是指软件了。

这还不够,因为计算机软件本来的星星之火也开始燎原,Machine Learning, NLP, Data Science, Computational Biology... 原来的每一个小topic,现在足以穷尽一个PhD的整个甚至几个学术生涯了。你若只说我是学CS的,别人就不get哥们儿你到底是干啥的了。自称自己学CS的人,要么是尚处于通识教育阶段的本科生,要么就是在和外行说话,怕说的太具体了听不懂。

Software Engineering 也类似。人们发现,即使我把理论搞出来了,那它也只是个论文而已;要转变成产品(软件),并不是只有理论才行。人们还需要知道:

  1. 我怎么证明一个软件是对的?复杂软件,没人可以拍胸脯保证无bug,因为测试到全部可能的情况是不可完成的任务。如果这是机载软件,bug一次要几百条人命的,那怎么办?如果是导弹制导程序,bug一下要炸错地方的,那怎么办?于是,软件工程开始研究软件测试技术(不同花样的测试方法,包括测试粒度和成本的权衡,怎样权衡,不同的目的用什么测试,等等)

  2. 我怎么设计一个软件,并让他人正确理解我的设计?(软件建模,面向对象,UML等)

  3. 软件架构 (architecture),都有哪些门类?优缺点?tradeoff?怎么设计?

  4. 软件分析(maintainability, complexity, performance等参数如何评估量化?)

  5. 一些方法学(如何搜集需求,如何评估风险,如何决策)

  6. 最后,也有些管人的(如何合作,结对编程?leadership styles?)

所以说,软件工程也发展成了一个大学科了。它真的不只是管人那么简单。或许有些地方把SE搞得很狭义,但我在CMU读软件工程硕士时(School of CS下属,World No.1权威),以上每一项都是有不同的教授钻研的,都有厚厚的书可以读。

为什么人们觉得Software Engineering有别于CS了?因为狭义上的CS开始专指OS,Machine Learning,NLP那些Research Topic了。

总结一下:

  • CS广义上包罗万象。SE(Software Engineering)是广义的CS下的一个分支。

  • 因CS的广义含义太广,现在人们多用CS的狭义含义:OS, ML, NLP等那些Research Topic。

  • SE与狭义的CS之间是相对独立的。

  • SE与CS水乳交融,“独立的学科”也不准确,说是一个CS下一个独特的方向比较合适。CS本科生读研选方向的时候,SE与ML,OS,NLP,Robotics等等并列,都是CS的不同方向

不过,我们解决了“两个专业本应学什么”的问题。然而,要解决“该选哪个专业”这个问题,不仅需要知道它们本应学什么,更要知道它们实际学什么。

软件工程专业现状(仅限中国大陆的本科)

依我个人所见,也感谢评论区(@莫暖@Lucien等)的讨论,我们可以总结出:国内的大学似乎把软件工程当做了一个马甲,以软件工程之名,行计算机科学之实。它们可能会淡化较为理论的电路、物理、数学内容,并以一些软件工程的方向课体现与“软件工程”的相关性。

为什么呢?因为学校不得不这么做。首先,本科的学生没有任何专业背景,直接上软件测试、软件分析、软件开发生命周期这种软工内容,同学无法理解。其次,我们的软工教学还处于纸上谈兵阶段。真正懂软件工程的老师太少,他们能做到的只有读PPT,或教你画画图这种东西了。对比我在CMU所学,用旁观者的角度,我认为国内不管是老师还是网络大V,对软件工程的理解存在诸多错误,更何谈教学。

那为什么要分设计科和软工两个专业?我认为这是某段时期响应政治号召、创造变现方式的产物。如果读一读一些大学软件学院的创院历史,你就会发现它们一般创院甚晚于计算机系(2000年前后),且字里行间会渗透出“响应国家号召培养更多信息技术人才”这种信息。间接的证据就是,这些专业都很默契的收取更高的学费。

不过,这到底是不是好事?不一定。从严肃的学术/科研角度说,CS在大一大二打造的理论功底非常重要。各种数学课、算法分析课、乃至底层的编译、操作系统、计算机组成原理都对长久的发展很重要。就好比一个培训班出来的码农,如果只在意写代码,是达不到科班出身的工程师那种深入的理解的。因此,我个人表示顾虑。可喜的事,评论区的同学指出他们学校的软工并没有忽略这些课程,软工和计科选课上可能没有本质区别,那这样的话,似乎就只是名字的区别了。这样的话增加了你成功进入理想专业的机会,这就是个好事。

软工 vs. 计科 如何选择

最靠谱的回答就是,你必须根据不同的学校区分对待。如果是个一流大学,且两者下属同一学院、由相同师资任教、高考分数线相似,那质量会很有保证。否则,你就要多留意教学质量了。

如果抛开个别大学,只说整体情况,我觉得二者必选计算机科学。为什么?规避风险。

关于就业

计算机方向(包含各种小方向,硬件除外),毕业后能直接找到的工作都是软件工程师。少数会尝试做PM等(极少,且一般很水)。少量同学会读博深造,从事科研/留校/重新下海当工程师。工作几年后,有些人会从工程师转为project manager,product manager等等。这和你的专业就没关系了。

即,软件工程和计算机科学的就业方向一致。

如果你申请国外大学,计算机科学专业的,国外的老师会倾向于认为你更有向其他专业方向转换的潜力,因为理论基础、数学功底一般扎实。当然,成绩单上的数学等课的成绩拥有最后发言权。软件工程的本科申请CS的硕士时,老师会留意一下你上的课是否全面(因为国外对软工的认知会和国内不同)。如果全面,即无大碍,只是个第一印象的问题。

卡基, 已转CS的EE/图吧垃圾佬/Hi-Fi脑放党/吃狗肉的中医黑:

计算机科学是一门科学,与数学关系颇为亲密,课程设置有高数,线代,概率,离散,电路,模电,数电,计算机组成原理,操作系统原理,编译原理,程序语言等等(不同学校可能稍有差别),简单教授计算机从底层电路到软件开发的原理和过程,对编程语言不是特别看中,甚至有四年只教授C语言的,偏理论研究,虽然是工科,但偏理科。

软件工程就是一门工程学了,偏实际开发。直接面向就业。课程设置有高数、线性代数、概率论与数理统计,程序设计语言、数据结构、离散数学、操作系统、编译技术、软件工程概论、统一建模语言、软件体系结构、软件需求、软件项目管理,算法分析、面向对象程序设计、现代操作系统、数据库原理与实现技术、编译原理、软件工程、软件项目管理、计算机安全等课程。对计算机原理不是特别看中,不仅有程序设计,还有工程风险等,是一门纯粹的工科。

因为好多学校对这两个专业划分不明显,公司对这两个专业也不加以区分,就业和深造方向两个基本一致

学费方面本人不清楚,题主可以参考其他答主的意见

现在这两个专业区分越来越不明显了,好多大学都是只设置期中一门,题主看目标大学有哪个专业就选哪个吧。要是都有,看题主想做理论研究还是实际开发了。

MAGICY, 做自己喜欢的事情,这很重要!:

最直观的感受,软工的学费是计算机的两倍左右(大学四年软工平均要4万,计算机2万),另外计算机学的会偏底层一些(汇编,硬件都有涉及),软工更多的偏上层,例如“软件工程”(这也是一门课的名字),工作的话,大学期间只要好好的学习,都没啥差别,下面是其他问题的回复片段,我觉得挺相关的,就复制粘贴了多来,希望对你有帮助~

软件开发就像是盖房子一样(自己的理解,如果有不恰当的地方,还请指正批评),一般来说,要造房子,主要要完成两部分内容,一是要备齐各种建筑材料(砖瓦,水泥,钢筋等等),另一方面要画好设计图纸,最后请工人来按照设计图纸来施工建造。建成之后,房子的质量主要取决于这一下两点(1)材料过不过关(2)设计图纸合不合理。两者缺一不可,至于最后的建造过程,我觉得只要监督合力,劳动力充足,基本上是不会出什么问题的。

其实最初到大学的时候,一直不明白为什么很多学校要单独成立一个软件学院(当然你可以说新成立一个学院可以更好地“骗钱”啦)直到随着时间的推移,才越来越觉得,其实软件学院与计算机学院的最本质的区别是培养目标不一样。软件学院的培养目标是工程师,计算机学院的目标是科学家。那上面所举的例子来说,软件学院就是负责设计图纸的,而计算机学院就是负责提供水泥,钢筋的(但是目前的现状是,本科生阶段软件与计算机都在彼此渗透着,原因在后面会讲到)

所以你说是造钢筋,混凝土困难?还是设计楼房困难呢?虽说因人而异,但是个人觉得,还是建造钢筋混凝土更困难些。因为越基础的东西越难突破,就好像我们一般盖的小房子一样,只要材料准备好了,图纸大致设计一下,随便请几个工人就能开工,但是还没听说过在集市上随便拉几个工人就能造出合格的钢筋,混凝土这等建造材料的例子。

好了,回到我们软件开发上来,软件开发其实主要就是由算法+代码逻辑组成(细分可以分成很多,但是你目前还没接触到真正的软件开发,所以就按最简单粗陋的说了),算法就是上面提到的建筑材料(钢筋,混凝土等),代码逻辑就是设计图纸之类的,那些大量的编码工作主要就交给那些小工好了。

所以理论上来讲,在公司中软件开发是这样的:学计算机的提供算法,学软件的提供构架设计,培训班出来的负责写具体的代码。这就要求了学计算机的/算法工程师脑袋要好(数学要求高),学软件的/构架师逻辑要好(数学要求一般),培训班的/码农要能吃苦耐劳(数学基本没啥要求)。

BUT……以下两个原因造成了学计算机的、学软件的、培训班的在很多情况下都傻傻分不清楚。

1:请问刚到公司的时候,谁敢让你上来就负责核心工作啊……都得从码农做起,对不?

2:虽说计算机/软件在高等院校已经发展了十几年了(计算机得有几十年了),但是中国的互联网不是最近十年才兴起的么,刚兴起的事物不用说大家也懂,就是混乱呗,所以学校在教学的过程中,也是一把抓,导致了高校中计算机与软件其实区分度并不是很大。

这两个原因造成了一下几个结果。

1:既然都得从码农做起,为啥大家开始不学好码农的工作呢?因为刚开始找工作的时候,公司的笔试面试就是按照码农的标准来的呀。所以很多班科出身的在大学阶段可能都没这么好好的学习专业课,基础课,反倒是热衷于最基本的编程工作(没有贬低的意思),而且自己能写出来一些小东西还是挺能增加成就感的嘛。

2:高校的平时要求也是水的不忍直视,大作业纯粹就按照码农的标准的来要求,没啥技术含量(其实这也不能怨学校,因为本科生的培养目标就是打个基础,出来能干活就可以了,不要求大家能够从事深入研究工作的,真的研究工作是属于硕士更确切的说应该是博士),所以这种情况下把大学生培养成码农也就不足为奇了。

说了这么半天,我想应该把软件开发的过程以及各个人群的分工以及目前软件开发人员的现状说清楚了吧!

firefly, 我可是要成为刘XX的男人啊:

本来是不打算出来答一波的,但看到题主表示一本无望后,突然感觉自己腰杆都直了不少,让某渣渣二表的软工13学长给你些我自己现在知道的信息;

选专业啊,前面有个答案里面说的那样,这是个十分重要的确定,不要试图从这些答案里面就得出结论,毕竟我们只是花了几分钟写的答案,你的选择却很可能决定了你接下来好几年的人生轨迹,下面是我知道的这两个专业的一些信息:(基于我们学校,定位是一个普通二本院校,不同层次院校间情况差异特别特别大)

软件比计科要好找工作,这么说吧,在我周围有好多计科的人走培训学软件开发,我很不理解,问了好几个人,得到的答案都是:计科什么都学,但是并不深,导致毕业后不好找工作,甚至都知道自己该找怎么的工作,而软件学编程,算是有一个确切的技能,现在这块的市场需求也大,不知道过几年怎么样,反正我现在出来找工作挺好找的,起薪比我知道的绝大多数的别的二本专业的薪资高,至少在北上广实习的时候就能养活自己(个人追求比较低,不要在意);

走软件的话就相当于你去学一门具体的技术,然后毕业容易找工作,走计科相当于学一门科学,干一些更高大上的事情,但在二本院校的教学资源基础上后者并不好走;

看题主对未来的规划是怎么样的,在做具体决定,如果希望在念完大学后是侧重于就业,或许软工合适些,如果是希望深入研究计算机,从事科研工作,那计科应该能打下更好的基础;

以上为我所知道的我们学校的两个专业的情况,供参考;

本专业的同学们,你们本科是计算机科学还是软件工程呢?考研又想考哪个?

【计算机科学】和【软件工程】有什么区别?就业前景如何?相关推荐

  1. 软件工程专业毕业生的就业前景如何,如何扩展自身的就业空间

    首先,当前软件工程专业毕业生的就业前景还是比较广阔的,随着工业互联网的发展,大数据.人工智能.区块链等一众技术开始落地应用,这个过程会需要大量的软件工程专业人才,所以当前软件工程专业的同学可以重点关注 ...

  2. “计算机科学“与“软件工程“有什么区别?哪个专业更适合你?

    "计算机科学和软件工程专业有什么不同?" 以及- "如果我想成为软件工程师,我应该选择计算机科学还是软件工程专业?" 在这篇文章中,我会回答这个问题,并分享一些 ...

  3. 软件工程专业毕业生的就业前景分析

    据有关数据显示,目前,我国对软件人才的需求已达20万,并且以每年20%左右的速度增长.在未来5年内,合格软件人才的需求将远大于供给.2005年,我国软件人才的缺口已达42.5万,其中尤以JAVA人才最 ...

  4. 软件工程的专业介绍与前景

    软件工程专业是一个比较热门的专业,很多学生选择报考.软件工程专业涉及到的领域有:数据库.软件开发工具.设计模式.系统平台.程序设计语言等,需要学习很多关于软件方面的知识,需要熟练掌握专业知识,运用专业 ...

  5. 计算机科学与技术的职业需求,职业规划:计算机科学与技术专业就业前景

    职业规划就是对职业生涯乃至人生进行持续的系统的计划的过程.一个完整的职业规划由职业定位.目标设定和通道设计三个要素构成.职业规划(career planning)也叫"职业生涯规划" ...

  6. 成考计算机科学与技术就业,河南成考计算机科学与技术专业就业前景如何?

    [导读]河南成考计算机科学与技术专业就业前景如何?就业方向有哪些?很多考生们都感觉很迷惑,为了更好的帮助广大考生们在河南成考中填报好志愿和选好专业,本文分析了成人高考计算机科学与技术专业就业前景,一起 ...

  7. 成教计算机科学与技术怎么样,华中农业大学成考计算机科学与技术专业就业前景怎么样?...

    华中农业大学成考计算机科学与技术专业就业前景怎么样? 华中农业大学成人高考计算机科学与技术专业就业前景怎么样?华农成考可以报考的专业有很多,今天湖北成教网小编就给大家介绍一下其中的大热门计算机科学与技 ...

  8. 计算机科学与技术专业的门户网站,2018计算机科学与技术专业怎么样?就业方向与就业前景分析...

    2018计算机科学与技术专业就业方向与就业前景分析 1.计算机科学与技术专业简介 计算机科学与技术专业培养具有良好的科学素养,系统地.较好地掌握计算机科学与技术包括计算机硬件.软件与应用的基本理论.基 ...

  9. 2019计算机软件技术的就业率是多少,2019计算机科学与技术专业就业方向与就业前景如何...

    2019计算机科学与技术专业就业方向与就业前景如何 1.计算机科学与技术专业简介 计算机科学与技术专业培养具有良好的科学素养,系统地.较好地掌握计算机科学与技术包括计算机硬件.软件与应用的基本理论.基 ...

最新文章

  1. linux su切换用户提示 Authentication failure的解决方法
  2. Eclipse插件安装方式及使用说明
  3. 浅谈ThreadPool 线程池(引用)
  4. 设计模式原则之依赖倒置原则
  5. Handler(2)
  6. 中国剧本推理市场洞察2021
  7. you just 飞鸽传书2007绿色版 ever day for two years
  8. 读书笔记—《销售铁军》随记7
  9. softmgr主程序_SoftMgrBase.dll
  10. 【备忘】于仕琪的libfacedetection相关
  11. 北大《中文核心期刊要目总览》2020版目录人文、社会科学
  12. php 改变图片大小,php修改图片大小的方法
  13. unity之粒子特效制作图片拼合文字效果
  14. oracle查询当前归档scn_Oracle查询归档日志
  15. JAVA作业三:教练与运动员案例
  16. 使用C语言来访问ARM寄存器的语法
  17. 将结构体转换为二进制
  18. FileUriExposedException: file:////XXXXXXXX g exposed beyond app through ClipData.Item.getUri()问题的解决
  19. PCL1.10.1+VS2019+Qt5.14.2下载、安装及配置(强迫症福音~使用的软件均为最新版本)
  20. Java专题 基础篇--判断(三元表达式,switch等) +个税计算案例

热门文章

  1. 微博被曝大面积裁员?上热搜了
  2. torch.nn.functional.normalize
  3. 苹果数据线不能充电_小米讽刺苹果取消充电器,网友翻旧账打脸,始作俑者竟是雷军|充电器|数据线|手机...
  4. android开发图片自适应,android中用.9.patch的图片实现图片自适应
  5. GPT虚拟直播Demo系列(一)|GPT接入直播间实现主播与观众互动
  6. 设计模式(只谈理解,没有代码)
  7. Html5,Css3快速注释快捷键
  8. 随笔记:PPT图形布尔运算:合并形状
  9. GTC 2023 万字纪要 | Don‘t Miss This Defining Moment in AI
  10. MMorpg角色进入主城之角色控制