Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >程序员,请优先提高代码的可读性

程序员,请优先提高代码的可读性

作者头像
java思维导图
发布于 2018-08-16 07:03:04
发布于 2018-08-16 07:03:04
9990
举报
文章被收录于专栏:java思维导图java思维导图

作者:数据轩 链接:请点击“阅读原文”

导语:

现在,当有人提及“优化”一词时,他们通常是指“优化执行时间”,除非他们明确表明要优化GPU的内存消耗,网络流量等等。

一 了解优化对象

当我开始编程时,所拥有的处理器执行速度很慢,内存空间也非常有限 —— 有时仅以KB衡量。因此,必须合理考虑内存的使用和优化。

在大学里,我们知道了优化的两个极端情况:

  • 你可以牺牲空间来换取执行速度的提升,
  • 或者通过执行重复操作来换取内存消耗的优化。

如今,没有人会太在意内存的使用(除了demoseners,嵌入式系统工程师,部分手游开发者),不仅是对于RAM空间,硬盘空间也是。 试想一下仅安装看门狗就耗费硬盘近25Gb 空间。 此外,我在谷歌浏览器选项卡中写这篇文章时,占用了130Mb的RAM空间。

实际上需要优化的对象有很多:

  • 随着智能手机市场的增长,电量损耗的优化备受关注;
  • 优化可读性可以让代码易于阅读和调试,从而缩短开发周期,降低开发成本;
  • 还有很多优化类型,此处不再赘述……

优化可读性——让代码更容易阅读、跟踪和理解。

你应该明白,你在优化时难以兼顾各个方面。 例如,当致力于性能优化时,你很可能让应用程序内存消耗增加,同时代码可读性也变差。

二 为何优化可读性

开发者大量工作时间并不是在编写代码,而是阅读代码,调试代码,查阅他人提交的开发文档,学习新的库等。

当阅读代码时,开发者实际上是充当代码解释器的角色(虽比不上计算机)—— 在他们的头脑中执行代码,并试图记住当前执行状态。 这就是程序员在阅读代码过程中被打搅脾气暴躁的原因。

时间== 金钱

你应该意识到一件很最重要的事,是你和你的同事浪费了大量时间。 即使是一个努力工作的开发者,在做下面的事时仍然浪费了大量时间:

  • 实现一些现在不需要,以后也可能永远用不到的功能。
  • 做一些没有实际价值的改进。 例如,花费一周时间优化一个函数的执行时间,而该函数在1小时内仅被调用10ms的时间。
  • 编写的代码难以调试,却还要试图从中找出错误。
  • 编写的代码他人难以理解。 注意,“他人”也可能是短短一周后的你。

上述情况是假设遇到问题的开发者经验丰富并且熟知高效算法和简洁代码如何书写,否则要列出的情况要更多。

三 优化可读性

唐纳德·克努特说过一句名言。 我敢打赌你听过很多次。

“在编程中,过早优化是万恶之源。 ” —— D.Knuth,1974

我遇到很多知道这句话的人,但真正理解这句话的却很少。 最常见的错误理解像这样:

  • —为何这么简单的任务,代码却如此复杂?
  • —我优化了X和Y,因为在将来……
  • —难道你没听说过早的优化是万恶之源吗?
  • —当然,但这并不是过早优化,我能肯定这样做程序执行效率会更高。

我想这是由于对过早优化这个词没有明确界定的原因。 这就是这些人一点也不认为他们那么做属于过早优化的原因。 那么,我们该如何界定这个词呢?

过早优化——在工作系统中分析和运行测试前的任何优化尝试。

除可读性之外任何修改都属于过早优化。 所以,与其说一个人不应该做什么,不如说应该做什么。 那么,这句引言可以这样理解:

优先提高可读性。

四 什么阻碍了开发者阅读代码

好吧,我们一致认为,我们应该让代码更易于阅读,这样可以节约时间和金钱,对吧?但这究竟意味着什么?

有迹象表明,下面两个基本方面极大地降低了开发者阅读代码的速度:

  1. 代码晦涩难懂,
  2. 代码难以跟踪。

五 代码艰涩难懂

遗憾的是,人们并不能像软件解释器那样,可以不必理会将两个数相加并调用一个函数这部分代码的功能(机械式的编译)。

为了查找代码异常的原因,程序员必须理解源程序中编写的代码实现了何种功能,编写的初衷是为了实现何种功能。

六 什么让代码晦涩难懂?

