软件开发从业者的职责
软件与我们的生活息息相关。我们的汽车中装载了各种软件,我们的交流建立在软件的基础之上,我们日常生活中几乎每个的设备都包含了软件部分。最近所发生的 一些事件向我们警示了使用软件的潜在问题和危险。eBay、Sony和其他公司的海量客户数据被盗。本文的许多读者肯定也深受其害。此外,爱德华·斯诺登 所曝光的信息也向我们展示了软件给我们的隐私所带来的巨大影响。在过去的几年中,我意识到如下事实:让这些丑闻成为可能的是我们这些软件开发从业人员。我 们的软件影响了这个星球上大部分人的生活。我们的系统被黑客攻击并利用。我们的雇主和客户使用我们的软件改变世界,无论好坏。归根结底,是我们构建了这样 的软件。在过去几十年中,我们已经学到了许多关于如何构建良好可信的软件的知识。软件危机让我们能够意识到自身的技术限制,作为优秀的工程师,我们发明了 流程和方法以掌控复杂性。不幸的是,我们忽略了超出技术挑战之外的东西,忘记了我们所需承担的越来越多的责任。软件行业仍然十分年轻。第一个现代化程序设 计语言发明于五十年前。三十年前,个人电脑尚未在家庭中普及。与此同时,在这五十年中软件行业所带来的影响也是史无前例的。图版印刷的发明曾经一直不断地 改变着我们的世界,这一变化持续了将近300年的时间。汽车的发明也让我们的世界发生了一些变化。而汽车的大规模推广则花费了大概150年的时间。如今, 几乎每个国家都有独立的机构以保证汽车的安全性,验证新的模型可以为公众使用。医学或土木工程这类职业已经有几千年的历史。这些学科有足够的时间开发一套 像希波克拉底誓言一样的道德规范集。而这些规范成为这些职业的职责还需要一些培养。古希腊的建筑师必须要和其家人一起在新建的桥梁下居住一个星期。如果桥 梁的建造质量太差,那么他们就会为此承担相应的后果。作为软件开发从业人员,在相当短的时间里我们就已经累积了巨大的影响。但同时,在同样短的时间内我们 也必须面对伴随这一影响而来的责任。在过去的几年中,我一次又一次地碰到相同的话题,关于责任我与许多优秀的软件开发人员也有过非常有意思的讨论。基于这 些讨论,我与其他人共同创建了“ 良心软件开发宣言 ”,以此鼓励与我们的责任相关的想法和讨论。在后续的章节中,我将为读者讲述宣言中各个方面背后的逻辑。
良心软件开发宣言为了培育自由和公平的社会,我宣誓我将会凭着我的良心和尊严从事我的职业。我将严格遵守如下原则:
从道义的角度出发,我将为我的决定负责并且会遵从良心行事。软件对我们生活方方面面的影响正在持续不断地增长。我确认我们的工作对人类和环境所造成的影响。
我不会开发意图侵犯人权和公民自由的软件。随着现实世界与数字世界之间的界限越来越模糊,使用软件侵犯个人或人权的可能性也随之增加。我深知一旦软件发 布,便再也无法控制,因此在开始实施之前,我有责任思考我的软件是否有可能侵犯人们权益。我将拒绝参与会促进这种情况发生的项目。
我会做一个值得信任的行业专家。对于大部分用户来说,复杂软件的使用不当所带来的潜在负面影响是难以想象的。因此作为软件开发从业人员,我们有责任与用户明确沟通正确使用软件的边界。当意识到我所发布的软件不再适用时,我至少需要让潜在和已有用户了解这一情况。
我只会收集完成任务所必需的数据。并且只会在需要时才保存数据。我的应用可能会收集个人信息。我会保护这些信息并且只有经过信息提供者授意时才会使用这些信息。我会将用户的数据完全当作自己的数据看待。
我会尽我最大的努力防止能量和资源的浪费。装载软件的设备数量的增长对全球的资源和能量的使用具有十分强烈的影响。
我郑重地做出这些承诺,自主的并以我的人格保证。 从道义的角度出发,我将为我的决定负责并且会遵从良心行事。 软件对我们生活方方面面的影响正在持续不断地增长。我确认我们的工作对人类和环境所造成的影响。 当我在寻找第一份专职的软件开发工作时,我给自己制定了一条简单的规则。我永远不会为武器制造商编写软件。关于这一条规则,过去几年中我和别人有过非常激 烈的讨论并且我也知道我的这一决定的支持方和反对方都有很好的理由。武器是一个非常有争议的话题。每个人都有各自的观点,并为自己的观点辩护。不过我们应 该不断搜寻我们的工作可能带来的意想不到的负面影响并根据个人的价值观做出决定。我认识一些为武器系统编写软件的人。他们用爱国主义和国防事业为自己的这 种行为辩护,但当防空防御导弹被叛军窃取,并用于摧毁一架乘坐了298名无辜乘客的民用飞机时又会怎样?最初,当我将武器、核能、飞机或计算机游戏方面的 工作排除在外时,向我开放的潜在工作机会也随之减少。但是只要我开始了一份工作或一份合约,我就必须为我的工作所带来的影响承担相应的责任。武器是一个非 常引人注目的话题。每个人都有各自的观点,并为自己的观点辩护。不过我们应该不断搜寻我们的工作可能带来的意想不到的负面影响并根据个人的价值观做出决 定。
我不会开发意图侵犯人权和公民自由的软件。 随着现实世界与数字世界之间的界限越来越模糊,使用软件侵犯个人或人权的可能性也随之增加。我深知一旦软件发布,便再也无法控制,因此在开始实施之前,我有责任思考我的软件是否有可能侵犯人们权益。我将拒绝参与会促进这种情况发生的项目。 爱德华·斯诺登曝光的信息向我们展示了如今可能的监视程度。到底有多少人的隐私受到影响超乎想象。关于监视的必要性的辩论与关于武器的辩论一样富有争议。 但事实是我们拥有确保无辜群众隐私权的法律。如今这一隐私权已经被软件大大削弱,我们距离乔治·奥威尔的1984已经不远了。作为软件开发从业人员,我们 更应该意识到一旦软件发布,就无法再撤回。有时我们的程序会出现在我们创建它们时永远无法想象的地方。也许我们在尝试建立下一代人脸识别算法之前,就应该 思考可能会出现的滥用?
我会做一个值得信任的行业专家。 对于大部分用户来说,复杂软件的使用不当所带来的潜在负面影响是难以想象的。因此作为软件开发从业人员,我们有责任与用户明确沟通正确使用软件的边界。当意识到我所发布的软件不再适用时,我至少需要让潜在和已有用户了解这一情况。
作为软件开发从业者,很难理解大部分用户为什么对技术限制缺乏理解。关于这一点,有影响了大批的用户和开发者的真实案例。直到“心脏出血”漏洞被 曝光之前,只有少数的开发者考虑过OpenSSL的安全性。几乎没人知道当时只有一名员工负责OpenSSL。没有人意识到OpenSSL的限制。我无法 检查所有外部库的缺陷和安全问题。我依赖于文档和其他开发人员的陈述。这意味着其他开发人员也会依赖于我的陈述。当我成为某个特定活动领域的专家并且发布 或售卖软件时,我应该十分清晰地传达相关的技术限制。我的软件的用户通常对它的性能缺乏经验,因此我有责任让它更加容易理解。
我只会收集完成任务所必需的数据。并且只会在需要时才保存数据。 我的应用可能会收集个人信息。我会保护这些信息并且只有经过信息提供者授意时才会使用这些信息。我会将用户的数据完全当作自己的数据看待。 有一些来自于“永久保存一切”这一心态的拥趸们的论据。他们声称“我们只保存元数据,而非真实数据”。他们声称“我们需要所有的数据以便为我们的客户提供 更好的服务。“这两个论据都是虚伪,不诚实的。如今搜集和贩卖数据已经是十分常见的商业模型。如果你想这么做,那就诚实一点,不要将真正的目的掩藏在虚伪 的论据之后。即使你并非有意贩卖数据,有一些危险你也必须了解并加以控制。大量数据所带来的能量总会引来第三方不必要的注意力。当你存储了大量数据时,就 会有人试图窃取这些数据。这在像 Sony 和 eBay 这样的公司已经发生过;你怎么能确定这不会发生在你身上呢?而且即使你可以保护自己不受黑客的攻击,还会有政府部门像你索要 服务器的访问权限 。如果有人窃取了你的数据,最好的情况是声誉上的损失。如果运气不那么好,甚至会有官司缠身。你可能会因为你是一个理想主义者并且相信世界是美好的,而考虑数据保密性。即使这不是真的,也有很多很好的对自己有利的理由值得你仔细考虑所搜集和保存的数据。
我会尽我最大的努力防止能量和资源的浪费。 装载软件的设备数量的增长对全球的资源和能量的使用具有十分强烈的影响。 谷歌和其他一些公司在再生能源上数以亿计的投资必定有其原因。数据中心的操作会消耗大量的能源。优化软件使其具有更佳的能源效率,当这一优化扩展到上千台 服务器上时,就会产生很大的影响。与此同时,当一个写的很糟糕的应用在数小时内就耗尽智能手机的电量时,我们每天都在经受低效软件所带来的苦果。作为软件 从业人员,我们对系统的能源消耗有着巨大的影响。除了显而易见的生态方面的原因之外,进行资源优化也有经济方面的考虑。数据中心中的高效软件可以降低我们 的服务器的运营成本。耗电过高的应用在应用商店中的评分会很差。这两种场景都能够有真金白银的费用浪费或节省。无论你想要拯救世界或只是拯救你的工作场 所,花些心思在我们软件的能源消耗上都是相当重要的一项任务。
总结
上述所列的所有主题都是老生常谈。但大部分的软件开发从业人员仍未意识到我们对社会和个体的影响有多么大。这种影响日益增加并且短期内会一直持续下去。我 们通常也会忽略那些看似微小的决策对社会和生态所产生的影响。作为一个年轻的行业,我们应该直面我们所应承担的责任并应对我们的产品和项目所带来的影响。 在此我想鼓励所有的读者仔细思考各自的工作场所和最近的项目。关于应该回绝哪些工作,是否有条红线?关于公司如何存储数据,是否有一定规范?与你的同事讨 论这些话题和 宣言 。你会很惊讶地发现,他们中许多人的观点你并不了解。
关于作者
Nils Löwe 是 Vedaserve 的联合创始人和CEO,这是一家专注于利用 proofler 之类的工具完成基于知识的决策的技术型初创公司。他帮助有潜力的创始人塑造并测试他们的商业模型以及创建最初的原型和最小化可行产品(MVP)。Nils采用整体处理法并且喜欢担任多个角色,如开发人员、架构师、教师和经理。了解更多信息可以访问 nils-loewe.de 。