浅谈Rob Pike的五条编程规范

简介: 浅谈Rob Pike的五条编程规范

又是一篇需要我们多些思考的文章~

简介下Rob Pike

Rob Pike是Unix的先驱,UTF-8的设计人,Go语言核心设计者之一。

Rob Pike的5条编程规则

中文翻译

罗布·派克(Rob Pike)的编程五原则

  • 原则1: 你无法判断一个程序的时间消耗在哪里。瓶颈常常出现在意想不到的地方,所以在证明瓶颈确实存在之前,不要试图猜测并添加加速技巧。
  • 原则2:测试。在测试之前,不要调整速度,即使测试之后,除非一部分代码明显超过其他部分,否则也不要调整速度。
  • 原则3:当n很小的时候,花哨的算法很慢,而n通常都很小。花哨的算法具有大的常数。在你知道n经常变得很大之前,不要使用花哨的算法。(即使n确实变得很大,也要首先使用原则2。)
  • 原则4:花哨的算法比简单的算法更容易出错,而且更难实现。使用简单的算法和简单的数据结构。
  • 原则5:数据占主导地位。如果你选择了正确的数据结构并把事情组织得很好,那么算法几乎总是不言自明的。数据结构而不是算法是编程的核心。

派克的原则1和原则2重申了托尼·霍尔(Tony Hoare)的名言“过早的优化是所有邪恶的根源”。肯·汤普森(Ken Thompson)将派克的原则3和原则4重新表述为“当有疑问时,使用暴力手段”。原则3和原则4是KISS设计哲学的实例。原则5之前由弗雷德·布鲁克斯(Fred Brooks)在《人月神话》中提出。原则5通常被缩短为“编写使用智能对象的愚蠢代码”。

我的理解

罗布·派克的编程五原则为编程提供了重要的指导。

对于原则1,你无法判断一个程序的时间消耗在哪里。这个原则强调了性能分析的必要性。在尝试优化代码之前,你应该首先确定代码的哪部分是性能瓶颈。性能分析可以通过工具和技术来进行,例如使用性能分析器(profiler)来检测代码的热点。通过分析代码的运行时间和资源消耗,你可以找到需要优化的关键部分。

对于原则2:测试。这个原则强调了基准测试的重要性。只有通过测量代码的实际性能,你才能确定哪些部分需要优化。基准测试可以帮助你了解代码在不同输入和数据规模下的性能表现。在进行基准测试时,确保使用真实的数据和场景,以获得准确的性能数据。只有通过测量,你才能做出明智的优化决策。

对于原则3,当n很小的时候,花哨的算法很慢,而n通常都很小。这个原则提醒我们在选择算法时要考虑数据规模。对于较小的数据集,简单的算法通常表现更好,而且更容易实现和调试。花哨的算法可能在理论上具有更好的性能,但在实际应用中可能会受到常数因子和实现复杂度的限制。因此,在选择算法时,要根据实际的数据规模和问题要求来做出决策。

对于原则4,花哨的算法比简单的算法更容易出错,而且更难调试。这个原则强调了简单和清晰的重要性。简单的算法和数据结构更容易理解、实现和维护。花哨的算法可能涉及复杂的逻辑和数学操作,增加了出错的可能性并降低了代码的可读性和可维护性。在编程中,简单通常是一种美德,因为它减少了出错的可能性并提高了代码的可读性和可维护性。

对于原则5,数据占主导地位。这个原则强调了数据结构选择的重要性。选择合适的数据结构可以极大地影响代码的性能和可读性。数据结构决定了如何组织和访问数据,对于特定的问题和数据规模,选择适当的数据结构可以显著提高代码的性能。在选择数据结构时,要考虑数据的特征、访问模式和问题要求。通过选择合适的数据结构,你可以将算法的效率最大化。

总的来说,罗布·派克的编程五原则提醒我们在编程时要保持目标导向,避免过早优化,选择合适的算法和数据结构,以提高代码的性能和可维护性。这些规则强调了性能分析、基准测试、数据规模和简单性的重要性。通过遵循这些原则,你可以编写出高效、健壮和易于维护的代码。

相关文章
|
20天前
|
运维 网络协议 Shell
第十七章 Python网络编程
第十七章 Python网络编程
|
20天前
|
人工智能 算法
【算法】深入理解 Prolog:逻辑编程的奇妙世界
【算法】深入理解 Prolog:逻辑编程的奇妙世界
37 0
|
11月前
|
算法 搜索推荐 Java
JAVA常用算法流派的详谈
在软件开发领域,算法是解决问题的关键。而JAVA作为一门广泛应用的编程语言,其算法库也非常丰富。本文将详细介绍JAVA常用算法流派,包括搜索算法、排序算法、图算法、字符串算法和动态规划算法等。
95 0
|
11月前
|
人工智能 算法 Java
关于“Python进高考”,我有句呵呵不知当讲不当讲
如果你是需要用编程来解决问题,那么用 Python 做便是了。用它是因为它适合,跟它火不火无关。
|
Java 容器
|
存储 Java
你能用几句话解释面向对象?(中)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
你能用几句话解释面向对象?(中)
|
XML Java 数据格式
你能用几句话解释面向对象?(下)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
113 0
你能用几句话解释面向对象?(下)
|
存储 编译器
你能用几句话解释面向对象?(上)
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。
180 0
你能用几句话解释面向对象?(上)
|
存储 缓存 安全
哦!这该死的 C 语言!(二)
C 语言是一门抽象的、面向过程的语言,C 语言广泛应用于底层开发,C 语言在计算机体系中占据着不可替代的作用,可以说 C 语言是编程的基础,也就是说,不管你学习任何语言,都应该把 C 语言放在首先要学的位置上。
哦!这该死的 C 语言!(二)
|
Java Unix 编译器
哦!这该死的 C 语言!(一)
C 语言是一门抽象的、面向过程的语言,C 语言广泛应用于底层开发,C 语言在计算机体系中占据着不可替代的作用,可以说 C 语言是编程的基础,也就是说,不管你学习任何语言,都应该把 C 语言放在首先要学的位置上。
哦!这该死的 C 语言!(一)