技術人攻略訪談十四:Dave Thomas——生命不息,編程不止

請輸入圖片描述

文:Graciahtml

導語:本期採訪對象Dave Thomas,是一位從業近40年的大神級人物,他和Andy Hunt於1999年合著的《The Pragmatic Programmer》(中文譯名《程序員修煉之道》),是歷史上最暢銷的開發指南書籍,曾得到Jolt大獎,影響深遠。Dave是敏捷宣言的17位發起人之一,Ruby語言的支持者和傳播者,正是他對Ruby語言的傳播,使Ruby逐漸成爲與Perl,Python齊名的語言。2003年,他和Andy Hunt 成立了The Pragmatic Bookshelf出版公司,致力於出版軟件開發相關書籍,並用開發軟件的方式實現了圖書出版業的重大突破。前端

Dave Thoma是一位使人尊敬的大師,更是一位偉大的程序員。在近40年的從業生涯中,他從未間斷過編程,並時刻保持旺盛的好奇心和探索新技術的熱情。在Ruby Conf China 2013大會上,Dave接受了技術人攻略的訪談邀請,並在回信中100%地確定了技術人攻略「傳遞技術熱情」的理念:程序員

「I think your ideas about spreading passion are 100% correct. I would
love to help spread this message.」數據庫

但願大師的訪談能夠鼓勵更多還在奮鬥的程序員,技術人攻略也會繼續把這種對技術的熱愛傳遞給更多的人。編程

1. 技術人攻略:您從何時開始接觸編程?編程帶給了您什麼樣的樂趣?在不斷超越自個人過程當中,是否遇到過什麼困難,是否曾有過想放棄的時刻呢?

我初次接觸編程是在1972年,那時我還在英國上高中。有一部分人提早完成了考試,在學校沒有別的事情可作。正巧校園對面的科技學院開設了編程課,因而咱們申請了參加這個一週兩次的課程。segmentfault

我最初打算學數學專業,但當我開始編程,我慢慢愛上了它。後端

那時候我用Basic語言,將代碼敲到紙帶上,經過一臺110波特的調解器將數據傳到大型機上運行。雖然如此麻煩,但我發現編程十分符合個人大腦的運做方式——我喜歡這種創造性和精確性兼備的體驗。瀏覽器

從那時開始,我從未間斷過編程。我十分肯定——除非是在度假的時候,我生命中的每一天都離不開寫代碼。安全

我也經常會有感到艱難的時候,但每次考驗過去以後,你的技藝都將更上一層樓。全部值得作的事情都是困難的,但克服這些挑戰不只會讓你更強大,還會讓你變得更加投入。服務器

2. 技術人攻略:咱們處在一個快速變化的時代,新的技術層出不窮,程序員應該如何保持和這個世界同步,持續提高本身的競爭力?

想要跟上技術更新的速度愈來愈難。當我開始編程的時候,主要經過閱讀書籍和雜誌瞭解進展,但如今幾乎天天都有新概念出現。

但事實上不少的新事物只是人們對舊東西的再發明。咱們行業裏的許多人,眼光只看向未來,對計算機的歷史卻知之甚少。這些人想要創造東西(固然是好的),但他們並不知道本身想作的東西在20或30年前已經實現了。

正由於如此,許多新生成的事物其實並無那麼新。對我來講,要跟上潮流就變得簡單了,由於看到它們就會讓我想起「啊,這和X很像呢」。

但同時,也確實有一些不錯的創新。我每月總有那麼一到兩次,會遇到頗有意思的東西,讓我有興趣去嘗試一下。閱讀技術內容是有趣的,但只有經過嘗試才能認識得更加深刻。

這很花時間,但對於程序員來講這種投入很是重要。若是不這麼作,很快咱們就會被淘汰。

3. 技術人攻略:在大公司裏,職位被劃分得很細,例如前端、後端、運維、數據庫等,程序員被固定在了公司設定的職位上,您認爲程序員應如何提高技術的廣度和深度?

專業化分工屬於昆蟲世界。真正可以改變世界的人:他們具有更加普遍的能力,並能將不一樣的技術結合起來創造價值。

我認爲不少公司並無意識到這點,他們更樂於創造層級制度和把員工限制在某個職位上。

可是也有些不同的公司,懂得經過制定目標和提供指導讓程序員有最好的產出,而不是監督全部的細節。這些公司理解一個優秀的程序員能夠同時勝任數據庫設計、規劃應用部署,也許還喜歡解決技術支持方面的問題。

我鼓勵年輕程序員獲取一些在不一樣的公司工做的經驗,以尋找適合本身的工做方式。例如試試在大公司和在創業團隊工做有什麼不一樣,甚至嘗試下獨自工做。一旦你瞭解了本身適合的方式,就能夠找到或者創造出合適的職位,讓本身作得更好。

