当前位置: 首页 > news >正文

浅谈Rob Pike的五条编程规范

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

简介下Rob Pike

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

Rob Pike的5条编程规则

原文地址:http://users.ece.utexas.edu/~adnan/pike.html

中文翻译

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

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

http://www.lryc.cn/news/183908.html

相关文章:

  • LeetCode 377.组合总和IV 可解决一步爬m个台阶到n阶楼顶问题( 完全背包 + 排列数)
  • C中volatile总结
  • asp.net班级管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • 【Pytorch笔记】6.Transforms
  • nodejs+vue临沂特色产品销售平台elementui
  • 机器学习必修课 - 使用管道 Pipeline
  • WEB各类常用测试工具
  • Naive UI 文档地址
  • 在CentOS7系统中安装MySQL5.7
  • R语言通过接口获取网上数据平台的免费数据
  • 【Docker内容大集合】Docker从认识到实践再到底层原理大汇总
  • 算法题:摆动序列
  • 复习 --- QT服务器客户端
  • Godot 官方2D游戏笔记(1):导入动画资源和添加节点
  • leetcode 热题 100
  • Ae 效果:CC Lens
  • 【Redis】基础数据结构-quicklist
  • QT 实现服务器客户端搭建
  • Javascript - 轮播图
  • MATLAB中syms函数使用
  • 竞赛选题 深度学习 opencv python 实现中国交通标志识别_1
  • Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明
  • 基于springboot的论坛网站
  • 分库分表理论总结
  • RK3568平台开发系列讲解(外设篇)AP3216C 三合一环境传感器驱动
  • ES 关于 remote_cluster 的一记小坑
  • 第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第四节 - Python 中的字符串反转6种不同的方式方法)
  • el-date-picker增加默认值 修改样式
  • Hive中生成自增序列的常用方法
  • 4.MySql安装配置(更新版)