上面这个公号「涩郎」,是我的一个备用号,为了防止万一哪天大号失联,平时一周我也会发三篇左右的我的思考,读书笔记,认知感悟等文章,带领大家一起探索精神与财务自由之路。

大家好,我是校长。

我看有人问了这么一个问题:为什么程序员会有代码能跑就不要动的观点?

这个问题还是很有代表性,而是是非常有意思的一个问题,我从「代码系统生态学」(我自己造的一个词)给大家回答了一波。

如果代码能跑,最起码说明程序目前没有问题,而且是经过测试人员测试过的。

既然能跑,也不影响项目运营的代码,你感觉有必要改么?

很多程序员肯定经历过这样的事情,比如:你刚接手了一个项目,而项目的代码风格可能跟你的代码风格不太一样,亦或者感觉对方写的代码太乱,不简洁,忍不住动手就去改了。

然后呢?改了之后,发现出问题了,然后又开始连夜熬夜改 bug,改了一晚上,感觉改回去了,咋还是有问题呢?rollback 好像都失效了。

有了这个教训之后,很多程序员再也不会乱改代码了,尤其是那种祖传代码,年久失修的代码,更不敢动。

为什么?从「代码系统生态学」(我自己造的一个词)上来讲,要想动能够正常运行的老代码,尤其是你作为一个新人,不知道整体的业务逻辑和目标以及内部很多细节的话,你可能就仅仅就是代码生态上的一小环,就感觉自己稍微改了一下,可能会影响整个系统生态的稳定。

《狼图腾》这本书大家都看过吧,这本书讲的是草原上打狼的故事:在盛行打狼的年代,流行着一个京剧唱段,“打不尽豺狼,绝不下战场”,就有一些人认为,狼是草原人的天敌,它给人造成了太多祸害,要想过上好日子,必须要把狼消灭。

草原上当地的老人说 “狼是草原的守护神,你们打了会遭到天谴的”,但有志有为的年轻人只会把这么充满迷信色彩的话当成笑话。他们开始用大运动的方式打狼,一直打到都没有狼了,就开始挖狼窝,把刚刚出生的小狼崽也消灭。他们以为这样做了就会赢得大胜利大成功,但接下来发生的事情大出他们所料。

首先,狼被消灭以后,草原上发生了兔灾。兔子繁殖速度非常快,当兔子数量以几何级数增加时,它们一方面和羊抢草吃,更要命的是,兔子窝非常隐秘,牧羊人牵着马或者骑着马经过的时候,马不小心踩到兔子窝,就会陷进去骨折。骨折的马就没用了,只能杀掉。

其次是獭灾。没有了狼,旱獭的数量也以几何级数增加。和兔子窝不同,旱獭的洞是隧道式的,它把大量的草弄到洞里过冬保暖,这样一来,天一冷,大量的蚊子就钻进了旱獭的洞里。显然,蚊子的数量也是几何级数增长的,多一只蚊子,来年就会多许许多多的蚊子,所以,在兔灾、獭灾之后,就是蚊灾。马身上镶盖了一层毯子式的蚊子,很多马的血被吸干,倒下了。

兔灾、獭灾、蚊灾还都只是灾难的序曲。

过去,牧羊人白天出去放羊,需要骑着马拿着套马杆时时刻刻巡视提防狼,累了一天回家就倒头大睡,而草原上的妇女则几乎一晚上不睡觉地看着羊圈,防止狼吃羊 —— 这种生活方式无意中抑制了草原人口的增长。但狼没有了之后,牧羊人白天躺在草地上睡大觉就够了,妇女们晚上也不用看着羊圈了,于是在短短几年内,草原人口迅速增加。

人口增加导致畜牧业不足以养活当地人,他们就开始用农业的方式 —— 以较少的土地面积来养活更多的人。但是,草原上纬度高,土层薄,冬天风很大,土地很快沙化,草原人只好继续开荒,以至于后来草原上像长了牛皮癣似的沙地越来越多。这时候,他们才明白老人说的那句话:狼是草原的守护神。

《狼图腾》的故事告诉我们:大自然里有另外一种算法和规则。

同样的道理,代码系统生态当中也有另外你不为人知的算法和规则,就像是草原上当地的老人说 “狼是草原的守护神,你们打了会遭到天谴的”,但有志有为的年轻人只会把这么充满迷信色彩的话当成笑话一样。

程序员千万别当草原上的年轻人,动不动就像修改一下能够运行的祖传代码。

其实,我们目前看到的任何一个系统,任何一个软件,乃至正常运行的一机器,它都是由各个功能组合而成的,之所以能正常运行就说明各个功能之间,各个部门之间是相互平衡,相互协调运作的,你如果不知道整体,亦或者遇到问题,改 bug ,只知道从局部去「堵」,而不知道从整体去「疏」,基本上就无法平衡整个系统,可能只是改了一个小地方,一个小局部,都极有可能引发整个系统崩溃。

堵不如疏,大禹治水也是这个道理。

bug,改,其实可以,但是,你改的前提是:要了解整个代码系统生态,整体的代码业务逻辑,以及你要修改的代码部分的具体功能,当你从全局看,在切入到局部的时候,可能你会发现:原本运行的代码,是有道理的,而不会认为自己比别的程序员聪明,就不会乱改别人的代码了。