做爲一名員工,很容易抱怨本身的公司,或者懷有這樣的想法「我就是一個普通人,沒有能力改變什麼」。但事實上,你有責任做出改變——讓事情變得更好。這種責任不只是對公司的,並且也是對本身的。看看你是否能讓公司有所改變,若是沒法改變現狀,那麼你應該換一個更適合本身的環境。

4. 技術人攻略:《The Pragmatic Programmer》影響了很是多的人,若是這本書出修訂版,您打算作哪些改變?今天,一個講求實效的程序員正在作些什麼?

我和Andy Hunt經常會討論這件事。實際狀況是,雖然書上的案例看上去古老了一點,但背後的概念仍然很適用。不管你是作C++仍是Javascript編程,DRY(注:DRY即Don’t Repeat Yourself,不要重複本身)原則仍然適用:)

我我的認爲能夠修改或者去掉一些小的tips,但沒什麼大問題。

如何作一個高效的程序員:do what works, and work at what to do。「do what works」意味着你應該不斷問本身「我正在作的事情有什麼樣的價值?」,天天都嘗試尋找提高所作事情價值的方法。「work at what to do」意味着要時常回顧,從全局角度看問題,而且尋找改進工做的新方法。

5. 技術人攻略:您是一名技術高手,又擁有本身的軟件公司,您以爲程序員應該創業嗎?程序員創業有哪些優點和劣勢?

這是一個很棒的問題,但我也還不知道答案。

個人一個弱點在於我喜歡讓事情保持簡單——我認爲大多數程序員都喜歡這點。但現實世界——公司運做的世界,並不簡單。我不得不克服把事情過分簡單化的誘惑,由於我知道這樣會讓本身錯失機會。

我認爲程序員從事商業,最重要的強項在於咱們懂得事物的關係如何。管理代碼的原則,一樣能夠用在管理公司上,這也是The Pragmatic Bookshelf這家出版公司成功經營的緣由之一。咱們在一開始的時候,並不知道圖書出版公司該如何運行,因此咱們採用了管理軟件公司的方式去產出圖書,而不是產出代碼。結果,咱們將版本控制、持續系統構建,以及全自動化等方式運用在了商業運營的方方面面。其它出版商沒法作到這些,咱們對於出版行業的無知成爲了最大的優點。

6. 技術人攻略:在Ruby大會上據說您最近在關注一門新語言Elixir,它爲何吸引您?您會像推廣Ruby同樣去推廣這門語言嗎?它是否表明了接下來的技術流行趨勢?

我很是確信將來的世界屬於並行和分佈式,五年以內,還要編寫一個從頭至尾順序化執行的程序,這將是一個笑話。

但同時咱們並無擁有真正可讓咱們建立分佈式和並行系統的工具,用Ruby或Java寫並行代碼很容易出錯,用Javascript也一樣痛苦。

Erlang誕生差很少25年了,這種語言的目的就是要進行分佈式和並行編程,就是解決大規模和可靠性問題——在後者的環境中,要保持代碼一直處於運行狀態,即便代碼在升級時也是如此。

Elixir則沒有這個問題,這種語言看上去跟Ruby很像,很是易於理解和編寫。可是它運行在Erlang虛擬機上,這意味着它能夠得到Erlang的一切好處。同時又能夠勝任Erlang完成不了的任務,它有很強的元編程能力、宏和協議等方面也不錯。

Elixir會統治世界嗎?可能不會。但我認爲它表明了將來的方向。學習Elixir的過程可讓我理解將來的編碼方式。五年後我可能不會用Elixir,但我十分確信我會用一些相似的語言,我經過Elixir學到的東西仍然能夠幫助我。

這聽上去好像是我認爲Elixir不會流行,但其實我不這麼想。到目前爲止,Elixir是咱們所擁有的最好的語言和運行時之一。當我沒有爲(由Ruby編寫的)已有系統寫代碼的時候,我會用Elixir開發,我十分喜歡它。

我鼓勵其餘程序員試試Elixir(或者其它相似的語言),我老是鼓勵程序員去學習更多的東西。

7. 技術人攻略:在移動互聯網時代,產品的開發模式和之前互聯網時代相比,有哪些新特色?

我認爲程序員面對的世界和五年前相比有了顯著的變化。瀏覽器基本上還和IBM將老式3270終端連到主機上的應用同樣——你向它發送數據,用戶輸入一些東西,而後瀏覽器給出迴應。仍是以服務器爲主。我知道:客戶端在不斷加入不少使人頭痛的東西,好比JavaScript應用什麼的,可是總體架構仍然同樣。我認爲瀏覽器技術基本上已經進入死衚衕。我觀察身邊的人——他們在手機和平板上使用App,只有在必須用到瀏覽器的時候纔會用一下,移動世界是以用戶爲核心,而非以服務器爲核心的。

在移動App上,客戶端掌管一切,服務器僅僅做爲資源提供方。這要求程序員掌握一些新的技能和技術支持這種結構。在客戶端,咱們須要經過編寫複雜的,異步的應用,而且將這些應用運行在一系列不一樣的設備上(不只是手機和平板)。在服務器端,咱們須要從Rail風格的應用轉向更靈活、更多以聯合方式運行的架構。(這正是Elixir使人興奮的緣由之一。)

