心里骂骂咧咧,“谁他喵写的这玩意!”然后翻了一遍代码的 history。
大致情况是这样的:第一个程序员写下这段代码时,只有 2 个 if-else;后来需求逐渐增加,先是 1 个、2 个,然后量变引起质变,于是逻辑分支快速扩张。
到这时候已经没有人愿意去重构 switch 或者设计模式了,毕竟复杂度摆在那里,万一崩了还得背锅。
大概三四个程序员接手这段代码后,就编程我现在这种局面了。
第一个程序员绝对没有料到那么简单的逻辑在之后会变得这么复杂,甚至在增加第一个第二个 if-else 时,也只是很随意的加上。
所以我觉得,这锅绝对是甲方的,让他娘的随便改需求。这么一想心里就好受多了,编程嘛,最重要的是看得开!
于是我又追加了两条 if-else,然后测试、提交,下班。
插一句,如果真想重构代码,建议先看看小傅哥的《重学 Java 设计模式》,设计模式是软件设计中常见问题的典型解决方案,它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题,如果不懂设计模式的话,遇到这些问题就只能抓瞎了。
看完了作者的回答,二哥强忍着无名的悲伤来说两句。
十多年的编程生涯里,的确有过无数次的冲动,想要把原有的代码重构,想要调优,最后大多数都无疾而终,尤其是随着年龄的增长,反而越来越胆小怕事,有些真的是不敢乱动,只能忍痛让原有的代码更烂一些。
毕竟背锅是大事,嘿嘿。
有时候,不能把代码当做是艺术品,要能够适度忍受不完美,程序能跑起来,bug 数量可控,有啥问题可以解决也是很重要的。
如果重构了,出了问题,自己背锅是注定的,可能还会连累了测试小姐姐。
记得在外企的第二年,由于组里面有个新人的代码写得实在是太烂,我就忍不住前前后后优化了一遍,毕竟作为 Team Leader,要对新人负责,要为团队负责,结果大家猜怎么样?
我被领导臭骂了一顿!
原因很简单,我特么引入了一个 Bug,Code Review 的时候还没有检查出来,测试也没有测试到,结果到了正式环境,刚巧碰到领导在日方出差,领导要给领导的领导展示成果,结果程序出了 bug,然后领导被狠狠地臭骂了一顿。
领导被批了,那自然一通越洋电话打过来,把我直接骂哭!
当时还年轻,那叫一个委屈啊。但能怎么办,自己的锅不背让谁背?
后来回洛阳后,团队规模变小,自己重构的欲望又涌上心头,毕竟这次没人能管得了我,看到谁写的代码烂,就直接一顿操作猛如虎,重构到自己心满意足为止。
即便是引入了新的 Bug 也没关系,毕竟老板也不懂,好忽悠,嘿嘿。
老板虽然不懂代码,但懂得写代码哪能没有 Bug——经过我的不懈努力,成功给老板灌输了这个思想,要想不出 Bug,就增加测试团队的人手,领导可不愿意多发一份工资。
成功洗脑老板后,我真的有一段时间是飘到了极点,狠起来连自己的代码都重构,一遍又一遍,手头最经常看的两本书,一本《代码的整洁之道》,一本《重构·改善既有代码的设计》。
从简单的变量命名、方法命名,到缩减方法的行数,能拆分就拆分,尽量保证每个方法的行数不超过一个小拇指那么长。为了适配设计模式,我当时还买了一本《设计模式之禅》,真的是殚精竭虑。
现在想想那段日子真疯狂,有时候为了修自己重构后带来的新 Bug,真的是熬了不少夜。
但有一说一,那段日子的进步也是肉眼可见的。
不过,话又说回来,对稳定性要求比较高的项目,如果能力没到那份上,还是尽量少重构,搞不好版本更新的日志里就会写下一条:XXX 程序员被祭天了!
最好是等到领导忍不住下了死命令,限尔等多少天之内,务必把这座屎山给搬走!到了那时候,再大展拳脚也不迟。
如果真的是安耐不住,一肚子的重构、调优想法无法得到施展,我给大家推荐一个好办法,就是自己搞一个练手项目,可以是自己开发的,也可以是 GitHub 上成熟的项目,比如说我一直推荐的 vhr、mall、miaosha 等等,把源码 fork 下然后拉下来,在本地跑一跑,尝试去读一读源码,觉得哪里需要重构了,就动手实践一遍,即便是出错了,也谁都影响不到,对吧?
有些同学如果觉得自己比较厉害的话,可以去拿那些顶级的第三方类库做实验,重构完一定要记得测试,并且在提交 PR 的时候附带上自己的测试报告,如果项目的作者认为你重构的有水平,没准你一跃就成为了项目的维护者,简历上也是加分项。
但对于公司的那堆屎山,动刀子的时候尽量猥琐点,免得把自己埋了。
再说回 if-else 和 switch 这个题目。朋友 @yes 在回答里提到过 Dubbo 源码中的 ChannelEventRunnable 类的 run()
方法,我用 Sourcegraph 插件看了一下 GitHub 上 Dubbo 的源码,还真的是挺有学习价值的。
public void run() {
if (state == ChannelState.RECEIVED) {
try {
handler.received(channel, message);
} catch (Exception e) { }
} else {
switch (state) {
case CONNECTED:
try {
handler.connected(channel);
} catch (Exception e) {}
break;
case DISCONNECTED:
try {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。
架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。
如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
成长笔记**你需要阅读阅读,希望能够对你的职业发展有所帮助。
[外链图片转存中…(img-tNl9OTs8-1713709449495)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!