以下内容人物均为杜撰,如有巧合,纯属雷同。

从前有个程序员,叫阿星,在小公司工作了2,3年,经过了好多轮技术面试的奋战,终于成功加入了Banana公司,是一个很有名的技术大厂。阿星加入的部门是一个负责公司支付业务的中台团队。

打杂期

阿星在Banana公司的前几个月,主要做一些零散的小需求,一直没机会上手一些核心系统的开发,不过偶尔也会翻阅一些老系统,有不懂或者觉得和自己想法不一样的地方会咨询老同事。

有些时候,老同事都会有句口头禅,这是历史代码的问题,这一块改了影响不知道有哪些,会增加回归成本,这期先这样往上加吧,后面再看看。

每次听到这样的结论,阿星因为是新人,也会赞同老同事的看法,认为这样的考虑是合理的。

但阿星内心总隐隐感觉不对...

Break or Repair?

因为在入职这段时间表现不错,领导走到阿星背后,拍了拍阿星的肩膀说:“阿星,最近我们要对接一个新的支付公司,叫好就付,你找老同事了解下之间是怎么对接其他支付公司的,你来做一下这件事情。”

阿星内心OS:“终于可以参加核心流程的开发了,太棒了”

阿星找老同事了解了下,对接一个新的支付厂商,需要增加一个对应的开通支付的功能,对接支付的功能以及处理开通信息回调的功能。

阿星拉取了主要用来对接支付的的系统,主要是通过定义了一个标准接口给上游系统,内部通过上游分发的展示Id,将展示Id转换成该系统可识别的厂商Id,进入各自的主流程。

阿星要来了新的厂商的接口文档,将上面的三个功能都增加了一个新的分支加以实现,并添加了上游展示Id和好就付厂商之间的转换代码。

进入测试阶段,阿星发现,直接调支付功能是通的,但是开通功能一直不通,仔细查阅了代码发现,原来开通和支付这里各自维护了一套展示Id和厂商之间的转换关系。

阿星为了避免部署上代码后,还是测不通,仔细查阅了整个系统,发现这样的转换关系,在系统内维护了7个地方。

阿星看了看老同事的实现,都是用到一个新功能时,将原有的转换代码直接拿了过来,增加了一个新的分支。

阿星觉得这样的转换逻辑应该维护在一个统一的地方,否则之后新增或者修改一个厂商,每次改动一个厂商需要修改这7个地方,而且随着功能的新增,可能还会增加。

阿星询问了之前的老同事,老同事说 他实现的时候也是看之前的代码就是这么写的,确实也觉得不太合理,但历史都是这么写的,自己就继续往后加了。

阿星陷入了犹豫,自己应该是优化这块功能,还是继续延续老的用法,等到实在改不动了再修复。

你会怎么做呢?想一想,可以留言回答~

做正确的事,不做容易的事

阿星想了想,如果我也继续这么做的话,那么下一个人可能也会继续这么做,那么这段不合理的处理方式就会一直延续下去,永远没有结束的那天,也就无法成为一份好的代码,这可是我梦寐以求加入的公司啊~

可是改这么多地方,会不会影响很多,阿星主动找了资深的同事,说明了自己的想法,同事也认可了自己的做法,之前开了一道口子,现在越来越大了,是应该修复了。

来吧,看我的天马流星拳!(抱歉,阿星有一些中二)

阿星将所有负责转换的逻辑,都抽取了出来,统一到了一个地方,增加了注释,并将原来各处的调用,都收拢到了一处,虽然为此阿星加班测了好多不是他这个需求的功能,但阿星内心是满足的,自己做了一件正确的事。

在阿星修复了这个口子之后,又紧接着对接了好几个新的厂商,大家再也不需要修改7个地方了,阿星有种深藏功与名的感觉。

破窗效应

之前阿星在修复的问题的时候,在想,为什么之前大家都看到了这个问题,但是没人在第一时间发现这个问题后修复呢?

直到有一天,阿星了解到了这个理论 - 破窗效应。

破窗效应(英语:Broken windows theory)是犯罪学的一个理论,该理论由詹姆士·威尔逊(James Q. Wilson)及乔治·凯林(George L. Kelling)提出,并刊于《The Atlantic Monthly》1982年3月版的一篇题为《Broken Windows》的文章。

此理论认为环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉。一幢有少许破窗的建筑为例,如果那些窗不被修理好,可能将会有破坏者破坏更多的窗户。最终他们甚至会闯入建筑内,如果发现无人居住,也许就在那里定居或者纵火。一面墙,如果出现一些涂鸦没有被清洗掉,很快的,墙上就布满了乱七八糟、不堪入目的东西;一条人行道有些许纸屑,不久后就会有更多垃圾,最终人们会视若理所当然地将垃圾顺手丢弃在地上。这个现象,就是犯罪心理学中的破窗效应。

