转载于知乎
点击原文链接,可进入原问题
本文适合20考研/跨专业/不清楚区别的同学阅读。
计科与软工的区别?就业前景分别怎么样?
下面回答大部分以本科专业讨论为主。但是和研究生阶段的学习大都是本科阶段的延申,因此对考研专业的选择也有一定的参考作用。
nagizro,ComputrVisionMicrosoft:我认为这种专业选择的问题,需要的是很严肃、很认真的回答。只言片语,可能决定这些同学未来几年的人生轨迹。希望在这个问题上困惑的同学不要只凭网上的信息做决定(尤其是那种随手一写,一两句的回答),如果实在找不到人问,本答案的评论区随时欢迎你。
背景/信息来源/利益相关:我是北航计算机学院本科(计算机科学)。大三时选专业方向,四个可选方向里软件工程是其一。北航也有独立的软件学院(录取分低点,学费贵点)。后来到CMU读软件工程硕士。软件工程也是设于SchoolofComputrScinc下面,专排世界第一。
“计算机科学”与“软件工程”的区别如果看一圈国内外(尤其国外)的项目设置,你会发现软件工程多数是安排在计算机科学之下的一门学科。他们的区别是什么?我在之前的一个问题里已经写了一篇回答,请先读完这篇回答:
软件工程(SoftwarEnginring)是计算机科学(ComputrScinc)的一个子类,还是一门独立的学科?
反对全部认为“软件工程是管理学科”的回答。
Enginring的对立词是Rsarch。广义CS(不含硬件)=SoftwarEnginring+Rsarch(即狭义CS)
我认为SoftwarEnginring首先是ComputrScinc的一个分支,其次才是一个独立的学科。独立,也是指从CS中独立出来,而不是说两者是平行的独立。今天要定义CS,怕是需要从广义和狭义两方面来理解。
为什么?因为ComputrScinc中的Computr一词太大了,它不仅有软件,还有硬件。所以,CS是个很早就被使用的词,它处于继承关系的极上游,它包罗万物。而随着学科的发展,CS底下本来小小的topic现在都越来越大了,这时候CS这一个词就不够用了,人们便才开始使用更具体的词来指代CS的各个分支:
首先,人们把硬件从CS中分出来了,叫ComputrEnginring。它特指计算机硬件,体系架构等等,甚至略沾电路和信号。(机器人学(Robotics)兴起的时候,也本属于ComputrEnginring,现在越来越大,就独立出来了叫Robotics,这是类似的道理)
这时,广义上的CS虽然包罗万物,但狭义上的CS就只是指软件了。
这还不够,因为计算机软件本来的星星之火也开始燎原,MachinLarning,NLP,DataScinc,ComputationalBiology...原来的每一个小topic,现在足以穷尽一个PhD的整个甚至几个学术生涯了。你若只说我是学CS的,别人就不gt哥们儿你到底是干啥的了。自称自己学CS的人,要么是尚处于通识教育阶段的本科生,要么就是在和外行说话,怕说的太具体了听不懂。
SoftwarEnginring也类似。人们发现,即使我把理论搞出来了,那它也只是个论文而已;要转变成产品(软件),并不是只有理论才行。人们还需要知道:
我怎么证明一个软件是对的?复杂软件,没人可以拍胸脯保证无bug,因为测试到全部可能的情况是不可完成的任务。如果这是机载软件,bug一次要几百条人命的,那怎么办?如果是导弹制导程序,bug一下要炸错地方的,那怎么办?于是,软件工程开始研究软件测试技术(不同花样的测试方法,包括测试粒度和成本的权衡,怎样权衡,不同的目的用什么测试,等等)
我怎么设计一个软件,并让他人正确理解我的设计?(软件建模,面向对象,UML等)
软件架构(architctur),都有哪些门类?优缺点?tradoff?怎么设计?
软件分析(maintainability,北京白癜风医院那家比较好最好的白癜风治疗方法