开发者是保护代码道德的最后防线?

2023-10-23 22:10

本文主要是介绍开发者是保护代码道德的最后防线?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发者是保护代码道德的最后防线?

作者 | Ádám Sándor,Anne Currie

译者 | 薛命灯

编辑 | 小智

我们可以将技术道德定义为发现 IT 系统可能出现的问题(如个人或团体的劣势或伤害),并采取切实步骤避免这些问题。对于开发人员来说,合乎道德行事的关键是要保护人们免受软件系统给我们带来的危害。复杂的道德问题,比如避免使用有偏见的机器学习训练数据或让用户免于政治操纵,这些都是普通职业行为的延伸。作为工程师,我们有权力有所保留,但这对于推动变革来说作用不大。

3 月份,Stack Overflow 发布了他们的 2018 年开发者调查报告,并首次提出了有关道德的问题。对于“开发人员是否有义务考虑代码的道德影响”这个问题,有近 80%的人回答“是”。不过,只有 20%的人认为他们最终在为不道德的代码负责,40%的人会在被要求的情况下写不道德的代码(大多数人会说“这取决于”,我姑且把他们的回答解读为“是的,但我感觉不好”),只有 50%的人表示在发现不道德的代码时会举报。调查报告地址:

https://insights.stackoverflow.com/survey/2018/

如果代码对世界的影响不大,那么这也许就不成问题。如果我写了一个对 100 个人不利的算法,虽然很糟糕,但影响也是有限的。但是,如果我在拥有数十亿用户的 Facebook 或 Google 上做同样的事情,结果会很严重。扩大规模虽然有好处,但也可能带来同样多的坏处。

我们大多数人不为超大规模公司工作,但目标通常也是要增长,这样的文化很难发生改变。在开始时,投机取巧的做法可能有一定作用(例如优步决定测试没有牌照的自动驾驶汽车),但之后很难让滑坡的道德归位。

我们可以做很多事情,作为开发人员,我们设计、编写和部署代码。如果我们愿意,就可以成为防止不道德代码上线的最后一道防线。我们都听到过这样一句话:“你建造它,你运行它,你拥有它”。那么我们是否也应该承担起道德责任?在法律上,我们可能已经这样做了。我不希望自己在法庭上、在每日邮报的头条上或其他任何地方说这样的话:“我只是遵命行事”,但怎样才能真正避免这样的情况?

到底什么是道德?

我们不必拿有轨电车问题来做说明,技术道德并不是哲学的一个晦涩分支。道德代表了专业、合理的行为。我们可以将技术道德定义为发现 IT 系统可能出现的问题(如个人或团体的劣势或伤害),并采取切实步骤避免这些问题。

这在实际当中意味着什么?我们亲身遇到的这种道德问题通常都是非常普通的:

  • 资源严重不足的项目。一个交付的项目不具备过关的质量,因为它没有得到足够的资源。
  • 数据安全性不足。保护客户数据的措施还不够好,这可能会因为暴露个人信息而伤害了用户。
  • 过度的数据收集。应用程序保存超出实际需要的用户数据,因此承担了不必要的风险。
  • 备份不足。如果发生故障,用户可能会因为丢失重要数据或服务而受到损失。

这些道德问题都不是什么深不可测的新生事物。它们不像是邦德勇闯恶棍盘踞的巢穴,也不是要揭穿邪恶的政府计划。它们是大多数公司每天都在与之斗争的问题,沉闷却无比重要,开发者甚至因此无法睡上一个安稳觉。我敢肯定,我们之前都遇到过这样的事情,并感觉非常糟糕。

我们不能说出错就是不道德的——软件总会出错。但如果我们不做出合理的努力来避免问题的出现,或者在发生问题时没有指出来,或者在遇到问题是没有去解决问题,那就只是不道德的(或者说是不专业的)。

处理更复杂的道德问题只是普通职业行为的延伸,例如避免使用有偏见的机器学习训练数据或让用户不受政治操纵。从我们都有资格讨论的一般性问题(如备份)到需要博士学位来解决的哲学问题,它们之间并没有天壤之别,它们存在于同一个连续的频谱上。一方面,对于熟悉的问题,我们有定义好的最佳实践(比如备份),另一方面,我们面临新的技术,对于它们的故障模式我们并不熟悉,而且缺乏相应的指南(如机器学习)。

例如,让我们来看看一个真实案例——在星巴克等美国公司中非常流行的 Kronos 调度软件。 2014 年,纽约时报披露,通过 Kronos 算法来提升门店效率对员工的生活产生了非常负面的影响。我确信 Kronos 的开发者不是故意要这么做,他们只是没有预见到会发生这些问题,也没有现成的指南可用。

这里的道德问题并不是开发者的错。人们没有意识到,因为没有历史可循,所以就有可能会发生错误,需要在没有国家报纸这类实体干预的情况下发现并纠正这些错误。就观察工具来说,纽约时报通常不是最好的选择。问题不在于开发人员缺乏同理心,而是他们并不知道软件在已知和未知问题频谱中处于什么样的位置,并据此采取行动。他们没有进行足够的测试和监控,所以这属于专业性问题,而他们原本不需要心理学硕士学位就能完成这些事情。

