Bob大叔:程式設計“老師傅”和他的職業素養(圖靈訪談)

盼盼姐發表於2012-09-28

圖靈訪談之三十五:專訪Bob大叔Robert Martin

Robert C. Martin,世界級軟體開發大師,設計模式和敏捷開發先驅,敏捷聯盟首任主席,C++ Report 前主編,被後輩程式設計師尊稱為“Bob大叔”。20世紀70年代初成為職業程式設計師,後創辦Object Mentor公司並任總裁。Martin還是一名多產的作家,至今已發表數百篇文章、論文和部落格,除本書外,還著有《程式碼整潔之道》、《敏捷軟體開發:原則、模式和實踐》、《UML:Java程式設計師指南》等。他最近創辦了cleancoders.com網站,專為軟體開發人員提供教育視訊。

enter image description here
圖靈訪談之三十五:Bob大叔和他的《程式設計師的職業素養》(英文版)

圖靈社群:《程式設計師的職業素養》這本書的中文譯者(章顯洲)感覺本書和宮本武藏的《五輪書》似乎有些內在的聯絡?請問你讀過那本書嗎?或者你是否受過其他東方哲學的影響呢,比如說“禪”?

Uncle Bob: 十分抱歉,我沒有讀過《五輪書》,但是這本書聽起來是我喜歡的型別。話說回來,我倒是曾經學過“柔術”,還學了很多年。這段經歷讓我學到了很多可以應用到“工藝”上的道理。

圖靈社群:《程式設計師的職業素養》、《程式碼整潔之道》、《敏捷軟體開發》這三本書的封面都和星雲有關。如果這不是一個巧合的話,你想通過這些圖片來表達什麼呢?作為一個集合,這三本書有什麼內在聯絡(也許在未來這個合集會繼續擴充)?

Uncle Bob: 從很小的時候開始,我就一直對太空充滿了好奇。我記得曾幾何時,我們並沒有任何行星的近距離照片,甚至連月亮的都沒有。我還記得漫遊者號在月球表面拍回來的照片。我記得尤里·加加林,艾倫·謝潑德和斯科特·格倫的任務。我也曾見證阿姆斯特朗踏進“寧靜之海”的偉大時刻。在我的人生中,我見過每個行星的近距離照片,以及很多小行星的照片。我曾看見機器人在火星表面爬行,降落在泰坦(土星最大衛星)表面的冰殼上,也曾看見它們從金星深深的峽谷中掙扎著傳送出簡短的資訊。我曾見過地球的“暗淡藍點”,它在“旅行者1號”透過土星環,面向地球拍攝的照片中雖然只佔了一個畫素,但是這張照片讓我激動不已。我們做到了!

星雲、星星,以及行星的照片讓我書的封面容光煥發,它時刻的提醒著我們大家,當人類全心投入地工作,並用十分的紀律要求自己時,我們可以成就些什麼。

圖靈社群:你從一位職業的程式設計師變身成為這個領域的導師,在這過程中有人影響過你嗎?在這背後或許有些我們不知道的有趣故事吧?

Uncle Bob: 我職業生涯中的直接導師並不多。我成長的年代中,並沒有很多有經驗的程式設計師。所以我的導師都是來自於一個間接的來源——我通過讀一些傑出人物的著作來成長,這些人包括Grady Booch(《UML使用者指南》作者), Tom DeMarco(《專案百態》作者), Meilir Page-Jones(《UML 物件導向設計基礎》作者), Erich Gamma(《設計模式》作者), Martin Fowler(《重構》作者), Bertrand Meyer(《物件導向軟體構造》作者), Kent Beck(《測試驅動開發》作者),等等。

我感覺這些教導都是充滿價值的,我本能的就想迎頭而上。於是,我開始寫作。一開始我只是在網際網路上的新聞討論組中寫。然後我開始為雜誌寫文章。然後就是書了。而現在我在為 cleancoders.com製作視訊。我也在技術會議上講話,在此過程中,我發現自己對於站在人前傳達資訊這件事頗有天賦。你所說的“變身” 對我來說是一個緩慢的過程。我花了整整20年來積累工作經驗,又花了20年才做到今天的成就。“變身”從來都不是我意料之中的事,也不是我的目的;但這個過程對我來說是一種享受。

