什么才是优秀的代码?

更新日期: 2019-11-20阅读: 2k标签: 代码

究竟什么是优秀的代码?Robert Martin的一句话可以完美诠释。代码质量的唯一衡量标准是每分钟说多少次WTF

我来解释一下这句话。当我在做code review时,通常会有三种不同的感受:

  • What-the-F**k (厌恶脸) — 这段代码并不是必要的

  • What-the-F**k (一脸钦佩) — 这家伙真聪明啊

  • What-the-F**k (愤怒值爆表) — 这什么垃圾玩意

所以当我们看代码时影响我们的第一印象的因素是什么呢?

这是一段整洁又漂亮的代码。

能够写出整洁又漂亮的代码是一个优秀工程师的标志。

It is Clean and Beautifully written code.

And writing clean and beautiful code is the mark of a GREAT softwarecraftsman.

要学会这项伟大的事业有两个关键点: 知识和工作 。

知识会教给你如何在变得更加专业的模式、原则、实践和启发式的方法。但这些知识需要你通过大量的读写、不断的实践和努力才能获得。

简而言之,学会如何写整洁的代码并非一件简单的事。你必须要为之付出努力,必须一次又一次的练习、发现问题、经历失败,直到正确处理为止。这一过程没有任何捷径。

下面我将向你介绍一些如何写出整洁且漂亮的代码的技巧。


“What is in a NAME”

Kendrick Lamar说过:

如果我要讲一个真实的故事,那么一定是从故事的命名开始。

If I’m gonna tell a real story, I’m gonna start with my name

命名会遍布代码的每一个角落,我们会为函数、类、参数、包等命名,还会为源文件、目录命名。总之,在写代码的过程中,好的命名可能是使代码变整洁的最重要的因素。

你的命名应该显示出你的意图。选择一个好的名称会耗费你的一些时间,但是如果随意命名,以后你会浪费更多的时间来理解它。所以请尽可能使你的命名更加合理,读你的代码的人也会因此感谢你。

你要谨记的是,变量、函数和类的命名应该能回答三个问题:它为什么存在、它是做什么的、它用在哪里。

这不仅需要良好的描述能力,还需要了解跨国界的文化背景。要教会你这些,没有人能比你自己更合适了。


“Functions should DO ONLY ONE THING.”

我们所说的「单一责任」原则。

Louis Sullivan对此有过完美的描述

形式跟随函数

Form follows function.

每个系统都是由特定的编程语言构建而成。函数通常是动词,而类通常是名词。函数任何编程语言中通常都是出现在第一行,写出整洁代码的本质其实就是写出整洁的函数。

要想写出整洁的函数,首先应该遵循两条黄金法则:

  • 函数应该尽可能短小

  • 函数应该只做一件事

这意味着你的函数不应该出现嵌套的结构。所以函数的缩进级别不应该大于一个或两个,这会让你的代码更容易阅读、理解和消化。除此之外,我们还需要确保函数中的语句都处于同一抽象级别。

在一个函数中如果混有不同的抽象级别通常会使代码变得十分混乱,并且难以管理。优秀的工程师会把函数当作给别人讲的一段故事,而不只是编码。

他们通常使用所选编程语言的功能来构建更加丰富、更具表现力和更加简洁的代码块。这使他们成为更好的“故事讲述者”。


“Comments do not make up for bad code”

Venus Williams为我们敲响警钟:

每个人都有自己的注释,这是谣言的开始。

Everyone makes their own comments. That’s how rumors get started.

注释是一把双刃剑,在正确的位置添加注释可以为他人提供最有用的帮助。另一方面,浪费空间来添加无用的注释会使代码更加的混乱。如果注释提供了错误的信息,那对代码来说可以说是一种灾难了。

总之,注释是一种不可缺少的恶魔。为什么呢?通常,代码的注释越旧,维护起来就越困难。很多程序员因为修改代码时不维护注释而臭名昭著。

随着代码的发展,代码做出了许多改动,但注释并没有随之修改,这是一个很大的问题。

请铭记,带有少量注释的简洁代码远胜于带有大量注释的混乱代码。不要浪费时间来解释你制造的混乱,而是要花些时间来清理这些混乱。


“Formatting Code is always a priority”

Robert C. Martin说过

代码格式与沟通有关,而沟通是专业开发人员的首要任务。

Code formatting is about communication, and communication is the professional developer’s first order of business.

上面的说法可能不被大家认可,但这是一个优秀的开发人员的最重要的品质。格式化的代码是你心灵的窗户,我们希望人们对我们的秩序、对细节的关注和思想的清晰印象深刻。当他人看代码时,如果看到的是混乱的、开头结尾不清晰的代码块,这会直接损害我们的声誉,这一点毋庸置疑!

如果你认为代码“可以使用”是专业程序员的第一要务,那么你不会有很好的发展的。你今天的功能很有可能在下个版本进行更改,但代码的可读性是不会改变的。

当原始代码已经改的面目全非时,代码的风格和可读性将影响代码的可维护性。

以后,你会因为自己的代码风格和纪律被人们记住,而不会因为某段代码。因此,你需要注意你的代码格式,使它受到简单的规则约束,这样的规则必须是所有团队成员都能理解的。


