十年的老代码,你敢动?

点击“开发者技术前线”,选择“星标?”

13:21 在看|星标|留言,  真爱


你入职一家新单位,被告知需要维护一个老产品,经理找质管给你开通了svn权限,告诉你迁出哪个分支——就是那个十年前已经定型的分支,就是那个超过6代程序员维护过的分支——然后告诉你说,就在这个分支上改,添加一个新接口,以便支持H5 Video。

于是你开始看代码,云山雾罩,各种痛苦,完全搞不懂业务逻辑和代码的关系,也闹不明白这块代码为什么这么写那块代码是几个意思。你战战兢兢如履薄冰思前想后寸步难行。

你去问进来5个多月还没转正的老同事,他告诉你他也不懂,让你凑合着加个新接口实现了功能就行。加了新功能就行。

你去问干了快一年的资格更老的同事,他叮嘱你千万别动里面的代码,千万别管里面什么样,就在外面包一层,先交付新功能,其它的有时间再说,里面的逻辑十年没人动过了,没有一个人能说清楚怎么回事,你要是改,一不留神就遍地狼烟。

你怎么办?

怎样不让猴子吃香蕉

我想起来猴子吃香蕉的实验:

铁笼里关了五只猴,实验者放进一挂鲜嫩甜美的香蕉,五猴顿时兴奋起来,环视了周围,其中一只率先伸手去抓。这时,实验者以高压水枪冲击,包括那四只仅有念头尚未行动的,也受到了惩罚。

过了会儿,看看没有动静,水果香气四溢,又一只猴跃跃欲试窜到香蕉前,高压水枪的集体惩罚再次启动。如此这般几个回合下来,猴都变得老实了,眼睁睁看着令之馋涎欲滴的果实,竟无一只敢再尝试——因集体受罚的经验令之胆寒。

此时,实验者撤出一只水淋淋浑身发抖之猴,换进只新猴,这个不知天高地厚的家伙一进笼就奔 香蕉而去;这时,一种现像出现了:四只吃尽苦头的猴一拥而上,撕扯、阻挠这冒失鬼,不让它接近深具诱惑力的美味,以免大家跟着受罪。

至此,高压水枪这专政手段暂且搁置,威慑效果依旧。等猴子一只只置换完毕,五只新猴面对香蕉皆不敢造次,个个循规蹈距,成就了“自律”的一群。

在这个笼里一个奇异的景象出现了:猴们最爱吃的香蕉,成了“禁果”!

    ——2006年第 3 期 《随笔》朱家泰

关于老代码的禁忌

640?wx_fmt=jpeg

对程序员来讲,维护老代码是最恶心的事儿之一。没说的,就是恶心,公认的恶心,连我这种自认为随意、灵活、代码适应性强、没有原则的老程序员也觉得维护老代码是一种罪。如果你恨一个程序员,就让他去维护年久失修摇摇欲坠的老代码吧。

然而,本文开始时提到的情况却几乎是每一个程序员都会碰见的。老代码啊,我们恨之厌之烦之远之却不可弃之。对一家软件企业来讲,老代码就是资产,是多年积累下来的核心资产和重要竞争力。尤其是软件产品,一份代码先后几波人维护过是常有的事。

这种时候,老代码就老而成精有了生命,每当有新人进来,它都会用特有的超出我们耳力边界的高频发出声音:警告,警告,一波新程序员正在赶来,快给它们点厉害杀杀它们的士气。

而且,部分熟悉老代码的老程序员也会谆谆告诫我们,这几个文件不要动,这几个类不要动,这里一改就奔溃,那里一改就连不上服务器,雷区标识很多。还有那一进来就因为被告诫而根本就没看过老代码的程序员也会告诫我们,那代码谁也不懂,多少年没人动过了,不动为妙,免惹麻烦……

故事就这样发生了,禁忌就如此这般传承下来。我们知道那里可能有问题,可是没人敢去动它,等最后一个熟悉一部分老代码的程序员悠然远去,此地空余叹息,从此以后,新来的程序员就成了想吃香蕉的猴子。

动,还是不动?

老代码成了禁忌,我们往往被迫(没时间或不愿意或害怕或不屑)在漂浮海面的冰山的尖尖上修修补补,深入了解深层代码成了谁也不愿言说的痛。

然而都不懂看代码都不动老代码,老代码只能越来越老越来越陈腐,越来越没人敢动。越往后动的代价越高越没人敢动。这对公司和团队都不好。裹一层又一层,终将积重难返成为裹脚布,无人问津。

而一旦老代码没人能够把握,这些作为资产的代码实际上已经丢了,不再有价值增长了,原本领先的优势随着同行们百舸争流的追赶渐渐失去了。

这是对企业是一种损失。读程序员其实也是一种损失。

为什么这般讲?

情人还是老的好

程序员有个毛病:自己不写文档却老抱怨别人的代码没文档,而碰见了有文档的代码却又往往弃文档如敝履。所以,业界流传一句话:代码即文档。所以,业界的代码和文档,少见匹配的。

