最有價值的編程忠告

摘要:本文是來自貝爾實驗室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.pswp.cn/news/450853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450853.shtml
英文地址,請注明出處:http://en.pswp.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…