何为屎山代码?

在这里插入图片描述

在编程界,有一种代码被称为"屎山代码"。这并非指某种编程语言或方法,而是对那些庞大而复杂的项目的一种形象称呼。屎山代码,也被称为"祖传代码",是历史遗留问题,是前人留给我们的"宝藏"。它不是一个人堆成的,而是无数前辈一层一层堆起来的。

在这里插入图片描述

一些新手程序员,自信满满,决定重构或修改这些屎山代码。但听我一句劝:屎山代码虽然看着难受,但一旦动手,山就可能塌了,将自己深埋于屎山之中,臭不可闻。

在这里插入图片描述

想象一下,你有一个满是锁的箱子,手上拿着一串没有备注的钥匙。你一个一个锁地试,最终打开了箱子,却没想到里边还有一个满是锁的箱子。当你费尽心思解决了所有锁,钥匙却断了。你完全不明白为什么要这样设计,它看起来那么愚蠢。

在这里插入图片描述

当你有了个新想法,忙碌之后,可能会发现自己写得更蠢。不要试图去理解它,改变它。罗马不是一天建成的,屎山也不是一天堆出来的。千万不要凭一己之力,愚公移山。谁愿意搭上子子孙孙去搞屎山?

那有什么办法解决呢?我告诉你,无解。只要这坨屎山还能支撑业务运作,就不会有领导关心。你一个人和领导沟通,领导又不懂技术,对牛弹琴。你一个人硬着头皮改,你必然疲惫不堪,身心俱疲,最后也必成拉屎之人,千万不要明知山有屎,偏向屎山行。

在这里插入图片描述

编程圈流传着这样一个有趣的小故事:一个哥们上班忽然怒气冲冲,大声质问:“这 TMD 谁写的代码,这么明显的 bug 都能写出来,还不写注释?简直就是一坨屎”。当时项目组的码农们都心惊胆战,不敢说话,瑟瑟发抖,生怕把自己揪出来示众。项目经理听到后发话:"哥们查一下 git 记录。"查出来后通报。哥们说:"在查了。"过了几分钟后,哥们说:"不可能吧!"大家都凑过来看,发现这段代码是哥们一年前自己提交的。为了避免尴尬,大家都没有再提这件事情。

言归正传,造成屎山代码的原因有很多:

  1. 离职工作交接不重视
  2. 无项目文档
  3. 代码注释不全
  4. 团队机制不完备
  5. 领导客户的原因

如果项目需要添加新功能怎么办?那只能在屎山上挖个坑,然后自己再拉坨屎上去。

在这里插入图片描述

屎山是神圣的,为了让你的下一任有点事情做,你可以这样:

  1. 定义看不懂的命名
  2. 定义过长的类或者函数
  3. 写大段重复代码,不进行封装
  4. 写一堆没有注释的代码
  5. 定义 100 个参数的函数
  6. 让业务过度耦合

不幸的是,大多数项目中,上述屎山代码是随处可见的。毕竟几百个人写的屎山代码,就像几百个人堆积木,堆得歪歪扭扭、摇摇晃晃、乱七八糟。你千万不能抽掉一块,指不定抽了一块就塌了。只能看见哪里不牢靠,不停地往哪边堆积木,只要不倒就好,这也是大部分程序员的工作。

在这里插入图片描述

其他行业里的祖传是指有传统的根基,良好的信誉品质好,可以说是前人栽树后人乘凉。但代码如果挂上祖传二字,就意味着无数修不完的 bug。

面对屎山代码,我们或许无法完全避免,但我们可以尽力减少它的产生。通过良好的编程习惯,清晰的代码结构,充分的注释和文档,我们可以为后来者留下一个更加稳固的代码基础…,好了我编不下去了,因为我也是挖坑拉屎的人~~~

![[Pasted image 20240608000755.png]]

