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

前言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 注释的意义到底是什么?

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

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

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

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

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

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

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

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

更多精彩推荐
☞从微信「拍一拍」,我想到了那些神奇的一行代码功能
☞腾讯总市值超阿里巴巴;英特尔回应苹果换芯;Perl 5.32 发布 | 极客头条
☞无代码开发到底是不是伪需求?
☞程序员端午炫富指南~
☞Spring 从入门到入土——AOP 就这么简单!| 原力计划
☞硬核!国外开发者用 25 美元做了个区块链警佩相机!
☞Python 玩出花儿了!一文教你用 Python 制作吃豆人游戏! | 附代码
你点的每个“在看”,我都认真当成了喜欢

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

  1. 优秀的程序员都不写博客?这就推荐6个优秀博客给你看

    李开复是个很内向的人.还有甘地.乔布斯.但丁......这个名单可以列很长.在读博的时候,李开复要教一群高中生学编程.这件事他想的很简单,就教一些基础知识嘛:真到了给学生们上课,才发现,学生们根本都不 ...

  2. 优秀的程序员是不写高级语言的

    前几天我面试一个程序员,连续几个专业问题他都没答上来. 尴尬之余,我问他:「你没有什么理想吗?你现在最渴望的事情是什么?」 他转悠着大眼睛,不假思索道:「用Python写个牛逼的工具!」 真没想到在面 ...

  3. 2020 年 GitHub 上那些优秀 Android 开源库,这里是 Top10! | 原力计划

    作者 | 依然饭特稀西 责编 | 郭芮 出品 | CSDN博客 每过一段时间呀,我都会给大家带来一些从Github上收集的一些开源库,有的是炫酷动效,有的则是实用的工具和类库.2020年有哪些优秀的开 ...

  4. 低级程序员才喜欢写注释!

    作者 | Tameem Iftikhar 译者 | 平川 策划 | Tina 我并不是提倡不写代码注释,只是建议不要过于依赖注释,这样可以使代码更干净.更有表现力,这也能提高开发人员的水平.我自己也在 ...

  5. 经典实战案例:用机器学习 KNN 算法实现手写数字识别 | 原力计划

    作者 | 奶糖猫 来源 | CSDN 博客,责编 | 夕颜 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 算法简介 手写数字识别是KNN算法一个特别经典的实例,其数 ...

  6. 谁说程序员干不过写ppt的,码农就该这样雄起

    程序员干脏活累活儿 有成果那又如何 到头来干不过写PPT的 什么技术大牛 什么框架并发 只会为老板的朋友圈高歌 作为工作超10年的码农,我苦笑不已.因为似乎真的只有我们这群"技术天才&quo ...

  7. 如何成为一名优秀的程序员(五)

    ....关于VC,MSDN是必备的,D版MSDN也到处有卖的,英文水平也不见得要多高,看的多了就好办了,另外,没有VC的MSDN中文版,要养成看英文的习惯.基础方面,要了解C++的特性,继承.重载什么 ...

  8. 优秀 Java 程序员写代码的风格

    转载自 涨姿势 | 优秀 Java 程序员写代码的风格 今天突发奇想,对编码习惯和 编程风格 很感兴趣,于是乎,找了一下关于编程风格(Java篇)的资料,希望对爱好编码或者开始学习编码的同学有帮助! ...

  9. 想要成为真正优秀的程序员是不是真的很难?

    很多人认为要想成为一名优秀的程序员,那就需要一天24小时每天不断地编程--睁开眼睛要编程,闭上眼睛睡觉的时候还要梦到编程--我认为这是一种矫枉过正的方法.沿着这条路走,只会让你精疲力尽,犹如夸父逐日一 ...

最新文章

  1. 成功解决 OSError: [WinError 193] %1 不是有效的 Win32 应用程序
  2. canvas的特别棒的feature:badge!!!
  3. FCOS 基于FPN之上的完全Anchor Free检测框架
  4. java 通过cookie判断是否登陆
  5. 微软正准备一个简易的Rootkit清除方案 助用户打补丁
  6. 新拟物素材|时髦iOS 主屏幕图标
  7. 8086和8088微处理器之间的区别
  8. java poi读取word中附件_java poi word读取
  9. 应用ajax实现检测注册用户名是否已经存在
  10. 算法进阶之Leetcode刷题记录
  11. 2014年度总结——程序员生涯的开启
  12. 近年热门细胞研究话题颂通大盘点
  13. 读书印记 - 《我们人类的基因:全人类的历史和未来》
  14. 机器视觉硬件之光源选型以及打光技巧
  15. 推荐几本javascript与jquery的好书
  16. Scrum立会报告+燃尽图(Beta阶段第二周第二次)
  17. 方便、免费的PDF在线处理网站汇总:PDF合并、文字编辑、页面提取与删除、格式转换…
  18. ElementUI 获取el-table表格选中行信息及清除选中行
  19. scum服务器设置网站,SCUM服务器配置详解 参数设置推荐
  20. 使用Xshell连接Ubuntu 20.4系统时提示

热门文章

  1. python之模块导入和包
  2. 基于visual Studio2013解决C语言竞赛题之0203格式化输出
  3. Microsoft Project学习系列(一)
  4. [nvidia] CUDA_VISIBLE_DEVICES
  5. csdn设置图片居中和尺寸
  6. 【金融】【论文研读】 CAPITAL ASSET PRICES: A THEORY OF MARKET EQUILIBRIUM UNDER CONDITIONS OF...
  7. fft qt 代码_最简洁的FFT代码(C++实现)
  8. 关于卷积神经网络可视化的一点心得
  9. hack wifi android,WiFi Hack AIO 2010 - WiFi v1.2
  10. linux数据,Linux数据