我所在的本科学校和研究生学校都有计算机科学专业和软件工程专业。具体的教学计划无从得到,所以此情况无从对比,但是我从本科教务处网站找到了计算机科学专业和软件工程专业有关专业方面的课程,现列表如下。
表格1 计算机科学和软件工程专业与专业相关课程
计算机科学专业 |
软件工程专业 |
程序设计基础(C语言) |
计算机编程引论(C语言) |
计算机导论 |
Java程序设计 |
面向对象程序设计(C++) |
逻辑与数字系统 |
数据结构 |
VB.NET程序设计 |
电路原理 |
面向对象程序设计 |
计算理论 |
计算机组成原理 |
汇编语言程序设计 |
C++程序设计 |
电子技术 |
用户界面设计与评测 |
算法设计与分析 |
计算机网络 |
可视化程序设计技术基础(双语) |
HTML与JavaScript技术 |
接口技术 |
操作系统 |
编译原理 |
数据结构 |
计算机网络 |
数据库原理 |
数字系统设计 |
数学建模 |
计算机组成原理 |
软件创新方法与实例 |
Java语言及程序设计 |
通信概论 |
计算机图形学 |
Linux操作系统 |
数字系统设计 |
移动互联导论 |
信息安全基础 |
软件体系结构与设计模式 |
计算机体系结构 |
编译方法 |
软件工程 |
软件工程 |
人工智能 |
主机系统导论 |
操作系统 |
算法分析与设计 |
嵌入式系统及其应用 |
分布式系统导论 |
文本智能处理技术 |
Java框架与组件技术 |
软件建模技术 |
软件需求分析与设计 |
信息安全基础 |
分布式组件与Web服务 |
计算机体系结构 |
混沌分形导论 |
网络编程技术 |
COBOL语言程序设计 |
多媒体技术 |
语义Web导论 |
Linux操作系统分析 |
主机CICS交易系统 |
智能数据与知识工程 |
嵌入式软件开发技术 |
人工智能导论 |
|
云计算核心技术 |
|
分布式组件与Web服务 |
|
移动应用开发技术 |
|
软件测试技术 |
|
高性能计算导论 |
|
企业级服务器系统导论 |
|
服务工程方法论 |
|
软件服务与云计算案例分析 |
|
信息检索 |
|
新技术讲座 |
|
服务工程方法论 |
|
电信行业市场营销管理 |
|
主机数据库管理系统 |
|
图像与多媒体新技术 |
|
传感技术与应用 |
|
合同法与知识产权法 |
|
软件过程改进与项目管理 |
从表格中可以看出软件工程的课程很多,但是由于具体的教学计划无法得到,所以不能具体说明,但是从我本人了解得到其中涉及到了很多专业选修课程和很多方向性课程,所以难免数量会多出很多。但是比较一下学院给同学设置的预期选修课程和学院鼓励同学走向的专业道路上,还是可以看出些许不同的。计算机科学专业和软件工程专业中教学计划中包含了很多相同的计算机基础的课程,如操作系统、计算机网络等。但是也存在很多不同,如计算机科学专业设置的课程中有软件工程专业涉及较少的硬件方面的课程,如电路原理、电子技术等,然后也在很多方面更加注重了“技术”的教学。而从软件工程专业来说,首先是编程语言和计算机基础课程的教授,使得学生有一定的编程基础和能力,但是教学方向侧重的确是与“人”、“对象”有关的内容。
这两个专业毕业后的出路基本可分为出国、读研和工作,但是出国和读研的话,这两个专业就可能要针对具体情况具体来说了,因为和研究方向、导师情况都有很大的关系。而我了解到的有关计算机科学专业的工作方面的内容也不太多,就我身边软件工程专业的人来说,毕业之后工作的进入的都是一些软件公司,如蘑菇街、网易、完美世界等,进行技术部编程或者成为产品经理等。计算机科学专业的话,可能会相对而言对于算法等的了解程度相对较深,程序部门也会十分欢迎此专业的人才,但是由于他们专业也教授到了硬件课程,所以以后的就业面在硬件和编程相结合的公司应该也会是他们的选择之一。
提到计算机科学和软件工程的区别,坦白来说,其实我自己还没有思考过这个问题,在本科的时候觉得可能也就是名字不太一样,毕业之后应该也都是差不多的程序猿,读过此篇文章之后,我才了解到,原来两者之间还是有很大区别的,下面讲述一下我的看法,很可能会不够全面,观点肤浅,还望见谅。
单单看待名字的话,计算机科学重点是在“科学”,软件工程重点是在“工程”,正如那篇文章的作者提到的,The field is wonderfully clean, with each concept clearly defined, and each result building on earlier proofs【1】,计算机科学方面的特点就是干净,每一个方面都被清楚地定义,每一个结果都是建立在早期的证明,是具有很轻的逻辑性和很清楚的因果关系的。然而软件工程确实一门经常用“通常”、“一般来说”这些不确定性的字眼来描述内容。
其次,计算机科学的关注点更多的在算法、复杂程度、以及各种理论性、科学性的问题,而这些问题是不受人为因素的影响的。软件工程有很多方面是会考虑到“人”的因素的,如与软件工程相关的可用性,这个方面并不是说有什么标准,而是依靠用户的使用结果,用户认为可用性不佳,则结果可能就会不理想,可能就需要重新设计。
这些就是我暂时能想到的有关计算机科学和软件工程的区别,但是我觉得他们两个相对于区别来说,相互间的紧密联系则是更加重要的,计算机科学的快速发展可以满足软件工程中很多的技术问题,而软件工程中遇到的困难也为了计算机科学提供了新的课题,也是计算机科学不断发展,不断进步的动力,两者不断进步,才可以为我们创造出一个更加便捷舒适的生活。
参考文献:
- Software Engineering ≠ Computer Science. http://www.drdobbs.com/architectureand-design/software-engineering-computer-science/217701907