脏话越多,代码越好!

news2025/1/23 7:54:34

你在读开源代码的时候有没有遇到过这种注释?

What the fuck ?

Dude,WTF

Fuck this !

我遇到过,每次都忍不住笑,心想老外可真是性情中人,遇到不爽的地方就开骂,还直接写到注释中,甚至代码中。

b75001e1b7ef69c650a9d23865a7e5ed.png

Bob大叔在《Clean Code》一书中谆谆教导我们:要对变量、函数、类精心命名,避免耍小聪明,别使用双关语。

那么在注释甚至在代码中说脏话,会不会影响总体代码质量呢?

还真有人做了这个研究,Jan Strehmel,一个来自德国卡尔斯鲁厄理工学院的学生发表了一篇论文,名称就叫《在开源代码中脏话的使用和代码质量之间有相关性吗?》

为了研究这个问题,作者从GitHub中抓取了3800个含脏话的C代码库,7600个不含脏话的C代码库,用自家的软件SoftWipe分析它们对编码标准的遵守情况,逐个打分。

然后发挥他在统计学的技能,用了中心极限定理,Bootstrapping,Significance testing,Jarque-Bera test,Shapiro-Wilk test,Q-Q plot,Kolmogorov-Smirnov test ......,一顿操作猛如虎,最后他得到了一个惊人结论:

包含脏话的开源代码明显比不含脏话的质量更好!

39869db0a2ac7d56a4d2a7dc231cc9fe.png

(原论文有很多图,感兴趣的可以去看看)

面对这个结果,作者恐怕也没想到,他试图解释到:脏话代表了程序员对代码极其复杂性的情感!在写代码的时候,骂几句脏话,是缓解压力的一种方式,这反过来⼜可以提⾼注意⼒,从而提⾼代码质量。

当然,你可千万不要理解成只要在代码中用了脏话,代码质量就会有提高,那就大错特错了。

这个结果让我立刻想到了Linus Torvalds,他经常Fuck 这个,Fuck那个的,Linus在内核源码中对别人代码的评论就足以扭曲统计结果。

57860d1b82627032b1b41b8bff57f884.png

在Linux最早的几个版本中就出现fuck, shit ,damn这样脏话,这似乎成了一种Linux的文化,在后续Linux源码中各种脏词不断出现。

在2005年7月28号,fuck*达到了顶峰,足足出现了68次,随后逐渐下降。

而 idiot* 则一致是在缓慢上升,现在和damn* 并驾齐驱,不分上下。

2e0af62d130e8bf572f115e393e6ecc1.png

(脏话在每个版本中出现的次数,点击看大图)

但是,这些脏话并不影响Linux内核是优秀代码的典范(详情参见这一篇文章《漫画 | 因为用了C语言,Linux内核代码一团糟》),以Linus Torvalds为首的团队对代码结构和风格做了严格的定义,在Review中坚持执行。

在Java社区,开源代码中的脏话也不少。

2018年,IBM 软件工程师 Adam Farley 给 OpenJDK 提交了一个 Bug ,说 OpenJDK 源码中脏话太多了,到处都是,OpenJDK是在专业领域使用的,这太不合适了吧?这不我特意提交了一个Changset把它们都删了。

5bdb9bef759ee878fc78c72ec041c13c.png

544815eabccb096a6aee9530cb521b3b.png

c00489225d4d12c6c093b1b197810291.png

3天后,经过 OpenJDK 社区讨论,大家认为:

Damn 和 Crap 不算脏话!还有3 个 f**k,是上游的锅(回头会跟进处理),只有一个文件中的f**k,都是脏话,应该删掉。

为什么程序员喜欢在源码中用脏话表示自己的想法呢? 

代码是程序员每天都要面对的工作对象,对代码确实会出现复杂的情感,有时候需要一种情绪的宣泄。

看到一段高深的,自己无法理解的代码,what the fuck?

好不容易把一段复杂逻辑的各种分支,边界条件都搞定了,代码实在是乱,don't fuck with it !

花了很大的精力写完了逻辑,却发现有个异常无法处理,damn,damn,damn

......

咱们国内程序员似乎比较含蓄,很少在代码中写脏话,更喜欢吐槽公司,吐槽系统,是不是这样?

不过,一定要记住一点:当在代码评论中出现脏话时,你就要小心了,不要轻易动下面的代码,弄不好就是个大坑!

参考资料:

https://cme.h-its.org/exelixis/pubs/JanThesis.pdf  

https://www.vidarholen.net/contents/wordcount

(完)

点击下方图片,查看更多精彩

62dfa2268adfc6ab07a882a5c7938138.png

9e0144bfe71bd3da98022dd380009673.png

688d1fd312a95aa3d6cc2192a7c2dc55.png

be5f3bfa1382db2da4384677da0d8c19.png

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

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

相关文章

机械狗控制算法

一. MIT Cheetah特点 1.驱动器 Cheetah 2采用了定制的本体感受驱动器设计,具有高冲击缓解、力控制和位置控制能力。这种设计使其能够自主跳过障碍物,并以6m/s的高速跳跃,但其运动范围有限,只能进行矢状面运动。 Cheetah 3采用高扭…

C++11 lambda

Lambda 介绍 Lambda 函数也叫匿名函数, 是C 11中新增的特性; 1. Lambda函数的好处 如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么将他们重构成 lambda 表达式。 Lambda函数使代码变得更加紧凑、更加结构化和更富有表现…

解决gocui库的中文显示缺少的bug

gocui库地址 https://github.com/jroimartin/gocui 使用原由 最近写文档都用emacs,git客户端用的是magit。 但是写代码现在都用lvim,在lvim和终端下喜欢上了使用lazygit做git客户端。 非常喜欢lazygit在终端上的界面,扒拉了下github上代码…

