严格来说,软件工程应该算是计算机下设的一个分支,是关于计算机软件开发和维护的一门工程学科。按照所处领域不同可以分为系统分析员、软件设计师、系统架构师、程序员、测试员等,但一般都统称程序员。
概括来说,软件工程主要是做三件事情:Desigh,Develop,andTest。
简单来说,Design就是画一个简单的图去定义整个软件的架构,包括整个软件有哪些部分,每部分之间要怎么联系在一起。Develop就是把Desigh转换成代码。代码完成以后对其进行测试,测试到软件能正常使用为止。
Design阶段
在软件Desigh阶段,要熟练使用UML diagram。设计一个非常复杂的具有很多成分的软件的时候,这些成分之间的联系通过UML协议来表达,申请者需要掌握UML这样的语言和工具。
Implementation阶段
在软件的实现阶段,需要掌握算法和数据结构,要知道怎样对算法进行分析。算法的好坏有两个指标,一个叫空间复杂度,一个叫时间复杂度。电脑内存的空间是有限的,空间复杂度就是算法要尽可能少用内存。时间复杂度就是要让他能够尽快的完成任务。学生要知道怎样去分析算法的空间和时间复杂度,才能做好实施过程。
Test阶段
测试阶段需要学生熟练掌握自动生成testing cases的基本方法,以及software testing tools,这也是在写文书时要体现的几个方面的核心技能。

核心课程和技能
软件工程的核心专业课首先是初级和高级的编程课程,包括面向过程的C语言和面向对象的Java,C++,C#, Python。一些常用算法包括递归、贪心、动态规划、随机、快排、红黑树、b/b+/b-数和数据结构这些都需要掌握。
由于算法+数据结构=程序,所以算法和数据结构其实是整个程序的核心部分。软件工程的高级课程分为两个大方面,分别是Agile和Waterfall。
规划建议
01
大学期间保持尽可能高的GPA
低GPA是申请工科硕士的硬伤。如果学生GPA低于3.0,那么基本告别前40了。因为美国大学的普遍观点是,GPA低说明学生大学四年在校学习不努力、学习能力或学术潜力不够,那么在以学术严谨著称的理工科学习中很难成功。
02
努力增加科研和项目经验
由于国内的教学模式,学术在本科阶段很难参与到导师的实验室项目,本科就能发表国内或国际级论文的更是凤毛麟角。但是要多参与课程实验、学术竞赛(数学建模、电子创新竞赛等)和校内外实习。这两年,跟随MIT,Stanford 等顶尖名校教授做科研的学生越来越多。所以同学们也要尽早开始寻找校内外的科研机会。
03
尽早考出标准化成绩
尤其是GRE,有效期是5年,大一或大二就可以集中精力,一鼓作气考出理想成绩。否则,到了大三的时候,面临着专业课难度加大和备考托福的双重压力,很难做到顾此不失彼。不要觉得大一开始就学托福有点早,相信我,很多学生需要1年甚至更长时间才能和托福分手。
04
丰富海外学习经历
如果学校有与海外院校的1学期或1学年的交换项目,鼓励大家尽力争取。如果是去英语类国家交换,那么对适应能力、语言(日常交流、学术交流)能力都会有很大提升,再加上国外院校成绩单+海外推荐信,在申请美国理工科硕士时也会更占优势。