欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

来源:东半球最不正经的程序员公号

在代码界,有一个令程序员闻之心惊、谈之色变的存在——祖传代码(legacy code)

相信很多接触编程的人都对祖传代码有着难以言表的恐怖体验。如果不改,就难以实现新的需求,支撑新的业务。但一旦改了,新出现的bug绝对能让人失去理智。

刚改完一行祖传代码

也正是出于以上的原因,祖传代码才会经由一个个程序员之手,代代相传,生生不息。

那么问题就来了:祖传代码为什么动不得?

回答这个问题之前需要弄清楚一个点,那就是并不是所有的祖传代码在修改后都会出现bug。很多代码之所以能被“祖传”下来都是因为其严谨而实用。

但是,更多的代码之所以会成为祖传代码,都是因为其逻辑混乱,再加上缺乏注释,导致后来接手的人不敢轻易动手重构,于是相关人员彼此之间心照不宣,只管用不管改,促使代码被祖传了下来。

于是,第二个问题就来了:既然祖传代码出现了问题,为什么还能被运行和使用?

出现这种情况的原因一般有两种:

一、外包不靠谱

系统的运行不是只写代码实现功能就完事了,还要考虑到后期的可维护性。而系统架构是极其复杂的,并非一个外包就能完美解决的。

对产品需求的了解是一个长期的过程,需要长时间与产品打交道。而大部分外包都遵循着成本最小的原则,缺乏对产品充分的了解,导致最后的成品只是样子货,禁不起再利用。

二、缺乏可用文档

小七之前提到过,养成写文档和为代码添加注释的习惯,可以提高代码的可阅读性。但很多人对自己的记忆力和理解能力有着迷之自信,常常抱着“功能都实现了,为啥还要花时间写代码”的心态,能不写注释就不写。以至于后面的人接手项目的时候完全不明白某部分代码的意义,从而出现理解偏差,导致逻辑混乱,影响新功能的顺利实现。

一般情况下,如果代码构成比较简单,或许还能推导出其中的逻辑,但如果写这串代码的是个“天书派”程序员,那就只能自求多福了。因为他可能自己都不知道为啥当初要写这行代码。

除了上面这两点,还有很多因素会导致祖传代码被延续下来,比如代码作者离职,比如程序员为了保住饭碗(国内还真有这种现象)通过公共函数使逻辑复杂化,再比如逻辑出错但不影响运行所以被保留了下来等等。

出于种种原因,稍有历史的互联网公司业务都离不开祖传代码。也因此,很多历史遗留问题也被传承了下来。

亚马逊的工程师将他们公司的代码形容为“一座很大的屎山,你见过的最大的山,每次你想修正一个 bug,你的工作就是爬到屎山的正中心去。

亚马逊的平台架构是用C++写的,C++的一大缺点就是缺乏自省。而亚马逊有超过五千万行 C++ 代码,所以一旦出现bug,解决方法就不是找到问题代码然后删除重写那么简单。更别说,有人可能好不容易爬到了屎山的正中心,然后拉了一坨新的屎。

在互联网圈子里,最常见到祖传代码的还是游戏行业。即使是暴雪这样的游戏大厂也逃不开被祖传代码支配的命运。

暴雪的魔兽世界(简称WOW)在12年前就进入国内了,从最早的版本开始就支持默认16格背包。

但是,随着游戏的不断更新,16格初始背包显然不能满足玩家的需求,于是大家纷纷发邮件建议暴雪增加初始背包格数。

然而,WOW在当时已经是一款很老的游戏了,以至于暴雪自己都不记得是哪个挨千刀的程序员写的背包代码。所以背包扩容的事就不了了之了。

直到今年1月份,暴雪终于找到了那行代码,增加了4个背包初始格。而代价就是数不清的全新的游戏bug。

除了亚马逊和暴雪以外,很多人估计也都知道:微软的windows其实也是用的祖传问题代码。因为要考虑到平台之间互相的可操作性,所以windows操作系统是建立在年复一年持续的代码维护基础上。说白了就是只添砖加瓦,不修复地基。

可能是意识到历史问题实在太多,直到2014年6月,微软才专门招人对遗留代码进行修复。

历史遗留问题是最难解决的问题,而偏偏祖传代码就是这样的问题。你永远不知道你接手的代码有着怎样奇异的身世。

你以为祖传代码很悲催,但更悲催的是它已经八代单传;你以为八代单传很悲催,但更悲催的是它已经断了香火;你以为断了香火很悲催,但更悲催的是它可能根本就是无字天书。

所以,如果遇到很恶心人的祖传代码,不要想着推倒重写,先找到写代码的人,狠狠地揍一顿再说。

反正重写又不加工资。

给我点个好看吧!