圖靈社群:我們都聽說過很多功成名就的程式設計師的故事,他們中的很多人似乎從很小的時候就展露出程式設計方面的天賦,長時間的工作對於他們來說似乎是一種享受。但是,有很多程式設計師卻沒有如他們那樣的激情,但是他們也將程式設計作為自己的職業。這些普通的程式設計師可以有朝一日成為很棒的“專業”程式設計師嗎?你覺得程式設計師從某種角度來說是天生的嗎?

Uncle Bob: 狗就是狗,貓就是貓。人類卻可以成為你想成為的任何人。對於人道來說,沒有比這更重要的了。人類可以選擇我們想要的結局,也可以改變自己的命運。

你問我“普通程式設計師”可以變得“專業”嗎。當然可以!但是隻有他們自己有這樣的渴望時才可能。我們產業所面臨的最大問題就是發現這樣的人才,並讓這些人也願意把自己的意願傳播給其他人。

在這點上我們可以從醫生那裡學到很多。當有人想加入到我們的行列中來時,我們要學會變得冷酷無情。成為一個“程式設計師”應該像變成一個“醫生”那樣困難。因為事實上,我們就是資訊科技界的“醫生”。而我們文明的生命根源正是來源於我們所從事的科技。在經濟交易、工廠運營、每部電梯、每輛汽車、每個鬧鐘,以及每個微波爐的背後流淌著的都是我們的程式碼。我們的程式碼控制著一切。文明也是依附於此。要承擔這麼大的責任,就要保證“程式設計師”之名不是簡簡單單就可以獲得的。

圖靈社群:在程式語言日益提倡提高程式設計師生產力的今天,Java作為一門老牌語言仍然沒有為提高生產力提供多少語言層面的幫助,您對這一點是怎麼看的?您是否認為Java應該發展得更快一些?

Uncle Bob: 語言來語言往。在我的職業生涯中我曾親歷過Fortran, Cobol, PL/1, Pascal, C, C++, Java, C#, 以及 Ruby的發展之路,模式都差不多。它們都曾風靡一時,然後就會滯入發展的泥潭。通過一張波浪起伏的圖表就能看得清清楚楚了。而在程式設計領域讓你的事業屹立不倒的關鍵就是要在這樣的波浪中弄潮。

你現在所使用的語言會和你五年後用的語言不一樣。所以最好你現在就開始學習那種新的語言!所有在事業上取得長足成功的程式設計師都知道如何從一個浪尖上跳到另一個浪尖上。他們能夠感知到一種新語言的來臨,並在很早的時候就開始學習它。而在這種語言正當紅的時候,他們就可以是某種程度的專家了。當他們真的變成專家的時候,他們卻沒有止步不前,而是時刻關注著周遭形勢尋找著下一種新的語言。

沒有比一個程式設計師無法完成語言間的轉換更悲劇的了。跟隨著一種語言直到其覆滅是絕望而壓抑的。

Java和C#在很久以前就已經登頂了,而Python和Ruby正在冉冉成為明日的王者。JavaScript和Clojure就像早上初生的太陽,還在它們的地平線上。

圖靈社群:敏捷似乎成為了一個很寬泛的概念,圖靈出版過很多這個領域的經典書籍,比如《重構》、《持續交付》、《例項化需求》等,也還有您正在實踐的《番茄工作法》。有些人(包括Martin Fowler在內)指出現在確實存在很多“偽敏捷”的方法,你有見識過類似的東西嗎?這方面有什麼經驗和我們分享嗎?

Uncle Bob: 敏捷其實是一個很簡單的概念。四項基本的宣言:個體和互動高於流程和工具;工作的軟體高於詳盡的文件;客戶合作高於合同談判;響應變化高於遵循計劃。當這些概念被合理地運用時,就會取得成功。但是可悲的是,我見過在很多地方人們使用“敏捷”這個詞但是卻沒有顧及到這些原則。

