不被“开猿节流”的12个防御性编码技巧

告别环境报错:Qt Creator里配置Android SDK/NDK/JDK路径的完整避坑指南 本文详细解析了在Qt Creator中配置Android SDK/NDK/JDK路径的完整避坑指南,深入探讨了路径检测的内部机制、构建套件配置的隐藏逻辑以及项目级与全局配置的优先级。通过实际案例和高级排查技巧,帮助发者解决常见的环境报错问题,提升Qt安卓发效率。 阅读详情

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

创作不易,希望大家给一点鼓励,把公众号设置为“星标”,给文章点个“赞”“在看”,谢谢大家啦~

本文分享自掘金社区,原文:juejin.cn/post/7286155742850449471

工作六七年以来,接手过无数个烂摊子,屎山雕花、开关编程已经成为常态。最近各种“开猿节流”的新闻频发,下面细数一下降低代码可读性,增加维护难度的 12 个防御性编码“技巧”。

假设一个叫”二狗“ 的程序员,喜欢做以下事情。

1. 二狗积极拆分微服务,一个表对应一个微服务

二狗十分认可微服务的设计思想。认为微服务可以独立开发和发布,每次改动不会影响其他系统。大大提高了开发人员的效率和线上稳定性。还可以在新服务里使用新的技术,例如JDK 21

于是狗哥把微服务的思想发挥到极致,每一张表都是一个服务。系统的应用架构图十分壮观。狗哥自豪的跟新同学讲解自己设计的系统。新同学看着十几个服务陷入了思考,不停地问着每个服务的作用,干了什么。狗哥很满足。

新同学第一次开发需求,表现很差。虽然他要改10个服务,但是每个服务只改动了一点点。并且由于服务之间都是Rpc调用,需要定义大量的接口,他需要发布好多的 jar,定义版本号,解决测试环境版本冲突,测试和上线阶段可把他忙坏了。

光是梳理上线顺序,新同学就请教了狗哥 三次。最后还是狗哥帮他上线了3 个服务,新同学才赶在 凌晨 3 点前把所有的服务发完。看着新同学买了奶茶的份上,狗哥这次才没有和领导吐槽,“这个同学不行啊,上个线都这么费劲”

微服务过多,也困扰着狗哥。虽然线上流量不高,但是由于 “微服务太多,系统架构复杂",接口性能不行。

于是狗哥开始进行重构,他重新加了一个开关,新逻辑可以减少Rpc,调用提高性能。狗哥在代码中加了注释 "新逻辑"。

狗哥把代码上线了,但是在线上环境不敢放开,只在测试环境打开了开关。

2. 二狗积极重构代码,但是线上不放量

狗哥喜欢对代码进行重构,狗哥和领导吹牛,说“ 重构后的代码性能更强,更稳定”。狗哥还添加了注释 ”这是新逻辑“。

但是狗哥在线上比较谨慎,并没有进行放量。只是在测试环境,放开了全量。

新接手的同学不知道线上还没放量,看到“这是新逻辑” ,他就在狗哥的“新逻辑”上改代码。测试环境验证一切正常,到了线上阶段却怎么也跑不通。

此时新同学才发现 ”新逻辑“ 的开关没有打开,你猜,他敢打开这个开关吗?于是他只能删代码,在旧逻辑上重新开发。等到改完代码,再上线时,已经天亮了。

由于这次上线问题,大家一起熬夜加班,需求上线被推迟。新同学被产品和测试一顿骑脸输出。新同学委屈的想要离职。

3. 二狗喜欢挑战自我,方法长度一定要超过1000行

二狗写代码天马行空。二狗认为提炼新方法会打断自己的编码思路,代码越长,逻辑越连贯,可读性越高。二狗还认为 优秀的程序员写的方法都是 非常长的。这能体现个人的能力。

二狗不光自己写超长的方法,在改别人的代码时,也从不提炼新的方法。二狗总是在原来的方法中添加更长的一段代码。

新同学接手代码时速度很慢,即使加班到凌晨,也不理解狗哥代码设计的艺术。狗哥还向领导抱怨,”你最近招的人不行啊,一个小需求开发这么久,上线还出了bug。“