我们最终将为机器学习、个性化算法等技术总结出最佳实践。只是现在我们还没有这么做,暂时还处在混乱的状态。这与 20 年前刚出现安全性或可访问性时的情况并没有本质的区别,但在数量上却十分不同,因为如果现在搞错一些东西,就会有很多人受到影响。这意味着我们需要更快地采取行动,并定义和分享好的行为。自我监管的能力必须赶上创新的速度。

作为开发者,关键在于保护人们免受软件已知问题的伤害。无论这种伤害是来自可怕的 AI 还是未经测试的备份操作,我们都需要最佳实践来指导我们。目前,关于软件工程师的道德或专业行为准则应该按照自上而下(政府立法或专业团体)还是自下而上(自主发起)的方式来定义存在很多争论。在我看来,最重要的是我们能够快速创建、分享和遵循指导方针,并快速解决问题,因此我们需要由软件工程师自己推动一种开创性的方法。自上而下的方式效率太低了。

当然,说起来容易做起来难。过去,我们都接受不道德的东西。如果我们总是无法获得足够的灾难恢复预算,那么我们将如何确保有足够保资源来监控具有种族偏见的算法?更何况我们有可能不知道如何做到这些!或者说服我们的雇主为我们提供源源不断的资金?这似乎是不可能的事情!这些事情已经注定了!

任何事情都比“注定的”要好,我倾向于从最简单的事情开始。很多公司都可以保证做到最基本的道德,如应用安全补丁,因此要强制推行责任行为不是不可能的。那么在现实中,开发人员可以做哪些道德的行为?

释放你的力量

如果一个软件工程师看到某些不道德的东西或者某些可能不道德且缺乏监管的东西,他可以做些什么?当你这样问一个典型的工程师时,可能会得到三个答案:

  • 发出警报,然后继续工作(警报可能无效,因为管理层已经知道它们的行为存在问题)。
  • 离开项目(或业务)!
  • 成为一名举报人(最难的选择,你可能会获得一些感激,但可能需要在俄罗斯度过余生)。

所以,开发者认为其中的一种选择不太可能(成为举报者),而另外两项代价也很高,他们也不太可能接受。这些就是 Stack Overflow 问卷调查的结果吗?难怪他们都是失败主义者。

当然,上述这些并非唯一的选项。开发人员比我们意识到的要强大得多。具体来说,我们有消费权力和专业力量。我为什么这么说?

消费者权力

所有工程师都有权力保留他们的预算(消费者权力)。如果你对此持怀疑态度,请想想那些技术大会上的女性演讲者。十年前,几乎没有女性在大型科技会议上发言。而现在,该行业中女性的比例占到大约 15-20%。这并不是因为会议组织者是一群嬉皮士,也不是因为她们可以轻而易举地赢得话语权。会议委员会之所以接受女性演讲者,是因为如果他们不这么做,就会遭到与会者的投诉。这是一个简单的例子,开发者购买了大会门票,那么就有权获得他们想要的东西。

消费者权力是推动变革最简单的方式。只要工程师购买或使用高科技产品和服务,他们就可以行使这项权力。例如,开发人员询问云供应商的可再生能源政策,以此来改善它们,或者从一个你认为不道德的供应商转换到另一个你认为相对较好的供应商——只要你告诉他们为什么要这么做!

专业力量

开发者拥有的第二种力量就是他们的专业知识。技术人员供不应求,公司热衷于雇用他们,并且想方设法留住他们。如果工程师期望雇主具备明确的道德技术流程,他们就会如愿以偿。

什么是道德技术流程?

我已经说过,我们应该对道德技术流程有所期待,但到目前为止还没有这样的流程!我们需要与软件工程师一起来制定这样的流程,原因有三:

  • 我们可以知道和避免其他人已经遇到的问题。
  • 通过一个清晰的流程,可以更容易地确认一个功能及其监控级别是否符合道德标准。
  • 一旦达成一致的流程,我们就可以对它们进行自动化。

让我们从定义一些简单的检查清单开始,并尝试实施它们,看看它们是否有效。检查清单虽然技术含量低,但在航空业,它们在提高安全性方面却非常有效。学习现有的最佳实践是一个很好的策略。

因为必须扩展到我们正在构建的所有新事物上,所以我们需要在前期和回顾过程中思考如何在新领域中应用最佳实践,并分享我们的想法。考虑使用测试驱动开发,并尽早考虑故障模式,这样做通常都很有效。我们不喜欢在不经测试的情况下使用开源代码,不过我们目前允许在没有作者或其他用户给出道德指南的情况下使用开源代码。也许我们不应该这样?

英文原文

https://www.infoq.com/articles/developers-tech-ethics

这篇关于开发者是保护代码道德的最后防线?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/270750

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

D4代码AC集

贪心问题解决的步骤: (局部贪心能导致全局贪心)    1.确定贪心策略    2.验证贪心策略是否正确 排队接水 #include<bits/stdc++.h>using namespace std;int main(){int w,n,a[32000];cin>>w>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);int i=1

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

husky 工具配置代码检查工作流:提交代码至仓库前做代码检查

提示:这篇博客以我前两篇博客作为先修知识,请大家先去看看我前两篇博客 博客指路:前端 ESlint 代码规范及修复代码规范错误-CSDN博客前端 Vue3 项目开发—— ESLint & prettier 配置代码风格-CSDN博客 husky 工具配置代码检查工作流的作用 在工作中,我们经常需要将写好的代码提交至代码仓库 但是由于程序员疏忽而将不规范的代码提交至仓库,显然是不合理的 所