8. 技術人攻略:去年的Qcon China上,您談到了敏捷的腐化和到底什麼是敏捷,有沒有哪些軟件項目領域,是敏捷開發模式不適用的?

你的問題認爲,「敏捷」是一種東西。

真相是,「敏捷」並不存在。它不是一種「東西」,不是一個名詞。人們是把它當成一個名詞開始用起來的,可是他們並不理解背後的含義。

「敏捷」不是一種東西,敏捷是一個形容詞——它描述了一種東西。你可能有一個敏捷的團隊,或者一種敏捷的過程,但你卻歷來不是「敏捷」。

這是什麼意思?這意味着那些向你硬推「敏捷」這個名詞的人在撒謊,由於「敏捷」是買不來的。

相反,敏捷是因人而起的——它來自於那些但願把事情作得更好的個體。這些個體觀察如何作事,並尋找改進事情的方法。Kent Beck說這須要勇氣,他說得沒錯。每當你嘗試作出改進,你都在嘗試改變現狀,你將直面風險,你挑戰了那些和你共事的人,他們也會用挑戰來回敬你。

可是,我認爲:在任何環境下,這些挑戰和相關的討論都是合適的。

9. 技術人攻略:您接觸過中國的程序員嗎?您以爲他們和西方的程序員有哪些區別?

我喜歡來中國的緣由之一,就是能夠和這裏的程序員交流。

此次的中國之行,咱們在一家創業孵化咖啡館(注:車庫咖啡)渡過了很是愉快的一段時光。你們的活力和熱情讓我和個人妻子很是震驚,她甚至還爲此寫了一一篇博客:http://myasiafix.weebly.com/1/post/2013/10/the-future.html

西方的程序員也擁有這樣的熱情,但我在中國遇到的程序員表現出更多東西。或許是由於中國程序員要在更困難的環境下工做,又或許是由於中國的市場正開始爆發。無論是由於什麼,我總能從中國程序員身上感到更多能量。

中國同時還有另一類程序員,我在和他們談話的過程當中注意到,他們把工做當成任務。或許在家庭的推進下進入這個能夠得到一份「好」工做的行業,或許想在一個大型機構裏尋求安全感。無論是出於什麼緣由,這類程序員身上都缺少激情,缺乏一份對他們所做事情的熱愛。這使人傷心,由於寫程序真的是一件很是有成就感,很是讓人知足的事。我建議這些程序員們看看我妻子的那篇博客上的照片,問問本身是否也願意加入其中,是否願意向桌子對面的人分享本身的新想法?

他們能夠作到——任何人均可以作到。

附:Dave Thomas妻子的博客文章——The Future

晚餐事後,大會組織者將咱們帶到了一個創業孵化器——一家大型的互聯網咖啡館,年輕的中國技術創業者們在這裏工做、和投資人會面、推銷想法、編寫代碼——這些事情都同時進行。這一切簡直是太讚了!星期天晚上的11點,咱們走進了這個燈光昏暗、大堂幾乎沒有傢俱的路邊辦公室。穿事後門,上了樓梯,直接加入了充滿創業熱情的人羣。咱們比房間裏的人年長得多,他們有着使人驚歎的能量,幾乎全部的人都在參與創業項目。他們出來聊天,碰撞想法,並立刻付諸實踐。Dave被包圍了,起先,我覺得他們是在尋求某種投資。但並非——我完全錯了。咱們聽到,並不斷聽到,想投資他們的人比他們須要的多得多。他們想了解Dave對本身創業項目的見解,他的祝福和他的批評——他們十分投入,期待成功。他們想有所成就,並且他們每一個人都有很是棒的,獨特的事業。

在一個角落裏有一臺3D打印機——正在作一個脊椎。另外一個大的角落做爲演示區域,配置好了筆記本的投影。後面的牆上是一組技術書架(他們向咱們保證,有許多Pragmatic出版的書)。這裏的環境是隨性而天然的——桌椅隨意擺放,人們能夠根據討論需求隨意組合。

這些年輕人瞭解各個層面的知識,不只僅是技術上的。他們理解在開曼羣島上註冊公司、天使投資以及IPO,3D打印機旁的電腦連着Kickstarter。這些人聰明、熱情,而且很努力,一點也看不到懶惰、傲慢以及理所固然的態度。

還有來自香港和臺灣的年輕人,他們認爲中國大陸纔是作事的地方。

我對此絕不懷疑——他們說得很對。

請輸入圖片描述


技術人攻略訪談是關於技術人生活和成長的系列訪問,歡迎和咱們有共同價值觀的你關注「技術人攻略」,郵箱 devlevelup@gmail.com,新浪微博 @devlevelup,但願能成爲技術人成長的精神家園。
歡迎經過微信公衆帳號關注技術人攻略

請輸入圖片描述

相關文章
相關標籤/搜索