4. 二狗喜欢挑战自我,一个方法 if/try/else 要嵌套10层以上

二狗写代码十分认真,想到哪里就写哪里。if/else/try catch 层层嵌套。狗哥的思路很快,并且思考全面, 嵌套十几层的代码一点bug都没有,测试同学都夸赞狗哥 ”代码质量真高啊“,一个bug都没有。

新同学接手新代码时,看到嵌套十几层的代码,大脑瞬间就要爆炸。想要骂人,但是看到代码作者是狗哥……

无奈之下,自己实在看不懂这段代码,于是点了一杯奶茶,走到了狗哥工位旁,”狗哥,多喝点水,给你点了一杯奶茶。…………这段代码能给我讲讲吗?“

狗哥过几天和领导闲聊天,“新来的同学人不错,还给我点奶茶喝”

5. 二狗认为变量命名是艺术,要随机命名,不要和业务逻辑有关系

二狗觉得写代码是艺术,就好像画画一样。”你见过几个人能看懂 梵高的画?” 狗哥曾经和旁边人吹牛。

二狗写代码思路十分奇特,有时候来不及想变量如何命名,有时候是懒得想变量命名。狗哥经常随便就命名了,例如 str1,str2,list1,list2等等。不得不说,狗哥的思维还是敏捷的,这么多变量命名都能记住,还不出bug。

但是狗哥记性不大行,过一两个月就不太记得这些变量的意义了。

6. 二狗积极写注释,但是写了错误的注释

一个成熟稳重的程序员改别人代码时会十分慎重,如果有代码注释,他们一定会十分认真阅读并尝试理解它。

二狗喜欢把注释引入错误的方向,例如 “是” 改成 “不是”,“更好”改成”更差“,把两处不相干的注释交换一下位置 等。

新接手的同学点了一杯奶茶,虚心求助二狗,“狗哥,你写的这段注释有什么深意啊,我看了三天,也不理解啊”。

到时候狗哥就可以给新同学一边装B,一边讲代码了。当然还要看心情,要是不口渴,可以讲讲。

7. 二狗改代码很认真,但是注释从来不改

二狗改代码真的非常认真,但是他不喜欢改注释。最终代码大改特改,注释纹丝不动。最终代码和注释不相干,部分正确,部分错误。

新接手的同学研究了两天也没搞明白。于是求助了狗哥

到时候狗哥就可以大展神威了 。”那段注释是错的,你别管,就当没有!“

狗哥顺便还说了一句,”优秀的代码不需要写注释,也不知道是哪个XX 写的注释“,成功收割新同学的"钦佩"之情。

8. 二狗喜欢复制代码

狗哥写代码十分着急,根本来不及重构。他总是想到一段代码,就复制过来。神奇的是,狗哥经常这么写,但是也没出什么问题。

但新同学就惨了,在改完狗哥的代码后,总被测试同学背地里吐槽,“一点小需求咋这么多bug,跟狗哥比差远了”。原来新同学改了一处,忘了改另外几处,代码被复制了好多遍,他实在无法全面梳理。

于是每次代码写完,新同学都要不停的研究代码,总是害怕自己少改了哪些地方,下班时间越来越晚。并且新同学也不敢把雷同的代码重构到一起。(“你们猜猜他为什么不敢?)

慢慢的,组里的人都被迫向狗哥学习,狗哥成功输出了自己的编码习惯。

9. 二狗积极写技术方案,但是最终代码实现不按照技术方案来

二狗非常喜欢写技术方案,大部分时间都花在技术方案上,总是把技术方案打磨的 滑不留手。但是在写代码时,狗哥总觉得按照方案设计写代码,时间上根本来不及啊,还是简单来吧,凑活实现吧。

例如狗哥曾经设计了一套复杂的Redis秒杀库存系统,但是实现时选择了最Low的 数据库同步扣减方案。

狗哥写的流程图和实际代码也没什么关系。但是流程图旁边加满了注释和说明,让人觉得 ”这个技术方案很权威“。

新同学熟悉项目时,从公司文档中搜到了很多技术方案,本以为可以很快熟悉系统,但是发现技术方案和代码不太一样。越看越迷惑。

