注:Eric Lippert 是前微軟 C# 編譯器團隊的首席開發師,從1996年起一直在微軟開發部門任職,協助設計並實現 VBScript、JScript、JScript .NET、Windows Script Host、Visual Studio Tools for Office 和 C#。同時,他也是 C# 語言設計團隊的成員之一。
本文是一篇Fog Creek網站對Eric Lippert的專訪,以下為採訪摘譯:
今天我們的嘉賓是Eric Lippert,Coverity的軟體架構師,此前在微軟C#編譯器團隊首席開發師,也是C#語言設計團隊的成員之一。
幾個主要的程式設計著作:Essential C# 和 Visual Basic .NET Code Security Handbook ,在他的部落格上有很多關於程式設計的文章,也常出沒於 StackOverflow。
你是如何進入軟體開發行業的?
Eric Lippert:我六七歲時在學校圖書館接觸到了Commodore PETs,PET有專門的校園版,而且還附帶 Waterloo BASIC 晶片。
起初,我放學後就會去玩Dam Buster,而且還玩到很晚,但我很快意識到可以編寫自己的東西。我有一本可用來練習BASIC的書,所以我就在家裡的圖紙上寫程式碼,然後在放學後去輸入並看是否能執行——讓一個火箭飛行在螢幕上。我小學圖書館的管理員允許我晚歸,以及借閱一些關於程式設計和數學的書籍。後來我在LinkedIn聯絡到她,談起過往的日子每每都很感動和暖心。
我十歲時,在別人的程式中發現了人生中的第一個bug。我的小學老師有一個數學快閃記憶體卡程式,有時候會輸出錯誤的答案,老師問我看能不能解決這個問題。其實,這對於我是極大的挑戰,心想這必然是一個極其複雜的程式,但我認為我需要去找到錯誤所在,至於是否真正意義上的理解是另外一回事。所以我開始讀程式的每一行程式碼,並獨立測試。我已經忘記了那個bug的具體細節了,但和這個類似:
1 2 |
1230 IF X > 10 THEN PRINT (X – 10) * Z 1240 IF Y > 10 THEN PRINT (X – 10) * Z |
第二行出現了錯誤,X本應是Y。在現代的程式設計環境中,有人會認為這是由於複製貼上產生的錯誤,可那個年代的編輯器是沒有這個功能的,必然是誰在編寫程式碼時分心所導致的。
我大概在1983年得到了我的第一臺電腦——Commodore 64,在這裡也要感謝我那偉大的媽媽。
我最值得驕傲的一個程式就是一個書籍資料庫,讓我可以追蹤、管理我的書,那時我十一歲。之後,我還做了個比較靚的視窗管理器,可以在螢幕上實現開啟、關閉視窗。
我沒有接受過正式的程式設計訓練,只是偶爾會去學校董事會建立的計算機實驗室。即使到了高中,更多的也是自學。在高中暑假我去WATCOM(因編輯器和資料庫出名)做實習生,他們教我用C語言程式設計、如何使用偵錯程式、如何建立一個有限狀態機……等到我拿到學位後還在WATCOM工作過一段時間。
我在University of Waterloo取得了雙學位:應用數學和電腦科學,儘管其中的電腦科學和計算機程式設計區別還比較大。
你目前在做什麼?
Eric Lippert:我是一名軟體工程師,在Coverity從事C#程式碼分析,也就是Synopsys的新部門。而Coverity是做程式碼審查和檢測軟體的公司,比如找出C、C++、Java 和C#程式碼中的缺陷。
我一天的工作需要做的事情很多,包括一些管理方面的事情:review bug報告、測試案例和程式碼等。我雖然不需要寫大量的程式碼,但也有一些自己程式設計任務。與此同時,我還需要指導我的同事,他們是在Unix上寫C ++的好手,可這與Windows上寫C#有著很大的不同,我要給他們分析“The Microsoft Way Of Thinking”與他們過去做法的不同。
我還有一些其它工作外的技術活動,例如Mark和我在編寫C# 6.0的著作,其次是在O’Reilly上錄製程式設計教學視訊。
你在程式設計時才最開心嗎?
Eric Lippert:我建議很多程式設計師在開始的時候,先去感受找出bug的喜悅,而不應該第一時間去編碼。我從來都不知道快樂的源泉是什麼,可至少我在除錯我構建的程式碼時是開心的,經過一次又一次的除錯讓程式執行起來。
對於這個問題,首先我很享受編碼,其次樂於通過構建subsystems 來解決一些問題。在Roslyn專案(微軟公司開源的 .NET 編譯器)工作時,需要重寫C# 和 VB編譯器,且很多工作始於一張白紙。
你的開發環境是是怎樣的?
Eric Lippert:Coverity是一家有Unix的背景的公司,很多情況下都預設Unix開發環境,而我一直是在Windows裝置上開發,所以使用Cygwin(小型的UNIX模擬環境)來獲得基於UNIX的開發環境。我同事一直用的都是Ubuntu,只是在測試時用Windows。當然,對於那些基於C#的產品,我還是使用了Visual Studio 2013 。
我使用的工具是ProcMon,在許多開發者的工具盒中應該是沒有的。
另外,我在自己的小世界裡程式設計時,音樂少不了,小清新居多,根據心情會聽這些人的歌曲或這些歌:Stacey Kent、Glenn Gould、Goldberg Variations、Diana Kral、Philip Glass、Daft Punk、Pink Floyd、Sondheim musicals……
我有個怪癖,如果不使用Visual Studio,我就會用1990年版WATCOM VI。
你最喜歡什麼開發書籍?
Eric Lippert:你採訪過Jared ,他現在微軟做我以前的工作,他推薦的兩本書很不錯:《The Pragmatic Programmer 》和《Purely Functional Data Structures》。
我順著再推薦一本書就是《The C# Programming Language》。
編寫技術圖書是我的一個愛好,對於最喜歡的書籍,只要是我編寫或者參與編寫的我都愛,最最喜歡就是 Jon Skeet的書《C# In Depth》,因為這本書你幾乎發現不到什麼錯誤。很多讓我推薦書籍,我通常處理這本還有就是《Essential C#》,只選其一的話肯定是前者。
你目前最想嘗試的技術是什麼?
Eric Lippert:我昨天和Jon吃晚飯時,聊了很多Docker,在這方面沒什麼經驗,會抽空去好好了解下。
不寫程式碼時你喜歡做什麼?
Eric Lippert:Ricky Jay在電影《Spanish Prisoner 》(西班牙囚徒)中有段話非常好:
where he says that when your hobbies interfere with your work, that’s great, but when they interfere with each other, you’ve got a big problem. Boy, do I know all about that.
我的愛好:
- 編寫書和錄製視訊,但都與C#有關
- 寫部落格
- 帆船
- 修葺108歲的靠房子
- 做木工,對做家居等很有興趣
- 在後院自己鑄造金屬工具
- 彈鋼琴
- 在StackOverflow上回答問題
愛好很多,我喜歡讓自己忙碌起來。
你會給剛進入開發領域的年輕人什麼建議?
如果時光能夠倒流,我會對年輕時的自己說:認認真真地去學習 Commodore 64 彙編程式,因為我很恐懼組合語言,至今我讀機器語言的能力還是很弱。
對於如今的年輕人,請你們從今天開始好好學習計算機程式設計,這可以讓你學會如何寫清楚非程式碼文件。一個好的開發者,寫正確的程式碼是遠遠不夠的,你還需要去教會別人如何使用它,並相信別人所做的一些改變和創新。
另外,溝通是關鍵。
話說回來,對於年輕人最實際的建議就是,找一些小的主題,儘可能的瞭解使用者的需求,並清楚、準確地寫下來,或者針對小主題中出現的問題給出有說服力的迴應。很快你就會成為這個主題領域的專家,自然而然地你也就會學到很多東西。