阅读更多

9顶
0踩

研发管理
作为开发者,可能会经常听到“代码首先是写给人看的”、“写可读的代码相当重要”等等。

对于如何使代码的可读性更强,开发者往往都有自己的看法。那么你可曾仔细想过什么才能真正使代码可读性增强。



一些标准答案

无论你使用什么编程语言,你都可能会认同下面的建议可以增强代码的可读性:

  • 好的变量、方法、类名
  • 一个变量、类、方法只做一件事
  • 一致的缩进,一致的格式
  • 减少代码中的嵌套级别
当然,还有很多其他标准答案,比如 Clean Code(Robert Martin著)和Code Complete(Steve McConnell著)两本书中说的,你应该读一读。

或许你要说,这些东西我都知道。那么,下面就是一些你可能没有考虑的、关于代码可读性的更深层次的东西。

读者的经验

给我一段代码,我能在2秒内告诉你这段代码是否写得好,是否具有很强的可读性(至少我会告诉你我的意见)。

同时,如果我将我写得最好的、可读性很高的代码给一个编程新手,他们可能也不会发现这些代码与其他代码有什么不同。

虽然我的代码中有很好的、描述性的变量名,短的命名方法和少量的参数,并且它们只做一件事,各个功能结构清晰地组合在一起,但是这些新手并没有发现我的代码比其他没有考虑结构的代码好读到哪去。

事实上,我经常听到其他人抱怨我的代码中有太多的方法,难以理解,并且变量名称太长,容易混淆。

有经验的开发者与新手读代码的方式有根本的区别

一个有经验的开发者在阅读代码时不会注重编程语言本身的词汇,而会更专注于代码实际上表达的意思——代码的目的是什么,而不是它是如何做的。

而经验不足的开发者在读取代码时,会试图了解代码的实际结构,初学者则更侧重于实际的语言词汇,即代码中的编程语言试图传达的东西。

对他们来说,一个长变量名称不具备描述性,而且会令人迷惑,因为这些变量名会隐藏一些事实,比如NumberOfCoins字面上来看表示一个整型值,而实际上它不仅仅是一个整型值。他们宁愿看到名为X或编号的变量值。

而一个经验丰富的开发者,不会去关心整数、字符串和其他类型的变量,他们只想知道变量在系统、方法的逻辑上下文中表示什么,而不是变量的类型以及如何工作。

学习阅读

学习阅读代码就像是小孩子在学习阅读文章一样。他们在学习阅读时,不会去注意语法和文章传达的思想,而只会关注词语本身的结构。

又比如,一个经验丰富的音乐家可以很轻松地看懂乐谱,而初学者往往需要根据乐谱来找钢琴上对应的琴键或吉他上对应的品数。

可读性约束因素

你在表达你的想法和意见时,有可能会局限于你本身所掌握的词汇量和阅读量,同样,你代码的可读性也有可能局限于你所使用的编程语言以及编程语境。

来看个例子,下面的汇编代码会在DOS屏幕中输出“Hello World!”:

.model small
.stack 100h
 
.data
msg     db      'Hello world!$'
 
.code
start:
        mov     ah, 09h   ; Display the message
        lea     dx, msg
        int     21h
        mov     ax, 4C00h  ; Terminate the executable
        int     21h
 
end start

语言本身的复杂性,导致编写的代码难以阅读。无论你是个多么优秀的程序员,这种代码的可读性对你来说总会有上限的。

现在再来看看C#中的Hello World:

public class Hello1
{
   public static void Main()
   {
      System.Console.WriteLine("Hello, World!");
   }
}

下面是Ruby的:

puts "Hello, world"

你知道Ruby为什么如此流行了吧!如果你了解Ruby语言中大量的词汇和语法结构,你会发现你可以很清楚地表达一个事物。

我想说的是,你拥有的词汇量越大,你表达的方式就会越简洁,可读性就越高,当然,这是对于那些同样拥有高词汇量的读者来说的。

我们可以得出什么?

从上面的内容中可以得出,我们的词汇量和经验会影响代码的可读性。我们还需要去考虑谁将阅读我们的代码,他们的词汇量和经验如何。

在C#中,通常会争论是否该使用条件运算符,比如我们应该写这样的代码:

var nextAction = dogIsHungry ? Actions.Feed : Actions.Walk;

还是这样的:

var nextAction = Actions.None
if(dogIsHungry)
{
   nextAction = Actions.Feed
}
else
{
   nextAction = Actions.Walk;
}

我以前会说第2种方式更好,但我发现我经常会写第1种。现在如果有人问我哪种好,我会告诉他“视情况而定”。我的意思是,你需要看读你代码的人是否了解条件运算符。

