优秀的程序员真的不写注释吗? | 原力计划

news2024/2/27 15:08:05


作者 | 沉默王二
责编 | 王晓曼
出品 | CSDN博客

前言


我在很多地方看到这样一个观点,“请停止写注释,因为只有烂的代码才需要注释。”这个观点非常巧妙,它让我想起了孟子的一句话,“杨氏为我,是无君也;墨氏兼爱,是无父也。无父无君,是禽兽也。”

动不动就骂别人是“禽兽”,我总觉得有点不妥,这很不符合孟子的浩然之气啊。有些大牛也有孟子这样的觉悟,如果有人要他给自己的代码加上注释,就好像是对他的一种侮辱:“我的代码写得这么优雅,你难道看不懂吗?注释是多余的!”

我必须得承认,每个程序员都应该有一颗追求“优雅”的心,力争自己的代码更易阅读和理解——不只是针对机器,还有我们程序员同行。但不是每个程序员在一开始都能写出“高标准”的代码的,就好像不是所有君王和百姓都能搞清楚孟子的治国齐家理念的。

在我刚回洛阳的那段时间,过得非常痛苦。因为我刚接手了别人留下的一个项目,关于大宗期货交易的。后端代码是用 Java 写的,但有很多 bug 在里面,动不动就资金结算失败,甚至内存溢出,要解决这些问题,只有一个办法,就是彻底搞懂这些代码。

否则,根本无从下手。这就好像,你和朋友开车出去自驾游,去很远很远的地方,朋友开累了,需要休息,这时候,如果你没考过驾照,那就抓瞎了,只能把车停路边,等朋友的疲劳消退了,才能继续上路。

我就抓瞎了。凭良心说,前同事留下的代码是精彩绝伦的,如果换做是我来写,真不一定能写得出来。毕竟大宗期货交易本身还是有点难度的,需要竞价撮合,这个业务理解起来比股票还要复杂些。

股票涨了就赚,跌了就亏。期货不同的,买涨能赚,买跌也能赚。不过业务上的复杂还是次要的,重要的是代码里的注释非常稀有,就好像詹姆斯·高斯林头上的发丝一样稀有。

况且,国内程序员的英语功底你懂的,变量、方法、类、接口、枚举的命名无法做到真正意义上的名如其意。再加上,有些方法的行数多达三四百行,从头看到尾,看得只想捶自己。

没办法,我的解决办法就是,看懂一行就加一行注释,毕竟注释总比代码要容易理解啊。就好像,我们在调用一个不熟悉的 API 时,只要代码的文档说清楚它是干嘛的,我们就可以用,就敢用,至于实现的细节,暂时没有理解也没关系。

差不多花了两个月的时间(非常漫长、非常煎熬)吧,我总算是把项目中核心的代码给研究清楚了。搞清楚之后,那些之前怎么改都改不掉的 bug 也就迎刃而解了。

这也就是为什么,我倡导大家去读源码的一部分原因了,除了学习,读源码是解决 bug 的杀手锏。要读懂源码,注释是必不可少的。不信,你看看 Java 的源码,每个变量、每个方法、每个类,注释都非常详细,详细到你替源码的作者感到心累。


优秀的程序员到底写注释吗?


在我看来,Java 源码的作者绝对是这个世界上最优秀的程序员,连他们都写注释,那些声称“请停止写注释”的号召者是不是要啪啪啪地打脸,直到打肿为止。

不要怀疑自己,写注释并不会证明你的代码就是烂代码。我相信,你应该买过电子产品,比如说鼠标、键盘、耳机、手机等等,所有的产品包装里除了产品本身,使用说明书是必不可少的。我就问一句,“手机没有使用说明书,咱这些后浪还能不会用?”

写注释不是我们的错,软件本来就是复杂的。尤其是我们这些英语不是主力语言的人来说,注释显得尤为重要。我可能属于记忆力不好的那一种,隔个十天半个月,再去回头看那些我自己敲的代码,有时候真有点见着陌生人的感觉:“这代码是我写的吗?怎么有点面生啊?”

大部分人写的代码都要升级重构,对吧?不论是语言本身版本的升级,还是我们自身能力的成长。假如在升级重构的时候,没有这些注释的帮助,真有点爬泰山的感觉,累啊,亲。

再者说,大牛也不敢保证自己的代码是没有问题的,对吧?但注释是不会骗人的,它的意义是明确的。你可能会忘记代码是干嘛的,但我敢保证,注释能够唤醒你的记忆。