于是点了奶茶再次走向了狗哥,狗哥告诉他,“那个技术方案太复杂,排期紧张,开发来不及。你就当没那个技术方案。”

10. 二狗十分自信,从不打日志。

二狗对自己的代码十分自信,认为不会出现任何问题,所以他从来不打日志。每次开发代码时,狗哥的思维天马行空,但是从来不想加个日志会有助于排查问题。

直到有一天,线上真的出问题了,除了异常堆栈,找不到其他有效的日志。大家面面相觑,不知道怎么办。狗哥挺身而出,重新加了日志,上线。故障持续了不知道有多久……,看着狗哥忙碌,领导不停地询问还需要多久才能上线。

复盘会上,有人对狗哥不写日志的行为进行批判,狗哥却在 狡辩 “加了日志,就能避免这次故障吗?出问题还不是因为你们系统出了bug,跟我不打日志有啥关系。” 双方陷入了无限的扯皮之中……

11. 二狗积极学习,引用一个高大上的框架 解决一个小问题

二狗非常喜欢学习,学习了很多高大上的框架。最近二狗学习了规则引擎,觉得这是个好东西,恰好最近在进行重构。于是二狗把 drools、avatior、SPEL等规则引擎、表达式求值 等框架引入系统。只是为了解决策略模式的问题。即何种条件下使用哪种策略。狗哥在系统架构图里,着重讲了规则引擎部分,十分自豪。

新同学熟悉系统后,光是规则引擎部分就看了足足一周。但是还是不知道怎么修改代码。于是向狗哥请教。狗哥告诉他说," 你在这个地方 加一行代码 rule.type == 12 ,走这个 CommonStrategy 策略类就可以了。“

新同学恍然大悟,原来这就是规则引擎啊。但是为什么不用策略模式呢?好像策略模式不费事啊!狗哥技术就是强啊,杀鸡用核弹。

12. 二狗积极造轮子,能造轮子的程序员才是牛掰的程序员

二狗非常喜欢造轮子,他对开源软件的大神们心向往之,觉得自己应该向他们学习。狗哥认为 造轮子才能更快地成长。

于是在狗哥的积极学习下,组里的 分布式锁 没有使用 redission,而是自己用setnx搞的。虽然后面出了问题,但是狗哥的技术得到了锻炼。

总结

降低代码可读性的方式方法 包括但不限于以上12种;

像二狗这样的程序员包括但不限于二狗。

大家不要向二狗学习,因为他是真的狗。

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、VS Code 变身小霸王游戏机!

2、认知升级:模型与范式转换

3、超赞的 Python 编译器,单核提速100倍

4、高效的终极秘诀

5、Python 3.12 版本有什么变化?

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

54014b0bb75f398d458bcd8b120c99ea.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

抖音用户评论和ID的采集方法 随着5G时代的普及,各大运营商的套餐纷纷推出,使得流量成本进一步降低。同时5G线路高宽带、低延迟的技术特性和手机普及,让视频用户访问量快速增加。 由于大量的视频工具和拍摄APP的提供,让短视频的拍摄、制作包括发行都变得更加简单便捷,越来越多的普通人可以投入视频创作,创造了更丰富的互联网内容,视频作者从视频推广中能获取粉丝和推广收益。 目前抖音就是目前最重要的短视频平台之一,要及时获取上面的用户评论和ID,需要结合爬虫代理实现采集方案,下面的代码就能快速采集相关信息: package htmlunit; i 阅读详情

相关推荐

代码防御性编程的十条技巧

1 什么是防御性编程? 顾名思义,防御性编程是一种细致、谨慎的编程方法。为了发可靠的软件,我们要设计系统中的每个组件,以使其尽可能的”保护”自己。我们通过明确地在代码中对设想进行检查,...

编程与实战的博客 1802

防御性编程

防御性编程及其技巧

Aquamarine__的博客 3008

基于文本挖掘词频反文档频率方法的疾病症状权重挖掘研究

基于文本挖掘词频反文档频率方法的疾病症状权重挖掘研究

防御性编程技巧

