本文是申请美国大学计算机专业软件工程方向的经验总结,主要讨论了美国大学软件工程专业的研究内容,申请难度以及申请建议,希望能给有意申请美国大学计算机专业软件工程方向的同学一些启发。
1、喜欢软件工程,该申请什么program?
首先,美国有一些学校有专门的软件工程硕士,这个跟信息安全硕士,MBA等一样,感觉算是职业培训。如果有几年工作经验,手头有钱,自费读这个方向也可以。但是中国人大多要奖学金,这种硕士program不太可能提供offer。
如果想作软件工程的研究,想拿offer,得申请CS。CS分很多方向,软件工程是其中之一。软件工程这种东西,有人喜欢,有人觉得太泛,有人觉得太理论,但是我也听这个领域的有些人说太实际了,empirical SE也是有人做的。这些是非话题就不讨论了。总之,申请CS,指明对软件工程感兴趣, that's it. --如果你申software engineer的offer,错误的申请了职业培训类型的SE master,你拿offer得难度至少会像MBA一样大。
2、软件工程研究什么
现在软件工程里面大家主要是对软件的正确性感兴趣。简单点讲,软件不正确,有错误,容易导致各种问题,造成各种经济损失。比如说,现在比较热门的计算机安全问题。我个人认为,安全问题跟软件中的错误是成比例的。如果软件没有错误,我们可能没有100%的安全,但是最起码MS不必经常发布补丁了吧,针对windows的攻击也会变得很困难,各种由软件导致的损失也会大大减少。每一种攻击的方法或者工具,背后基本都是一个或者数个软件错误,有的是实现中的错误,有的甚至是设计上的。---说这些,是说明软件正确性的重要性。
现在大家都在努力想出方法,能结合软件开发理论,保证正确性。当然软件开发的东西,比如feature oriented development,specification, software process等等也很popular. 软件工程不是单纯的开发或者测试,而是围绕着用户需求的一系列的activity以及资源的分配和利用。软件工程,就是要提高productivity and reliability of software development。
3、软件工程申请激烈吗?这个方向好吗?
软件工程申请是很激烈的。简单点讲,IT行业的发展造就了无数的programmer,尽管大家开发的软件应用于不同的领域,但是大家都是programmer,好听一点,叫software engineer。所以申请的时候,写过程序的,都可以claim有这方面的实际经验,都可以往这条船上挤。因此,软件工程,除了学校的学生们,公司里工作的人也很喜欢申请,申请人数就特别多,拿offer也更难 -- 一清二白的学生们拿什么跟有数年工作经验的软件工程师pk? 但是软件工程不仅仅是工作经验这么简单,不是单纯的比谁会写code,谁的code写的好。我知道的这个领域的几个牛人,都喜欢找学生。
我认为软件工程是一个很好的方向,很适合将来在美国就业立足。比如说,如果你作一个关于测试理论或者开发方法的thesis,接触一些软件开发和测试过程中的问题,找工作interview的时候,你可以拿你的thesis project当成经验来吹,容易跟别人谈的来。而且,由于很多软件工程的research project适用于各个领域,找工作局限性小。我当年就是这样子,不管是EMC这样的存储公司,还是cisco这样的网络公司,或者是oracle这样的数据库软件开发伤,我都可以兜售自己的project,都可以瞎掰乎如何在开发的过程中用什么样的方法开发,问题何在,用什么样的方法测试,coverage如何。
如果你是AI,比如研究intelligent tutoring system,尽管你写过几行程序来验证自己的idea,但是公司可能想,这是个AI 的project,我们是网络公司,不需要,kill~~对于master level的人找工作来说,软件工程方向局限性小一些,更容易找到工作。phd有所不同,但是很多phd不也得放下身价,到公司里写程序作高尚的软件工程师。