编程语言也如同普通语言学习,比如英语,有人认为英语中有大量的词汇和荒谬的语法,应该减少一些,这样学习起来会更容易。但是,如果这样,就难以简洁地传达信息了。

那么你认为,在开发中,应该有一种复杂的编程语言来增强开发者的表达能力,增强代码的简洁性和可读性(当然,这需要足够多的学习成本),还是应该保持简单的编程语言,来写复杂的、较长的代码呢?

英文原文:What Makes Code Readable: Not What You Think

相关阅读:“写更少的代码”是否真的有必要?
  • 大小: 11.1 KB
9
0
评论 共 15 条 请登录后发表评论
15 楼 u010144343 2013-08-04 20:07
欧美专业的软件公司都是在代码文档上做维护来设计代码的思路阅读。只不过国内的软件公司将精力集中在代码上罢了,于是程序员之间的沟通变得一行行枯燥的代码了
14 楼 dohkoos 2013-04-23 18:42
引用
    好的变量、方法、类名
    一个变量、类、方法只做一件事
    一致的缩进,一致的格式
    减少代码中的嵌套级别


只要能做到上述几点的代码就不存在读不懂的问题。如果真有这种情况出现,那肯定是自己水平太差。
13 楼 ray_linn 2013-04-23 12:54
ruby 不就是那个可以把代码写得很怪异的语言吗?
12 楼 langchenfujian 2013-04-23 12:27
楼主说的很对,一个程序员阅读过越多的代码,就越容易看懂其他程序员的代码,同时,这个程序员写的代码也越容易被其他程序员读懂。不好就一个程序员来判断是否能读懂代码,从概率论的角度来说的话比较好,概率大小而已。
11 楼 Think_Java_1993 2013-04-23 10:49
10 楼 beyondqinghua 2013-04-23 09:40
阅读代码,先了解业务,再阅读就会轻松多了
9 楼 dacoolbaby 2013-04-22 17:27
每个系统都有自己独自的编码风格,和缩写习惯。
还有每个系统的业务模块抽象。

只要注释和方法名适当,都会很快上手的。

我见过无比恶心的代码。
8 楼 zhaoyifei 2013-04-22 13:43
有经验的会忽略一些契约的东西,他们会认为那是理所当然的,新手必须去熟悉这些契约。可读性确实和编程习惯有关,即使水平相近的人,可能一个人写出的代码另一个去读也是很难受的。读spring的代码就感觉好,读hibernate的代码就感觉难受。
7 楼 at1943 2013-04-22 12:38
引用
puts "Hello, world"
一句没用的代码怎么就能说明可读性好呐,组合到程序里不一定什么样
6 楼 chaochao1238 2013-04-22 09:57
那么你认为,在开发中,应该有一种复杂的编程语言来增强开发者的表达能力,增强代码的简洁性和可读性(当然,这需要足够多的学习成本),还是应该保持简单的编程语言,来写复杂的、较长的代码呢?


