作者 邵栋
一个软件工程专业毕业生是否具备工程观念是不大看的出来的,但他不知道按照工程规范写代码、不使用软件工程工具、开发不做计划与跟踪,那他肯定没有工程观念。
国内有很多和软件有关的大学专业,其中历史最长、招生人数最多的是计算机科学与技术(CS)。软件工程(SE)专业是从2002年国家开始软件学院项目开始建立的;其它还包括信息安全、网络工程、物联网,最近几年兴起的数据科学、人工智能等等。在最近研究生入学面试中,我面试了近300名学生后,发现了一个问题,这些专业学生的课程内容重合度非常大,学习的内容也非常接近,很多学校SE专业课程设置与CS几乎一致,仅仅只是软件工程概论课程变成了必修课,同时增加了一门软件工程实践课程而已。SE专业学生和CS专业或其它类似专业的学生课程内容非常接近,在学生身上根本看不出来这些专业的区别。
一个新专业的设立是非常慎重的,培养的人才应当和原有专业有明显区别。对于SE专业,在谈到和原有CS专业的区别时,一般SE专业培养目标中都会写“培养高层次、复合型软件产业工程型人才”,培养学生具有工程实践能力、工程化观念等等,但这些目标往往虚无缥缈,在教学活动中无法落实,很多时候也没有人关心如何落实。
软件工程专业毕业学生除了掌握计算机科学基本知识(软件工程学科是建立在计算机科学基础之上的学科,学生必须了解计算机系统、基础系统软件原理、通晓1-2门常见编程语言等等)外,应当具备的可见特征应当包括:
- 能写好代码。
代码是软件的产物,也是基础,是软件工程活动中最重要的产物和工作。代码的最低要求是能够完成需求,但“好代码”要求更多,这包括良好的代码规范(命名规范、格式规范等等),能够感知代码的bad smell,什么情况下该用什么样的语法结构(比如嵌入式系统中最好不要用递归)、有意识的控制代码圈复杂度等等。当前有很多代码质量检查工具(SonarQube, Findbugs,checkstyle,pclint,pylint等等 ),大家可以在代码写完后自己扫描一遍看看是否符合业界一般标准。这方面知识建议学生在学习了基本的语言语法后,学习《重构》、《代码大全》。 - 具有主动使用软件工程工具的习惯。
任何工程领域,良好的工具都是有效率、高质量完成工作必备的。软件工程领域学生不知道什么是版本控制工具(Git、SVN)是不可想象的。同时,知道一个工具,和养成使用工具的习惯是两件事情。你知道Git,但自己写代码从来不用;你知道持续集成,但团队从来不做,和不知道区别也不大。当前,软件工程的学生应当在工作中组合使用经过检验的软件工程工具,至少应当包括版本配置工具、项目管理工具、代码静态质量检查工具、持续集成工具、单元测试工具。 - 主动进行项目计划并跟踪调整。
项目管理是软件项目开发的必须工作,而计划以及计划的跟踪是核心内容。
擅长演讲的人都知道,要点只能列三个,所以本文也只写了三个能够明确表征入门软件工程师的特征,这三个特征对于外部的观察者是可以明确感知并度量的。
软件工程师应当学习的内容、具备的能力当然很多,大家可以去参考国际软件工程规范SWEBOK 3.0。