写点什么

软件行业的道德、价值与实践

  • 2017-11-12
  • 本文字数:2313 字

    阅读完需:约 8 分钟

在 Meduim 网站最近的一篇博文中, Christiaan Verwijs 提出了授予软件开发人员的权力是否应该以道德行为准则为基础的疑问。Verwijs 在标题为《软件开发人员的道德规范?》一文中解释说,软件开发人员对世界具有重大影响,并且他们具有“保护隐私、开发安全应用程序以及通过构建产品以促进产品多样性的责任。” Verwijs 继续阐述说:

“软件开发者”是一种职业,可与律师或医生相媲美。任何一门职业所具备的典型特征就是它会有自己的道德准则,就好比医生遵循的希波克拉底誓言或是一些工程师所遵循的阿基米德誓言一样。

2015 年大众公司的丑闻向我们展示了一个伦理妥协的极端案例,最终导致一名工程师在今年 8 月被判刑。这名工程师通过“在尾气排放控制模块中设计巧妙且隐蔽的算法,以侦测汽车何时进行排放测试”,操控实际的尾气排放测试结果。

大众公司丑闻发生后,我们与 IEEE Spectrum 杂志进行了沟通。以色列内盖夫 Gurion 大学的商业伦理学教授 Yotam Lurie 博士评论说:

大众软件工程师作为一名专家,竟忽视了自己的信托责任,这着实令人震惊。为确保安全性,即使效率或者经济性并不高,但专家在整个组织内部是具有半监管责任的,在该起事件中,具体指的是环境安全。

在今年早些时候的采访中, Scrum.org 的产品负责人 Dave West 对可能导致道德歧义的情况进行了评论:

如果你被迫要求按时完成任务,或者当事情关乎你个人的生计,你就很难定夺孰对孰错了。道德准则可提供环境和框架,以支持专业人士。我很希望能够看到一个标准化的行业道德准则。而我们自己的道德准则是不断完成提升航天器类软件专业性的使命。

Robert C. Martin (Bob 叔叔)在 9 月份向 InfoQ 的 Ben Linders发表了他自己关于程序员誓言的提议,其中涉及到 9 个关于工艺、透明度和反馈环的声明。该声明首先提到,“我不会编写不利的程序代码”,马丁继续解释说:

软件开发者可对用户造成两种不利。 第一个是最明显的,就是开发的软件可能会出现运行错误。 我们应承诺尽最大努力提供不会出现运行错误的软件,而这似乎也是合乎情理的。

进而,Martin 继续阐述构建软件的职业责任,即软件结构设计应将后期是否能够对该软件进行灵活调整考虑在内。

程序员时常会对用户产生的第二种不利影响则体现在软件的结构设计上。用户通常都希望一款软件可以进行灵活的调整或更改,毕竟软件应体现出灵活性,用户需要他们的软件系统足以跟得上社会和技术的快速发展变化,所以承诺尽全力维护软件的灵活性,这应当不算过分。

Lurie 在其 2015 年发表的题为“软件工程师的职业道德:道德框架”的文章中给出了一系列可能会在 SDLC 各阶段均涉及到的道德问题, Lurie 解释了软件开发中对道德思考的需求:

在该条件下,软件开发者(专家)和终端用户(客户)之间将存在某种权力关系,这必然需要基于道德制衡使其能够正规化,以确保滥用现象的发生…

Lurie 进一步解释说,有些行为通常被认为是单纯的技术活动,这些应给予伦理道德的思考:

更具体地说,这些看起来貌似属于软件包的关键技术特性,如质量、可用性、可靠性、精确性、适用性和安全性,实际上决定了该产品具有什么功能以及如何为客户提供服务的问题。软件产品的这些关键技术特性实则具有重要的道德影响。

在 ThoughtWorks 近期的一篇关于构建软件、技术原理的“核心价值和实践”博文中, Evan Bottcher 分享了“软件构建工艺”中所反映的“基础软件工程价值”的见解。

Bottcher 写到:

价值观是信念的一种描述,如果这些属性存在,我们将能够构建软件,并且不仅可满足用户和客户的需求,而且有信心在短期或长期时间段内顺应快速的软件变更。

Bottcher 以 XP 的价值观和原则为基础,提出了快速反馈、简洁、可重复性和零冗余代码四个核心价值。 这些反过来还将支持 8 个核心工程实践:

  • 设计简单
  • 代码集体所有权
  • 结对编程
  • 重构
  • 测试驱动设计
  • 持续集成
  • 重复性任务的自动化
  • 垂直切片

Bottcher 提到,这些价值观和原则应该适用于所有可交付的成果,包括 MVP 在内。

当一款软件真正面临被抛弃时,是应该做出权衡的。 然而,这些均为一些核心价值观以及实践做法,即便是短期交付的成果,仍存在不确定性。 放弃采纳这些实践做法将降低你的效率,即使在短期内也是一样。

