转自:http://www.oschina.net/news/33243/how-the-bystander-effect-is-ruining-your-code

1964年,纽约昆斯区,28岁的Kitty Genovese在经受了长达35分钟的性侵犯后最终被谋杀致死,共有38个本地区人性正常的居民经过,但没有一人提供帮助。

这个故事例证了‘旁观者效应’中的一个不幸的心理特:援助的几率与旁观者人数成反比。旁观者数量越多,他们当中任何一人进行援助的可能性越低。

作为程序员,我们几乎每天都能看到“旁观者效应”在起作用。如果你的代码库已经有了相当的体积和年月,你很可能知道它们会存在一些问题,比如缺乏封 装或模块分离,类继承结构过于复杂,方法太长——读起来就像是Stephen King最近写的小说,未经测试或无法通过测试等等——但没人想去做点什么。

“旁观者效应”的问题根源

问题的根源是缺乏物主(所有者)身份。我们总是在假设别人会来修补这些问题。如果这些问题出现在我们的代码库中,我们很可能对之无动于衷,因为“这事儿跟我无关”。程序员对这样的问题通常的反应:这是别的程序员造成的问题,我才不管呢。这种“这事儿跟我无关”的态度很流行。

可是,这事儿事实上跟你有关。

外差因素(Externalities)的负面效应

经济学上有个词叫做“外差因素(Externalities)”,它形象的描绘了这样一个情况:A人从某件事情上获利,但B人却要为此买单或部分的 买单。你作为B人,免不了会遇到要去修改A人所写的恐怖的类代码。你以为这个类应该是经过精心设计的,你以为它们都有相应的功能测试代码。但事实上,你为 了一个小小的修改做了大量的工作。你的老板会奇怪,这样一个简单的任务为什么需要这么多的时间。别人犯下的愚蠢错误最终却要你来擦屁股——这就是“外差因 素(Externalities)”的负面效应。

培养物主身份

纠正“外差因素“的负面作用的方法很简单:接受问题的所有者身份——不论问题是不是由你造成的。为什么要在意这个问题是谁的责任呢?造成这些问题的 人很可能早就不知去向了。还在等待他们来修改这些问题吗?你永远都等不到。我们应该这样去想:除了我,没有人会来修改这些代码。

一旦你这样做了,一种所有者的身份就开始出现了。当你花了很大的功夫修改好了这些问题,而问题再次出现时,这些问题自然归你所有了,因为你为它们付出了汗水。

这样一来,我们就会开始”义务“的改进我们的代码库。你打开一段有问题的代码,你忧心忡忡的研究它,你忧心忡忡的心情很快云消雾散了,因为你发现有 另外一个”圣人“已经把它修复了——多么美好的世界呀!这样的事情之所以能发生,是因为每个人都找到了自己的责任感。这是最美好的时刻。

行动起来!马上!

感觉如何?在接下来的一周里找一天时间,翻出一段代码,就当是走错了路,拐进了一条本不想走到胡同,修改一下。提交你的修改,并附加这样的注释:

/*
JKH 09/12/2012 - 重构了有问题的事务处理。如果这是你喜欢的,请将此做法传递!
*/

转载于:https://www.cnblogs.com/hnrainll/archive/2012/09/25/2700991.html

