手把手教你写出令人窒息的烂代码

d600b5ac367c279b210eecdeebeb31b3.png

源 | 机器之心

在 GitHub 上有一个新项目,它描述了「最佳垃圾代码」的十九条关键准则。从变量命名到注释编写。这些准则将指导你写出最亮眼的烂代码。

为了保持与原 GitHub 项目一致的风格,下文没有进行转换。读者们可以以相反的角度来理解所有观点,这样就能完美避免写出垃圾代码。

项目地址:
https://github.com/trekhleb/state-of-the-art-shitcode

当然,以下十九条垃圾代码书写准则并没有面面俱到,如果读者们发现有一些难以忍受的烂代码习惯,也可以发表你的看法。

💩 第一条:打字越少越好

如果我们键入的东西越少,那么就有越多的时间去思考代码逻辑等问题。如下所示,「Good」表示遵循该规则的示例,Bad 表示没遵循该规则的示例。

8a4d48d543dd6ba8d65412ee490d8dff.png

💩 第二条:变量/函数混合命名风格

我们需要混合命名方法与变量,这样才能体现命名的多样性。

94e98daa1bd19741dc28df4912cc9556.png

💩第三条:不要写注释

反正代码都看得懂,为什么要写注释?或者说,反正没人看我的代码,为什么要写注释?

83dc22053ecec479f11b5d019f698891.png

💩第四条:使用母语写注释

如果你违反了第三条规则,那么至少写注释需要用你的母语或者其它语言。如果你的母语是英语,那么你也算违反了这条规则。既然编程语言绝大多数都是用英文,那么为什么不用其它语言注释一下?

4d7e222d462a861060186efc1d10a910.png

💩第五条:尽可能混合不同的格式

同样,为了代码的多样性,我们需要尽可能混合不同的格式,例如单引号或双引号。如果它们的语义相同,那就应该混用。

999b1247c322404badd14bb8ed40a93e.png

💩第六条:尽可能把代码写成一行

如果一系列参数与方法都是一起实现的,那么代码也要写在一起。

4d902eb5323f60f0e9cdc9b6cefed76b.png

💩第七条:发现错误要保持静默

当你发现某些错误时,其他人不需要了解它,因此不需要打印出日志或 Traceback。

3e545a09823cf5e1be2e32895a4a1782.png

💩第八条:广泛使用全局变量

使用全局变量,是面向「全球化」不可或缺的部分。

1d44bfe90ac59c902d43e46428324ed5.png

💩第九条:构建备用变量

以防万一,我们需要创建一些备用变量,在需要时随时调用它们。

449005954628894ca8544706c524025b.png

💩第十条:Type 使用需谨慎

一般不要指定变量类型或者经常做类型检查,无类型才是最好的类型。

08f72307ade04f69c8f2755694f5e9e0.png

💩第十一条:准备「Plan B」

你需要准备一些运行不到的代码(unreachable code),它们可以作为你的「Plan B」。

347299f274ef4772a0288a2885df9c0e.png

💩第十二条:嵌套的三角法则

如果代码有一些嵌套结构,或者说缩进空行的结构,三角法则是最漂亮的。

bd83b73e680f96f398774254e5caf3ef.png

💩第十三条:混合缩进

我们需要避免采用缩进,因为缩进会使复杂代码在编辑器中占用更多的空间。如果一定要采用缩进,那么就使用混合缩进策略。当然,这种策略在 Python 中是行不通的,因为它靠缩进来确定代码结构。

d707e460826be817a6c4aa771d47f0ea.png

💩第十四条:不要锁住依赖项

每一次要安装新库时,更新已有的依赖项。为什么要维持之前的版本呢,我们需要时刻保持最新的第三方代码库。

a0864e9f06261775c1016941915b7910.png

💩第十五条:长函数比短函数好

不要将程序整体逻辑分割为一些代码块,要是 IDE 突然不行了,它找不到必要的文件或函数怎么办。因此把代码写在一个主体函数中,并且不再维护额外的函数导入或代码文件,那么这样的方法是最稳定的。

单个文件一万行代码是没问题的,单个函数一千行代码也是没问题的。