动一行,修半年,我的代码八代单传相关推荐

  1. 刚进公司就把祖上十八代单传的代码优化了是什么体验?

    刚进公司就把祖传代码优化了,让公司的APP稳定性提高一半,大幅提升了用户体验是什么体验? 一个字!爽! 这不比斗破里面萧炎"三年之期"打脸嫣然来的爽?不比博人传燃?爽文小说都不敢这 ...

  2. python12306源码_Python动刷新抢12306火车票的代码(附源码)

    Python动刷新抢12306火车票的代码(附源码) 用python另一个抢票神器,你get到了吗? 2017年时间飞逝,转眼间距离2018年春节还有不到1个月的时间,还在为抢不到火车票发愁吗?作为程 ...

  3. python抢购火车票源代码_Python动刷新抢12306火车票的代码(附源码)

    摘要:这篇Python开发技术栏目下的"Python动刷新抢12306火车票的代码(附源码)",介绍的技术点是"12306火车票.Python.12306.附源码.火车票 ...

  4. 大众eagit_混动小钢炮 第八代大众高尔夫GIT

    大众高尔夫这个经典的两厢掀背小钢炮可以说是家喻户晓,自1974年推出以来,就所向披靡,受到了极高的关注和极大的好评.时至今日,高尔夫已经推出了七代车型.2013年,第七代高尔夫MK7在海外上市,车迷们 ...

  5. i5 8250u java_英特尔第八代酷睿评测,全面四核的i5-8250U这么“辣鸡”?-控制器/处理器-与非网...

    在 AMD 的紧逼下,脚步已经凌乱的英特尔终于把原计划 2018 年第一季度发布的第八代酷睿在 8 月 21 日发布了. 从第一批发布的四款主打笔记本的 U 系列处理器看,依然使用了 14nm 制程, ...

  6. 八代i7装服务器系统2012,八代I7能装win7系统吗,会影响性能吗-8代win7,8代cpu完美装win7...

    装win7也就是驱动支持不支持的问题.现在8代Intel可以装win7了.市场上第一个支持8代装win7的产品<驱动总裁>装的时候会自动打上驱动. 只有兼容问题,没有性能问题,装上win7 ...

  7. 八代i7装服务器系统2012,为何八代CPU安装Win7系统失败,三种方式、两个重点,你学会了吗...

    大家好!我是小生,今天我们聊聊"为何八代CPU安装Win7系统失败,三种方式.两个重点,你学会了吗" Win7系统已经使用有十年左右了,也被称为最好的系统,在全球上安装数量最高的. ...

  8. amd同步多线程_锐龙本主力AMD锐龙5 3500U测试:八代酷睿招架不住…

    2016年,AMD正式推出全新的Zen架构,基于Zen的全新处理器命名为"Ryzen(锐龙)".锐龙处理器的推出使AMD获得空前成功,从台式机到笔记本市场,全面吹响了反攻的号角.如 ...

  9. 代写SOFTENG 370 Operating Systems课设、代做C/C++ 留学生作业、代写c/c++代码、代写C/C++编程作业...

    代写SOFTENG 370 Operating Systems课设.代做C/C++ 留学生作业.代写c/c++代码.代写C/C++编程作业 SOFTENG 370 Operating Systems ...

最新文章

  1. SAP QM QP03显示一个含有Multiple Specs检验特性的检验计划
  2. Xamarin XAML语言教程使用属性设置进度条的当前进度
  3. 集成IDE anaconda
  4. Codeforces Round #250 (Div. 2) A - The Child and Homework
  5. C语言中strspn()函数和strcspn()函数的对比使用
  6. mysql not in 转化_[转]mysql里not in语句怎么写 | 学步园
  7. Node.js对MongoDB进行增删改查操作
  8. 动手学深度学习(PyTorch实现)(十一)--GoogLeNet模型
  9. SQL SERVER--单回话下的死锁
  10. python 删除断点_给 Python 开发者的四条忠告!强烈建议收藏
  11. python能自学成功吗-为什么那么多自学Python的后来都放弃了,总结起来就这些原因...
  12. android studio 配置应用生成多个dex
  13. linux 开启bat文件夹,在Linux系统中使用及定制Bat
  14. 怎样在Edge浏览器中开启IE兼容模式
  15. 2021蓝桥杯——直线
  16. getc和fgetc区别
  17. Mac M1安装pycharm专业版,幼儿教学
  18. Oracle 19c遇到ORA-XXXX:????的问题的解决方案
  19. Deblur-NeRF CVPR 2022
  20. Win电源选项设置效果及意义(个人整理)(包含:电源设置,开启卓越模式,睡眠休眠的区别)

热门文章

  1. 简单实现 Android 闹钟
  2. windows商店_Windows 10商店迎来重大改变,PC平台游戏计划公布
  3. Day41——Dp专题
  4. S100数字源表之LDO芯片电学特性测试方案
  5. Huffman Tree
  6. S7-1200PLC—实验五 引风机和送风机的顺序控制
  7. 使用JAVA实现看吉日/黄道吉日/看日子功能的开发方法
  8. 外服游戏服务器如何显示中文,避免国外服务器出现乱码的办法
  9. 科研绘图(Matplotlib.pyplot)
  10. Office常用快捷键