Write your “try-catch-finally” statement first

Georges Canguilhem明确提到:

人类都会犯错误,但是坚持错误的却是恶魔。

To err is human, to persist in error is diabolical.

错误处理是每个程序员都必须要做的事情,输入可能异常,设备也可能故障。作为开发人员,我们希望程序按照我们的预期来执行。然而,问题不是处理错误,而是清晰易读的错误处理方式。

很多代码以处理错误为主,导致主代码逻辑被淹没在其中。这种做法是完全错误的。代码应该整洁、健壮,并且以一种优雅的方式处理错误,这也是优秀工程师的一种标志。

其中一个错误处理方法是通过适当的 try-catch 代码块来捕获所有错误。在执行 try-catch-finally 中try部分的代码时,任何时间发生异常,都会进入catch部分执行。

因此,在代码中使用 try-catch-finally 可能是一种比较好的选择。它能帮助你在try部分定义你希望执行的代码,而不用去担心代码出错时怎么办。

你抛出的每一个异常都应该具有完整的上下文以确定错误的来源和位置。具有创造性的错误信息会在代码写出来后很久,甚至是作者已经离开很长时间后仍然被人们记住。


Bringing it all together

那么如何综合一下上面提到的技巧呢?

答案是代码意识,是软件工程中的一种常识。

The answer is code-sense; the software equivalent of common sense.

据Robert Martin所说,”编写整洁的代码需要通过一段痛苦的过程来获得一些小技巧,这些小技巧被称为代码意识“。有些人天生就有这种感觉,而有些人则需要通过实践、坚持不懈和毅力来获取它。这种意识不仅仅是帮助我们区分好代码和坏代码,更能够给我们代码将坏代码转换成好代码的能力。

代码意识可以帮助开发者们选择最好的工具来指导他们创造出更有价值的整洁又漂亮的代码。

简而言之,具有代码意识到程序员就像是画家,他可以将一块空白的屏幕变成精美的艺术品,并被人们记住很长时间。

就像Harold Abelson所说的一样:

代码写出来首先是给人读的,然后才是指导机器要怎么做。


References

“A handbook of Agile Software Craftsmanship” — Robert Martin.

“A handbook of Agile estimation” — Mike Cohn

原文地址:https://medium.com/swlh/excellent-code-clean-and-beautiful-code-b541ca4b5a39


链接: https://www.fly63.com/article/detial/6674

不要浪费时间写完美代码

一个系统可以维持5年,10年,甚至20年以上,但是代码和设计模式的生命周期非常短,当对一个解决方案使用不同的方法进行迭代的时候,通常只能维持数月,数日,甚至几分钟的时间

Google内部在代码质量上的实践

良好的编程习惯涉及到很多方面,但在软件行业内,大多数的公司或组织都不会把良好的编程习惯列为主要关注点。 例如,具有可读性和可维护性的代码比编写好的测试代码或使用正确的工具更有意义,前者的意义在于可以让代码更易于理解和修改。

减少嵌套,降低代码复杂度

减少嵌套会让代码可读性更好,同时也能更容易的找出bug,开发人员可以更快的迭代,程序也会越来越稳定。简化代码,让编程更轻松!

关于 Google 发布的 JS 代码规范

Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。代码规范并不是一种编写正确JavaScript代码的规则,而是为了保持源代码编写模式一致的一种选择。

你解决的问题比你编写的代码更重要!

程序员似乎忘记了软件的真正目的,那就是解决现实问题。您编写的代码的目的是为了创造价值并使现有世界变得更美好,而不是满足您对自我世界应该是什么的以自我为中心的观点。有人说:如果你拥有的只是一把锤子,那么一切看起来都像钉子一样

tinymce与prism代码高亮实现及汉化的配置

TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6+和Firefox1.5+都有着非常良好的支持。功能方强大,并且功能配置灵活简单。另一特点是加载速度非常快的。

js函数式编程与代码执行效率

函数式编程对应的是命令式编程, 函数式编程的核心当然是对函数的运用. 而高阶函数(Higher-order)是实现函数式编程的基本要素。高阶函数可以将其他函数作为参数或者返回结果。所以JS天生就支持函数式编程

接手代码太烂,要不要辞职?

朋友发表了一条说说:入职新公司,从重构代码到放弃”,我就问他怎么了?他说,刚进一家新公司,接手代码太烂,领导让我先熟悉业务逻辑,然后去修复之前项目中遗留的bug,实在不行就重构

js高亮显示关键词_页面、搜索关键词高亮显示

页面实现关键词高亮显示:在项目期间遇到一个需求,就是搜索关键词时需要高亮显示,主要通过正则匹配来实现页面关键词高亮显示。在搜索结果中高亮显示关键词:有一组关键词数组,在数组中筛选出符合关键字的内容并将关键字高亮

写优雅的代码,做优雅的程序员

软件工程学什么? 学计算机,写程序,做软件,当程序员。听说学计算机很辛苦? 是的,IT行业加班现象严重。在计算机世界里,技术日新月异,自学能力是程序员最重要的能力之一。选了这个专业,就要时刻保持好奇心和技术嗅觉,不能只满足于完成课内作业。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!