开发同事辞职,接手到垃圾代码怎么办?

news2024/11/14 20:45:18
小王新加入了一家公司,这家公司有点年头,所以连屎山都是发酵过的,味道很冲。

和大多数时运不济的程序员一样,到了这种公司,做的大多数工作,就是修补这些祖传代码,为其添砖加瓦。每当被折腾的筋疲力尽,就忍不住鼻孔喷着浑浊的空气:“设计这个系统的人,真的是太垃圾了”!

当然,设计这个系统的人,可能早就离职了,也可能就是你的顶头上司。如果你有幸获得一个脾气温和的前辈,他会带着无比后悔的口气告诉你:“这个系统确实千疮百孔,如果我们当初按照正确的思路设计就好了”!

没有程序员不后悔过,就像亏钱的人都后悔买了股票,长大的人都后悔来到这个世界。

很多人看到烂代码,那都是事后来看的。在代码跑起来的那个时刻,“能运行”才是最重要的。烂代码能够进入仓库并投入生产,一定是某些环节的缺失造成的。

烂代码自有它的背景。

1 工期赶

有数不清的管理者,想要量化程序员的工作,由此产生了KPI、OKR这样的工具。在某个时期,它或许是有用的,但这种以截止时间点来衡量的工作方式,会造成技术债的大量积累。

在工期的压迫下,很少有人能够思考需求的合理性,以及后续的扩展性。烂代码在未经过Review的情况下,缺少重构、有限测试,就火急火燎的跑到线上运行。有些设计,可以说从源头上就是不合理的,但由于需要快速实现,方案上就不得不进行妥协。

大多数情况下,朝生夕死的代码并不会产生多大的问题。但总有一些项目,生命周期非常长,修修补补的需求还非常多。在一个地基不稳的地方造一座大厦,总有崩塌的一天。

不过管它呢,只要不是塌在自己手里就可以了。

2 练手项目

我甚至发现了一个非常有意思的现象。很多部门为了培养新人,会特意把一些非常重要的模块和功能,交给新人去做。

由于缺乏经验,新人在方案设计上有诸多的缺陷。但在时间成本上,它和老鸟相差并不太多。很多练手用的项目,在不经意间也会成长为巨无霸,然后它留下的缺陷就会被放大。

和大多数人的认知正好相反,新人在技术方案上,会采用更多的新技术和奇技淫巧,而老鸟善于使用最基本最朴素的工具来完成设计。这可能是一种想要把学到的东西付诸实践的功利心与追求时尚的虚荣心在作怪。

很不幸,追求技巧的代码,会有非常多的约定与规范在里面,如果不是项目统一把控,这种约定和规范会与项目中的其他约定和规范相悖,造成代码风格不统一,调试困难,无法扩展。

3 自起炉灶

很多程序员非常的自信,认为自己的english水平和编码水平特别高,表现在代码上就是龙飞凤舞,自起炉灶。

他们不去关心整个技术社区的约定和规范,在接口命名,对外API上倾注了自己过多的心血,我们通常把这些人称为东施效颦的轮子哥。

比如/health接口,我偏不叫health,我叫/server_status。

再比如错误码,我非要一个叫做 success_200,一个叫做fail_500。后续入职的修正帝看到这样的错误码,嗤之以鼻但是并不敢改动,于是他自己做了一套200和500。

这样的约定和修正约定,会在岁月的侵蚀下越积越多,以至于没人知道它是什么。

所以,如果你看到一个项目的代码非常的烂,不要着急修改,一定要按照它的烂逻辑写下去。相信我,它必定比你的修正稳妥的多。

4 copy帝

在很多公司,你去看他们的产品和代码,会有一种似曾相识的感觉。

没错,他们是抄的。

在缺乏产品设计和经费的前提下,老板下达了终极命令。

“照着xxx给我copy一个,连一个按钮也别放过”。

copy一个和设计一个是两个概念,copy通常意味着浅显的思考,在细节和功能上都比模子差了很多。

更要命的是,模子在变。如果运气不好,一个团队刚copy好了一个产品,结果第二天打开别人的产品一看,好家伙,人家全部改版了。

四不像和未经过设计的代码由此而来。

当然copy帝还指的是cv工程师,但他们的破坏力有限,初心也是好的,并不能造成多大的破坏力。

5 怎么办?

后悔,起码是好的。

这是相对于从不后悔的人来说的。后悔说明了他知道怎么做才是正确的,只是在某些特殊的环境中造成了这样的后果。

如果同样的轮回交给有后悔经历的人来说,他会有更多的思考在项目的时间和人员分配上。而从不后悔的人可能是倔驴,也可能是真的认为他自己是对的,这是非常可悲的一件事情。

如果你不幸在维护这些祖传代码,千万记得要做力所能及的事情,不要冒进,也不要过度修正。除非你的团队给了真正的时间和人员,来决定真正铲一铲。

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

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

相关文章

