谷歌大牛 Rob Pike 的 5 个编程原则

谷歌大牛 Rob Pike 的 5 个编程原则

简介:

Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,Plan9操作系统开发的主要领导人,Inferno操作系统开发的主要领导人。他是缔造Go语言和Limbo语言的核心人物。下面是他分享给大家他在贝尔实验室工作的一段经历,这段经历改变了他对bug调试的思想认识。

主要工作经历:

我在贝尔实验室工作了很多年。我在计算机科学研究中心,你会很诧异,这是个很小的实验室,但这里却创造了Unix,我来到这里工作的时候Unix已经发布了第七版。从2002年起我来到谷歌工作,主要开发一些系统基础架构。

最主要的成就:

我最为人所知的应该是我和Brian Kernighan(Unix开发组的重要成员)合著的两本书:《The Unix Programming Environment》 和 《程序设计实践(The Practice of Programming)》 (30年后的今天仍在印刷出版!),影响范围最广的一件事应该是我和Ken Thompson共同开发完成了UTF-8编码格式。在其它方面,诸如计算机图形,操作系统,软件开发工具等上也做了大量的工作,最近在给谷歌开发Go编程语言。

下面是 Rob Pike 的 5 个编程原则

原则 1. 你没有办法预测每个程序的运行时间,瓶颈会出现在出乎意料的地方,所以在分析瓶颈原因之前,先不要盲目猜测。

原则 2. 测试(measure)。在测试之前不要优化程序,即使在测试之后也要慎重,除非一部分代码占据绝对比重的运行时间。

原则 3. 花哨的算法在 n 比较小时效率通常比较糟糕,而 n 通常是比较小的,并且这些算法有一个很大的常数。除非你确定 n 在变大,否则不要用花哨的算法。(即便 n 不变大,也要先遵循第 2 个原则。)

原则 4. 相对于朴素的算法来说,花哨的算法更容易出现Bug,更难调试。尽量使用朴素的算法和数据结构。

原则 5. 数据占主导地位(Data dominates)。如果你选择了正确的数据结构,并且已把事情组织好,那么算法的效率显而易见。编程的核心是数据结构是,不是算法。

Pike的第 1 条和第 2 条原则实际上重新强调了Tony Hoare那句名言,“过早的优化是万恶的根源”。Ken Thompson将Pike的第 3 条和第 4 条原则改写为“当遇到麻烦时,试试最简单粗暴的办法”,原则 3 和原则 4 也是 KISS 哲学的体现。Fred Brooks在《人月神话》中首先阐述了原则 5 ,原则 5 常常会被概括为“用最佳结构,写简单代码”。

谷歌大牛 Rob Pike 的 5 个编程原则,布布扣,bubuko.com

时间: 2024-10-27 18:42:50

谷歌大牛 Rob Pike 的 5 个编程原则的相关文章

Rob Pike 的 5 个编程原则

原则 1. 你没有办法预测每个程序的运行时间,瓶颈会出现在出乎意料的地方,所以在分析瓶颈原因之前,先不要盲目猜测. 原则 2. 测试(measure).在测试之前不要优化程序,即使在测试之后也要慎重,除非一部分代码占据绝对比重的运行时间. 原则 3. 花哨的算法在 n 比较小时效率通常比较糟糕,而 n 通常是比较小的,并且这些算法有一个很大的常数.除非你确定 n 在变大,否则不要用花哨的算法.(即便 n 不变大,也要先遵循第 2 个原则.) 原则 4. 相对于朴素的算法来说,花哨的算法更容易出现

Rob Pike:我得到的最佳编程建议

Rob Pike:我得到的最佳编程建议 Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,Plan9操作系统开发的主要领导人,Inferno操作系统开发的主要领导人.他是缔造Go语言和Limbo语言的核心人物.下面是他分享给大家他在贝尔实验室工作的一段经历,这段经历改变了他对bug调试的思想认识. Job的主要工作经历: 我在贝尔实验室工作了很多年.我在计算机科学研究中心,你会很诧异,这是个很小的实验室,但这里却创造了Unix,我来到这里工作的时候Unix