💩第十六条:代码不需要做特定测试

这些测试通常是重复且无意义的工作。

💩第十七条:尽量避免重复代码

按你的想法写代码,尤其是在小团队中,毕竟这是「自由」准则。

💩第十八条:构建新项目不需要 README 文档

在项目前期,我们可以暂时保持这种状态。

💩第十九条:保存不必要的代码

在写代码的过程中,经常会产生很多测试代码。这些代码也是非常重要的资料,因此不能删除掉,最多只能注释掉。

357920b0502110df009d02ad65099b04.png后台回复关键词【入群

加入卖萌屋NLP、CV与搜推广与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

5ac83019d1d0f5519a46303f5988b9f3.gif

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

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

相关文章

LeetCode 85. 最大矩形(DP/单调递增栈,难)

文章目录1. 题目2. 解题2.1 DP2.2 单调递增栈1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例: 输入: [["1","0","1","0","0"],["1",&quo…

图谱实战 | 故障知识图谱技术落地探索:装备制造故障知识图谱构建及其应用案例剖析总结...

故障知识图谱是当前面向装备制造领域的落地重要探索领域,如何通过对设备的运行状态、运行日志进行信息抽取、关系建模,建成可供分析应用的知识库,并支撑故障诊断、维修辅助等应用场景,具有重要意义。鉴于当前还未有系统性的开源相…

聊聊Spring Cloud版本的那些事儿

继续昨天说的计划,解惑一下收到比较多的问题。 有朋友问“为什么在很多文章中,大家引用的Spring版本名字都不一样呢?比如:Angel.SR6,Brixton.SR5等等,它们都有什么区别呢?”,今天我…

小样本学习只是一场学术界自嗨吗

文 | ALme知乎这两年看见很多人,包括我实习的mentor在内,都在批评few-shot learning,觉得是学术界在自high,思考良久,感觉有必要给这个领域正个名~(注意,此答案仅关注few-shot image classifica…

Spring Cloud构建微服务架构(六)高可用服务注册中心

近期因工作原因减缓了更新频率,同时为了把Spring Cloud中文社区搭建起来也费了不少时间,几乎每天都在挤牙膏般的凑时间出来做一些有意义的事。未能按原计划更新博文,在此对持续关注我博客的朋友们深表歉意。 之前在写Spring Cloud系列文章的…

技术动态 | 「可解释知识图谱推理」最新方法综述

转载公众号 | 专知近年来,以深度学习模型为基础的人工智能研究不断取得突破性进展,但其大多具有黑盒性,不 利于人类认知推理过程,导致高性能的复杂算法、模型及系统普遍缺乏决策的透明度和可解释性。在国 防、医疗、网络与信息安全…

ACL'22 | 陈丹琦提出CoFi模型剪枝,加速10倍,精度几乎无损

文 | jxyxiangyu我们都知道,为了让以深度神经网络为基础的模型更快地训练,人们提出了单机多卡、多机多卡等分布式训练的方式,那么,在模型预测推理阶段,有什么方法可以加速推理呢?遗憾的是,并行/…

LeetCode 第 19 场双周赛(231 / 1120,前20.6%)

文章目录1. 比赛结果2. 题目LeetCode 5311. 将数字变成 0 的操作次数 easyLeetCode 5312. 大小为 K 且平均值大于等于阈值的子数组数目 mediumLeetCode 5313. 时钟指针的夹角 mediumLeetCode 5314. 跳跃游戏 IV hard1. 比赛结果 做出来了1, 3, 4题,第2题结束后12分…

【Spring Cloud中文社区】正式启动

前段时间,开了个关于Spring Cloud的交流群,短短两周时间就聚集了一批爱好者与实践者,每天在交流群中大家都进行着各种不同深度的探讨,但是这些高质量的聊天记录无法被搜索引擎收纳,导致很多不错的研究内容无法分享给网…

图谱实战 | 无本体约束的开放知识图谱构建:以OpenIE为代表的开放信息抽取项目技术方案解读...

目前,本体一直是知识图谱落地过程中的容易受到抨击的点,很多非专业用户对图谱的需求,其实并不想花费大量的时间去做本体约束,而是想直接拿来就用,开箱即用,以达到搜索与分析等目的。对本体的强专业性门槛&a…

计算机视觉,凉了?

计算机视觉是人工智能的关键领域之一,是一门研究如何使机器“看”的科学。近年来,尽管计算机视觉技术在学术上取得了长足的进步,但由于缺少“现金牛”应用,经常在网络上出现“计算机视觉凉凉了”的言论。其实这种观点是非常片面的…

LeetCode 1346. 检查整数及其两倍数是否存在(哈希)

1. 题目 给你一个整数数组 arr&#xff0c;请你检查是否存在两个整数 N 和 M&#xff0c;满足 N 是 M 的两倍&#xff08;即&#xff0c;N 2 * M&#xff09;。 更正式地&#xff0c;检查是否存在两个下标 i 和 j 满足&#xff1a; i ! j0 < i, j < arr.lengtharr[i]…

微服务架构的基础框架选择:Spring Cloud还是Dubbo?

最近一段时间不论互联网还是传统行业&#xff0c;凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构。近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验&#xff0c;这对于最近正在整理Spring Cloud相关套件内容与实例应用的我而言&#xff0c;…

自监督学习效果差?Meta AI 提出 Q-score 快速过滤错误样本!

文 | jxyxiangyu自监督学习指的是不依靠人工标注数据&#xff0c;直接从数据中学习到有用的特征表示。自监督学习中所采用的监督信息可以是“是否属于同一实例样本”的二分类标签&#xff08;对比学习&#xff09;&#xff0c;也可以是一段连续的自然语言文本的下一个词&#x…

LeetCode 1347. 制造字母异位词的最小步骤数

1. 题目 给你两个长度相等的字符串 s 和 t。每一个步骤中&#xff0c;你可以选择将 t 中的 任一字符 替换为 另一个字符。 返回使 t 成为 s 的字母异位词的最小步骤数。 字母异位词 指字母相同&#xff0c;但排列不同的字符串。 示例 1&#xff1a; 输出&#xff1a;s &qu…

图谱实战 | 为什么我们需要医学知识图谱?

转载公众号 | OMAHA联盟 人工智能正在变得司空见惯。在医疗领域&#xff0c;医生也越来越重视人工智能所带来的疾病诊断效率和治疗价值的提升。要实现医疗人工智能&#xff0c;需要构建医学知识图谱以满足医疗领域对知识的应用需求。◆ ◆ ◆知识图谱是什么&#xff1f;知识图…

Spring Cloud构建微服务架构(三)断路器

在微服务架构中&#xff0c;我们将系统拆分成了一个个的服务单元&#xff0c;各单元间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行&#xff0c;依赖通过远程调用的方式执行&#xff0c;这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延…

测试集涨点猛如虎,推上线无收益?算法新手翻车原因盘点!

文 | 杨旭东知乎在推荐算法领域&#xff0c;时常会出现模型离线评测效果好&#xff0c;比如AUC、准召等指标大涨&#xff0c;但上线后业务指标效果不佳&#xff0c;甚至下降的情况&#xff0c;比如线上CTR或CVR下跌。本文尝试列举一些常见的原因&#xff0c;为大家排查问题提供…

LeetCode 1348. 推文计数(哈希map+set)

1. 题目 请你实现一个能够支持以下两种方法的推文计数类 TweetCounts&#xff1a; recordTweet(string tweetName, int time) 记录推文发布情况&#xff1a;用户 tweetName 在 time&#xff08;以 秒 为单位&#xff09;时刻发布了一条推文。 getTweetCountsPerFrequency(s…

Spring Cloud构建微服务架构(二)服务消费者

在上一篇《Spring Cloud构建微服务架构&#xff08;一&#xff09;服务注册与发现》中&#xff0c;我们已经成功创建了“服务注册中心”&#xff0c;实现并注册了一个“服务提供者&#xff1a;COMPUTE-SERVICE”。那么我们要如何去消费服务提供者的接口内容呢&#xff1f; Rib…