下面情况是对于经验丰富的开发者而言,这些开发者熟悉代码开发使用的语言和程序中使用的算法(即他们有足够的知识来理解这段代码)。

  1. 代码不良。 单个字母的奇怪变量和1000行代码的冗长函数。
  2. 代码的格式不正确或不一致。
  3. 代码中包含冗余代码。
  4. 代码中包含未备注的低层次优化。
  5. 代码过于高明。

我将跳过前两条,因为无论如何你不应该阅读不良代码。 如果你所在的公司有人编写了不良代码,你应该纠正它们或者将其废弃。 当然,你必须为你的整个代码库执行严格的编程规范。

3. 代码中包含冗余代码

亦或所谓的行数优化。 嵌套函数调用和条件运算符的长行代码难以剖析。 当然,你可能会说这种观点是片面的。 但这些人觉得源程序代码越短越好,不必考虑可读性。

4. 未备注地层次优化

最初,代码的可读性很好,工作也很稳定,但有些人决定在某些方面对其进行优化。 经过认真剖析,这可能是一个很好的优化,但此时的代码看上去像是数组、位运算和幻数的结合体。 没有人知道代码在做什么,甚至代码应该做什么,因为完成优化的人没有提交任何说明。

也许你听说过优秀的代码不需要说明文档。 但是经过优化的代码(特别是优化效果很理想的情况)必须要有说明文档。

在你的代码库中,可能大部分的优化只是像这样的未备注行:

5. 代码过于高明

作为软件开发者,我们掌握越来越多的学术技巧并将其运用到实际代码开发中。 毕竟,我们是计算机科学家,而不只是码农!

有些语言甚至鼓励开发者使用前沿技术,使代码更具表现力和学术性。 当你用代码建立了一个非常健壮的系统,特别当你用数学方法证明了一个高深定理,而99.997%受过教育的人对这种方法都不理解,你就会有这种成就感。

即使代码被良好地封装成模块/类/函数并且这些模块包含完全可读的命令式代码,但其他人想要读懂这段代码,他们必须掌握整个代码的框架以及所有使用的相关技术和模式。

再一次强调,记住“其他人”可能就是一周后的你。

极可能这是我在工作中仅认识两个使用Scala语言人的原因。就我个人而言,非常喜欢Scala语言。 对我来说,它就是一个学术操场,我可以在那里建造玻璃城堡。 一旦你越了解它,它的越多特性也就能为你所用,你也就越明白它本质上只是一门编程语言(请不要在这里引用我!)。

虽不如Perl语言,但即使最漂亮的代码库也需要修改和更新。 现在,你需要寻找一个能够理解这些优美代码的人……

简洁高明的代码难以阅读似乎是有争议的。

“软件调试要比编写代码困难一倍,如果你发挥了最大才智编写代码,那么你的智商便不足以调试这个代码。 ” —— Brian Kernighan

七 代码难以跟踪

阅读代码时,通常需要频繁的从一个函数或类跳转到另一个函数或类。 掌握你使用的集成开发环境(IDE),可以节约很多阅读时间。 通过使用集成开发环境(例如Visual Studio)的“跳转至声明”,“查找使用”,“导航至”,“检查”等特性,你可以将整个代码看作是一幅连通图。

在Notepad中编写代码是不错的选择,但是如果你想有效的阅读代码,必须掌握一个集成开发环境。

那么,究竟什么是连通图呢?

连通图是在拓扑空间中连接的图,即图中任意两点之间都有一条通路。(来源)

换句话来说,在“连通”代码中,你可以方便的从一个方法中跟踪到另一个方法中,并在你头脑中建立这段代码的功能框架。

如果代码中某一部分链接被破坏(在这种情况下,集成开发环境不能帮助你实现函数间的跳转),通常你必须花一些时间自己查找链接。代码中被破坏的链部分越多,越难以跟踪,代码也就越难以阅读。

那么,为什么代码图会被断开?原因是多方面的,下面将列出一些常见情况:

  1. 使用字符串引用方法和属性

一些框架就喜欢这样做,他们将”回调”作为字符串传递并在需要时使用反射。 此时你需要使用CMD+F查找。

最可恶的是动态语言中的动态字符串…… 对这个问题,向JavaScript或AS3致敬!

2. 代码被分割成互不相连的部分

例如,你的代码一半使用C#编写,另一半是在可视化节点编辑器生成。 在这两者之间跳转非常不易。

