为什么程序员千万不要重写代码?
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》
重写代码其实意味着重新开始,而且也存在着更多的风险!
想要推倒旧代码,重写代码的程序员们,请注意:保持冷静,继续前行!
程序员都有一颗工程师的心,所以当他们到一片新的场地想做的***件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的增量劳动。
或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补。他们认为旧代码简直一团糟。
但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难。
为什么你觉得旧代码异常混乱?因为读代码更难。
这大概就是代码Reuse难以实现的原因。 这就是你组里的每个人都喜欢用不同的功能将分割的字符串转换成一个数组。比起猜测旧的功能是怎样实现的,重新写一个自己的功能要简单和有趣多了。
作为这个公理的推论,你可以问问身边的程序员他们正在奋战的代码怎么样?「简直是一塌糊涂!」他们肯定会这样说。「我简直想推倒重来!」
为什么认为代码这么糟糕呢?「额,看看这个功能,竟然有两页长!完全不知道这些东西为什么在这里!完全不知道这些API是干什么的。」他们会这样回答你。
曾经,Borland的创始人 Philippe Kahn当初就是向记者们吹嘘:Quattro Pro会比Microsoft Excel要好用得多,因为它是从头开始编写的,全部都是新的源代码!
但是,认为新代码比旧代码好简直就是荒谬。旧代码是已经运行过的,测试过的。无数的bug在被发现前都上线运行过,发现之后程序员们可能在花了好些日子才修复了这些bug。这种修复可能是一行代码,也可能是几个字符,无数的时间和精力都花在了这些bug修复上。
当你决定抛弃这些旧代码从零开始的时候,你也丢掉全部前任努力的结果。
新代码一定比旧代买好?NO,重写可能会带来更大的风险。
对技术***来说,重写项目的代码也是一个异常艰难的决定。因为从公司层面说,重现代码甚至会威胁产品的市场竞争力。一旦决定重写代码,那么与竞品相比,你可能落后了2~3年——在软件行业,这时间可够长的。
你理想中的新代码会带来产品功能的提升
但事实上,即便重写的新代码可以实现旧代码的所有功能和需求,但是为产品带来的市场竞争力只有边际提升。因为重写用的新技术、新语言、新框架并没有给产品带来质的飞跃。
更不用说在重写的漫长过程中可能会遇到一些意外情况,比如:
- 缺钱:资金链的断裂
- 缺人:核心程序员离职
最终导致效果不佳:达不到原产品应有的所有功能和需求,白白浪费了时间和金钱,也丢掉了市场竞争力。
所以重写代码意味着,你在把自己置身于非常危险的境地,可能几年后你也写不出比以前更好的代码。你只是花了一大笔钱把已经存在的代码又写了一遍。
当你觉得眼前的旧代码很烂时,该怎么办?
你觉得旧代码写的很烂,那又怎样呢?它们已经上线,已经在实际运行中经受住了考验。所以当你发现前任留下的代码乱七八糟的时候,不妨冷静下来,从以下三个方面入手理解代码、改善代码:
01代码的机构有问题
如果一段网络代码突然弹出了自己的对话框,应该是UI代码需要被处理。这些问题可以被解决掉,你要一次次小心地移动代码,重构,改变接口。还需要一位细心的工程师立马仔细地检查这些改变是否有问题,从而不打扰到其他人。事实上,甚至比较大的结构变化也可以不扔掉代码来完成。
大牛程序员回忆说,曾经在某个项目中,他和他的团队花了好几个月重新架构在一点上:把代码动来动去、清理、创建有意义的基类,并创建了模块之间的***接口。但是他们始终非常小心翼翼,并没有产生新的bug、也没有丢掉任何旧代码。
02代码的效率不高
曾经,Netscape的渲染代码被传非常缓慢。但事实上,这只会影响该项目的一小部分,这部分是你可以优化甚至重写的。你完全不必重写全部代码。优化速度的1%工作量,会让你获得99%的爆炸性提高。
03代码写得很丑
有些代码真的写的很丑,比如Joel曾参与一个项目,开始用下划线做开始的成员变量约定,但后来改用更标准的「M_」。所以一半的功能用「_」开始,一半用「M」开始,这看起来真的很丑陋。但这个问题5分钟就能解决,而不用从头开始写全部的代码。
***,你要记住,从头开始再写一遍并不意味着你会写出比以前更好的代码。因为你没有参与到上一个版本的创建,所以你其实根本就不算有经验。一旦你准备推倒重写,你可能会再犯一遍版本一犯过的错,甚至会产生更多的新问题。
100offer说:面对糟糕的旧代码,Keep Calm & Carry On !
在大型商业项目中,推倒重来是非常危险的行为。当然,如果你是在做实验,想到新算法可以随时重写。
如果你跳槽、或刚接手一个新项目,面对看上去异常混乱的旧代码,请冷静下来,忍住推倒重写的冲动,想想上面这些经验之谈。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
iPhone X和十年前的iPhone,哪一个更贵?
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 「iPhone X 实在太贵了。」 iPhone X 自上市就一直伴随着用户对价格的吐槽,起步价 8388 元让它被称作「史上最贵的 iPhone」。的确,相比较上一代定价 5388 元起的 iPhone 7,iPhone X 显得过于不接地气。整整 3000 块的差价,足够买一台不错的安卓手机了。 话说回来,iPhone X 是作为纪念 iPhone 十周年并致敬乔布斯的划时代作品,加上更先进的技术应用和上涨的供应链成本,近万元的定价在一定程度上也可以被理解。但如果拿 iPhone X 与同样是划时代的初代 iPhone 相比,究竟谁更贵?请放心,我肯定不会从纯经济学的角度来作对比,不然大家看了会打瞌睡。 接下来的对比为三局两胜,Ready,GO! 499 美元 VS 999 美元 其实十年前,iPhone 刚发布的时候也被称作天价。当乔布斯向世界展示了集合通话、上网、音乐功能于一体的全触屏 iPhone 后,嘲笑他的声音扑面而来。其中就有时任微软 CEO 的斯蒂夫·鲍尔默嘲笑道:“没人会买这样一款又贵又没有键盘...
- 下一篇
AR中的人工智能
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 今年3月,上海市经济和信息化委员会公示了2018年***批本市人工智能创新发展专项拟支持项目,一共有19家创新企业入围,其中就有国内AR代表性企业亮风台。此专项由经信委与市财政局联合开展,拟支持金额超过1亿。这不是AR企业***次被划归到人工智能,但这种归类方式也并不常见。AR/VR常作为孪生兄弟被相提并论,被普遍认为为应用层新技术或者说是“智能可穿戴设备”,相比人工智能相对的“算法”标签,显得不够有深度有内涵高大上,那AR和人工智能之间到底是什么关系?AR属不属于当下我们认知中的人工智能? 先来简单梳理下AR的核心技术 AR(Augmented Reality),是在现实世界中叠加虚拟信息,也即给现实做“增强”,这种增强可以是来自视觉、听觉乃至触觉,主要的目的均是在感官上让现实的世界和虚拟的世界融合在一起。 其中,对现实世界的认知主要体现在视觉上,这需要通过摄像机来帮助获取信息,以图像和视频的形式反馈。通过视频分析,实现对三维世界环境的感知理解,比如场景的3D结构,里面有什么物体,在空间中的什么地方。而3D交互理...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启