最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Bob 大叔提出程序员宣言

  • 2015-12-02
  • 本文字数:1800 字

    阅读完需:约 6 分钟

考虑到这一技术的重要性,和其他职业拥有的一样,Uncle Bob 向软件程序员提议了一种宣言。

一年前,Robert C. Martin,也就是 Uncle Bob意识到软件程序员的重要性,他写道:

我们统治了世界。…

_ 没有 _ 一件发生在我们社会当中的事情离得开软件。没有

如果没有了软件:电话不响。汽车不启动。飞机不起飞。炸弹不爆炸。烤箱不烤食物。车库门不开。钱不转手。电不产生。并且我们找不到去商店的路。…

Martin 继续观察到,在社会作出重大贡献的程序员应负责和遵循职业道德,来为了社会的美好而运用他们所拥有的权力。程序员应该决定什么是他们的责任,并且这些责任政府或雇主不应该强加给他们。另外他受 Order of the Engineer 的启发而勾勒出一套职业道德的蓝图。一年后,Martin 重写了道德的问题,这一次他写了更多关于代码的质量,提出了每一个成员都应该采用来“保护和维护这个行业的荣誉”的 The Programmer’s Oath 程序员宣言:

重要通知:接下来 InfoQ 将会选择性地将部分优秀内容首发在微信公众号中,欢迎关注 InfoQ 微信公众号第一时间阅读精品内容。

  1. 我将不会生成有害的代码。
  2. 我生成的代码将会永远是我最好的作品。我将不会故意发布在行为或结构上有缺陷的代码。
  3. 伴随每一次发布,我会生成一个快速、肯定以及可重复的证据让代码的每个元素都按它应该的方式工作。
  4. 我将做到经常、微小地发布,这样就不妨碍别人的进步。
  5. 我将勇敢地和不懈地完善代码,不放过任何机会。我将永远不会让代码变得更糟。
  6. 我将尽我所能来保持自己的生产率,和其他人相比尽可能的高。我将不会做任何会降低生产率的事。
  7. 我将时刻确保别人能代替我,并且我能代替他们。
  8. 我将生成的判断在幅度和精度上是可信的。我不会在不确定的时候作出承诺。
  9. 我将永远不会停止学习及改进我的技术。

Martin 的提议在 Twitter 上得到了各式各样的反响,从:

‏@ klenkes74: 我的假设是如果我严格根据那些规定生活,我的雇主会解雇我。

‏@ QuiteVague: 大多数程序员不能够对此作出承诺——质量和业务需求之间的平衡并不掌握在他们的手上。…我已经把这些人中的每一个都提升到了各种各样的管理者当中。然后,正如我所说的,你赢得了一些,你失去了一些。:)

@DamienPetrilli: 非常的不切实际,完全不适用于现实世界中的大多数人。

@asthasr: #9 是唯一有效的。其他的都是不可能实现的(“证据”)或者依靠我们不能控制的外部因素。

@sleepyfox: 由于天生的不确定性,我认为#8 是不可能维持的。一个判断最好是一个猜测而不是一个承诺。

到:

@brianvhughes: 在最好的情况下,#5 是有希望的。#8 是不可行的。 但是,这也不全是不好的。

@simonbrown: “我将永远不会停止学习及改进我的技术。”<- 对!

@Khris_Fernandez: 我会乐意从现在开始我们在我从事的每一个项目上都签下这个!可悲的是,有些事永远不会做。不管怎样,谢谢 Bob。

@GGrell: 我笑了,我哭了,我欢喜。这就是我每天争取写软件的一部分真实写照。

应答那些不赞同宣誓需求的人,Martin 认为软件工程师应具备道德责任,并且像医生、律师和工程师一样,他们应该拥有一条宣言,这条宣言是“教条一般的定义”。

在相同的笔记上,Rugged Software 的创始人已经写了几年 The Rugged Manifesto ,一系列程序员被邀请来遵守的原则:

我很坚固,更重要的是,我的代码很坚固。

我知道软件已经成为当今世界的重要基石。

我知道这种基石角色随之而来的就是重大的责任。

我知道我的代码会以我没有预期到的方式使用,会以与其当初设计目标不同的方式使用,使用期限也会超出最初预期。

我知道我的代码会被充满才华而有毅力的敌对者攻击,他们会威胁我们的物质世界、经济运行和国家安全。

我知道这些事实,因此我选择变得坚固。

我很坚固,因为我拒绝成为漏洞和弱点的来源。

我很坚固,因为我的代码能够面对这些挑战,并不受它们的影响而继续运行。

我很坚固,不是因为这样做简单,而是因为这是必然之选,而且我已准备好面临挑战。

随着起誓与否,是否遵从宣言的每句话,可能每个人都同意软件工程师旨在编写出好的软件。那意味着什么以及如何实现它则是另一个故事。

查看英文原文: Uncle Bob Proposes an Oath to Programmers


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

2015-12-02 18:003121
用户头像

发布了 218 篇内容, 共 64.9 次阅读, 收获喜欢 75 次。

关注

评论

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

更新60篇的复盘:持续书写,见证文字的力量

boshi

写作 七日更

面试被吊打系列 - Redis原理

数据库 架构 面试

进步

lenka

3月日更

准备参加软考的小伙伴注意了!

IT蜗壳-Tango

IT蜗壳 3月日更

vm

梅花鹿鹿

28天写作 3月日更

Elasticsearch Dynamic Mapping

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

Python 数据类型

HoneyMoose

《精通比特币》学习笔记(第五章)

棉花糖

区块链 读书笔记 3月日更

如何用python优雅的写论文

张鹤羽

28天写作 3月日更

CR量化交易APP开发|CR炒币机器人软件系统开发

系统开发

线上MySQL读写分离,出现写完读不到问题如何解决

程序员历小冰

MySQL 读写分离

优雅编程 | javascript代码优化的15个小知识

devpoint

ES6 JS代码优化 JS迭代

事务消息应用场景、实现原理与项目实战(附全部源码)

中间件兴趣圈

RocketMQ 实战 消息中间件 事务消息

算法喜刷刷

Kylin

算法 3月日更 21天挑战

正则表达式.04 - 引用

insight

正则表达式 3月日更

3-8 工作日志

技术骨干

冰河公开了进大厂的核心技能,服了!

冰河

程序员 面试 大厂技能 硬核技能图谱

《接口测试入门》 学习笔记

骆俊

七日更 3月日更

如何在 Python 中清屏

HoneyMoose

LeetCode题解:518. 零钱兑换 II,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

【动态规划/总结必看】从一道入门题与你分享关于 DP 的分析技巧 ...

宫水三叶的刷题日记

面试 算法 LeetCode

币神量化交易系统开发|币神量化交易APP软件开发

系统开发

今日随想

Nydia

(28DW-S8-Day17) 讲故事能力

mtfelix

28天写作 讲故事能力 复述能力

Java8 Stream 数据流,大数据量下的性能效率怎么样?

xcbeyond

Java java8 Stream<T> 3月日更

越来越受欢迎的Vue想学么,90后小姐姐今儿来教你

华为云开发者联盟

算法 Vue 大前端 框架 组件

Node.js 模块化你所需要知道的事

vivo互联网技术

大前端 nodejs Node

雪花算法,到底是个啥?

架构精进之路

算法 七日更 3月日更

Wireshark数据包分析学习笔记Day5

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

不一样的软件们——GitHub 热点速览 v.21.10

HelloGitHub

数据库 GitHub 开源

鼎昂量化交易系统APP开发|鼎昂炒币机器人软件开发

系统开发

Bob大叔提出程序员宣言_方法论_Abel Avram_InfoQ精选文章