读代码是好的学习方式么

文件系统
• 阅读 6049

自我开始编程以来,我一直觉得读别人的代码的难度,要几倍于自己写代码。一直以来我都很困惑,难道是我技艺不精,所以读别人的代码很困难么。

其实不是,我能看懂代码中的每一句话,并没有我不认识的语法,但连在一起就不懂为什么作者要这么安排代码了。

后来我渐渐有了一些想法,代码是程序员给计算机的命令,是作者思考过后的产物,但思考的过程却没有体现在代码上,这就好比一道数学题,只有一个最终答案,所有的计算过程都被省略掉了,自然难以理解作者的意图。一段代码一开始写出来,后来发现存在问题,陆陆续续地改过好几版是很常见的事情。最终版本中可能每个小的细节,都是作者花了很多时间试错的结果,但这个试错的过程并没有直接地体现在代码上。

另一方面,代码中往往存在一些「隐含前提」,例如假定函数的参数已经在传入之前被以某种方式处理过了,这个假定很可能与另一个文件的某行代码有关,这种联系很难引起阅读者的注意。当然,好的设计可以缓解这个问题,但很难被彻底地解决。

代码的历史会被保存在版本控制系统里,但说实话,按我的经验,很少真的有人去翻版本历史,因为正确地使用版本控制工具相比起写代码是一项比较不受重视的技能,在这种情况下翻历史是非常耗时的。当然,有些人会将一些细节以注释的形式添加到代码中,但注释也只能承载很小的一部分信息,因为维护注释也是一项很高的成本,我个人一向是反对添加注释来解释代码的。

所以阅读代码实际上并没有看上去那么轻松,为了彻底理解一段代码,很有可能你需要付出和编写这段代码差不多的努力,来了解这段代码的历史和前提。

前面提到的是阅读「好的代码」的情况,比如大多数活跃的开源项目,如果是面对质量较差的代码情况就更为糟糕了。

所以我的观点是,读代码绝对不是一种好的学习方式,我认为学习一项技术应当先阅读书籍,然后尝试自己实践,最后再参考代码质量较高开源项目。

对于大多数项目而言,可能从未把「供他人学习」当作目标,只有当你自己实践过,积累了一些经验并且也遇到过一些困难的时候,你才能读懂代码并且从中学到解决问题的技巧。而在开始实践之前,最好的知识来源是书籍,因为书籍的内容是经过精心的安排的,最高目标就是供他人阅读。

https://jysperm.me/2015/02/reading-code/

点赞
收藏
评论区
推荐文章
专注IP定位 专注IP定位
3年前
用 Python 编写干净代码的 10 种必备模式
Python是最优雅、最简洁的编程语言之一,但拥有优美简洁的语法并不等同于编写简洁的代码。开发人员仍然需要学习Python最佳实践和设计模式来编写干净的代码。什么是干净代码?C编程语言的发明者BjarneStroustrup的这句话清楚地解释了干净代码的含义:“我喜欢我的代码优雅而高效。逻辑应该直截了当,让bug难以隐藏,依赖最小化以方
liam liam
2年前
不是吧,连公司里的卷王写代码都复制粘贴,这合理?
没错,我,本人,就是那种卷心菜,就是那种想卷但卷不过别人的,我每天吭哧吭哧写代码,写到办公区里空荡荡地只剩下我一个人,但我们组里,就我需求写得最慢,bug写得最多,我弟常问我:“哥,别的同事加班都没你多你绩效一定不错吧?”但、其实是因为我写不过别人,尤其公司里那个卷王,代码写得好,还写得快,改bug测试小姐姐一提他立马响应改好。搞得测试组那边买奶茶常常会
Souleigh ✨ Souleigh ✨
4年前
程序员怎样写出搞垮公司的代码?
1、乱写注释注释就像内裤,外面看不见,但是很重要。注释要严谨,不能有明显的漏洞。如果你的内裤有漏洞,你不尴尬吗?当然了,如果你实力够强大,别人会尴尬。2、代码和显示不一致界面上是Postcode,代码里是Zipcode。看代码看到怀疑人生!所以说年轻人,你只看到了第二层,你以为我在第一层,实际上我在第五层,你明白我在讲什么吗?
Stella981 Stella981
3年前
Arthas watch 命令使用指南
作者|AgentdArthaswatch命令使用指南Arthas是我很喜欢的一款Java领域的开发调试工具。每次测试遇到问题的时候,当别人为了加一条日志而重发代码,我都会欣慰地拿出我的Arthas并且告诉他们:少年,你不用再为了加日志就重发代码而烦恼了。Arthas,你值得拥有。这次我
Wesley13 Wesley13
3年前
C# 谁改了我的代码
本文告诉大家一个特殊的做法,可以修改一个字符串常量<!more我们来写一个简单的程序,把一个常量字符串输出privateconststringstr"lindexi";staticvoidMain(stringargs){
Stella981 Stella981
3年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Wesley13 Wesley13
3年前
2020年 我要这样写代码
在9102年年初,一位室友问我一个问题,如何才能够提升写代码的能力?可惜的是:当时仅仅回复了一些自己的想法,如多看开源代码,多读书,多学习,多关注业界的动向与实践,同时也列了一些原则。但是这些并没有所总结,又或者说没有例子的语言始终是空泛的。所以在今年年底之际,对应着今年中遇到的形形色色的代码问题来一一讲解一下。好代码的用处
Stella981 Stella981
3年前
Spring Boot 知识图谱
如何学习好SpringBoot,如何快速入门,我觉得最好的方法就是自己跟着写代码,写完再发布到自己的博客系统中。教会别人写代码。这样你会思考很多。所以就有了本篇,SpringBoot知识图谱,虽然这里可能不是最全的应用,但我会不定期的增加一些知识点进去。就当一个学习库,一个知识收藏夹,大家喜欢的可以在我的 https://github.com/fi
Wesley13 Wesley13
3年前
Apiggs
前言程序员一直以来都有一个烦恼,只想写代码,不想写文档。代码就表达了我的思想和灵魂。Python提出了一个方案,叫docstring,来试图解决这个问题。即编写代码,同时也能写出文档,保持代码和文档的一致。docstring说白了就是一堆代码中的注释。Python的docstring可以通过help函数直接输出一份有格式的文档,本工具
Python进阶者 Python进阶者
2年前
这个语句报了无效语法的错误 但是我不知道是哪里写错了
大家好,我是皮皮。一、前言前几天在Python最强王者交流群【群除我佬】问了一个Pandas处理的问题,提问截图如下:代码如下所示:songidtagsdf后来【隔壁😼山楂】也给了一个可行的代码,如下所示:songidtagsdf'tblTags'.
kenx kenx
2年前
程序员的十级孤独,你体会过几级
都说天才程序员是和疯子就差一步之遥。有极致孤独与追求,有自己的精神世界,我就是有代码洁癖的,追求极致代码要求。如何看到别人写代码不按照自己的,来我就会很抓马就会不通过他的代码质量检查,以致于我现在有点极致的病态要求了尤其作为项目中的leader我感受更加深