写点什么

可读性代码:为什么、怎样以及什么时候

  • 2018-10-10
  • 本文字数:1868 字

    阅读完需:约 6 分钟

如果你对开发团队进行问卷,大多数人会说“我们想要可读性高的代码”。你甚至发现有些人认为可读性比功能更重要。但是,当要求人们对可读性做出定义时,他们的意见就会出现分歧。Laura Savino 在 Explore DDD 2018 大会上的演讲就是以这个作为前提。她阐述了为什么我们想要可读性高的代码、可读性究竟意味着什么,以及什么时候必须优先考虑可读性。

Savino 拥有小学法语教师的背景,后来成为 iOS 开发人员和导师,因此,她能够提供更多有关比较自然语言和编程语言的见解。刚开始学习新编程语言的程序员通常先学写一个基本的“Hello,world!”应用程序。同样,“Bonjour”、“Hola”或“Guten-tag”可能是学习法语、西班牙语或德语的人学会的第一个单词。

正如程序员将迅速学会“Hello,world!”,口语也会很快进入中间阶段。Savino 举了一个例子,在法语课上问一个同学是否愿意在课后和你一起去喝咖啡(Voulez-vous prendreuncaféavelve moiaprèslescours?)。即使他拒绝了(Désolé,je ne peux pas prendredecaféprèslescours),在别人看来这是有史以来最无聊的谈话,但你自己却感觉飘飘然:你说了一个句子,然后有人理解它,因为你收到了适当的回应,而你了解回应是什么意思。这就像在 iOS 应用程序中显示数据一样——它不是那么吸引人,但当你第一次成功完成这个任务时,你的肾上腺素会飙升。

学习语言的高级阶段超越了对语法的思考。你的目标已经超越了只是相互理解,你现在需要深入细节。这时候编程语言与人类语言之间的类比开始不再奏效,或者至少需要更深入的分析。

在进行代码评审时,经常会有人说,“我无法理解这些代码”,而另一个人(可能是作者)反驳说,“但这种方式更具可读性”。Savino 用这个例子来说明“可读性取决是谁在阅读代码”。让可读性变得复杂的是代码有两种不同的受众:其他开发人员和计算机。因为计算机如果无法读懂我们的代码,它们很快就会告诉我们,我们自然会基于计算机的反馈做出调整。我们承认这种偏见的存在,有时候会在代码周围加上人类可读的注释。但是,Savino 警告说,“注释并不能带来具备可读性的代码”。

Savino 解释了解读文本或代码与流利阅读之间的区别。她使用 E. E. Cummings 的诗“ when serpents bargain for the right to squirm ”作为例子,一个美丽而复杂的作品需要阅读多次才能真正开始理解其中的含义。当你在阅读代码时遇到不熟悉的术语时需要经历类似的过程——查找一个,然后是下一个,然后是下一个,你就像进了一个兔子洞,直到你忘记了最初想要理解的内容为止。Savino 警告说,虽然可以从深刻的理解中获得快乐,但“写诗与开发软件不是一回事”。

相反,流利的阅读是一种快速而正确的理解,不会占用你的工作记忆。多年的阅读经验让你能够快速浏览文章并仍然能够理解其中的内容。Savino 认为,阅读可读性高的代码也是如此。当代码很容易阅读时,大脑可以腾出一部分发现其中可能出现的问题,让代码评审更加高效。

在给出了高可读性代码为什么如此重要的原因之后,Savino 探讨了如何写出高可读性代码的技术。在与语言不流利的谈话对象沟通时应该避免使用俚语,并使用明确的表达方式。在代码中,方法的命名可以用 beginApp(),而不是 releaseTheHounds(),并在每一步给出变量和调用结果,而不是将函数调用链接在一起。

Savino 还探讨了我们的本能模式匹配能力。在抽象层面,需要使用“斜视测试”来查看代码的一般性结构,看看是否有任何异常的东西。在更低的层面,尽量避免使用看起来相似的字符和符号,包括!、I、l 和 1,这些可能会导致反模式匹配。最后,如果你正在做一些与众不同的东西,那就以一种可以让它从脱颖而出的命名方式。

对于作家来说,最好的建议是“了解你的受众”。Savino 说,当你的受众是阅读你的代码的人时,你应该更进一步,并信任他们。当有人告诉你代码不够清晰时,相信他们,然后问他们因为缺少了哪些信息导致代码难以阅读。用他们的反馈来提高代码的可读性。

