这些老系统代码,是猪写的么?
Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记!
小王新加入了一家公司,这家公司有点年头,所以连屎山都是发酵过的,味道很冲。
和大多数时运不济的程序员一样,到了这种公司,做的大多数工作,就是修补这些屎山,为其添砖加瓦铸造更大的屎山。每当被折腾的筋疲力尽,就忍不住鼻孔喷着浑浊的空气:“设计这个系统的人,真的是太垃圾了”!
当然,设计这个系统的人,可能早就离职了,也可能就是你的顶头上司。如果你有幸获得一个脾气温和的前辈,他会带着无比后悔的口气告诉你:“这个系统确实千疮百孔,如果我们当初按照正确的思路设计就好了”!
没有程序员不后悔过,就像亏钱的人都后悔买了股票,长大的人都后悔来到这个世界。
很多人看到烂代码,那都是事后来看的。在代码跑起来的那个时刻,“能运行”才是最重要的。烂代码能够进入仓库并投入生产,一定是某些环节的缺失造成的。
烂代码自有它的背景。
工期赶
有数不清的管理者,想要量化程序员的工作,由此产生了KPI、OKR这样的工具。在某个时期,它或许是有用的,但这种以截止时间点来衡量的工作方式,会造成技术债的大量积累。
在工期的压迫下,很少有人能够思考需求的合理性,以及后续的扩展性。烂代码在未经过Review的情况下,缺少重构、有限测试,就火急火燎的跑到线上运行。有些设计,可以说从源头上就是不合理的,但由于需要快速实现,方案上就不得不进行妥协。
大多数情况下,朝生夕死的代码并不会产生多大的问题。但总有一些项目,生命周期非常长,修修补补的需求还非常多。在一个地基不稳的地方造一座大厦,总有崩塌的一天。
不过管它呢,只要不是塌在自己手里就可以了。
练手项目
我甚至发现了一个非常有意思的现象。很多部门为了培养新人,会特意把一些非常重要的模块和功能,交给新人去做。
由于缺乏经验,新人在方案设计上有诸多的缺陷。但在时间成本上,它和老鸟相差并不太多。很多练手用的项目,在不经意间也会成长为巨无霸,然后它留下的缺陷就会被放大。
和大多数人的认知正好相反,新人在技术方案上,会采用更多的新技术和奇技淫巧,而老鸟善于使用最基本最朴素的工具来完成设计。这可能是一种想要把学到的东西付诸实践的功利心与追求时尚的虚荣心在作怪。
很不幸,追求技巧的代码,会有非常多的约定与规范在里面,如果不是项目统一把控,这种约定和规范会与项目中的其他约定和规范相悖,造成代码风格不统一,调试困难,无法扩展。
自起炉灶
很多程序员非常的自信,认为自己的english水平和编码水平特别高,表现在代码上就是龙飞凤舞,自起炉灶。
他们不去关心整个技术社区的约定和规范,在接口命名,对外API上倾注了自己过多的心血,我们通常把这些人称为东施效颦的轮子哥。
比如/health接口,我偏不叫health,我叫/server_status。
再比如错误码,我非要一个叫做 success_200,一个叫做fail_500。后续入职的修正帝看到这样的错误码,嗤之以鼻但是并不敢改动,于是他自己做了一套200和500。
这样的约定和修正约定,会在岁月的侵蚀下越积越多,以至于没人知道它是什么。
所以,如果你看到一个项目的代码非常的烂,不要着急修改,一定要按照它的烂逻辑写下去。相信我,它必定比你的修正稳妥的多。
copy帝
在很多公司,你去看他们的产品和代码,会有一种似曾相识的感觉。
没错,他们是抄的。
在缺乏产品设计和经费的前提下,老板下达了终极命令。
“照着xxx给我copy一个,连一个按钮也别放过”。
copy一个和设计一个是两个概念,copy通常意味着浅显的思考,在细节和功能上都比模子差了很多。
更要命的是,模子在变。如果运气不好,一个团队刚copy好了一个产品,结果第二天打开别人的产品一看,好家伙,人家全部改版了。
四不像和未经过设计的代码由此而来。
当然copy帝还指的是cv工程师,但他们的破坏力有限,初心也是好的,并不能造成多大的破坏力。
怎么办?
后悔,起码是好的。
这是相对于从不后悔的人来说的。后悔说明了他知道怎么做才是正确的,只是在某些特殊的环境中造成了这样的后果。
如果同样的轮回交给有后悔经历的人来说,他会有更多的思考在项目的时间和人员分配上。而从不后悔的人可能是倔驴,也可能是真的认为他自己是对的,这是非常可悲的一件事情。
如果你不幸在维护这些屎山,千万记得要做力所能及的事情,不要冒进,也不要过度修正。除非你的团队给了真正的时间和人员,来决定真正把这坨屎铲一铲。
这些代码,当然也不是猪写的,只不过是把人放进了猪圈而已。
完
我的新书《深入理解Java核心技术》已经上市了,上市后一直蝉联京东畅销榜中,目前正在6折优惠中,想要入手的朋友千万不要错过哦~长按二维码即可购买~
长按扫码享受6折优惠
往期推荐
我真傻,招了一堆只会“谷歌”的程序员!
电商红包雨是如何实现的?拿去面试用(典型高并发)
ArrayList#subList这四个坑,一不小心就中招
如果你喜欢本文,
请长按二维码,关注 Hollis.
转发至朋友圈,是对我最大的支持。
点个 在看
喜欢是一种感觉
在看是一种支持
↘↘↘
这些老系统代码,是猪写的么?相关推荐
- 老码农:如何写出让自己满意的代码
今天有位朋友在微博上问我这样一个问题: "@老码农的自留地 ,最近出于学习目的写一个管理系统,越到后边,越觉得自己前边的代码写得烂.前辈,我想让代码写得更好一点,能不能谈谈你的经验,给我指点 ...
- 200张表,单表记录过亿,10多年核心老系统的重构之旅
一.什么时候需要重构老系统 老系统重构,让大家又喜又悲,喜的是程序员,悲的是业务. 程序员为啥"喜":多年前的老技术,以及各种历史原因导致的遗留代码.不需要的业务代码混杂在一起,维 ...
- 复杂业务代码要怎么写
了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理. 这两天在看零售通商品域的代码.面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题.针对该命题,我进行了比较细致的思考 ...
- 我是如何将一个老系统的kafka消费者服务的性能提升近百倍的
大家好,又见面了~ kafka作为一种高吞吐量的分布式发布订阅消息系统,在业务系统中被广泛的使用. 如果问你,如何提高kafka队列中的消息消费速度呢? 答案很简单,topic多分几个分片,然后使用消 ...
- 快速的看懂老项目代码
快速的看懂老项目代码 如果拿到一个老项目进行新功能改造,首先看懂老项目很重要,而有些老项目由于各种原因没有明确的注释,甚至经多人开发后注释和弃用代码混为一体,惨不忍睹.关于如何看项目代码我有下面一点心 ...
- 老旧系统改造,彻底重构还是给老系统减负?
编 辑:彭文华 来 源:大数据架构师(ID:bigdata_arch) 周末跟一位老彭友约了在了一个景色非常优美的地方私聊,没想到一下就聊了3个多小时.跟企业实战大佬毫无保留的深入探讨一个问题,真的非 ...
- Latin1编码的中文 - HTML Escape在老系统全球化的应用体验
背景:最近做全球化的项目,涉及到一个10年前的老系统,在测试中发现了中文乱码,于是有了这个故事. 概要:Latin1是不支持中文的,所以如果存储用的Latin1而应用用的UTF8,那么HTML Esc ...
- 如何为 Python 添加远程调试能力而不修改系统代码
最近写了一些关于 Python 远程调试的扯淡向博文,第一篇是「远程调试你的 Python 代码」,第二篇是「使用 VS Code 远程调试 Python 程序」.前些日子开了一个叫做「第八个手艺人」 ...
- 代码要想写得好,品位必须提一提!
要写出好代码,首先需要提升品位. 很多软件工程师写不好代码,在评审他人的代码时也看不出问题,就是因为缺乏对好代码标准的认识. 现在还有太多的软件工程师认为,代码只要可以正确执行就可以了.这是一种非常低 ...
最新文章
- python blp模型 估计_第三章 BLP模型(Bell-La Padula模型) | 学步园
- 笔记-项目立项管理-项目的可行性研究-可行性研究内容
- CDH6.3.2默认管理端口是7180,HDFS相关端口
- SPSS分析:Bootstrap
- Springboot starter开发之traceId请求日志链路追踪
- yum -y list java* 缓存加载不了_Java开发面试宝典:分布式相关篇
- 量子计算机与GIS,量子计算机系列---开篇,原理
- RabbitMQ五种工作模式学习总结
- dedecms采集织梦免写规则登陆模块软件
- AI产品经理的技术了解层级
- TCPClient代码
- c语言回调函数的使用及实际作用详解
- Python监控服务器显卡使用情况程序
- 计算机毕业设计 SSM同学录管理系统 同学聚会报名系统 在线聚会报名系统Java Vue MySQL数据库 远程调试 代码讲解
- 技术人的修炼之道:从业余到专业
- JavaScript中原生Array数组方法详解
- modelsim is exiting with code:211 10秒后自动关闭退出
- 二次根式在线计算机,二次根式的知识点归纳.doc
- OAuth2之授权服务
- 如何加密html文件怎么打开,文件加密巧用IE浏览器