前者更好吧,毕竟代码越长越不容易阅读
5 楼 王文丰 2013-04-22 09:45
嗯,我在阅读代码时,正处于试图去理解这个方法到底想表达什么意思的阶段,并不会关心它在整体架构中的上下逻辑,明显新手阶段啊。我已经工作四年了
4 楼 niweiwei 2013-04-21 09:31
赞同,见的多,就理解的很快
3 楼 Eywa 2013-04-20 11:55
究其根本还是在于开发者本身的经验与知识积累。
2 楼 ssrc0604hx 2013-04-20 00:06
嗯,说的不错。
1 楼 Mybeautiful 2013-04-19 17:49
赞同。 读不懂别人的代码,要不是自己水平太差,要不就是写代码的人水平太差。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 如何提升程序的可读性?像写书那样去写程序

    这是一项核心能力在以前的文章中我提过程序员核心能力这个概念你需要找到一些核心的技术能力。...可读性好的程序更容易得到维护与复用,这就提升了你的工作价值。它还可以为你在团队中建立良好的个人声誉。而当...

  • 代码“可读性”到底有多重要?

    倘若对自己代码有要求,你会发现,它几乎是最重要的。神眼中的“优雅”,可能就蕴含在这里面。 关于如何写出可读性强的代码,有很多好书值得详细阅读,《C专家编程》、《代码大全》、《编程珠玑》,等等。这个课题很...

  • 编写可读性代码的艺术

    这是我所见的仅把代码可读性作为主题的一本书,而且这本书写得很有趣! 既然是“艺术”,难免会有观点上的多样性。译者本身作为程序员观点更加“极端”一些。然而两位作者见多识广,轻易不会给出极端的建议,如...

  • 前端【性能优化】与【代码可读性】的「权衡」

    曾经写React时,追求极致的效率,各种用useMemo memo等等,后来才知道什么最重要——代码可读性。 React改变了前端开发的方式,由命令式编程(jQuery操纵Dom)转化到了声明式编程(根据data声明UI),这极大程度...

  • 关于Vue代码可读性的几点建议

    大家好,我是 漫步,今天来分享Vue 代码优化的文章,喜欢记得关注我并设为星标。前言近来入坑了一个Vue项目,感觉掉进了祖传屎山中,可读性极差,更别说可维护性了。故借此专栏提几点关于Vue...

  • 一站式低代码开发平台iVX初探

    详细介绍一站式低代码开发平台iVX。

  • 什么是千行代码缺陷率?

    先来看下【千行代码缺陷率】是怎么回事?所以从此刻开始,公司的开发同事就使劲的增加分母,让代码足够大,这样处于分子的缺陷再多,也会绩效很好。而B优秀的代码被抛弃,像B这样的程序员被淘汰。那么可想而知这个...

  • 怎么提高代码质量?-来自Google的研发经验总结

    其实这些都是代码质量差惹的祸。代码质量是研发质量管理的根本,它决定了整个开发团队的开发效率,项目质量,其他监控,告警,日志等手段都只能是事后补偿。本文就如何保证代码质量总结了一些经验和方法,供大家参考...

  • 如何使用ChatGPT提升自己的“码”力?

    ChatGPT是功能强大的工具,用于代码评审、优化、释义、解决方案、生成、设计模式和架构建议,以及学习新知识。虽无法完全替代人类,但可提高工作效率。注意其局限性,结合其他工具和人工审查使用。对初级工程师有用...

  • 为什么要学习汇编?学习汇编有哪些好处?

    本文详细讲述一个从汇编代码的角度去理解多线程编程问题实例,并详细介绍熟悉汇编代码都有哪些用处。

  • 超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的

    本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧?

  • 提高代码可读性的10个技巧

    在本文中,作者从注释,缩进,代码分组,命名方式等方面,介绍了10个提高代码可读性的技巧,供读者学习和借鉴。  以下为译文: 如果你的代码很容易阅读,这也会帮助你调试自己的程序,让工作变...

  • 如何有效地进行代码 Review?

    为什么要做代码 Review 为什么要代码 Review,相信每个人心中都有比较一致的答案,Google 搜索一下也能找到一大堆的文章。这里简单总结几点: 1)提高代码质量 这是代码 Review 的初衷,也是代码 Review 最直接的...

  • 如何让你的代码变得更优雅?这些代码规范和技巧必须知道(进阶必备,建议收藏)

    看你的代码就知道你几斤几两2. 编程标准3. 命名规范4. 松耦合,高复用 1. 看你的代码就知道你几斤几两 1.1 面试常会犯的错 ????‍♂️:面试者 ????‍⚖️:面试官 面试前 ????‍♂️:先把简历写好,机构老师...

  • 如何保护前端JS代码?前端js代码加密

    2、如果是精心设计一个绚丽的特效,如果想要保护这段自己付诸幸苦实现的特效代码不被他人随意拿去使用,那应该保护这段JS代码! 3、如果页面上有重要的功能是用JS代码管控的,比如交易逻辑、帐号密码信息、个人隐私...

  • 关于代码评审(CodeReview)那些不得不说的事儿

    (性能、资源占用……) …… 更多更细节的内容,可以参考谷歌工程实践——代码评审 注意事项 CodeReview的礼节   首先CodeReview不是你个人炫技的舞台,看到别人代码的问题需要礼貌指出,切忌diss别人。...

  • 减少 if else 嵌套,提高代码的可读性

    再再如果后面项目交接给他人跟进,他人又要把自己大脑变成处理器来想每个分支的作用,我敢肯定有百分之八十的人都会吐槽代码。 我们程序员的脑力不应该花费在无止境的分支语句里的,应该专注于业务本身。所以我们很...

  • 你见过马化腾18年前编写的代码吗?

    01关于马化腾编码的水平,网络上曾有这样一个段子:曾经和pony(马化腾)一起写过代码。当时我、pony、马克3人挤在一个只有10个位置的房间里,埋头开发。马克当时负责排...

  • 代码规范的意义 为什么要规范代码 大厂程序员告诉你

    有不少写代码总是只按喜欢按自己的习惯写,但是如果这个产品永远是你自己一个人来写和维护,那么问题不大,那么如果是有很多人协作,那么麻烦就大了,我相信有很多人说了很多代码规范的重要性,我今天在这里只提两点...

  • 高科技公司的 CEO 要写代码吗?

    导读:周末与一老朋友相聚,聊起创业,聊起涛思数据,他说,"老陶,看你朋友圈,经常看到你在写程序,你应该是在作秀吧,涛思数据融资都超过2000万美元,你这个创始人不太可能也不需要敲...

Global site tag (gtag.js) - Google Analytics