依赖注入框架和其他XML配置工具也是。虽然没有明确说明,但编写XML配置文件也属于编程。 这就是所谓的的声明式编程(更不用说那些构建基于XML命令式语言的疯狂的人)。

3. 巨大的图节点

20个链接跳转到这个包含1000行代码的函数?。。哎哟。 你不需要包含这种节点的图。

4. 一切都过于抽象

通过跳转至声明,你可到达一个接口或者一个抽象类,必须弄清楚有哪些实现。 依赖注入,抽象工厂和其他所有反对依赖的方法使得这一切变得更糟。 代码图中节点间的联系过于抽象。

这样说来,我讨厌依赖注入(DI)和扩展标识语言(XML)。但DI是一个很棒的工具,它可以让你避免书写面条式代码并让程序的架构更加模块化,更具可测试性。但像其他好的事物一样,过度依赖必然产生负面效果。

我曾在审查一个应用程序时感到完全气馁,因为我意识到自己弄不明白程序从何处开始。。。例如它的入口点在哪。 这一切都是在程序开始时从XML配置工具自动生成。但我确实讨厌XML配置工具。

所以,到这里你应该已经学会:

  • 掌握你的集成开发环境,
  • 尽可能保持代码图连通,
  • 首先编写简单代码,
  • 编写不必要的代码,就是在浪费金钱。

强迫自己编写简单的代码,避免在早期阶段优化确实有一定难度,这需要花费时间。

