11
工程与科学
编辑
软件的开发到底是一门科学还是一门工程,这是一个被争论了很久的问题。实际上,软件开发兼有两者的特点。但是这并不意味着它们可以被互相混淆。很多人认为软件工程基于计算机科学和信息科学就如传统意义上的工程学之于物理和化学一样。在美国,大约40%的软件工程师具有计算机科学的学位。在世界其他地方,这个比例也差不多。他们并不一定会每天使用计算机科学方面的知识,但是他们每天都会使用软件工程方面的知识。
软件工程
计算机科学
目标
在时间、资源、人员的限制条件下构建满足用户需求的软件系统。
探索正确的计算和建模方法,从而改进计算方法本身。
进度与时间表
软件专案都有特定的进度与时间表
研究专案一般不具有设置的进度与时间表
产品
软件(比如办公包和编译器)。
算法(比如希尔排序法)和抽象的问题(比如哲学家进餐问题)。
关注点
软件工程关注如何为用户实现价值。
软件理论关注的是软件本身运行的原理,比如时间复杂度。
变化程度
随着技术和用户需求的不断变化,须时刻调整以适应当前的需求。
对于某一种特定问题的正确解决方法将永远不会改变。
需要的其他知识
相关领域的知识。
数学。
著名的探索者和教育家
Barry Boehm, David Parnas 等
Edsger Dijkstra, 高德纳 等
著名的实践者
John Backus, 蒂姆·伯纳斯-李 等
无。
例如 Peter McBreen 认为,软件工程意味着更高程度的严谨性与经过验证的流程,并不适合现阶段各类型的软件开发。Peter McBreen 在著作《Software Craftsmanship: The New Imperative》提出了所谓“craftsmanship”的说法,认为现阶段软件开发成功的关键因素,是开发者的技能,而不是“manufacturing”软件的流程。