写点什么

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

  • 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:005362

评论

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

认识数据产品经理(四 与互联网产品经理的区别)

马踏飞机747

大数据 互联网 产品经理 职业规划

Dataway 整合 Swagger2,让 API 管理更顺畅

哈库纳

Spring Boot DataQL Dataway Hasor

珍藏已久的 OS 学习网站拿出来分享给大家

苹果看辽宁体育

操作系统

MySQL死锁系列-常见加锁场景分析

程序员历小冰

MySQL

服务化构建-多维度的认识中台

图南日晟

软件工程 分层架构 架构设计

小谈校招offer选择

dongh11

职场 职业规划 应届毕业 心态 招聘

不懂送女朋友什么牌子的口红?没关系!Python 数据分析告诉你。

JackTian

Python 程序员 数据分析 python 爬虫 口红

只用CSS实现响应式Full-Width img 2种方法

寇云

CSS css3

金灿灿的季节 - Apache DolphinScheduler收获5位新Committer

代立冬

Vol.8 云栖小镇游记

pyfn2030

阿里云 随笔 数字化转型

Rust 遇上 C/C++(二):函数传参

Coding Fatty

c c++ rust 编程语言

避免争执

孙苏勇

职场 随笔杂谈

时序数据库

pydata

tput命令介绍

唯爱

深入浅出Mysql索引的那些事儿

猿人谷

MySQL 性能优化 索引

磁盘挂载

唯爱

Vol.9 Web前端发展历程及前端工程化

pyfn2030

大前端

解决版权难题,“豪横”字体自己做

zhoo299

设计 CG

《中国互联网简史》系列笔记之P2P

dongh11

读书笔记

服务化架构-状态码设计要点

图南日晟

微服务 RESTful 架构设计

XSKY发布XMotion纳管热迁移技术,OpenStack集群迁移效率提升超10倍

XSKY星辰天合

安装R语言编译器:

唯爱

Java 学习笔记(三)数据类型

杜朋

超简单入门MyBatis,看了就会了~

程序员的时光

mybatis

Vol.7 聊聊我热爱的陕西省图书馆

pyfn2030

记录 生活,随想

在培训机构花了好几万学Java,当了程序员还常被鄙视,这是招谁惹谁了?

四猿外

Java 学习 程序员 个人成长

控制 Pod 内容器的启动顺序

张晓辉

Kubernetes

游戏夜读 | vim,vim,vim

game1night

【写作群星榜】5.22~5.28写作平台优秀作者&文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

ARTS|Week 1 第一次使用LeetCode

Puran

LeetCode ARTS活动

Eureka 实例注册状态保持 STARTING 的问题排查

张晓辉

spring Spring Cloud netflix

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