Martin 还强调了不要向程序员誓言相关的一些做法妥协的重要性。

每个程序员都有被过度结构化和混乱的代码严重阻碍的经历。这种代码写起来看似简单,但却使系统处于一个令每个人都低效的状态,其他人效率越低,他们便会觉得采纳捷径的压力越大,这使得系统处于不断恶化的状态。 请重复我的话:“若要走得快,首先需做得好”

Verwijs 所描述的软件开发人员的道德规范,围绕以用户为中心、开发人员与团队间关系提出了道德规范的相关建议,以及与故障和复杂性、透明度、质量和用于保护用户安全和隐私的快速反馈环的诚信度问题。Verwijs 的道德规范是通过实践来呈现的。 他解释了采用单一代码的困难:

这些道德规范涉及的其中一个问题是,仅当绝大多数开发人员接受这些道德规范并且它们成为教育培训的一部分以后,才会产生效果。我们当然还未达到该程度。

在大众丑闻这个事件里,被判刑的工程师被要求服刑 40 个月,并支付 20 万美元的罚金,虽然这名工程师并没有策划该起丑闻,但检方的备忘录指出:

该名工程师明确自己所作所为是错误的,但他通过安慰自己说,自己仅仅是一个工程师,主要工作就是不管可行与否,都要提出切实可靠的解决方案,以此来降低自己由于诈骗行为产生的道德负罪感。

查看英文原文: Ethics, Values and Practices for Software Professionals


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-11-12 18:005138

评论

发布
暂无评论
发现更多内容

微服务架构太难了?那你可能还没掌握SpringBoot+SpringCloud+Docker+RabbitMQ

Java架构之路

Java 程序员 架构 面试 编程语言

腾讯T4架构师:刷3遍以下面试题,你也能从小公司成功跳到大厂

Java架构之路

Java 程序员 架构 面试 编程语言

Ribbon使用及其内核原理剖析

飞鸟

假冒、诈骗、隐私安全,如何应对数字人民币的风险与挑战?

CECBC

货币

编写令人愉悦的API接口(一)

Geek_42915f

Java 程序设计 API APi设计

区块链矿机系统开发现成案例

规模化敏捷框架何从入手?这篇文章把SAFe讲透了!

华为云开发者联盟

敏捷开发 框架 safe

Java 细粒度锁续篇

rookiedev

Java 多线程 加锁

使用 Helmfile 解放你的 Helm Chart

郭旭东

云原生 Helm

研发团队如何实现无缝协作?

万事ONES

研发管理 团队协作 研发效能 研发工具

远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统

刘悦的技术博客

Docker 高可用 监控 Prometheus 预警

区块链矿机挖矿系统开发软件技术

FastAI:滴普技术荟:基于深度学习的云边一体化OLED屏缺陷自动光学检测技术

学习 缺陷检测 云边一体 自动光学检测

低代码与零代码工具的这些特征,弥补了所有人和IT之间的差距!

J2PaaS低代码平台

程序员 互联网 开发者 软件开发 开发工具

让你的简历不落窠臼,精雕细镂写一份真正的技术简历(Python向)

刘悦的技术博客

Python 面试 简历优化 简历

学习笔记丨数据结构之二叉查找树

Liuchengz.

数据结构 C/C++ 数据结构与算法 高级数据结构

2020中国 .NET开发者大会精彩回顾:葡萄城高性能表格技术解读

葡萄城技术团队

GCExcel 中国 .NET开发者大会 表格技术

FastAI:滴普技术荟:基于机器视觉的典型多目标追踪算法应用实践

目标追踪 目标检测 追踪算法

转型项目经理?

escray

面试 面经 七日更 十日谈

用了这个评估优化LiteOS镜像利器,我有点飘...

华为云开发者联盟

镜像 开发 环境配置

号称大厂面试官的克星,“神仙版”Java面试宝典,“真”吊打大厂面试官

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:92. 反转链表 II,迭代,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

关于昆明市政协、市统战部、民革昆明市委赴云南坤艮盈科技有限公司(商务部CECBC区块链专委会秘书处云南办事处)调研指导工作

CECBC

云南发展

数字货币交易所交易平台系统开发

区块链农场游戏系统开发软件定制

比特币的安全性到底有多高?

CECBC

比特币

吊!设计模式全解:6大设计原则+23种设计模式+设计模式PK+设计模式混编

Java架构之路

Java 程序员 架构 面试 编程语言

JVM 的运行时数据区域分布

rookiedev

Java JVM

FastAI:滴普技术荟:某工业产品内部结构尺寸图像测量和缺陷检测分析

AI 目标检测 图像处理 缺陷检测 图像检测

职业规划

Albert

职业规划 七日更

区块链商城APP系统开发|区块链商城软件开发

系统开发

软件行业的道德、价值与实践_语言 & 开发_Rafiq Gemmail_InfoQ精选文章