有人说 程序 = 算法 + 数据结构
有人说 软件 = 程序 + 软件工程, 软件企业 = 软件 + 商业模式。
程序本身没有伦理和职业道德, 但是程序员和软件企业要有。 我们听说过很多例子:
一个在银行工作的程序员曾说, 每次给客户计算利息的时候那些除不尽的小数, 如果程序自动转给我的账户上就好了…
一个程序员奉命实现一个功能, 把用户机器上的另一个公司的程序给卸载掉; 或者要求用户卸载另一个程序, 否则本程序退出。
一个程序员写了一个手机游戏软件, 然后把用户的通讯录信息悄悄上传。
绝大多用户在安装软件或使用网络服务的时候都不看使用协议 (EULA), 直接点 “同意” 或者 “下一步”, 万一程序在这里搞了些猫腻怎么办?
在大学里,网上选课是一件很讲究时效的事情 - 因为好的课程不多, 大家都想上。我在清华上课的时候, 大家也讨论过 “刷课机”, “换课机” 这样的小程序是否合乎道德和公平。 春运火车票也是同样的抢手, 那么程序员写一些浏览器插件/专用小软件去搞票是好事,坏事,还是不好不坏? 这些行为应该用哪些道德/规定/法律来约束?
我们每天走过卖麻辣烫的小摊; 我们要打听如何送 “赞助费”才能让小孩上学; 走在路上, 自称房屋中介的人会给你发许多彩色资料; 电视里我们看到新闻发言人振振有词的发言; 关掉电视, 我不禁要说 - 职业道德不是万能的, 但是没有职业道德是万万不能的啊…
批评别的行业和别人都很容易, 我们IT 行业本身又怎么样呢? 越来越多的人们把自己的账户名, 密码, 手机号, ***号… 交给程序, 希望程序后面的程序员不做坏事; 许多社会功能如查询信息, 彩票, 汽车摇号, 交通管理, 甚至核电站运行都交给了软件工程师创造的软件来管理。 那么在所有法律条文被严格制定和执行之前, 有没有什么伦理来约束这些人的行为?
在医学上有著名的希波克拉底誓言, 其中一个版本如下:
“我保证履行由于我的专业我自愿承担的治疗和帮助病人的义务。我的义务是基于病人所处的软弱不利的地位,以及他必然给予我和我的专业能力完全信任。所以,我保证把病人多方面的利益作为我的专业伦理的第一原则。由于承认这种约束,我接受下列义务,只有病人或病人的合法代理人才能解除我这些义务:
①将病人的利益置于我专业实践的中心,并在情况需要时置于我自己的自我利益上。
②拥有和保持我的专业要求的知识和技能的能力。
③承认我的能力的局限,只要我的病人病情需要,我应向我的各种卫生专业的同事求助。
④尊重其他卫生专业同事的价值和信念,并承认他们作为个人的道德责任。
⑤用同等的关切和献身精神关怀所有需要我帮助的人,不管他们有没有能力付酬。
。。。
那么软件工程师有类似的誓言么? 这个可以有 - IEEE/ACM 在前几年就发布了 Software Engineering Code of Ethics and Professional Practice。 现在已经是5.2 版, 一个简化版是:
PREAMBLE
The short version of the code summarizes aspirations at a high level of the abstraction; the clauses that are included in the full version give examples and details of how these aspirations change the way we act as software engineering professionals. Without the aspirations, the details can become legalistic and tedious; without the details, the aspirations can become high sounding but empty; together, the aspirations and the details form a cohesive code.
Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles:
1. PUBLIC - Software engineers shall act consistently with the public interest.
2. CLIENT AND EMPLOYER - Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.
3. PRODUCT - Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.
4. JUDGMENT - Software engineers shall maintain integrity and independence in their professional judgment.
5. MANAGEMENT - Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.
6. PROFESSION - Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.
7. COLLEAGUES - Software engineers shall be fair to and supportive of their colleagues.
8. SELF - Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
以上内容的版权说明:
This Code may be published without permission as long as it is not changed in any way and it carries the copyright notice. Copyright (c) 1999 by the Association for Computing Machinery, Inc. and the Institute for Electrical and Electronics Engineers, Inc.
这也是清华大学 <现代软件工程> 课程的一个团队作业, 希望各个小组能分工翻译, 发布在小组博客上, 要求文字精炼典雅, 以便流传百世。
-----
下面是同学们详细翻译的汇编:
目前,计算机已经成为推动经济、工业、政治、医疗、教育、娱乐和整个社会发展的核心技术。而在这当中,软件工程师通过亲身参与或者教授软件系统的分析、说明、设计、开发、授权、维护和测试等实践工作,为社会做出了巨大贡献。正是由于他们在软件系统开发中起到的重要作用,软件工程师有很大的机会去造福或者危害社会,并有能力去促使或影响他人造福或者危害社会。为了尽可能确保这些影响是有利于社会的,软件工程师必须承诺自己所从事的职业能造福社会, 并且能够得到大众认可尊重。这一承诺要求软件工程师必须遵守下列《职业道德规范和实践标准》。
这一《规范》包括了有关职业软件工程师的行为和决断的八项准则,涉及软件工程方面的实际工作者、教育工作者、经理、主管、决策制定者以及相关的受训人员和学生。这些准则指出了个人、小组和团体参与软件工程的道德责任关系,以及这些关系中的主要责任。每一条原则都是对这些关系中的责任做出的说明。这些责任覆盖了软件工程师的人性,他们对那些受软件工程师工作影响的人们的特别关照,以及软件工程实践的独特因素。《规范》规定任何已经成为或者想成为软件工程师的人必须遵守这些原则。
本规范的每个部分都不应该被断章取义, 孤立使用去判断人们有意或无意犯下的错误。因此这些原则和条款并不是非常完善详尽的。在实际使用过程中,不应当将条款中的可接受部分和不可接受部分分开来讲。同时,《规范》也不是一个简单的道德算法,可以产生所有的道德上的决定。在某些情况下,一些标准可能会相互抵触或者与其他地方的标准相互抵触。在这种情况下,就要求软件工程师能够运用自己的道德判断能力,在特定的情况下做出最符合《规范》的行为。
解决道德冲突最好的方法是对基本原则进行全面的思考,而不是去盲目的依靠一些具体条目。这些原则应当会促使软件工程师们去更广泛的思考哪些人是他们工作的受众,去思考他和他的同事是否给予其他人足够的尊重,去思考对他们工作有足够了解的公众会如何看待他们的决定,去思考他们的决定如何影响最小,以及去思考他们的行为是否符合一名优秀的专业软件工程师的标准。在所有这些思考中,对公众健康、安全与福利的关注是最主要的。也就是说,“公众利益”是《规范》的核心。
由于软件工程这一行业的多变性与苛刻性,它需要一份相关的规范去应对自身不断出现的新情况。《规范》记录了这个行业的道德立场与标准。因此即使是对于这样普遍性的要求,《规范》依然为软件工程师以及他们的经理提供了支持。《规范》无论是对团队中的个人还是团队本身来说都提供了一个道德基础。《规范》也规定了那些对软件工程师或其团队来说道德上不正当的要求。
这份《规范》不仅仅能用来对那些遭到质疑的行为的性质进行判断,它还具有非常重要的教育功能。由于这份《规范》表达了这个行业对于职业道德的一致认识,因此它是教育公众和那些有抱负的专业人员有关软件工程师道德责任的一种工具。
原则1:公众
软件工程师的行为应与公众利益一致。特别地,软件工程师应恰当地做到:
1.01 对自己分内工作负有全部责任
1.02 综合考虑软件工程师,雇主,客户,用户与公众的利益
1.03 软件是安全的,符合规范的,通过适当的测试,不降低生活的质量,不侵犯隐私,不对环境造成伤害;只有当以上条件都能够有充分确认,才认可这个软件。软件的终极效用应该是公益的。
1.04 把任何对用户、公众及与软件和相关文档有联系的外界人员可能造成的危害,告知相关人员或者专家。
1.05 努力合作来解决由软件及其安装、维护、支持和文档 所带来的公众关注的重要问题。
1.06 在所有关系到软件或者相关文件、方法和工具的的声明,尤其是在那些公开声明中,要做到公正并避免欺诈。
1.07 要考虑到由物理缺陷、资源分配、经济劣势和其他一些会降低软件收益的因素所带来的结果。
1.08 鼓励自愿将专业技能用于公益事业,促进公共学科教育的发展。
原则2:客户与雇主
软件工程师应以他们的客户和雇主最大利益化的方式做事,与公众利益一致。特别地,软件工程师应该视情况而定按如下原则工作:
2.01. 在他们的能力范围之内提供服务,诚实和坦率地对待他们经验和教育上的任何局限。
2.02. 不故意使用那些获得或保留的非法或者不道德的软件。
2.03. 只在正确地授权后使用客户或雇主的资产,并且在客户或雇主的知识和允许中进行。
2.04. 确保每一个文档的建立基础都是经过检验的,如果需要的话,由授权人士认证。
2.05 在工作中,对任何机密信息要注意保密,这种保密要与公众利益和法律一致。
2.06 当员工觉得项目将要失败,要及时识别、记录、收集证据并向他们的客户或雇主报告,以证明项目失败的原因。这些原因可能是成本太高,侵犯知识产权,抑或是其它问题。
2.07 当员工意识到在软件或相关文档中涉及某些重大的社会关注问题时,要及时发现、记录并向雇主或客户汇报。
2.08 对主要的雇主负责,不接受影响本职工作的任务。
2.09 尽可能保护雇主或客户的利益,除非出于更高的道德考虑,在这种情况下,向雇主或合适的权力机构反映道德问题。