非商業轉載請註明作譯者、出處,並保留本文的原始鏈接:http://www.ituring.com.cn/article/217172
張銀奎
Intel 英特爾軟件架構師,系統調試專家
畢業於上海交通大學信息與控制工程系,長期從事軟件開發和研究工作,對 IA-32 架構、操作系統內核、驅動程序、尤其是軟件調試有較深入研究。從2005年開始公開講授“Windows內核及高級調試”課程,曾在微軟的Webcast 和各種技術會議上做過《Windows Vista內核演進》《調試之劍》(2008年中國軟件技術大會)《感受和思考調試器的威力》(CSDN SD2.0大會)《Windows啓動過程》《如何診斷和調試藍屏錯誤》《Windows體系結構——從操作系統的角度》(以上三個講座都是微軟 “深入研究Windows內部原理系列”的一部分)等。
著有《軟件調試》《格蠹彙編》,擔任雜誌《程序員》中“調試之劍”的專欄作者,創建高端調試網站(ADVDBG.ORG)。
翻譯(合譯)作品有《觀止——微軟創建NT和未來的奪命狂奔》《數據挖掘原理》《機器學習》《人工智能:複雜問題求解的結構和策略》等。
個人情況
非常感謝您能接受圖靈的訪談。作為軟件調試方面的專家,您從什麼時候開始對軟件開發和研究產生興趣的?
讀高中時,我第一次接觸到計算機,學習了一點點BASIC語言編程。1992年上大學後,我開始比較多的接觸計算機,並系統地學習編程。那時候,計算機還沒有普及,大家只能到學校的計算機房上機練習。通常,我先把代碼寫在本子上,到了機房後再輸入到電腦裏編譯執行。剛開始學習編程時,遇到過很多困難,有些概念也搞不清楚。於是,我經常跑到圖書館翻閲相關的圖書或者到昂立書店買些計算機方面的書。大約到了大二下學期,我和幾個同學合夥買了一台個人電腦—486。記得當時花了9000多元,在華山路的一家店裏買的,最後打車才運回學校。於是我有了更多的上機練習機會,開始寫各種各樣的程序,有時也編寫一些比較複雜的程序,比如DOS操作系統中的TSR程序。就這樣,我便逐漸喜歡上了編程這件事。
根據多年的研究和實踐,請您總結下自己調試軟件的方式,或者説,對抗瑕疵軟件採取的步驟?能否向讀者介紹幾種對抗問題軟件的高效工具?
軟件的問題五花八門,調試軟件的方式也有很多種。通常,應該根據問題的特徵選擇合適的方式。比如看源代碼、查日誌等。我最喜歡用的方式還是使用調試器,用的最多的有WinDBG和GDB。有時,我也會用一些系統分析工具,比如VTUNE、WPT等。
據瞭解,您將在7月23-24日參加由麥思博主辦的上海MPD軟件工作坊進行技術分享, 能否簡要介紹下此次的分享主題?
我一直堅持技術路線,幾乎每天都寫代碼和調試。軟件的技術變化很快,如何能不被淘汰呢?我的方法是持續專研軟件產業中那些“永恆”的難題。在相對穩定的“戰地”上開闢道路、建立領地。軟件瑕疵是個永恆的難題,我在這方面投入了很多時間,探索出了一套以調試器為核心的方法。與瑕疵和調試相關的另一個永恆難題就是軟件的安全性。安全漏洞,可以説是一種特別的瑕疵。發現和研究安全漏洞離不開調試方法。最近幾年,我的大部分時間都花在軟件安全和滲透測試上,在這次的上海MPD上,我會分享《針對WEB應用的滲透測試工具和測試方法》。
在軟件領域,您最崇拜哪些人,他們對您的幫助、影響很大?
我很崇拜David Cutler ——全世界公認的Windows NT之父,我們現在最常用的從XP開始直到Win7全部都是NT的內核,只是版本號不一樣。
作為NT內核的主要締造者,David在NT內核中設計的很多機制,比如兩輪異常分發,以及非常易於調試的資源鎖,都是我非常欣賞的。他的編碼風格和軟件價值觀對我影響很大。
除了技術領域,我瞭解到,您還特別崇拜人文領域的孔孟、朱子。可以給我們分享一些先哲們對您影響最深的思想嗎?
是的,我很喜歡讀《論語》,裏面站着一個活生生的孔子。他喜歡讀書育人,真誠不虛偽。我也的確很喜歡讀朱熹的書,比如《朱子語類》和《四書集註》。我喜歡朱熹總結出的“格物”思想,到現實中去,學習具體的人情物理,不抽象不空洞,很適合科學研究。
相當一部分技術工作者,或者擴展至大部分當代人都有點“實用主義”,他們很少涉略古籍,更沒有閒情賦詩。您如何看待這種現象?或者説,古籍和古詩給您帶來了哪些體驗?
這個話題好大。黃永玉先生在他的長篇自傳體小説《無愁河的浪蕩漢子》裏曾説過,“要做一個有情致的人”。這句話很合我意。不管平凡還是偉大,要做一個別致有趣的人。技術的東西很呆板,過分拘泥就會變得乏味無趣。讀古籍卻可以穿越時空,思接千載,體味古人的喜怒哀樂,學習他們的智慧,感悟他們的情懷。
著書與寫作
您寫的兩本書《軟件調試》《格蠹彙編》,受到了讀者的一致好評。兩本書的側重點有哪些不同?《格蠹彙編》的案例來自哪裏?
兩本書都是關於軟件和調試的,探討的角度不同,前者以理論為導向,後者是“以案説法”。用宋儒的“理一分殊”思想來解説,前者是那“一理”,後者是“散為萬物”。《格蠹彙編》中的案例都是我自己親歷的,也可以説,它們是我堅持奮戰在軟件開發第一線的收穫。
創建高端調試網站(ADVDBG.ORG)的初衷是什麼?經營網站的過程帶給您哪些專業方面的提升和生活方面的體驗?有沒有想過讓網站走入商業模式?
創建高端調試網站的時候,目的很單純,就是想借用這個平台,分享調試方面的知識,結識同好。十幾年過去了,通過網站我確實結識了很多好朋友。豐富網站內容的過程,也促使我養成多讀、多寫的習慣。把點點滴滴的讀書體會寫成文章,對於寫書也是有幫助的。
我沒有想過把網站進行商業化處理,也不喜歡網頁上的漫天廣告,特別討厭那些飄呀飄的“東西”,所以高端調試網站從沒有發佈過商業廣告,十幾年下來,一直堅持技術交流、知識共享。
如何做到本職工作和業餘寫作、網站創建兩不耽誤的?有什麼高效能習慣分享給大家?
這沒有什麼竅門,只是少把時間用在其它方面。
前人之鑑,後人之師
回顧自己學習軟件調試的過程,自己走過哪些彎路,遇到過哪些困難?如何解決的?
我始終覺得有時花點笨力氣、稍微繞一點遠或者走一點彎路也不是什麼壞事情。所以我不在意自己在技術方面走過的彎路,記不住了。
對於有志進入軟件調試領域的青年人,有哪些推薦的書籍?有哪些建議?
調試是一門以實踐為主的技術,多動手操作是關鍵。建議大家先學一點基本的用法,然後就開始實踐,遇到問題後再找書或者找資料看。可以選幾個《格蠹彙編》中的案例,邊讀邊做,逐步入門後可以結合自己工作中遇到的實際問題來檢驗自己的水平,發現差距再學習。如此往復,“今日既格得一物,明日又格得一物,工夫更不住地做。如左腳進得一步,右腳又進一步;右腳進得一步,左腳又進,接續不已,自然貫通。”(朱熹語)
再次感謝張銀奎老師,花費寶貴的時間,接受圖靈的訪談!