【最优化理论】线性规划

文章目录什么是线性规划(Linear Programming,LP)?线性规划的标准形式非标准形LP模型转化为标准形LP模型基本概念基本解&基矩阵&基变量&非基变量基本可行解&可行基矩阵&非退化的基本可行解&退化的基本可行…

「JVM 执行引擎」栈架构的字节码的解释执行引擎

JVM 执行引擎在执行 Java 代码时有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择; HotSpot 实际的实现中,模版解释器工作时,并不是按照概念模型中进行机械式计…

虹科分享 | CANopen协议基础知识——LSS服务

CANopen是一种架构在CAN串行总线系统上的高层通讯协议,常被用于嵌入式系统与工业控制领域,包括电机控制、机器人制造、医疗、汽车等多个行业领域。本篇文章将主要介绍CANopen的LSS服务。 一. LSS概述 Layer setting service (LSS)是CANopen的设置服务与…

Self-Supervised Log Parsing 自监督日志解析

摘要 日志在软件系统的开发和维护过程中被广泛使用,收集运行时事件并允许跟踪代码执行,从而支持各种关键任务,如故障排除和故障检测。大型软件系统会生成大量的半结构化日志记录,这对自动化分析提出了重大挑战。将带有自由形式文…

网站代理是什么?有什么需要注意的?

如今,网站代理已经成为一种不可或缺的经营方式。无论是企业还是个人,都需要通过代理来获得更多的流量和市场份额。 一、网站代理的优势 网站代理的优势在于能够为您提供更加专业、周到的服务。这些优势包括:1.丰富的内容资源,能…

2022年FIT2CLOUD飞致云开源成绩单

2023年2月15日,中国领先的开源软件公司FIT2CLOUD飞致云发布《2022年开源成绩单》,盘点公司2022年全年在开源软件产品与社区运营方面的表现。目前,飞致云旗下的核心开源软件组合包括JumpServer开源堡垒机、DataEase开源数据可视化分析平台、Me…

高压放大器在骨的逆力电研究中的应用

实验名称:高压放大器在骨的逆力电研究中的应用研究方向:生物医学测试目的:骨中的胶原和羟基磷灰石沿厚度分布不均匀,骨试样在直流电压作用下,内部出现传导电流引起试样内部温度升高,不同组分热变形不一致&a…

python3.7

一、下载安装ancconda(python3.7) ​​​​​​https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.07-Windows-x86.exehttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.07-Windows-x86.exe 二、配制Anaconda环境变量 此电脑——…

国外ChatGPT横空出世,国内无代码开发一样惊人,旗鼓相当

ChatGPT火爆了,究竟是什么? 有些人以为ChatGPT,只是更先进的人工智能聊天工具罢了。它除了能学习与理解人类对话语言,还能结合下文“思考”,实现与人类正常交流。这款由美国OpenAI研发的人工智能技术,2022年…

珠宝企业如何利用私域实现业绩增长?

近年来私域的流量不断兴起,各行业都在做私域,所处行业不同,企业所采取的私域打法也会针对性地改变。而在珠宝行业,针对珠宝产品高价、低频的消费特点,企业又该如何搭建私域应对策略? 快鲸scrm系统整理了几…

仓库管理软件(WMS)免费版哪个好用?

现在很少有软件会支持白嫖了,尤其是仓库管理这么重要单元。 但是对于刚刚起步的公司,企业面临着资金紧缺、人力资源不足等诸多管理问题。这时候大部分中小企业都会选择仓库管理软件系统来满足仓库管理的需求。 那么免费仓库管理软件有哪些?…

MySQL B+树以及深度计算

文章目录一、MySQL的索引结构1.1 MySQL索引结构与B树1.2 B树增删数据图解二、MySQL数据页2.1 索引高度h与页面I/O数的关系2.2 索引高度理论计算三、查看MySQL树高一、MySQL的索引结构 1.1 MySQL索引结构与B树 MySQL使用B树存储索引数据,B树的非叶节点不保存数据相关…

卫星、无人机平台的多光谱数据在地质、土壤调查和农业等需要用什么?

近年来,Python编程语言受到越来越多科研人员的喜爱,在多个编程语言排行榜中持续夺冠。同时,伴随着深度学习的快速发展,人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础,因此,掌握常用…

造血干细胞移植中心的设计SICOLAB

造血干细胞移植中心的设计通常需要考虑以下方面:一、设备和设施包括具备灭菌条件的手术室、空气净化设备、输液泵、监测仪器等。二、空间规划需要根据手术流程和治疗流程合理划分空间,确保空间充足且方便患者活动。1、患者治疗区:包括隔离病房…

【C++】二叉树的非递归遍历

非递归遍历二叉树一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历3.1 方法一3.2 方法二一、二叉树的前序遍历 题目链接 我们可以把任何一棵树看成左路节点,左路节点和右子树。先访问左路节点,再访问左路节点的右子树。在右子树中也重复这…

3. 编码风格

学习的动力不止于此: 谷歌c编码风格指南 学习它就是强,没别的。方便查bug! 1.注释说明 //copyright 2023 songshuaibiancheng Inc //License(BSD/GPL/...) //Author: songshu //This is a c style guide/* 版权 许可证 作者 文件内容简短…

字节5年老测试,2月无情被辞。业务与技术你要理解的概念!

前言近年来企业对于员工的要求不再满足于简单的处理工作,除了KPI考核,越来越多的公司会对思考力、理解力进行更深层次的综合评估,对于精准人才的筛选大搞特搞“末位淘汰制”。一个在大厂工作认识几年的朋友跟我说,单一的能力很难受…