阿星看完之后明白了,在软件开发中其实也存在着破窗效应,当一处不合理的开发出现后,没有在第一时间修完这个破碎的窗户,接下来的人就可能会在修和不修之间动摇,有概率让这个窗户变的更大,让这个窗户变的更难修复。

让我们一起修窗户

阿星最后意识到,无论是小厂还是大厂,代码是靠大家一起维护的,只有大家都有修窗户的意识,才会让系统变的越来越好,否则只会将问题都甩在历史问题上,可是历史问题又是谁造成的呢?

好了,这就是程序员小岑笔下人物阿星的第一篇历险记,如果觉得还不错的话,欢迎点击在看,分享,评论留言哦。

—————END—————

喜欢本文的朋友,欢迎关注公众号 程序员小灰,收看更多精彩内容

点个[在看],是对小灰最大的支持!

Break or Repair?相关推荐

  1. 第十九章 19 利用私有继承来实现代码重用

    //19 利用私有继承来实现代码重用 //我们还有一种方法来实现这种包含式的代码重用,那就是私有继承,派生类从基类私有继承后,其类的公有成员和保护成员在派生类中都是私有成员,私有成员成为不可访问的成员 ...

  2. 乐高ev3 读取外部数据_数据就是新乐高

    乐高ev3 读取外部数据 When I was a kid, I used to love playing with Lego. My brother and I built almost all k ...

  3. 汉字转拼音c/c++源码,支持gb2312和utf8

    最近在写一个拼音转换程序,将汉字转化成拼音.网上很多转化程序只支持gb2312编码,却不支持utf8.于是根据网上的源码整合成了一个既支持gb2312编码.又支持utf8编码的拼音转换程序.他们都支持 ...

  4. ACM_贪心法_queue_Fence Repair

    题目如下,来源POJ Farmer John wants to repair a small length of the fence around the pasture. He measures t ...

  5. poj2513 Fence Repair(小根堆)

    Description Farmer John wants to repair a small length of the fence around the pasture. He measures ...

  6. 1724: [Usaco2006 Nov]Fence Repair 切割木板( 贪心 )

    倒过来看 , 每次总是选择最短的两块木板合并 , 用heap维护 ------------------------------------------------------------------- ...

  7. hoj2677 Instruction Set // poj3253Fence Repair 哈夫曼树

    /* 哈弗曼编码,比如权值为 a:1 b:1 c:2 d:3 e:5 f:6 的树 1.开始时由最小的两个数 a:1 b:1组成一棵树 2.接着由新的最小的两个数 2 c:2 d:3 e:5 f:6 ...

  8. Fence Repair(不会优先队列的看过来)

    Fence Repair(不会优先队列的看过来) Farmer John wants to repair a small length of the fence around the pasture. ...

  9. 贪心:Fence Repair、Saruman's Army

    Fence Repair Farmer John wants to repair a small length of the fence around the pasture. He measures ...

最新文章

  1. CVPR2020论文点评: AdderNet(加法网络)
  2. LeetCode Maximal Square(最大子矩阵)
  3. php跳出volist,thinkphpvolist
  4. ubuntu执行编译好的文件显示文件不存在_嵌入式开发 | 什么是交叉编译(CROSS_COMPILE)...
  5. HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
  6. npm dev run 报错
  7. 170802、Elasticsearch5.2.2 安装问题记录
  8. 父类对象由子类实例化【转载】
  9. java 调用bat脚本 等待返回_java程序调用bat脚本
  10. 计算机网络第三弹——数据链路层
  11. SQL如何本地数据库连接服务器的数据库
  12. /admin/login.php,app/admin/controller/Login.php · 静水流深/wotuoquan - Gitee.com
  13. linux r画图如何输出图片大小,R画图,设画布大小
  14. XMind8破解版安装
  15. fzu 1891 升降序列
  16. 速营社怎么赚钱,可以当副业吗
  17. vs添加监视快捷键_询问操作方法:监视Android移动设备使用情况,Windows键盘快捷键和修复损坏的照片...
  18. python有趣小程序-搞几款由quot;Python”语言编写的quot;有趣、恶搞、好玩”的程序代码!...
  19. 自制滚动的天空,原来很简单,就差细节来人给做做
  20. 创维linux进入工厂模式,彩色电视机进入工厂模式后数据调乱了,如何恢复默认?-创维电视8TTN工厂模式数据怎么调...

热门文章

  1. 开放式耳机哪个品牌音质好?四款音质好的开放式耳机推荐
  2. 罕见bug解决办法: kienct 1代运行错误Failed to claim camera interface: LIBUSB_ERROR_NOT_FOUND
  3. java中的导入gnu,【JAVA学习笔记】静态导入
  4. Python IDE简单测试推荐
  5. thinkphp中使用cli模式
  6. 开发工具 BUG跟踪管理 (80)
  7. 美团打车卷土重来,但这次难给滴滴带来压力
  8. 领跑最后一公里 青藤云安全自适应架构了解一下?
  9. 打印服务IP设置方案
  10. 学习CycleGAN-遇到的问题