0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么你觉得旧代码异常混乱?因为读代码更难

机器学习算法与人工智能 来源:未知 作者:李倩 2018-05-23 11:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

想要推倒旧代码,

重写代码的程序员们,

请注意:

保持冷静,继续前行!

程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的增量劳动。

或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补。他们认为旧代码简直一团糟。

但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难。

为什么你觉得旧代码异常混乱?因为读代码更难。

这大概就是代码Reuse难以实现的原因。 这就是你组里的每个人都喜欢用不同的功能将分割的字符串转换成一个数组。比起猜测旧的功能是怎样实现的,重新写一个自己的功能要简单和有趣多了。

作为这个公理的推论,你可以问问身边的程序员他们正在奋战的代码怎么样?「简直是一塌糊涂!」他们肯定会这样说。「我简直想推倒重来!」

为什么认为代码这么糟糕呢?「额,看看这个功能,竟然有两页长!完全不知道这些东西为什么在这里!完全不知道这些API是干什么的。」他们会这样回答你。

曾经,Borland的创始人 Philippe Kahn当初就是向记者们吹嘘:Quattro Pro会比Microsoft Excel要好用得多,因为它是从头开始编写的,全部都是新的源代码!

但是,认为新代码比旧代码好简直就是荒谬。旧代码是已经运行过的,测试过的。无数的bug在被发现前都上线运行过,发现之后程序员们可能在花了好些日子才修复了这些bug。这种修复可能是一行代码,也可能是几个字符,无数的时间和精力都花在了这些bug修复上。

当你决定抛弃这些旧代码从零开始的时候,你也丢掉全部前任努力的结果。

新代码一定比旧代码的好吗?NO,NO,NO重写可能会带来更大的风险。

对技术领导者来说,重写项目的代码也是一个异常艰难的决定。因为从公司层面说,重现代码甚至会威胁产品的市场竞争力。一旦决定重写代码,那么与竞品相比,你可能落后了2~3年——在软件行业,这时间可够长的。

你理想中的新代码会带来产品功能的提升

但事实上,即便重写的新代码可以实现旧代码的所有功能和需求,但是为产品带来的市场竞争力只有边际提升。因为重写用的新技术、新语言、新框架并没有给产品带来质的飞跃。

更不用说在重写的漫长过程中可能会遇到一些意外情况,比如:

缺钱:资金链的断裂

缺人:核心程序员离职

最终导致效果不佳:达不到原产品应有的所有功能和需求,白白浪费了时间和金钱,也丢掉了市场竞争力。

所以重写代码意味着,你在把自己置身于非常危险的境地,可能几年后你也写不出比以前更好的代码。你只是花了一大笔钱把已经存在的代码又写了一遍。

当你觉得眼前的旧代码很烂时,该怎么办?

你觉得旧代码写的很烂,那又怎样呢?它们已经上线,已经在实际运行中经受住了考验。所以当你发现前任留下的代码乱七八糟的时候,不妨冷静下来,从以下三个方面入手理解代码、改善代码:

1代码的机构有问题

如果一段网络代码突然弹出了自己的对话框,应该是UI代码需要被处理。这些问题可以被解决掉,你要一次次小心地移动代码,重构,改变接口。还需要一位细心的工程师立马仔细地检查这些改变是否有问题,从而不打扰到其他人。事实上,甚至比较大的结构变化也可以不扔掉代码来完成。

大牛程序员回忆说,曾经在某个项目中,他和他的团队花了好几个月重新架构在一点上:把代码动来动去、清理、创建有意义的基类,并创建了模块之间的完美接口。但是他们始终非常小心翼翼,并没有产生新的bug、也没有丢掉任何旧代码。

2代码的效率不高

曾经,Netscape的渲染代码被传非常缓慢。但事实上,这只会影响该项目的一小部分,这部分是你可以优化甚至重写的。你完全不必重写全部代码。优化速度的1%工作量,会让你获得99%的爆炸性提高。

3代码写得很丑

有些代码真的写的很丑,比如Joel曾参与一个项目,开始用下划线做开始的成员变量约定,但后来改用更标准的「M_」。所以一半的功能用「_」开始,一半用「M」开始,这看起来真的很丑陋。但这个问题5分钟就能解决,而不用从头开始写全部的代码。

最后,你要记住,从头开始再写一遍并不意味着你会写出比以前更好的代码。因为你没有参与到上一个版本的创建,所以你其实根本就不算有经验。一旦你准备推倒重写,你可能会再犯一遍版本一犯过的错,甚至会产生更多的新问题。

面对糟糕的旧代码,Keep Calm & Carry On !

在大型商业项目中,推倒重来是非常危险的行为。当然,如果你是在做实验,想到新算法可以随时重写。

如果你跳槽、或刚接手一个新项目,面对看上去异常混乱的旧代码,请冷静下来,忍住推倒重写的冲动,想想上面这些经验之谈。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74359
  • 程序员
    +关注

    关注

    4

    文章

    956

    浏览量

    30999

原文标题:为什么程序员千万不要重写代码?