注释的意义到底是什么?

 

写出好的、有意义的注释其实是有难度的,就像写代码一样。在追求卓越的路上,代码和注释其实是相辅相成的。注释会让你的代码更易阅读,代码会让你的注释更富有逻辑。

即便是你的代码已经优雅到不需要注释,那只是在你的层面上。对于你的同事,你代码后来的负责者,就不一定了。所见略同的英雄并不会很多,你以为很优雅的代码没准在别人眼里就是一坨垃圾,而你的注释很可能会帮助别人“恍然大悟”,明白代码的意义。乖乖地写注释吧,对你对别人都有好处。 

另外,我想说一句,注释就好像是代码的一个蓝图,也或者是对代码的一个总结。在你写代码之前,脑子里肯定要想清楚你要实现什么,怎么实现,把这些作为注释写下来绝对可以帮助你写出更优雅的代码。在代码写完之后,通过注释进行总结,还能对代码进行一些升华,没准还能在总结的过程中想到更好的代码方案。

我还见到有大牛信誓旦旦地说,写注释就好像是给不会游泳的人扔一个救生圈,他永远也学不会游泳。乍眼一看,这句话说得很有道理,对吧?在大牛们看来,要让一个新人快速成长,最好的办法就是把没有注释的代码扔给他看。

纯属扯淡,恐怕这个新人没入门就放弃了吧?我已经三十一岁了,不,我已经十八岁了,还不会游泳呢?别听那些大牛们的鬼话,我就不信,他自己没写过注释。

总之一点,注释并不会妨碍你写出优雅简洁的代码,它只是程序固有的一部分而已。

版权声明:本文为CSDN博主「沉默王二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qing_gee/article/details/106046200

更多精彩推荐
☞天下苦苹果久矣:面对苹果税,开发者揭竿而起!
☞零基础编程小白如何拿 Offer?八年经验面试官万字肺腑之言
☞滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条
☞138 张图带你 MySQL 入门!
☞独家揭秘!抖音爆款漫画变身特效的背后技术
☞2013年买了100万美元比特币却希望“比特币归零”,这位亿万富翁公开“比特币鲸鱼”身份
你点的每个“在看”,我都认真当成了喜欢

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

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

相关文章

《2020城市大脑全球标准研究报告》全文正式开放申领

2020年12月23日,《2020城市大脑全球标准研究报告》在北京正式发布,提出了城市大脑建设标准的研究方向和初步成果,内容包括: 城市大脑的顶层建设规范、整体技术架构、云反射弧机制、运行安全、城市神经元的种类划分、识别编码、空…

ASA LAB-ASA NAT配置大全

ASA LAB-ASA NAT配置大全 两种NAT配置方式 : 1- Auto(object)NAT 2- Twice NAT NAT分类 : Static nat Dynamic nat Static PAT Dynamic PAT Nat exmption 今天抽空做了下八大类NAT的实验,这个文档比较常用,愿大家共同进步 实验: 先看下 ASA的…

程序员放大招教你网站怎么做短信验证码防刷验证码机制-速码云

文章来源:http://www.4006026717.com 在我们开始发送了 短信验证码 的时候在前台中会出现一分钟的倒计时,进行了这个操作了之后,在这段时间之内,如果用户多次提交的话是无法发送请求的。这种的方法是最为经常使用的一种&#xff0…

使用visual studio code调试php代码

这回使用visual studio code折腾php代码的调试,又是一顿折腾,无论如何都进不了断点。好在就要放弃使用visual studio code工具的时候,折腾好了,汗~ 这里把步骤记录下来: 1、安装一站式php工具wampserver 我安装的是最新…

linux fifo 视频,Linux FIFO学习

FIFO,又称作命名管道(named pipe),它是Linux系统中用于进程间通信的一种方法。FIFO和pipe的区别在于:FIFO在文件系统中有对应的inode,可以通过ls命令查看。sh-3.2# ls -lhF ./fifo_file100 prwxrwxrwx 1 root root 0 Jan 1 1970…

Dubbo入门Demo

2019独角兽企业重金招聘Python工程师标准>>> 1.Dubbo简单介绍 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求&…

通过HTML的canvas实现简单的画图功能

功能描述: 有红绿蓝三种颜色的画笔,可以选择画笔的粗细,画出的图可以保存到右边的六个画框中。当右边的六个画框都画满之后,便不能继续保存来了。可以清除画框,清除画布。保存的图片可以右击保存为png格式。 实现效果如…

