最有价值的编程忠告

摘要:本文是来自贝尔实验室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,一经查实,立即删除!

相关文章

Column count doesn't match value count at row 1 原因

mysql 提示 : Column count doesnt match value count at row 1错误,SQL语句中列的个数和值的个数不等, 如: insert into table1 (field1,field2) values(值1,值2,值3 ) 列只有2个,值 却有3个…

MarkDowm快捷键大全

文章目录一:菜单栏二:文件三:编辑四:段落五:格式六:视图一:菜单栏 文件:altF 编辑:altE 段落:altP 格式:altO 视图:altV 主题&#x…

Kinect2.0-空间长度测量

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

带数据库的智能合约

编写使用数据库的智能合约 前面一直在捣鼓EOS网络搭建的相关东西。然而今天比较不走运的是,兴致勃勃的把源码版本升到4.0,在编译的时候如我所猜想的出现了一系列问题,正一筹莫展的时候,导师突然问了我一个关于合约如何操作数据库的…

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

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

Eclipse断点调试出现Source not found

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 我的情况是和网上说的都不一样,我真的也没有想到这么坑, 我居然无意写了一个死循环,dao/mapper调sql…

Memory Compression这到底是个什么东西?

Memory Compression这到底是个什么东西? Memory Compression这个进程,经过我的查询说是内存压缩功能,作用是压缩内存让内存占用更低,但是为什么这个进程疯狂占用我的内存,我用的Win10 8G,通过资源监视器查看…

MySQL 5.6 for Windows 解压缩版配置安装

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行。但是官网给出的安装包有两种格式,一个是msi格式&#xf…

safari的一些问题

1、图片过大时,在webview中是不会加载显示的。2、如果是通过一个地址返回的base64数据给image,记住要在后台进行base64_decode解析数据,这样才是真实的图片数据,后台保存数据的时候不要保存"data:image/png;base64,"这一…

代码审查“思维导图”

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

thinkCMF----导航高亮显示

导航高亮显示&#xff0c;有多种方法&#xff0c;这里给出一个简单的表示下&#xff1a; <a href"__ROOT__"><span class"text db">网站首页</span><span class"eng db">HOME</span> </a> …

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

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

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

摘要&#xff1a;在这个世界上有两种程序员&#xff1a;Day Programmers&#xff08;白班程序员&#xff09;和Night Programmers&#xff08;夜猫子程序员&#xff09;&#xff0c;你知道优秀程序员和一般程序员有哪些差别吗&#xff1f;你又是哪一类型的呢&#xff1f;俗话说…

7. Oracle数据加载和卸载

在日常工作中&#xff1b;经常会遇到这样的需求&#xff1a; Oracle 数据表跟文本或者文件格式进行交互&#xff1b;即将指定文件内容导入对应的 Oracle 数据表中&#xff1b;或者从 Oracle 数据表导出。其他数据库中的表跟Oracle数据库进行交互。若是少量数据&#xff1b;可选…

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

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

瞧瞧苹果OS X如何干掉Linux

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

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

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

eclipse安装JAVA反编译插件

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

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

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

初识react(二) 实现一个简版的html+redux.js的demo

回顾 初识react(一) 揭开jsx语法和虚拟DOM面纱初识react(二) 实现一个简版的htmlredux.js的demo初识react(三)在 react中使用redux来实现简版计数器初识react(四) react中异步解决方案之 redux-saga初识react(五) 数据流终极解决方案 dva(零配置)前言 首先纠正个误区&#xff0…