充滿荊棘的專家程序員之道

 

    【51CTO精選譯文】國外程序員常常遇到這樣一種困惑,即他們的老闆認爲資深的程序員是可以通過培訓菜鳥程序員來生產的。老闆把菜鳥程序員扔給資深的程序員,或者扔到一個短期培訓班中,希望能夠像鍍一層金一樣的生產出一個又一個編程高手。然而這其實是很不現實的,本文作者在自己的這篇博文中類比闡述了這個觀點——

     

        在過去的幾個星期裏,我作爲父親一直在教自己年輕的孩子開車。對於新手司機來說,學習控制汽車的整個過程(把握方向盤、使用各種踏板、換擋、看後視鏡,等等)是比較傷腦筋的。但是所有這些都是相對簡單的事情,大部分年輕駕駛員都能掌握,不會有太大的問題。

     

    新手司機在經過一段時間的鍛鍊之後,當他們跟其他的司機一樣外出上路時,真正難受的經歷纔開始。這時纔是真正學習開車的時刻,因爲僅僅能控制汽車並不能夠成爲好司機,雖然這是重要的前提條件。相反,能夠預料和避免一些意外的情況才能成爲一個好司機。不幸的是,你不可能教給他這些技巧。

    你可以告訴他們一些潛在的問題。你可以描述這些問題,並告訴他們在那些情況下應該怎樣做。你甚至可以進行一些實地演習。但是,每個新手必須親自經歷過很多普通的駕駛危險之後(而且要倖存下來)才能預料類似的情況,然後採取措施避免這些問題。

    遺憾的是,優秀程序員的成長也需要經歷一個這樣的過程。咱們來看一下開發一個應用程序,功能是在一個文件中存儲一些數據,每次用戶啓動這個應用程序的時候都調用這些數據。

    ◆新手程序員(已經學過在文件中讀取和寫入數據的語法)面對這個問題只會簡單的寫幾行能夠讀取和存儲數據的代碼。

    ◆如果他們已經有過一段時間的編程經歷,他們可能會寫一個測試程序來確保代碼讀取和寫入的數據是正確的。因爲所寫的代碼工作了,初學者就認爲可以了,他們會認爲已經自己完成了任務,也符合規格,並且還對他們的工作進行了測試。

    ◆一個專家級的程序員,當面臨同樣的情況的時候,他知道這不是一件簡單的事情。當然,寫幾句在文件中讀取或者存儲數據的代碼非常簡單——這只是當一切都順利的時候。但是如果要讓應用程序能夠處理所有可能出錯的情況,這就不是那麼簡單了,就算是這種簡單的操作也一樣。因爲,文件可能不存在,硬盤可能滿了,文件可能損壞了,用戶可能沒有權限去讀取文件,這個文件可能正在被使用。如果文件不在本地磁盤,程序可能都接觸不到這個文件。

    當然,不是所有這些問題都會同時發生在某個特定的時刻,但是那些已經把應用程序交付給很多用戶的開發人員都知道,經過足夠長的時候,所有的這些問題都會發生,這是遲早的事。

    一個專家可以告訴初學者去檢查這些可能出現的情況,那麼對於這些特定的問題,不是專家的開發人員只能對其進行編碼,而只有專家才能預料並避免他們。就像開車一樣,一個好的程序員不僅要能夠解決已經發生的問題,而且還應該能夠預料一些沒有發生過的問題。不幸的是,專家是靠犯錯誤才學到這些本領的,這對於人類來說是件傷心的事情。每一代想要成爲專家的人只有在經歷過上一代人所犯的所有錯誤之後才能成爲專家。Neils Bohr解釋說,“專家就是在一個非常窄的領域內犯過所有可能的錯誤的人。”

    但是當你跟一個新手駕駛員坐在同一輛汽車上的時候,你可能就會更加欣賞P. J. Plauger的這個版本了,“我對任何領域中專家的定義是一個對什麼是真正可怕的事情知道得足夠多的人。”

    原文:You Can't Teach Expertise 作者:Russell Jones

    轉自:http://developer.51cto.com/art/200911/165390.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章