防御性编程的大框架之下,有许多常识性的规则。人们在想到防御性编程的时候,通常都会想到“断言”,这没有错。我们将在后面对此进行讨论。但是,还是有一些简单的编程习惯可以极大地提高代码的安全性。尽管看上去像是常识,但是这些规则却往往被人们忽视,这就是为什么世界上并缺少低质量软件的原因。只要程序员们警惕起来,受到足够的督促,更高的安全性和可靠的发很容易就能够实现。在下面的几页中,将列出防御性编程的一些规则。我们将先从粗略的概览始,整体地描述防御的技巧、过程和步骤。随着讨论的深入,我们会加入更多的细节,进一步

everpenny的专栏 8647

大厂程序员提倡“防御性编程”:故意把代码写得很烂,万一自己被裁,要确保留下的代码可维护!...

转自:51CTO技术栈 -如烟“码农们在工作中绝对能按以前书上说的写优美清晰代码,要防御性编程,确保自己被裁,剩下的代码也是可维护的”。近日一则关于用“防御性编码”应对大厂裁员潮的消息冲上职场社交平台热搜。这一策略背后的逻辑是,通过晦涩难懂、难以维护的代码,确保自己一旦离职,留下的代码难以替代,从而在某种程度上提高自己的“可替代”性。 但这种方式真的能成为程序员保住饭碗的“护城河”,还...

方志朋的博客 721

如何提升代码的安全性 —— 代码防御性编程的十条技巧

顾名思义,防御性编程是一种细致、谨慎的编程方法。为了发可靠的软件,我们要设计系统中的每个组件,以使其尽可能的”保护”自己。我们通过明确地在代码中对设想进行检查,这是一种努力,防止我们的代码以将会展现错误行为的方式被调用。防御性编程使我们可以尽早的发现较小的问题,而是等到它们发展成大的灾难的时候才发现。其发软件的过程是: 下面总结了一些防御性编程的反对和支持者的意见:采用良好的编码风格,来防范大多数编码错误。如:const关键字: 关键字const可以给读你代码的人传达非常有用的信息。例如,在函数的形参

ZP1015 3231

12防御性编程“技巧”,“节流”的克星

降低代码可读性的方式方法 包括但限于以上12种;像二狗这样的程序员包括但限于二狗。大家要向二狗学习,因为他是真的。

竹林幽深 666

大厂裁员逼出奇招,“防御性编程”能否自救?

根据《刑法》第二百八十六条,凡是违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统能正常运行,后果严重的,处五年以下有期徒刑或者拘役,后果特别严重的,处五年以上有期徒刑。“防御性编码”应对大厂裁员潮策略背后的逻辑是,通过晦涩难懂、难以维护的代码,确保自己一旦离职,留下的代码难以替代,从而在某种程度上提高自己的“可替代”性。就企业的角度而言,需要重视大厂程序员们面临的困境和压力,鼓励放、协作的编程文化,让每个程序员都能在团队中发挥自己的最大价值,从而提高团队的整体效率。

IT界那些事儿 6262

应对"节流",纷纷始 “防御性编程”?

之前看过一篇文章《如何编写无法维护的代码》,这篇文章的目的是反向告诉大家如何写出好代码,过,最近这篇文章好像突然火起来了,很多人要参考他进行防御性编程了。但是需要注意的是,这些代码,CodeReview是一定过了的!!!下面是从《如何编写无法维护的代码》摘抄的几个比较有意思的约定(希望大家一个都要遵守):命名编写无法维护代码的技巧的重中之重是变量和方法命名的艺术。如何命名是和编译器无关的。这...

码农code之路 122

大厂程序员提倡“防御性编程”:故意把代码写得很烂,万一自己被裁,要确保留下的代码可维护!

根据《刑法》第二百八十六条,凡是违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统能正常运行,后果严重的,处五年以下有期徒刑或者拘役,后果特别严重的,处五年以上有期徒刑。就企业的角度而言,需要重视大厂程序员们面临的困境和压力,鼓励放、协作的编程文化,让每个程序员都能在团队中发挥自己的最大价值,从而提高团队的整体效率。此外,在这个快速变化的行业中,程序员更应该注重提升自己的技能和知识,以适应新的技术和挑战,而是依赖于编写晦涩难懂的代码来保住自己的工作。