我們必須要看看這第一條原則。個體和互動高於流程和工具。敏捷不是流程和工具。敏捷是人。Scrum是流程和工具,而Scrum不是敏捷。Scrum也可以是敏捷,但是要有人把它變成敏捷才可以。極限程式設計是一系列的原則,它不是敏捷。XP可以是敏捷,但是必須要有人的參與。

關於人,我還有一點要說。人們想做讓人稱道的事。人們也想為自己所從事的事情而自豪。任何工具或者流程如果讓人們在自己的工作環境中感到舉步維艱,那它就不能被稱為敏捷,因為這樣的工具和流程並沒有退後於人(個體和互動)。這就是“工藝運動”的主要原因。這就是我們為何要把重點放在如何寫出優質的程式碼上的原因。這就是我們常說欲速則不達的原因。任何流程或工具成為敏捷的唯一條件,就是它必須要讓人們以自己的工作為傲。

圖靈社群:上次Martin Fowler來中國的時候,有人把他認成了您,場面有些尷尬,呵呵。話說回來,有讀者反映Kent Beck, Martin Fowler,以及Bob大叔是他們最喜愛的作者。您認識這些大牛嗎?在這個領域好書林立的今天,您是怎樣定位自己和自己的作品的?

Uncle Bob: 我和Martin Fowler很熟。我們從很早以前就總有機會在一起工作。事實上,在2001年,正是我和他召集了創造出“敏捷宣言”的聚會。Kent Beck和我也曾在一起共事過。在1999年的時候,我們組織了一系列的小型會議和培訓課程,叫做“深入極限程式設計”。這些人既是我的老師也是我的朋友。我非常非常地尊敬他們。

圖靈社群:《程式設計師的職業素養》介紹了許多您親身實踐過的真知灼見,記得《敏捷軟體開發:原則、模式和實踐》一書是您父子二人合著的,請問Bob大叔最初教給兒子(Micah Martin)的是哪點/些建議?

Uncle Bob: 我把兒子教育得很好,以至於現在他成了我的老闆。7年前,他開創了自己的公司,8th Light Inc。這是一家講求“軟體工藝”的公司,正在快速地蒸蒸向榮地發展。去年我獲得了 8th Light公司的“老師傅”稱號。我很為這項榮譽感到自豪。我覺得時至今日,比起我給他的建議,他應該能給我更有價值的建議。

有一點我曾教給我兒子但是並沒有出現在《程式設計師的職業素養》這本書中的建議是:最好的學習方法就是教授。

圖靈社群:在你的書中你說過,一位想成為專業程式設計師的人每星期應該至少花20個小時學習專業知識,如果有人想依此法行之,你有什麼書籍想推薦給他/她嗎?你是如何緊跟科技發展新動向的?

Uncle Bob: 我通過每天大量的閱讀來緊跟科技發展。我在推特和臉書上關注了很多人,我每天也閱讀大量的部落格和文章。我一直都在尋找值得一讀的好書。

我認為有一本書每個人都應該讀一讀,那本書叫《計算機程式的構造和解釋》,作者是Abelson和Sussman。這本書在網際網路上是免費的。你也可以下載MIT提供的講座視訊。如果你從來都沒有讀過這本書的話,那這本書一定會讓你的世界地動山搖。

圖靈社群:作為讀者,我們急切地想知道你打算什麼時候寫你的下一本書,有什麼值得關注的話題將出現在下一本書中嗎?你會考慮一些比較前衛的出版方式嗎?比如電子出版、自出版之類的?

Uncle Bob: 我想我會堅持行將就木的傳統出版。我的出版社一直對我很好,我不會背棄他們,我會把我們這樣的良好關係保持下去。我的下一本書可能會叫做《架構整潔之道》(Clean Architecture)。這本書的內容是關於架構師所要面臨的技術挑戰。我會在書中解讀一個優秀架構師存在的意義,以及作為一個優秀架構師所應該掌握的技能技巧。


更多精彩,加入圖靈訪談微信!

相關文章