哇咔咔咔,对吧。

所以,我们只能接受这个现实:代码即文档。

所以,对维护老产品的程序员来讲,要想弄明白老产品的逻辑,就只要如下两个办法:

  • 找到熟悉产品的前辈,让他给你讲讲。如果你找了产品经理,他只能告诉产品设计上如何如何。如果你找了程序员,他通常会说就是这样那样,然后说一句高深莫测又拉仇恨的话:看看代码就明白了。
  • 自己啃代码,啃代码,啃代码。
Ok,维护旧产品,弄明白产品设计逻辑和代码实现逻辑是非常重要的。 对于本文一开始提到的问题,其实也可能有在外围包装的办法,比如你封装一个本地的HTTP Server,用旧API拿到数据作为HTTP流转发一下就能支持H5 Video标签了。也可能很多情况都存在折衷的替代办法。 然而,能弄懂代码是如何实现产品和业务的,还是有非常重要的好处——对程序员来讲很重要的好处: 文档是会过时的,代码是不会说谎的,读懂代码,你就真真正正明白了业务是如何实现的。对于没人敢动而又核心的老代码,你搞明白了,就占领了战略要地。 这里我要引用格力空调的一句广告词:掌握核心科技。不管这是吹的还是怎的,话说得不错,掌握核心科技才有竞争力,对程序员来讲也是一样,唯有掌握核心业务和代码,才能彰显自己的价值 除此之外,读代码也是非常重要的学习途径,尤其是经历过线上考验的代码,必然尤其过人之处。在阅读的过程中,我们可以学到很多东西,既可以学到业务,也可以学到设计。退一万步讲,即便你认为你水平远超一般人属于一针顶破天的那位,也还是可以从当时、当地的选择中学到东西:见贤可以思齐,见过可以自省。 所以,我的主张是:老代码,动啊,为什么不动! 不能拒绝时就接纳,无需排斥,何时何地都可以修行,只要有心,处处都是成长的机会。最不济,也锻炼了阅读代码的能力,庖丁解牛之技成了,也可以在将来以无刃入有间,发挥用武之地。

至于怎么读代码改代码,相信比学宋仲基撩妹容易多了,一句话:多读读就好了。当然展开来讲也可以有很多技巧,我后面会有一篇文章来谈。

640?wx_fmt=bmp

程序视界:聚焦职场生活、职业选择、适应、发展、转型、技能Get,有料,有趣,有能量

---END---

选择”开发者技术前线 “星标?,内容一触即达。点击原文更多惊喜!

开发者技术前线 汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。


历史推荐


程序员 30 岁的不惑之年

为什么拼多多、趣头条、小红书工资高?

为了找到盗照片的人,我在网上叫了个“小姐”!

640?

点个在看,解锁更多惊喜!

### 如何在 `vue3-seamless-scroll` 中停止或关闭无缝滚动 为了控制 `vue3-seamless-scroll` 的启动和停止功能,可以利用组件提供的属性来动态管理滚动行为。通常情况下,可以通过设置特定的属性值来暂停或重新激活滚动效果。 对于 `vue3-seamless-scroll` 组件而言,在初始化时通过配置项传递给组件实例化对象。要实现停止或禁用滚动的效果,一种常见的方式是修改组件内部的状态变量或者调用其暴露的方法[^1]。 具体操作如下: #### 方法一:使用 `isStopScroll` 属性 如果插件支持此特性,则可以在模板中定义一个布尔类型的响应式数据成员用于切换滚动状态,并将其绑定到组件上作为 prop 使用。 ```html <template> <div> <!-- 假设这是你要使用的无缝滚动组件 --> <seamless-scroll :data="listData" v-bind:options="scrollOptions"> ... </seamless-scroll> <button @click="toggleScroll">Toggle Scroll</button> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; const listData = ref([]); // 数据源 let isStopped = ref(false); // 定义选项并加入是否阻止默认事件逻辑判断 const scrollOptions = computed(() => ({ ...defaultOptions, hoverPause: true, // 鼠标悬停暂停,默认开启 isStopScroll: isStopped.value // 控制滚动开关的关键参数 })); function toggleScroll() { isStopped.value = !isStopped.value; } </script> ``` 上述代码展示了如何创建一个按钮来触发滚动启停的行为变化。当点击该按钮时会改变 `isStopped` 变量的值从而影响实际渲染出来的 props 参数最终达到目的[^2]。 #### 方法二:调用 API 接口(如果有) 部分库可能会提供更直接的操作接口供开发者调用来完成同样的事情。例如某些第三方库可能允许用户直接访问组件实例并通过它执行诸如 `.start()` 和 `.stop()` 这样的命令来进行精确控制。然而这取决于具体的库设计者所提供的API文档说明。 需要注意的是,以上两种方式都需要确认所使用的 `vue3-seamless-scroll` 版本确实实现了这些特性和方法;如果不是最新版的话建议先升级再尝试新的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值