“旁观者效应”是如何毁掉我们的代码的相关推荐

  1. “旁观者效应”是如何毁掉我们的代码

    英文原文:How the Bystander Effect is Ruining Your Code  来源:外刊IT评论 1964年,纽约昆斯区,28岁的Kitty Genovese在经受了长达35 ...

  2. 外刊IT网站经典计算机开发,评论,总结文章汇总共享

    全部文章 ·        2013年十二月 (19) ·        25: 辞掉你的工作,去开发一个应用:我的创业故事 (5) ·        24: 你是一个努力工作的程序员吗?还是一个懒惰 ...

  3. Flutter中PlatformView组件无法刷新的问题

    在Flutter中我们经常使用PlatformView来进行原生组件的绘制,但是倘若使用setState()进行页面刷新时候,虽然页面刷新了,但是PlatformView还是使用的之前的组件.这种情况 ...

  4. 用Unity开发一款2D横版游戏demo

    # LanW Game Project 目录 (一) 介绍 (二) 安装教程 (三) 开发流程 1.  新建工程 2.  设置人物 3.  控制主角的移动 4.   添加切换动作的动画 5.   镜头 ...

  5. React中的Hooks详解

    1.概述 React官方网站原文:Hooks 是一项新功能提案,可让您在不编写类的情况下使用 state(状态) 和其他 React 功能. 我总结了下使用Hooks的理由: 1.解决class中的代 ...

  6. 隐私合规:收集SDK部分介绍

    com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...

  7. 代码质量差,啥都干不好!丨技术大牛:你的代码正在毁掉你!

    最近一年来,听到很多的工程师说: 每次面试都会因为设计原则和设计模式被问的灰头土脸: 面试时现场敲代码,功能都实现了,但还是被别人吐槽代码质量差: 工作中一遇到增加需求或者需求变更,就头皮发麻,只能把 ...

  8. 你的代码是如何被炫技毁掉的

    来源:未闻Code 你的代码是如何被炫技毁掉的? 假设有这样一个例子: 一个函数接收两个参数,第一个参数为一个字典,第二个参数为一个列表,我们要把列表中的每一个元素去查字典,如果能够查询到,那么就获取 ...

  9. “不会Linux,怎么当程序员?”骨灰级程序员:你的代码正在毁掉你!

    说起优秀程序员的必备技能,我想大家都可以说很多,比如:数据结构.算法.数学.编程语言等等. 但是,你可能会忽略了每一个程序员都应该掌握的技能:Linux. 想一想,我们日常学习.求职.工作场景的中,你 ...

最新文章

  1. jira 审批流程_博兴县行政审批服务局推暖心服务工程 企业开办实现“全程网办”_博兴新闻...
  2. 在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象
  3. 1024 致敬极客精神,我们有一个3天的秘境邀请!
  4. van 自定义组件_vant 自定义 van-dropdown-item的用法
  5. LVQ模型Python实现
  6. 自反访问控制列表(ACL)
  7. c语言 嵌入式开发环境搭建,嵌入式C语言环境的搭建
  8. 理解Java集合框架里面的的transient关键字
  9. java 学习笔记_java学习笔记
  10. js声明变量三种方式
  11. 远程无法连接数据库的问题
  12. 分治法解决组合问题(递归)
  13. SIEMENS报到第一天
  14. shell sort result to self
  15. 项目中的门禁管理者贾维斯———关于 Shiro 框架的 基本使用和基础配置,以及工作流程的生动解释
  16. 微信小程序解密encryptedData 报错:pad block corrupted 解决方法
  17. BZOJ 3162 / Luogu P4895: 独钓寒江雪 树hash+DP
  18. bellman_ford
  19. 美丽的回测你定量算过拟概
  20. 修改MAC密码 Navicat每次打开都要输入密码

热门文章

  1. 数据仓库ods层是啥意思_数据仓库中的ODS、EDW、和DM层是什么?(系列3)
  2. 中国摩托车头盔行业市场供需与战略研究报告
  3. 关于openstack的一些废话(非技术)
  4. Real-Time Rendering 笔记
  5. OLED液晶显示屏显示汉字
  6. Qt6.1教程:Qt Quick3D渲染实例
  7. 第一天、python之路
  8. Android悬浮窗使用及窗口设置相关
  9. 2019.04.08—Java 中字母汉字占几个字节
  10. 【单片机毕业设计】【mcuclub-217】空气质量检测(甲醛、甲苯) | 环境检测 | 气体检测 | 室内有害气体检测