充滿荊棘的專家程序員之道
國外程序員常常遇到這樣一種困惑,即他們的老板認(rèn)為資深的程序員是可以通過培訓(xùn)菜鳥程序員來生產(chǎn)的,
充滿荊棘的專家程序員之道
。老板把菜鳥程序員扔給資深的程序員,或者扔到一個短期培訓(xùn)班中,希望能夠像鍍一層金一樣的生產(chǎn)出一個又一個編程高手。然而這其實是很不現(xiàn)實的,本文作者在自己的這篇博文中類比闡述了這個觀點。在過去的幾個星期里,我作為父親一直在教自己年輕的孩子開車。對于新手司機來說,學(xué)習(xí)控制汽車的整個過程(把握方向盤、使用各種踏板、換擋、看后視鏡,等等)是比較傷腦筋的。但是所有這些都是相對簡單的事情,大部分年輕駕駛員都能掌握,不會有太大的問題。
新手司機在經(jīng)過一段時間的鍛煉之后,當(dāng)他們跟其他的司機一樣外出上路時,真正難受的經(jīng)歷才開始。這時才是真正學(xué)習(xí)開車的時刻,因為僅僅能控制汽車并不能夠成為好司機,雖然這是重要的前提條件。相反,能夠預(yù)料和避免一些意外的情況才能成為一個好司機。不幸的是,你不可能教給他這些技巧。
你可以告訴他們一些潛在的問題。你可以描述這些問題,并告訴他們在那些情況下應(yīng)該怎樣做。你甚至可以進(jìn)行一些實地演習(xí)。但是,每個新手必須親自經(jīng)歷過很多普通的駕駛危險之后(而且要幸存下來)才能預(yù)料類似的情況,然后采取措施避免這些問題。
遺憾的是,優(yōu)秀程序員的成長也需要經(jīng)歷一個這樣的過程。咱們來看一下開發(fā)一個應(yīng)用程序,功能是在一個文件中存儲一些數(shù)據(jù),每次用戶啟動這個應(yīng)用程序的時候都調(diào)用這些數(shù)據(jù)。
◆新手程序員(已經(jīng)學(xué)過在文件中讀取和寫入數(shù)據(jù)的語法)面對這個問題只會簡單的寫幾行能夠讀取和存儲數(shù)據(jù)的代碼,
資料共享平臺
《充滿荊棘的專家程序員之道》(http://www.oriental01.com)。◆如果他們已經(jīng)有過一段時間的編程經(jīng)歷,他們可能會寫一個測試程序來確保代碼讀取和寫入的數(shù)據(jù)是正確的。因為所寫的代碼工作了,初學(xué)者就認(rèn)為可以了,他們會認(rèn)為已經(jīng)自己完成了任務(wù),也符合規(guī)格,并且還對他們的工作進(jìn)行了測試。
◆一個專家級的程序員,當(dāng)面臨同樣的情況的時候,他知道這不是一件簡單的事情。當(dāng)然,寫幾句在文件中讀取或者存儲數(shù)據(jù)的代碼非常簡單這只是當(dāng)一切都順利的時候。但是如果要讓應(yīng)用程序能夠處理所有可能出錯的情況,這就不是那么簡單了,就算是這種簡單的操作也一樣。因為,文件可能不存在,硬盤可能滿了,文件可能損壞了,用戶可能沒有權(quán)限去讀取文件,這個文件可能正在被使用。如果文件不在本地磁盤,程序可能都接觸不到這個文件。
當(dāng)然,不是所有這些問題都會同時發(fā)生在某個特定的.時刻,但是那些已經(jīng)把應(yīng)用程序交付給很多用戶的開發(fā)人員都知道,經(jīng)過足夠長的時候,所有的這些問題都會發(fā)生,這是遲早的事。
一個專家可以告訴初學(xué)者去檢查這些可能出現(xiàn)的情況,那么對于這些特定的問題,不是專家的開發(fā)人員只能對其進(jìn)行編碼,而只有專家才能預(yù)料并避免他們。就像開車一樣,一個好的程序員不僅要能夠解決已經(jīng)發(fā)生的問題,而且還應(yīng)該能夠預(yù)料一些沒有發(fā)生過的問題。不幸的是,專家是靠犯錯誤才學(xué)到這些本領(lǐng)的,這對于人類來說是件傷心的事情。每一代想要成為專家的人只有在經(jīng)歷過上一代人所犯的所有錯誤之后才能成為專家。Neils Bohr解釋說,專家就是在一個非常窄的領(lǐng)域內(nèi)犯過所有可能的錯誤的人。
但是當(dāng)你跟一個新手駕駛員坐在同一輛汽車上的時候,你可能就會更加欣賞P. J. Plauger的這個版本了,我對任何領(lǐng)域中專家的定義是一個對什么是真正可怕的事情知道得足夠多的人。
【充滿荊棘的專家程序員之道】相關(guān)文章:
5.成功之道
6.杰克的成功之道
8.《荊棘鳥》讀后感