原文地址:https://mp.weixin.qq.com/s/uIhRYcZ0IqNGpNeMuJk1rQ
往期文章合集:https://stormsha.blog.csdn.net/article/details/139203741

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用

🔥 个人主页:空白诗 🔥 热门专栏:【Go语言精进之路】 文章目录 引言一、什么是map1.1 map的基本概念与特性1.2 map的初始化与零值问题1.3 map作为引用类型的行为 二、map的基本操作2.1 插入数据2.2 获取数据个数2.3 查找和数据读取…

前端开发部署:Visual Studio Code + vue

〇 说明 本教程全部采用默认安装路径,因为在进行自定义路径安装的时候,需要配置各种环境变量,在这个配置过程中,可能出现各种很混乱的问题。 一 安装Node.js 1 下载https://nodejs.org/en 2 按照默认NEXT执行 C:\Program Files…

文件传输系统主要用于哪些场景?要如何选型?

文件传输系统是一种用于在不同设备、网络或地理位置之间传输文件的产品解决方案,在各行各业中的应用还是很广泛的。 文件传输系统可以应用于多种场景,主要包括: 1、企业内部文件共享:在公司内部不同部门或团队之间共享文件&#…

9、编写业务逻辑

9、编写业务逻辑 9.1 编写博客接口(新增和查询一起编写了) 响应实体:(随便封装的,可以根据自己的想法封装) // entity/Response package com.example.fullstackblogback.commen;import lombok.Data;import java.util.List;@Data public class Response<T> {pri…

[经验] 梦见自己游泳是什么意思 周公解梦 #职场发展#微信#媒体

梦见自己游泳是什么意思 周公解梦 1、梦见自己游泳 梦见自己游泳是一种非常常见的梦境&#xff0c;而这个梦境通常代表着我们内心深处的渴望和憧憬。 游泳是一项需要技巧和勇气的运动&#xff0c;它需要我们在水中保持平衡和控制自己的呼吸。因此&#xff0c;梦见自己游泳通常…

代码随想录算法训练营第三十五天| 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

LeetCode 1005.K次取反后最大化的数组和 题目链接&#xff1a;https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/ 文章链接&#xff1a;https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%9…

idea开发工具清除Git凭证(含Git凭证管理策略)

前言 网上很多人出现这个问题&#xff0c;也有很多文章或博客来说明这个问题&#xff0c;但是几乎都没有说到点子上&#xff0c;全网几乎都说清除credential.helper配置或者清空windows凭证管理器&#xff0c;还有一些文章说清除IDEA缓存&#xff0c;其实都是不对的。 creden…

黑龙江三级等保测评内容与等级划分

一、黑龙江等保三级测评内容 黑龙江等保三个层次&#xff0c;也就是三个级别的信息安全防护&#xff0c;这是我们国家的一项基础性的信息安全体系。在此基础上&#xff0c;提出了一种适用于非银行机构的最高级别的保障制度&#xff0c;即当该制度遭到破坏时&#xff0c;可能给…

Bankless:为什么 AI 需要 Crypto 的技术?

原文标题&#xff1a;《Why AI Needs Crypto’s Values》 撰文&#xff1a;Arjun Chand&#xff0c;Bankless 编译&#xff1a;Chris&#xff0c;Techub News 原文来自香港Web3媒体&#xff1a;Techub News 人工智能革命的梦想一直是一把双刃剑。 释放人工智能的潜力可以解…

springboot3一些听课笔记

文章目录 一、错误处理机制1.1 默认1.2 自定义 二、嵌入式容器 一、错误处理机制 1.1 默认 错误处理的自动配置都在ErrorMvcAutoConfiguration中&#xff0c;两大核心机制&#xff1a; ● 1. SpringBoot 会自适应处理错误&#xff0c;响应页面或JSON数据 ● 2. SpringMVC的错…

深入解析ETL与ELT架构:数据集成技术的演进与发展