其实,不管是程序,还是生活,还是工作,不管我们面对的是人生 bug,还是程序 bug,都是需要利用系统生态学原理去解决,才能获得长治久安,才能获得长期的收获。

点击下方公众号卡片,关注我

在公众号对话框,回复关键字 “1024”

免费领取副业赚钱实操教程

祖传代码成「屎山」了,千万别动相关推荐

  1. 为什么祖传代码被称为“屎山”?

    任何设计人员,你几年之后再来看自己现在的作品,你就会觉得简直就是狗屎,拿出来真tm丢人. 如果你没有这种感觉,那说明你这行干不久了. 说到祖传代码不得不提之前在知乎上看到的两位网友的经历: 一 我刚入 ...

  2. 为什么祖传代码被称为「屎山」?这个回答简直太形象了

    经常听说祖传代码会被人称之为「屎山」,不同人可能有不同的体会,最近看到一个回答,简直是把这个阐述得"活灵活现",大家来感受下吧. " 阅读本文大概需要 3 分钟. &qu ...

  3. GTA 5祖传「屎山」代码终于修复!R星认可黑客方案,还给他发了1万美元奖金

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 折磨全球无数GTA 5玩家的联机版超长加载时间问题,终于要修复了. 什么?R星(游戏开发商RockStar)主动改善玩家游戏体验?不存在的 ...

  4. 为什么祖传代码会被称为「屎山」?

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨赛博铁犁 文章来源: https://juej ...

  5. 漫画 | 为什么祖传代码被称为「屎山」?

    点击上方"蓝色字体",选择"设为星标" 做积极向上的前端人! 这是苏南的 第19篇 原创漫画推送 今天这篇漫画的灵感来源于知乎的一个问答话题,这种情景在程序员身 ...

  6. 入职第一天,我接手了号称【屎山】的祖传代码,这还能卷吗???

    公司各种各样的祖传代码都是令新人虎躯一震的代码,因为有时候你根本不知道它是干嘛的,甚至觉得它毫无用处,关键是 还绝对不能动,碰一段改半年,别问我怎么知道的.最讽刺的是,你可能为了修改代码,也在里面拉了 ...

  7. 祖传代码如何优化性能?

    Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记! 为了新朋友能快速进入场景,再描述一遍这个项目的背景,这个项目是一个自研的Dubbo注册中心,上一张架构图 Consumer 和 Pr ...

  8. 保密+完整+可用+安全,规避代码安全「马奇诺防线」,构建软件供应链整体安全

    近日,在「江狐会」广州站上,极狐(GitLab) 高级解决方案架构师武让分享了如何通过三大阶段 + 四大要点,规避代码安全「马奇诺防线」,真正确保软件供应链安全.以下内容整理自本次演讲.Enjoy- ...

  9. 基于小波变换的图像边缘检测(matlab祖传代码注释)

    基于小波变换的图像边缘提取应用展示 上图为针对png格式无背景原图的边缘检测,对比各种边缘检测算子,小波变化的优势体现并不明显. 上图为针对含背景图片的边缘检测,小波变化的优势这里体现的比较明显. m ...

最新文章

  1. 首款移动社交购物平台“商宝”上线发布
  2. eosjs v20 中文文档
  3. jquery easy drag
  4. 获取当前时间日期并格式化--JS
  5. sap Status状态栏设计
  6. 不是之所以不是,所以不是
  7. [pytorch、学习] - 3.11 模型选择、欠拟合和过拟合
  8. ntr模式_ntr什么意思?求详细解释。。。
  9. Android P:BottomAppBar和MaterialButton
  10. 【VMware虚拟机】【克隆问题】在VMware 9.0下克隆CentOS6.5虚拟机无法识别eth网卡
  11. sentinelsat包介绍
  12. java影院座位订票代码_基于jsp的影院订票-JavaEE实现影院订票 - java项目源码
  13. 强化学习——表格法 Tabular Methods
  14. unity3d游戏开发第2版 pdf_从零开始学基于ARKit的Unity3d游戏开发系列1
  15. 用户、角色和权限关系
  16. 原函数的导数与反函数的导数互为倒数
  17. 云+智能的羊群效应显现,百度用“云智一体”坐定头羊位置
  18. ZOJ-1003-Crashing-Balloon
  19. php 签名 验签 pkcs8,PHP和Java的RSA签名和验签
  20. 用verilog实现串行信号转8bit并行信号

热门文章

  1. 茧数SCRM产品介绍系列:智能名片
  2. python安装第三方库的国内镜像地址收藏
  3. shell脚本:exit 0 和 exit 1有什么区别?
  4. 国土空间规划属性刷插件
  5. 筛选Fiddler的URL 并且标记背景颜色用法
  6. rpad()函数:sql补齐字符
  7. Apio安装过程以及如何解决安装中的错误
  8. ANSYS求解岩石介质的固有频率和谐振频率
  9. 物流行业供应商协同管理平台供应商全生命周期管理,优化物流成本
  10. Eclipse4.8.0汉化