ChatGPT的互补工具Perplexity的详细使用方法(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Leetcode.1372 二叉树中的最长交错路径

题目链接 Leetcode.1372 二叉树中的最长交错路径 Rating : 1713 题目描述 给你一棵以 root为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。如果前进方向为右,那…

idea中maven只有Lifecycle,没有Dependencies

原因是idea和maven版本不兼容问题 我用的是idea2021,maven3.8.6 改成低版本maven就行了

(四十四)多个事务更新同一行数据时,是如何加锁避免脏写的?

之前我们已经用很多篇幅给大家讲解了多个事务并发运行的时候,如果同时要读写一批数据,此时读和写时间的关系是如何协调的,毕竟要是你不协调好的话,可能就会有脏读、不可重复读、幻读等一系列的问题。 简单来说,脏读、…

SpringMvc中HandlerAdapter组件的作用

概述 我们在使用springMVC时,都知道其中不仅包含handlerMapping组件还包含handlerAdapter组件,为什么呢? springMVC请求流程图 HandlerAdapter组件使用了适配器模式 适配器模式的本质是接口转换和代码复用,这里使用适配器模式的…

房屋出租管理系统

1. 铺垫 1.1 项目真实开发的过程 上来要做什么???? 有电脑—》配环境(JDK、IDEA、MAVEN……) 这个项目:房屋管理系统 从什么角度出发,第一步做什么?? 架构 …

晶体塑性有限元 Abaqus 三维泰森多边形(voronoi模型)插件 V7.0

1 上一版本完整功能介绍: Voronoi晶体插件-6.0版本[新功能介绍] 晶体塑性有限元 Abaqus 三维泰森多边形(voronoi模型)插件 V6.0 2 新增功能模块 7.0版本新增功能模块包括:柱状晶体模块和分层晶体模块。 2.1 二维柱状晶体模块 …

macOS使用CodeRunner快速配置fortran环境

个人网站:xzajyjs.cn 由于一些项目的缘故,需要有fortran的需求,但由于是M1 mac的缘故,不能像windows那样直接使用vsivf这种经典配置。搜了一下网上主流的跨平台方案,主要是gfortran,最近用Coderunner(主要…

【Linux】网络套接字编程

前言 在掌握一定的网络基础,我们便可以先从代码入手,利用UDP协议/TCP协议进行编写套接字程序,明白网络中服务器端与客户端之间如何进行连接并且通信的。 目录 一、了解源目的IP、端口、网络字节序、套接字 端口号: 套接字&…

深入探究文件I/O

目录Linux 系统如何管理文件静态文件与inode文件打开时的状态返回错误处理与errnostrerror 函数perror 函数exit、_exit、_Exit_exit()和_Exit()函数exit()函数空洞文件概念实验测试O_APPEND 和O_TRUNC 标志O_TRUNC 标志O_APPEND 标志多次打开同一个文件验证一些现象多次打开同…

MS9132是一款USB 3 0投屏芯片,内部集成USB 3 0 Device控制器、数据收发模块、音视频处理模块

MS9132是一款USB 3.0投屏芯片,内部集成USB 3.0 Device控制器、数据收发模块、音视频处理模块。MS9132可以通过USB 3.0接口将PC、智能手机、平板电脑上的信息显示或扩展到更大尺寸的显示设备,支持HDMI视频接口输出。 主要功能特征 HDMI 1.4b兼容 支持EDI…

C语言汉诺塔问题【图文详解】

汉诺塔1. 什么是汉诺塔2. 有关汉诺塔的有趣故事3. 利用动画来演示汉诺塔4. 如何用C语言实现汉诺塔1. 什么是汉诺塔 源于印度古老传说的益智玩具 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造…

一起Talk Android吧(第五百零六回:如何调整组件在约束布局中的角度)

文章目录背景介绍相关属性使用方法示例程序各位看官们大家好,上一回中咱们说的例子是"如何调整组件在约束布局中的大小",这一回中咱们说的例子是"如何调整组件在约束布局中的角度"。闲话休提,言归正转, 让我们一起Talk A…

2、算法先导---思维能力与工具

题目 碎纸片的拼接复原(2013B) 内容 破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。传统上,拼接复原工作需由人工完成,准确率较高,但效率很低。特别是当碎片数量巨大,人工拼接很难在短时…

QT之OpenGL混合

QT之OpenGL混合1. 概述2. 实现2.1 丢弃片段2.1.1 Demo2.2 混合2.2.1 相关函数2.2.2 排序问题2.2.3 Demo1. 概述 OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。 2. 实现 2.1 丢弃片段 在某些情况下,有些片段是只需要设置显…

尚医通(二十四)微信退款(取消预约功能)

目录一、取消预约1、需求描述2、开发取消预约接口一、取消预约 1、需求描述 取消订单分两种情况: (1)未支付取消订单,直接通知医院更新取消预约状态 (2)已支付取消订单,先退款给用户&#xff…

《程序是如何跑起来的》-----读书笔记篇

程序是如何跑起来的前言磁盘与内存的关系虚拟内存dll 文件运行环境从源文件到可执行文件前言 不得不说,在这个假期借助“微信阅读”读到了很多有意义的书。不仅是思想境界上的,还有专业方向的。这一次我是在周三还是周四的一个活动中淘到了这本书&#x…

Nginx的介绍、安装与常用命令

前言:传统结构上(如下图所示)我们只会部署一台服务器用来跑服务,在并发量小,用户访问少的情况下基本够用但随着用户访问的越来越多,并发量慢慢增多了,这时候一台服务器已经不能满足我们了,需要我们增加服务…

随机过程及应用

随机过程及应用一、概率论基础1. 三元体定义2. 随机变量及其分布1. 离散随机变量2. 连续型随机变量3. 常见的随机变量和分布1. 离散类2. 连续类4. 二维连续随机变量1. 二维离散2. 二维连续5. 随机变量函数的分布1. 离散(可浅看)2. 一维连续 r.v 函数分布…