摘要&#xff1a;随着大数据时代的到来&#xff0c;数据集成成为企业信息化建设的重要环节。本文将深入探讨ETL与ELT两种架构&#xff0c;分析它们在数据处理、性能、可扩展性等方面的差异&#xff0c;为企业数据集成提供技术指导。 一、引言 在大数据时代&#xff0c;企业需要…

13- 函数的定义与使用+形参实参区分

13- 函数的定义与使用形参实参区分 文章目录 13- 函数的定义与使用形参实参区分一、函数的定义与使用1.1 函数的结构1. 函数头2. 函数体 1.2 示例代码例子 1&#xff1a;无参数和无返回值的函数例子 2&#xff1a;带参数和返回值的函数 1.3 函数的基本语法1.4 函数的使用示例例…

Faster-RCNN基本思想和网络结构

简单来说&#xff0c;Faster RCNN RPN Fast RCNN RPN 是指 Region Proposal Network&#xff0c;建议区域生成网络。 Faster RCNN 中用 RPN 来代替了 Fast RCNN 中的SS算法。 算法流程&#xff1a; &#xff08;1&#xff09;将图像输入CNN网络得到相应的特征图。 &#x…

单机多卡分布式训练策略——MirroredStrategy

前言 分布式训练是一种用于在多个设备或机器上同时训练深度学习模型的技术&#xff0c;它有助于减少训练时间&#xff0c;允许使用更多数据更快训练大模型。分布式训练重点关注数据并行性&#xff0c;本次试验使用的是单机多卡的分布式训练策略&#xff0c;也就是 MirroredStr…

算法题目学习汇总

1、二叉树前中后序遍历:https://blog.csdn.net/cm15835106905/article/details/124699173 2、输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点&#xff0c;只能调整树中结点指针的指向。 public class Solution {private Tr…

多模态AI的挑战与早期壁垒的构建

伴随着Sora、GPT40的推出&#xff0c;多模态AI逐渐成为研究的热点和应用的趋势。然而&#xff0c;多模态AI的发展并非一帆风顺&#xff0c;它面临着诸多挑战和壁垒。 一、多模态AI的难点 多模态AI的核心在于将不同模态的信息&#xff08;如文本、图像、音频、视频等&#xff…

离线翻译器下载哪个好?这几个翻译器用过的人都说好

面对跨文化交流的挑战&#xff0c;如国际旅行或多元工作环境&#xff0c;语言障碍尤为突出。 特别是在信号弱或无网络覆盖的地区&#xff0c;翻译需求变得更加迫切。此时&#xff0c;一款优质的离线翻译app显得尤为重要。它能够在没有网络支持的情况下提供即时翻译服务&#x…

CF297C Splitting the Uniqueness 题解

CF297C Splitting the Uniqueness 题解 非常好构造题&#xff0c;使我的草稿纸旋转。 解法 我们记输入的数组为 a a a&#xff0c;需要输出的两个数组为 b , c b,c b,c&#xff08;因为当时起变量名起的&#xff09;。 考虑利用 a i a_i ai​ 互不相同的性质。 先将 a…

二叉树顺序结构——堆的结构与实现

二叉树顺序结构——堆的结构与实现 一、二叉树的顺序结构二、堆的概念及结构三、堆的实现堆向下调整算法堆的创建建堆时间复杂度堆的插入(堆向上调整算法)堆的删除堆的代码实现(使用VS2022的C语言)初始化、销毁构建、插入、删除返回堆顶元素、判空、返回有效元素个数 四、完整 …

20240610 基于QGIS生成地区示意图的地图shp文件

目录 本文目标前置条件具体步骤1. 创建Project2. 插入世界地图3. 对地区示意图进行地理匹配4. 创建shp文件&#xff0c;勾画轨迹 注意事项 本文目标 基于QGIS生成地区示意图的地图shp文件&#xff0c;此shp文件可以用来学习&#xff0c;但是未经审批不可用于发表。 前置条件 …