IT_1024的博客 1263

防御性编程?这就来了

2023 全年都在降本增效,节能的浪潮下度过。虽然本文是给大家讲防御性编程如何实践,但终究只是博君一笑,请勿当真。这里我还是希望每一个互联网打工人都能平稳度过这波寒冬。积蓄力量,多思考,多元发展。在来年,春暖花,金三银四之月,都能找到自己满意的工作,得到属于自己的果实。

夜栩的博客 626

总结了防御性编程的16个技巧

防御性编程的大框架之下,有许多常识性的规则。人们在想到防御性编程的时候,通常都会想到“断言”,这没有错。我们将在后面对此进行讨论。但是,还是有一些简单的编程习惯可以极大地提高代码的安全性...

1017

2种防御性编码技术

     实用程序设计建议,简单但功能强大的技术,用于安全,可维护的软件   我会简短而甜美的   我们将介绍两种非常简单实用的防御技术,您可以立即将其应用于您的项目。   作为专业的发人员,您很可能已经在应用这些技术,因此您可能想把这一技术排除在外。   但是,对于尚未达到专业水平的任何人,这些技术都会提高您的质量并使您的代码更安全。   如果您以前从未听说过防御性编码,那么该差多了。 这是要点。   防御性编码使我们的软件即使输入错误也能以正确的方式运行。   好的,让我们研..

iqifenxia的博客 355

程序员防御式编程思想原则&编码规范 (仅代表个人观点)

在分析若干线上问题之后,会发现很多问题并是非常罕见的难题,而是由一个个较为明显的小错误积累而来,为什么会犯小错误?或许是因为侥幸心理,或许是因为只看到了局部的利益。从某一个例子来看,确实会有“偶因一着错,便为人上人”的侥幸,但是统计大量案例可以发现,大部分情况并会有正面的结果。本文汇编我在需求评审、编码、项目上线几个阶段总结的原则,这些原则虽然能直接解决问题,但是可以尽可能地优化每一步行为,从防御式编程思维方式、行为习惯层面尽量避免错误的发生。

Fong灵 850

如何写出防御性代码(屎山代码)

各大公司纷纷实现广进计划,节流,吾辈程序员家人们深受其害。 为了咱们保住咱们的饭碗,形成护城河,行程核心竞争力,防止被裁,必须学会“防御性性编程”,写出“可维护的代码”

hi_bigguy的博客 1085

Java 防御性编程实战案例

这些防御手段就像给你的代码买了"职业保险",当你在深夜收到报警短信时,能淡定地回复:“是我的锅,防御层已经拦截了问题” 😎。:高并发下库存判断和扣减同步,卖出1000个商品库存只减了10个。:审批节点循环引用导致无限递归,半夜被运维夺命连环call。:一次性加载百万数据到内存导出Excel,服务器直接瘫痪。:分布式环境下多个节点同时执行定时任务,数据被重复处理。计算金额导致分润误差,年终奖打水漂。

m0_71266578的博客 655

预见崩溃,杀死Bug:嵌入式发必须掌握的16条防御性编程策略(建议收藏再看)

除非你的项目要求你(最好是有一个好的理由),否则要将命运交给编译器,或者对该语言的任何非标准的扩展。如果该语言的某个领域还没有定义,就要依赖你所使用的特定编译器的行为(例如,要依赖你的C编译器将char作为有符号的值对待,因为其他的编译器并是这样的)。防御性编程是一种编程习惯,是指预见在什么地方可能会出现问题,然后创建一个环境来测试错误,当预见的问题出现的时候通知你,并执行一个你指定的损害控制动作,如停止程序执行,将用户重指向到一个备份的服务器,或者启一个你可以用来诊断问题的调试信息。

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 402
上一篇: 30 门编程语言,他都能熟练运用!他的故事,让人惊叹!
下一篇: AI 开发必看的 6 款开源矢量数据库
codingpy
博客等级 码龄11年 1745粉丝 104原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值