geoserver 通过代码实现发布地图服务

转自原文 geoserver 通过代码实现发布地图服务 GeoServer:代码实现批量发布地图服务 利用GeoServer发布WCS服务,那么如果我有很多数据需要进行发布,这样利用GeoServer提供的UI界面进行操作显然很不显示。那能不能利用GeoServer提供的API进行操…

竞赛 | 上汽拿出了2000辆车的真实数据集,千万级投资+直接录用机会等你来战!...

大数据分析挖掘正成为汽车行业提升竞争力的全新支点。今年,在上海市科委和经信委指导下,上汽集团联手上海大数据联盟、上海市北高新管委会(上海大数据产业基地)共同打造了“2018 BOT智能汽车大赛”(第三届上海BOT智能汽车数据智能创新应用国际…

密码界“女杀手”,破译世上最安全密码系统,获 771 万奖金!

作者 | 年素清责编 | 伍杏玲出品 | 程序人生(ID:coder_life)不论是计算机网络、移动网络,还是物联网、卫星网络,或者是大数据和云计算,这些都离不开密码技术的支撑,没有密码,它们的安…

远观近看阿里云ET平台 如何开启AI落地新风潮

今年双十一阿里总销售额达到了破纪录的2135.5亿,但对阿里和整个行业来说,影响更为深远的是阿里集团层面的架构调整,在阿里巴巴集团首席执行官张勇(逍遥子)亲自签发的全员公开信中,着墨最多的两处&#xff0…

学科交叉是科学发展的必然趋势

来源:学习时报作者:李侠2020年10月30日,据国家自然科学基金委员会官网发布消息,基金委成立第九大学部——交叉科学部,这也是国家自然科学基金委时隔11年再次成立新的科学部。紧接着,2021年1月,国…

人工智能就业前景越来越严峻了,你还在坚持吗?

作者:wei chris 链接:https://www.zhihu.com/question/352212884/answer/955625463 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 坚持那是肯定的,不坚持连饭都吃不上。 2019年…

elasticsearch数据长期保存的方案

Elasticsearch的数据就存储在硬盘中。当我们的访问日志非常大时,kabana绘制图形的时候会非常缓慢。而且硬盘空间有限,不可能保存所有的日志文件。如果我们想获取站点每天的重要数据信息,比如每天的访问量并希望能图像化的形式显示该如何做呢&…

WPF绘制自定义窗口

原文:WPF绘制自定义窗口WPF是制作界面的一大利器,下面就用WPF模拟一下360的软件管理界面,360软件管理界面如下: 界面不难,主要有如下几个要素: 窗体的圆角自定义标题栏及按钮自定义状态栏窗体的半透明效果窗体4周有一圈…

pytorch读取文本训练

2019独角兽企业重金招聘Python工程师标准>>> # References # https://github.com/yunjey/pytorch-tutorial/blob/master/tutorials/01-basics/pytorch_basics/main.py # http://pytorch.org/tutorials/beginner/data_loading_tutorial.html#dataset-class import to…

Golang + vscode 开发环境配置

2019独角兽企业重金招聘Python工程师标准>>> GOPATH 环境变量的配置 https://my.oschina.net/xinxingegeya/blog/718305 安装vscode go 扩展 下载vscode ,安装go的扩展https://github.com/Microsoft/vscode-go 该扩展对 Golang 支持非常丰富的功能&#…

竞赛 | 我们标注了34G真实线下门店数据,等你pick!

零售行业正成为AI落地的新风口。AI对零售业提高运营效率、降低成本、提高消费体验等方面发挥了重要作用,也为新零售打开了更大的想象空间。从Amazon、BAT这样的互联网企业,再到Walmart这样的传统线下零售巨头,纷纷布局。但是,目前…

Spring Boot 搭载属于你的网站框架(一)

Spring Boot 搭载你的网站框架(本次demo演示 使用工具 idea) 使用springboot优点,简单快速便捷,只需要管理好pom文件,构建一个新项目是非常快的。 而且内置tomcat,用命令 java -jar jar包路径 的形式启动网…

vim介绍,vim颜色显示,vim一般模式下移动光标,vim一般模式下的复制、剪切和粘贴...

2019独角兽企业重金招聘Python工程师标准>>> vim介绍 vim是vi的升级版,相较于vi,会显示颜色。 如果系统没有vim工具,需要安装:# yum install -y vim-enhanced vim颜色显示和移动光标 输入# vim /etc/passwd 然后将/etc…