最有价值的编程忠告

摘要:本文是来自贝尔实验室Plan 9操作系统的创始人Rob Pike给大家分享的编程忠告!Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,缔造Go语言和Limbo语言的核心人物。

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

Rob Pike

Rob Pike

Job的主要工作经历:

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

最主要的成就:

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

使用最多的编程语言:

长久以来,C语言是我编程的选择,但在我的编程生涯里,我使用过很多种语言。而目前我开发的东西基本上都是用Go语言,这是我见过的最高效的一种编程语言,它在我的工具箱里已经完全取代了C语言的位置。

忠告:

在我加入贝尔实验室一年多后,我开始和Ken Thompson一起在开发一个针对由Gerard Holzmann设计的很小的图形化交换语言的即时编译器上做结对编程。我打字比较快,所以我坐在电脑前,Ken站在我身后看我编程。我们开发的很快,但经常会遇到问题,而且可以看出来出错了——毕竟这是一个图形化的编程语言。当程序出错时,我本能的一头扎进问题,检查报错跟踪信息,添加调试打印语句,启动调试器,等等,但Ken只是站在那思考,完全不理会我也不查看我们写的出问题的代码。一段时间后我发现一个规律,Ken经常会比我先找到问题出在什么地方,而且会突然的喊一嗓子,“我知道什么地方的问题了。”每次他的判断都很准确。我认识到,Ken已经在脑海里构建了代码的模型,当有问题出现时,那是他脑子里的模型出了问题。在思考为什么会发生这些错误时,他能凭直觉找到模型中什么地方不对或发现写的代码跟这个模式什么地方有出入。

Ken教会了我一个极其重要的习惯:纠错前先思考。如果你一头扎进问题中,你可能只解决了当前出现问题的代码,但如果你先思考这个错误,这个bug是怎么引入的?你通常发现和纠正一个更高层次的问题,进而改进了系统设计,防止了更多bug的出现。

我认识到这种编程思考模式非常的重要。有些人痴迷于一行行的、使用各种工具来调试所有的东西。但我现在相信,思考——不看代码的思考——是最好的调试途径,因为它能让你开发出更好的软件。

译文来自:aqee

原文出自:informit


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kinect2.0-空间长度测量

1. 鼠标左键按下选择起点,拖动鼠标,左键放开,确定终点。 实现效果1实现效果22. 在linux下使用libfreenect2开源多平台驱动来获取kinect2.0的传感器信息,得到深度信息,并通过libfreenect2提供的getPointXYZ函数&#xf…

没有完美的软件:编程永远不容易

摘要:很多人想用十全十美来修饰一样东西,比如软件,对于客户来说,当然希望他们的软件能做到完美。虽然很多专家说利用一些规范可以让软件达到更好!但是在现实开发中,真的会有那么完美的软件吗? 最…

代码审查“思维导图”

摘要:随着人们对软件质量要求的不断提高,软件开发的每一个环节都应该得到十足的重视,俗话说:“细节决定成败”,就此,本文提供了一个代码审查“思维导图”,希望对所有码农们有所帮助。 代码审查&…

The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 tomcat启动报务后访问页面报错: org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/co…

优秀程序员和一般程序员差别在哪?

摘要:在这个世界上有两种程序员:Day Programmers(白班程序员)和Night Programmers(夜猫子程序员),你知道优秀程序员和一般程序员有哪些差别吗?你又是哪一类型的呢?俗话说…

Navicat工具导出mySQL数据库某个视图结构的.sql脚本

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 用Navicat工具怎么都导不出来mySQL数据库的某个视图.sql脚本,即使导出来也只是包含视图记录,不包含视图结构。经…

瞧瞧苹果OS X如何干掉Linux

摘要:如果你去过Facebook或者其它一些创业类科技公司,你会发现随处可见的Mac,无论是CEO还是开发者,都可能在使用Mac。而以往很受IT人士青睐的Linux好像在消失,这是真的吗?苹果OS X是如何干掉Linux的&#x…

超全十大经典排序算法及其分析

文章目录0.算法概述0.1 算法分类0.2 算法复杂度0.3 相关概念1. 冒泡排序(Bubble Sort)1.1 算法描述:1.2 图解演示1.3 代码实现1.4 优化过程1.5 性能分析2. 选择排序(Selection Sort)2.1 算法描述:2.2 图解演…

eclipse安装JAVA反编译插件

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心&a…

noip2014生活大爆炸版石头剪刀布

题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一 样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。 升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势: 斯波克:《星际迷航》主角之…

聊聊毕业设计系列 --- 系统实现

效果展示 github moment-server github地址 moment github地址 moment-manage github地址 articles 聊聊毕业设计系列 --- 项目介绍 聊聊毕业设计系列 --- 系统实现 前言 在上一篇文章中,主要是对项目做了介绍,并且对系统分析和系统设计做了大概的介绍。…

js 实现用window.print()打印页面中的部分内容,局部打印

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 如下方法: function printProof(){var printData document.getElementById("forPrint").innerHTML; // 只打印 f…

Spring 之注解事务 @Transactional

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 先让我们看代码吧! 以下代码为在“Spring3事务管理——基于tx/aop命名空间的配置”基础上修改。首先修改applicationContext…

超级程序员神话

摘要:大部分的程序员在思想里都会某种程度的承认,承认自己只是一个普通的程序员,但这世界上确实有一些超级程序员,在一个为企业开发应用的程序员和一个为谷歌写搜索算法的程序员之间,或和一个开发用来控制读写头从磁盘…

HashMap30连问,彻底搞懂HashMap

文章目录一、背景知识1、什么是Map?2、什么是Hash?3、什么是哈希表?4、什么是HashMap?5、如何使用HashMap?6、HashMap有哪些核心参数?7、HashMap与HashTable的对比?8、HashMap和HashSet的区别?…

如何使用postman做接口测试

1、get请求传参 只要是get请求都可以在浏览器中直接发: 在访问地址后面拼 ?keyvalue&keyvalue 例如:在浏览器中直接输入访问地址,后面直接拼需要传给服务器的参数http://api.nnzhp.cn/api/user/stu_info?stu_name小黑2、post请求&…

【狂神说】分析前后端分离开源项目?

文章目录1.如何分析开源项目项目简介项目源码2.观察开源项目3.开源项目下载4.跑起来是第一步5.前后端分离项目固定套路6.如何找到一个开源项目1.如何分析开源项目 学习的方式: 不知道这个代码怎么来的这个代码跑不起来这个项目对我们有什么帮助,不会模…

设计公共API的六个注意事项

摘要:俗话说:“好东西就要贡献出来和大家一起分享”,尤其是在互联网业务高度发达的今天,如果你的创业公司提供了一项很酷的技术或者服务,并且其他用户也非常喜欢该产品,在这种情况下,最好的解决…

go 交叉编译

golang中windows交叉编译 env GOOSlinux GOARCHamd64 go build .打包镜像 FROM alpineMAINTAINER "congge"ADD ./casino_niuniu /usr/local/casino_niuniu/bin/casino_niuniu ADD ./templates /usr/loca/lcasino_niuniu/bin/templates ADD ./public /usr/local/casin…

P3193 [HNOI2008]GT考试

传送门 容易看出是道DP 考虑一位一位填数字 设 f [ i ] [ j ] 表示填到第 i 位,在不吉利串上匹配到第 j 位时不出现不吉利数字的方案数 设 g [ i ] [ j ] 表示不吉利串匹配到第 i 位,再添加一个数字,使串匹配到第 j 位的方案数 那么方程显然为…