偶然从网上发现软件开发先驱之一David Parnas制定的软件工程专业毕业生的目标。读之,不禁汗颜。我的一位美国同事也说这些目标确实很高,不知有多少毕业生能达到。不管怎样,这或许是我们软件开发人员所要追求的目标?翻译如下:
软件工程专业毕业生的目标
1.1 道德行为和社会责任
- 毕业生要对他们的成绩有着习惯性的诚实。
- 毕业生要很快地把荣誉分享给那些做出贡献的人。
- 毕业生要了解他们对雇主和客户的责任。
- 毕业生要了解他们对社会的义务。
1.2 个人修养和成熟度
- 毕业生要能从那些看起来很不相同的事物中发现共性。
- 毕业生要了解自己的局限与能力,并能在其局限与能力的范围内展开工作。
- 毕业生要能处理压力,并知道在必要时寻求帮助或调剂方法。
- 毕业生要了解他们达到最佳工作状态的条件,并能取得其自身的平衡。
- 毕业生要勇于承认他们的错误与失败,并能做出适当的反应。
- 毕业生要能面对批评,而不总是为自己辩护。
1.3 专业修养和成熟度
- 毕业生要了解什么是他们的未知领域。
- 毕业生不要惧怕探索、询问他们专业领域以外的课题。
- 毕业生要知道怎样管理自己的时间。
- 毕业生要了解开发长期项目的方法,而不要轻率地寻求捷径。
- 毕业生要知道何时需要冒险、应该冒什么样的风险。
- 毕业生要习惯于预料潜在问题,并有所准备。
- 毕业生要了解折衷(trade-offs)的重要性,并知道怎样做出这样的决定。
1.4 灵活性
- 毕业生要有灵活性,要能随环境变化而变化。
- 毕业生要主动做一些他们认为“正确”的事,即使他们没有被告知要这样做。要在需要时,展示其建设性的主动性。
- 毕业生要能分析各种情况,并能寻找适当的解决方法。这要求他们了解在什么条件下某一方法是适宜的,什么时候必须选择或发明另一个方法。
- 毕业生要能将其所学应用于其它的领域,甚至是很不相同的领域。
1.5思考、学习及工作技巧
- 毕业生要习惯性地提高他们的能力(终身自学者)。
- 毕业生要能很好地在小组内工作。
- 毕业生要能建立并领导小组。
- 毕业生要习惯性地研究他们尚未了解的想法和概念的历史及详细定义。
- 毕业生要习惯性地寻求术语的准确定义。
- 毕业生要了解何时、怎样用“反复试验”(trial and error)的方法探索某一问题。
- 毕业生要学会习惯性地运用他们第一次学到的原则。
- 毕业生要习惯性地应用“分而治之”(divide and conquer)的原则处理复杂问题。
- 毕业生要能质疑或反驳某些推测和论断。
2 交流
- 毕业生要能合理地组织交谈、文档和论文,以适当的方式向听众传达他们的信息。
- 毕业生要熟练掌握英语,以应付工作中的交流。
- 毕业生要准备在需要是学习新的自然语言。
- 毕业生要有在小组内的交流技巧,特别是有关目标、任务和进展等事项的交流。
- 毕业生要知道如何用少而易懂的文字解释复杂的主题。
- 毕业生要能有意识地表达他们在无意识间运用的原则。
3 数学
3.1 普通数学技巧
- 毕业生要知道如何进行仔细地、逻辑性地思考。
- 毕业生要知道如何抽象,如何寻找更通用、更可复用的概念。
- 毕业生要熟悉很多已经被研究过的数学概念。
- 毕业生要知道如何通过去除不相关的细节建立现实世界的模型。
- 毕业生要知道如何在工作和日常生活中运用数学知识和其它抽象模型。
3.2 软件开发中的应用数学
-
毕业生要能用数学逻辑描述软件状态和功能。
-
毕业生要理解基本的逻辑概念,能提出证明,知道怎样选择并应用基于逻辑的工具,如自动定理证明机。
-
毕业生要了解如何在软件开发中应用离散数学的概念,如图、树、关系等。
-
毕业生要知道如何运用数字数学(numerical mathematics)。
-
毕业生要知道如何运用符号数学。
4 软件开发
4.1 软件基础
- 毕业生要了解支配着我们能用软件做什么事情的基础数学定律,以及支配着应用和设计活动的物理定律。
- 毕业生要知道软件开发难的原因。
- 毕业生要了解当前开发软件的方法,不管是正确的,还是错误的。
- 毕业生要了解为什么“人月”不是一个衡量软件任务复杂度的单位。
- 毕业生要知道如何减少开发和维护软件的工作量。
4.2 软件技术
- 毕业生要知道如何使用现有工具,以及如何学习使用新工具。
- 毕业生要熟练掌握编程技巧。
- 毕业生要知道如何开发网络应用软件。
- 毕业生知道如何选择适当的程序开发工具。
4.3 软件设计与分析
- 毕业生要能够编写满足所提供的软件规格说明书的程序。
- 毕业生要能够根据规格说明准备程序测试。
- 毕业生要能够检查程序,确定是否满足了规格要求。
- 毕业生要能够使软件“模块化”,以便各模块能被单独开发、测试和理解。
- 毕业生要能设计软件产品,并能通过写接口规格设计软件组件。
- 毕业生要知道如何开发独立于设置和设备的(分布式的)软件。
- 毕业生要能开发需进行并行处理的软件。
- 毕业生要知道如何开发实时软件。
- 毕业生要知道如何估计/限定科学计算中数字结果的精确度。
- 毕业生要知道如何选择和设计有效的算法。
- 毕业生要知道如何在问题被详细说明前解决问题,并知道如何确定一套完备的一致的需求。
- 毕业生要了解如何为那些需存储和处理大量数据的产品组织数据。
5 科学方法
- 毕业生要理解“知道某事”意味着什么,以及能“知道某事”的方法。
- 毕业生要知道如何设计并进行试验。
- 毕业生要了解如何从观察中得出正确的结论。
6 管理、项目计划及经济
- 毕业生要有基本的法律和商业知识。
- 毕业生要有基本的会计税务等方面的知识,能足以运营小公司或与专用软件的专家一起工作。
- 毕业生应知道如何保护信息,以避免丢失和泄密。
- 毕业生要对信息保护策略有相当的了解,以便能向策略制定者提出正确的问题。
- 毕业生要足够了解知识产权法规,以了解他们的权利和义务。
- 毕业生要知道如何做项目计划、定义里程碑、以及设置达到里程碑的最后期限。
- 毕业生要熟悉软件项目费用评估的不同方法。
说实话,这上述种种目标 要都实现起来确实挺难的,能达到一半的童鞋堪称狠优秀了,但这就好比一座大山摆在你面前 给你看着,你能看得着,一步步往山顶上爬去,someday you will Climbing the summit.
文章转载自CSDN
即将毕业,诸位一起共勉之。