背景介紹:
Paul在牛津大學獲得了哲學、政治學及經濟學學士學位後,曾在微軟,sybase,Hyder和QA培訓等公司做軟體以及技術培訓工作。目前他是專業技術培訓公司Mallon Associates的董事,並總管一家跨國金融服務公司的全球技術培訓生專案。
你從當初自學程式設計到現在運作和掌管貴公司的專業技術培訓業務,並總管一家跨國金融服務公司的全球技術培訓生專案,這其間經歷了多少年?
國中時學Basic的經歷不算在內,我第一次正式學習程式設計是在1992年到1993年吧。
2013年的時候我成為我們公司的首席培訓師。
2015年起我開始負責我們最大的客戶的全球技術培訓生專案。
這樣算下來20多年吧!
我知道C++之父Bjarne Stroustrup請你喝過酒。
有很多人好奇你和Bjarne是怎麼認識的。
我從是2003年開始為我們最大的客戶提供技術培訓服務的。
在我的職業生涯中讓我特別驚喜的一個事件就是2013年的時候Bjarne Stroustrup加入了該公司。
那之後我有過幾次和他面對面交談的機會。
能和我心目中的偶像聊生活和技術實在是太興奮了!
你本科所學的專業是PPE(Philosophy,Politics and Economics哲學、政治學及經濟學),它和計算機程式設計並沒有多少關係。
你是怎麼想起來要自學程式設計的?
你的第一份程式設計工作是怎麼得來的?
1992年到1993年我在牛津讀書的時候突然生了一場重病。
當時為了方便治療我不得不離開牛津回到家鄉。
回到老家看病的那一年裡我要養活自己所以不能無所事事(本文作者注:在英國大部分年滿18歲的人都自己工作掙錢不再依賴父母。除少數情況外,住在父母家的成年子女要給父母交房租和分擔水電等生活費用。)。
看病之餘,我需要找一份全職工作。
我的一個朋友當時在一家公司的技術部門工作,他的推薦幫我贏得了一次面試機會。
那次面試很順利,那之後我就開始邊工作邊學習。
我記得最開始學的是兩門語言,Visual Basic for Application和C++。
我當時的工作內容之一是在excel裡面用VBA程式設計。
可是如果你之前並沒有學習過程式設計的話,你是如何通過那次面試的呢?
我當時用了一個週末做了一些準備。
一個週末?
是的。
你已經做了很多年的專業技術培訓,到現在你總共掌握了多少種程式語言?
我數一下。
Java,Scala,Perl,Python,JavaScript,C,C++,C#,SQL MDX,SQL的各種版本,Q,VB,F#,Forte,swift和ObjectiveC。
十六種?
差不多吧。
下面我想是程式設計師們最關心的一個問題了。
當客戶要求你提供某種你原本不熟悉的程式語言的培訓時,你是如何做到在非常短的時間內掌握,甚至能夠給有過實際使用該語言工作的學員授課,讓他們從中有所收穫的並得到他們的好評的?
你有什麼特別的學習方法嗎?
我覺得學習程式語言和學習任何一門人類語言一樣,你不能只是被動學習,你必須主動使用。
僅靠一本入門書學習語法並能寫出一句可以編譯通過的語句是不夠的。
我會給自己佈置題目,選擇一些有趣的小專案,然後用這門新語言實現。
在專案的選擇上你有什麼考量嗎?
我只選擇自己已經用其他熟悉的語言做過的專案,這樣可以把未知因素降到最低。這是其一。
其次我會根據要學的這門語言的特點去選擇最合適發揮該語言優勢的專案。
比如說Scala是一門函式語言,我會選擇一些和數字處理相關的專案,而不會用Scala去做一個使用者介面。
通過實際做專案來學習是個非常好的主意!
除此之外,你還有其他的學習途徑嗎?
學習程式語言和學習一門外語是類似的,在你著手寫程式碼同時你也要學習如何閱讀別人的程式碼。
就像你不會僅僅學了某門外語的基礎單詞和語法就立即去寫作文一樣。
你要花大量的時間去精讀和泛讀經典的作品,有了足夠的輸入才能自己有所輸出。
你這樣一橫向比較就很清楚了。
學英文的時候,我們是從第一天就開始閱讀簡單的課文,然後在學習的初期,中期和所有的學習過程中要始終堅持閱讀。
是的。
像要學好英文必須持之以恆地閱讀原汁原味的英文作品一樣,程式設計師必須堅持閱讀他人的優秀程式碼。
我一直奇怪為什麼人們學習程式設計的時候就把這一點給忽略了。
是不是有些程式設計師水平提高得慢也和平時工作中光寫不讀有一定的關係?
要做到不停地進步就必須堅持閱讀優秀的程式碼對不對?
那你一般是從哪裡去找合適的程式碼來讀的呢?
假如你所在的公司需要你學習一門新語言好做一個新的專案,或至少你有相應的許可權,那你就可以直接閱讀公司內部已經上線的工作程式碼。
工作程式碼的質量雖然良莠不齊,但通過閱讀你會慢慢體會到它們之間的差異,並從中學習。