-- 完 --

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java思维导图 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Block提高代码可读性
最近一直在思考并持续的扩充着自己的技术栈,比如每天坚持着学习前端知识,并且时常想着在移动端这条路上,自己的技术盲区。诚然,想要在一个领域达到一定的技术高度是挺困难的一件事情,操之过急万万不可,最主要的还是保持对技术的热情,慢慢沉淀。
Originalee
2018/08/30
4770
使用Block提高代码可读性
提高代码可读性的10个技巧
以下为译文: 如果你的代码很容易阅读,这也会帮助你调试自己的程序,让工作变得更容易。 代码可读性是计算机编程领域的一个普遍课题,这也是作为开发人员首先要学习的东西。本文将详细介绍几个编写可读代码的最佳
CSDN技术头条
2018/02/06
8570
提高代码可读性的10个技巧
干货 | 如何编写可读性更高的代码?
有许多方法可以编写任何代码。有些会运行得更快,有些会占用更少的内存,有些会更易于测试。还有一些会更清楚。
CloudBest
2021/04/20
7690
干货 | 如何编写可读性更高的代码?
如何提高代码的可读性? - 读《编写可读代码的艺术》
很多同行在编写代码的时候往往只关注一些宏观上的主题:架构,设计模式,数据结构等等,却忽视了一些更细节上的点:比如变量如何命名与使用,控制流的设计,以及注释的写法等等。以上这些细节上的东西非常影响代码的可读性。
用户2932962
2018/08/30
1.2K0
如何提高代码的可读性? - 读《编写可读代码的艺术》
提升代码可读性的 10 个技巧
具有较强可读性的代码,能帮助你调试程序,不让自己活得太累。 代码可读性是计算机编程领域中普遍存在的问题。这也是我们成为开发者首先要学习的事情之一。本文会详细介绍在编写强可读性代码时最佳实践中最重要的一
腾讯NEXT学位
2018/05/14
9460
提高程序可读性
在编程过程中注意提高程序的可读性是良好的编程习惯,这使程序更易于理解,也更容易在以后进行修改和更正。同时也有助于我们理清自己的编程思路。
From Zero
2021/02/22
4040
从细节出发:提高你的代码可读性
在编程的世界中,我们总是不断追求更高的性能,更优雅的设计,以及更复杂的特性。然而,我们不应忽视一个基本且重要的原则——代码的可读性。那么究竟何谓代码的可读性?顾名思义,代码可读性是指代码可理解的程度,是代码作者通过代码这个媒介,将需要表达的信息输出到读者脑中的能力。所以有的人说好的代码必然有清晰完整的注释,也有人说代码即注释,是代码简洁之道的最高境界,后者的观点飞哥持保留意见,毕竟真正能够做到代码即注释的有几人呢?
努力的阿飞
2023/11/03
2870
怎样写出可读性高的代码?
代码的写法有很多种:有的运行起来很快,有的只会占用少量内存,有的更容易测试,而有的代码则有很高的可读性。
架构师修行之路
2021/04/02
8690
危机来临,防御性编程能否帮助程序员抵御裁员风暴?
“码农们在工作中绝对不能按以前书上说的写优美清晰代码,要防御性编程,确保自己即使被裁,剩下的代码也是不可维护的”。
努力的阿飞
2023/12/22
3920
一个可读性高的代码对程序员有多重要
人们都以为编写任何程序员都能够阅读和理解的代码是软件开发人员的固有技能。事实上只有20%的程序员具备这种能力。你所写的代码不仅要被机器理解,而且还要被人类理解。在软件开发中,代码质量应该是每个开发人员的重中之重。因此,在整个开发过程中,交付高质量的工作代码应该是每个开发人员的首要目标。
努力的阿飞
2023/09/04
2470
作为一个Python爱好者,如何写出高可读性的代码?
推荐导读:Python的初学者,开发者都应该知道的代码可读性提高技巧,本篇主要介绍了如下内容:
Python数据科学
2018/12/28
1.4K0
新手开发人员如何提升代码可读性?
新手开发人员在编写代码时往往容易犯一些影响可读性的错误,下面将举出一些具体示例,并说明如何纠正这些问题。
DevOps持续交付
2023/11/17
2030
新手开发人员如何提升代码可读性?
提高代码可读性的8个技巧
使用 i、j、k 作为循环迭代器的名字过于简单,user_i、member_i 这种名字会更有表达力。因为循环层次越多,代码越难理解,有表达力的迭代器名字可读性会更高。
小万哥
2023/06/06
4690
提高代码可读性的8个技巧
实践:代码既简洁清晰,又可读性强
原文地址:https://dzone.com/articles/7-tips-to-write-better-java-code-you-should-know-1[1]
二哥聊运营工具
2021/12/17
4160
代码重构的技巧和工具:如何使用重构工具和设计模式提高代码的可读性和可扩展性
代码重构是软件开发过程中的重要环节,它旨在改进现有代码的结构、设计和实现,以提高代码的可读性、可维护性和可扩展性。本文将介绍代码重构的技巧和工具,以及如何使用重构工具和设计模式来优化代码。
Echo_Wish
2024/02/13
4870
提高代码可读性的秘诀:注释的重要性
又是00后整顿职场的一段精彩演绎。不可置否,在实际的软件开发过程中,确实有很多开发人员依然不愿意写注释认为这会浪费时间,或者自认为他们的代码足够清晰,不需要额外的解释。但这种想法too young too simple,代码注释对于项目的质量和效率有着深远的影响,在软件开发中的重要性不容小觑。
努力的阿飞
2023/10/13
2500
代码编写的第一奥义:可读性
在软件开发领域,代码编写的可读性是至关重要的。无论是个人项目还是团队合作,可读性都是成功的代码所必须具备的特质。可读性高的代码不仅易于维护和修改,而且能够加速团队合作的效率,提高整体代码质量。
DevOps持续交付
2023/11/16
2190
代码编写的第一奥义:可读性
对代码的领悟之-高质量代码有三要素:可读性、可维护性、可变更性
  我们评价高质量代码有三要素:可读性、可维护性、可变更性。我们的代码要一个都不能少地达到了这三要素的要求才能算高质量的代码。
Java编程指南
2019/08/05
2.2K0
对代码的领悟之-高质量代码有三要素:可读性、可维护性、可变更性
改善代码可读性的5种方法
本文最初发布于 byrayray.dev 网站,经原作者授权由 InfoQ 中文站翻译并分享。
深度学习与Python
2021/01/06
3830
什么叫代码的可读性?为什么说Kotlin的可读性比Java好?
不久之前,我看了一篇文章,大意是Kotlin与Java之间的对比,像这种文章,我一般是直接忽略的,但是那天我还是打开了,然后就看到一个非常吃惊的结果。 里面有一段是关于Kotlin与Java之间可读性的对比的文章,作者的结论是:Kotlin并不比Java更具有可读性,所有认为Kotlin 比Java更具有可读性的结论都是“主观性”的。 并且作者举了一个在我看来,不知道该怎么来描述的例子: 这个作者的大意是,上面这段文章,你多读个两三遍,你也会很快的理解它的意思,所以“对于熟练的读者而言,外观很少会成
企鹅号小编
2018/01/10
1.2K0
什么叫代码的可读性?为什么说Kotlin的可读性比Java好?
推荐阅读
相关推荐
使用Block提高代码可读性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档