最后,Savino 提到了一些可读性需要成为主要驱动因素的例子。简单地说,一段代码越重要,它的可读性就应该越高。Savino 引用了美国宇航局喷气推进实验室的编码指南,该指南指出,“任务关键代码不应该只是可以辩证的,还必须是绝对正确的”。与人类沟通有关的一个更为实际的场景是火灾逃生标志,在逃离火灾时,人们不需要额外的努力看懂这些标志。

你的团队应该针对是否以及何时需要可读代码展开讨论。你的目标应该是所有团队成员都能流利地阅读代码。Savino 最后鼓励每个人进行“更少的解读,更多的创造”。

查看英文原文 Readable Code - Why, How and When You Should Write It

2018-10-10 05:461280
用户头像

发布了 731 篇内容, 共 443.8 次阅读, 收获喜欢 2000 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

WorkPlus安全专属的企业IM助力政企高效协作

WorkPlus

产品经理的API文档阅读指南

Noah

产品经理 API接口文档

白皮书商业计划书编写 了解白皮书在区块链稳定币开发中的作用

区块链软件开发推广运营

数字藏品开发 dapp开发 区块链开发 链游开发 NFT开发

Cisdem Video Player for mac(高清视频播放器) v5.6.0完整激活版

mac

视频播放器 苹果mac Windows软件 Cisdem Video Player

9月活动回顾(免费领取PPT)|火山引擎DataLeap、ByteHouse多位专家带来DataOps、实时计算等前沿技术分享!

字节跳动数据平台

数据库 大数据 火山引擎 DataLeap 企业号10月PK榜

实现即时沟通与协作的全功能IM即时通讯系统

WorkPlus

云起无垠参编中国信通院《软件供应链安全能力中心建设指南》正式发布

云起无垠

循环数组,一个可以释放无锁队列的力量

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟

深度学习之目标定位

矩视智能

机器视觉 深度学习、

快速gps定位:AnyGo 免激活最新中文版

mac大玩家j

Mac 软件 定位软件 gps虚拟定位

FISCO BCOS | 构建第一个区块链应用程序

BSN研习社

区块链 FISCO BCOS 区块链开发

Redis魔法:点燃分布式锁的奇妙实现

互联网工科生

分布式锁 redis 底层原理

软件测试/测试开发/校招推荐 |中科创达软件股份有限公司岗位开放

测试人

程序员 软件测试 招聘 测试开发 内推

@Scope 注解失效了?咋回事

江南一点雨

Java spring

再创新高!深开鸿OpenHarmony社区代码贡献量超过200万行!

Geek_2d6073

DApp钱包OP链智能合约质押挖矿系统开发源码丨案例丨演示

l8l259l3365

CogVLM:智谱AI 新一代多模态大模型

Geek_2d6073

自动化模式下,企业全面预算管理的提升

智达方通

自动化 全面预算管理 预测分析

GLB/GLTF在线纹理编辑

3D建模设计

GLTF glb 材质 纹理 贴图

营销黑科技再升级:百度营销擎舵数字人4.0 带来哪些惊喜?

Geek_2d6073

AI & Web3 盛会「EDGE」在港闭幕,融云国际影响力持续提升

融云 RongCloud

AI 技术 edge 峰会 web3

软件测试/测试开发丨基于人工智能的代码分析与 Bug 检测实战

测试人

人工智能 程序员 软件测试 自动化测试 测试开发

提升代码重用性:模板设计模式在实际项目中的应用

树上有只程序猿

模板模式

更现代化方式实现明暗模式,两行CSS搞定!

这我可不懂

CSS

天谋科技时序数据库 IoTDB 与 openEuler 操作系统完成兼容性互认证

Apache IoTDB

低代码平台技术分享官丨工作流应用场景之任务交接

inBuilder低代码平台

工作流 低代码

【论文解读】人工智能时代的科学发现

合合技术团队

人工智能 数据 科学

出海方案全线升级!融云「爱嗨游」线上发布会定档

融云 RongCloud

互联网 全球化 融云 出海 GenAI

大咖汇聚,KaiwuDB 邀您共话 AI+ DB 发展新趋势

KaiwuDB

KaiwuDB AIDB

基于 ACK Fluid 的混合云优化数据访问(四):将第三方存储目录挂载到 Kubernetes,提升效率和标准化

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生 ACK

可读性代码:为什么、怎样以及什么时候_语言 & 开发_Thomas Betts_InfoQ精选文章