文章出处:【微信号:machinelearningai,微信公众号:机器学习算法与人工智能】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    安川伺服驱动器警报代码说明

    的警报代码按故障类型整理如下: 安川伺服驱动器常见警报代码速查表 电源、参数与硬件类 警报代码 警报名称 简要含义/原因 A.02 参数和数检查异常 伺服单元内部参数数据
    的头像 发表于 03-13 07:35 1289次阅读
    安川伺服驱动器警报<b class='flag-5'>代码</b>说明

    SonarQube代码质量管理平台详解

    代码质量问题是技术债务的主要来源。一个未被发现的空指针异常可能在生产环境导致服务崩溃,一段存在SQL注入漏洞的代码可能让整个数据库暴露在攻击者面前。传统的Code Review依赖人工审查,效率低下且容易遗漏。
    的头像 发表于 03-11 09:40 406次阅读

    分析嵌入式软件代码的漏洞-代码注入

    ,实现自己的目标。当函数返回时,攻击者还可以将指令要被送达的地址覆盖重写。 2、避免代码注入 避免代码注入的最佳方法是通过设计。 如果可以使用一种***不会出现漏洞的语言,那么这是最好的因为
    发表于 12-22 12:53

    HarmonyOS应用代码混淆技术方案

    代码混淆技术可以增加代码的复杂性和模糊性,从而提高攻击者分析代码的难度。
    的头像 发表于 11-21 16:17 5718次阅读
    HarmonyOS应用<b class='flag-5'>代码</b>混淆技术方案

    觉得哪个软件写verilog体验最好?有什么优势?

    觉得哪个软件写verilog体验最好?有什么优势?请在评论区留言跟大家分享一下吧。
    发表于 11-10 07:47

    代码开发平台推荐:2025国内低代码开发平台排名TOP10

    代码开发平台排行榜 在企业数字化转型的浪潮中,低代码开发平台正逐渐成为企业实现高效开发和快速迭代的重要工具。随着技术的不断进步和市场需求的持续增长,低代码开发平台的市场竞争也日益激烈。以下
    的头像 发表于 10-28 10:22 938次阅读

    2025主流低代码平台有哪些:低代码开发平台选型指南指南

    在企业数字化转型进入深水区的当下,低代码开发平台已从早期的“效率工具”升级为“核心基建”。其工程化能力、流程适配深度、技术延展性与行业积淀,直接决定了企业转型的成效。据Gartner预测,到2026
    的头像 发表于 10-22 11:49 528次阅读

    代码格式化工具Clang-Format提升的CW32工程质量

    它能自动统一团队代码风格,让不同开发者写出的代码如出一辙。就像 CW32 官方库函数遵循统一规范一样,Clang-Format 能让团队所有成员的代码瞬间保持一致,彻底消除 "tabs vs spaces" 的争论。
    的头像 发表于 10-09 17:43 1297次阅读
    <b class='flag-5'>代码</b>格式化工具Clang-Format提升<b class='flag-5'>你</b>的CW32工程质量

    Ansible代码上线项目实战案例

    在DevOps浪潮中,自动化部署已经成为每个运维工程师的必备技能。今天我将分享一个完整的Ansible代码上线项目实战案例,让的部署效率提升10倍!
    的头像 发表于 07-24 14:03 741次阅读

    单模光缆型号字母代码及其含义

    单模光缆的型号字母代码主要用于标识光缆的分类、结构、护层及光纤类型等关键信息,以下是一些常见的单模光缆型号字母代码及其含义: 一、光缆分类代码 GY:通信用室外光缆,这是最常见的室外光缆分类
    的头像 发表于 07-17 10:27 3583次阅读

    聚徽——设备报警别乱阵脚!工控一体机异常代码速查手册

    在工业自动化场景中,工控一体机作为核心控制设备,其稳定运行直接关系到生产效率与质量。然而,设备报警代码的出现往往让维护人员措手不及。本文结合实际案例与权威技术资料,整理出一套工控一体机异常代码速查
    的头像 发表于 06-12 14:11 3949次阅读

    【经验分享】玩转FPGA串口通信:从“幻觉调试”到代码解析

    FPGA开发,思路先行!玩FPGA板子,代码是基本功!尤其对从C语言转战FPGA的“宝贝们”来说,适应流水线(pipeline)编程可能需要点时间。上篇点灯代码解读了基础,而如果能亲手写出串口通讯
    的头像 发表于 06-05 08:05 1220次阅读
    【经验分享】玩转FPGA串口通信:从“幻觉调试”到<b class='flag-5'>代码</b>解析

    从初学到进阶:树莓派上最适合代码编辑器推荐!

    之前,需要安装一些必备工具,代码编辑器便是其中之一。树莓派系统自带了一些代码编辑器,它们功能良好,足以满足基本需求。不过,如果需要更高级的功能,就必须探索其他
    的头像 发表于 05-15 16:20 1382次阅读
    从初学到进阶:树莓派上最适合<b class='flag-5'>你</b>的<b class='flag-5'>代码</b>编辑器推荐!

    OLED代码分享

    OLED代码
    发表于 04-29 17:04 2次下载

    东元伺服驱动器报警代码

    东元伺服驱动器的报警代码是用于指示驱动器运行过程中遇到的故障或异常状态的重要信息。以下是一些常见的东元伺服驱动器报警代码及其对应的故障原因: 1. AL-00:无报警。表示伺服驱动器当前没有检测
    的头像 发表于 04-23 17:58 8293次阅读
    东元伺服驱动器报警<b class='flag-5'>代码</b>