Concurrency Is Not Parallelism (Rob pike)

Rob pike发表过一个有名的演讲<Concurrency is not parallelism>(https://blog.golang.org/concurrency-is-not-parallelism), 演讲胶片在talks.golang.org中可以找到(https://talks.golang.org/2012/waza.slide#1), 演讲视频地址 :https://vimeo.com/49718712 以下是根据视频转换的文本信息. if you looked at t

Talk 3: Rob Pike on Upspin (Gopherfest 2017)

Talk 3: Rob Pike on Upspin Upspin is an experimental project to build a framework for naming and sharing files and other data securely, uniformly, and globally: a global name system of sorts. It is not a file system, but a set of protocols and refere

每个程序员都必须遵守的编程原则

http://www.cocoachina.com/gamedev/misc/2014/0410/8135.html 好的编程原则跟好的系统设计原则和技术实施原则有着密切的联系.下面的这些编程原则在过去的这些年里让我成为了一名优秀的程序员,我相信,这些原则对任何一个开发人员来说,都能让他的编程能力大幅度的提高,能让他开发出可维护性更强.缺陷更少的程序. 我不要自我重复 — 这也许是在编程开发这最最基本的一个信条,就是要告诉你不要出现重复的代码.我们很多的编程结构之所以存在,就是为了帮助我们消除重

程序员应该遵守的编程原则

好的编程原则跟好的系统设计原则和技术实施原则有着密切的联系.下面的这些编程原则在过去的这些年里让我成为了一名优秀的程序员,我相信,这些原则对任何一个开发人员来说,都能让他的编程能力大幅度的提高,能让他开发出可维护性更强.缺陷更少的程序. 我不要自我重复--这也许是在编程开发这最最基本的一个信条,就是要告诉你不要出现重复的代码.我们很多的编程 结构之所以存在,就是为了帮助我们消除重复(例如,循环语句, 函数,类,等等).一旦程序里开始有重复现象的出现(例如很长的表达式.一大堆的语句,但 都是为了表

编程原则

好的编程原则跟好的系统设计原则和技术实施原则有着密切的联系.下面的这些编程原则在过去的这些年里让我成为了一名优秀的程序员,我相信,这些原则对任何一个开发人员来说,都能让他的编程能力大幅度的提高,能让他开发出可维护性更强.缺陷更少的程序. 我不要自我重复——这也许是在编程开发这最最基本的一个信条,就是要告诉你不要出现重复的代码.我们很多的编程 结构之所以存在,就是为了帮助我们消除重复(例如,循环语句, 函数,类,等等).一旦程序里开始有重复现象的出现(例如很长的表达式.一大堆的语句,但 都是为了表

如何解读梯形图编程原则?

如何解读梯形图编程原则?plc程序设计方法又是怎样的?与大家一起学习!! 梯形图编程原则与PLC程序设计方法 (1)  输入/输出继电器.内部辅助继电器.定时器.计数器等器件的触点可以多次重复使用,无需复杂的程序结构来减少触点的使用次数. (2) 梯形图每一行都是从左母线开始,线圈终止于右母线.触点不能放在线圈的右边,如下图所示 (3)除步进程序外,任何线圈.定时器.计数器.高级指令等不能直接与左母线相连. (4)在程序中,不允许同一编号的线圈两次输出(双线圈输出).下面的梯形图是不允许的. (

Js编程原则和良好习惯

1.预留退路:在禁止Js或者Js不被支持的情况下,网页还能正常工作.也就是说,虽然某些功能无法使用,但最基本的操作仍能顺利完成. 案例:点击链接,打开一个新窗口.就如本站的登录(弹出一个模拟窗口),与其让用户在点击链接的时候被带离当前页面,不如让用户仍停留在当前页面,并用一个弹出窗口来显示相关信息,这无疑是一种更好的解决方法.一些错误的写法:伪协议:<a href="javascript:showWindow('login', this.href);" >登录</a&