哪來的程式設計天才?

Juven發表於2013-03-29

注:本文原載於http://www.juvenxu.com/2013/03/28/programming-talent-is-overrated/

《哪來的天才?》是一本值得一讀的書,書的核心觀點大致為“卓越的能力並非天生,而是後天長時間的刻意練習而得的”,這觀點適用於所有領域,包括體育、音樂、醫學、商業等等,當然,放到程式設計領域來說也適用。書中有大量的案例來佐證作者的這一觀點,包括家喻戶曉的莫扎特和老虎伍茲,這裡我不再贅述。基本上,我是認同作者的觀點的,那麼接下來的問題是,何為‘刻意練習’?如何去做?

enter image description here

作者說刻意練習:

  1. 它是為了提高績效而被設計出來的。
  2. 它可以反覆很多次。
  3. 對結果的反饋是可以持續得到的。
  4. 這是非常費神的。
  5. 這並沒有多少樂趣。

在某些領域,這很好理解,比如我曾經練過一段時間的吉他,基於老師指導的練習基本就符合這五條,還有運動員的練習,也完全符合。回過頭來看看程式設計領域,存在這樣的練習嗎?

Robert C. Martin在《程式設計師的職業素養》中有兩章與這一話題相關,其中第6章‘練習’介紹了Coding Dojo和Coding Kata等方法,這些方法的確有效,也基本滿足上述五條,但大部分的Dojo或Kata基本都基於小型問題的練習,而軟體開發涉及的領域太廣太複雜了,往下到作業系統記憶體排程,往上到大規模網際網路企業的架構,業界基本無法提供針對這類技術的練習,大家只能在實際工作中積累。該書中的第14章“輔導,學徒期與技藝”強調教導的重要性,這非常暗合上述的第1和第3條,導師能幫你設計適當的練習(這也可能是實際工作),同時給你反饋。但不幸的是,正如作者所說,我們的行業嚴重缺乏這樣的導師機制。

enter image description here

除此之外,我認為結對程式設計也是一種行之有效的刻意練習,這種程式設計方式非常費神自然不必說,實踐過的人都能體會,這裡的關鍵是,通過結對程式設計這種工作方式,你能持續地得到反饋,這對於提升技藝來說無比重要的。

同時我也發現一個不幸的事實,那就是大量簡單的閱讀對提升技藝其實並沒有很大的幫助。閱讀如果缺乏明確的目標(讀完一本書不算個明確的目標),如果不去反覆咀嚼,那效果就甚微了,更何況大部分時間我們都是獨自在閱讀,根本得不到任何反饋。有些教材類的書會有習題和答案,那是一種很好的練習及獲取反饋的方式,但工作以後,行業中這類書幾乎沒有。有一種充分發揮閱讀功效的方式是小組閱讀,一組人讀同一本書,定期分享心得體會,如此,反饋就比較充分了。

Robert C. Martin並不是唯一一個認識到刻意練習價值的程式設計大師,Andy Hunt在他的著作《程式設計師的思維修煉》中也花了大量的篇幅講主動學習,介紹了很多具體的方法和工具,例如SMART目標(Specific, Measurable, Achievable, Relavent),SQ3R閱讀,思維導圖等等,這些內容都非常的有價值。Andy還提到說教學是學習的一種很好的方式,這一點我深有體會,我寫《Maven實戰》的過程就是一個不斷學習的過程。

enter image description here

我們中的大多數人不大可能成為世界級的程式設計師,其中之一的原因是,我們之間的學習練習積累已經遠遠比不上那些從小學時就程式設計的人,另外一個原因則是,我們也不會年復一年的去堅持大量的學習和練習,這有性格的因素,也有現實的因素。但是,這也不代表我願意隨波逐流,一事無成的過一輩子,我總希望自己有所成就,即使不大,但至少會讓生活充實點,讓家人生活更好點。因此我們不必非要從成功學的角度來讀這本《哪來的天才?》,但我也很討厭某些人動不動就來“一萬個小時”,奶奶的,老子只是個凡人。

相關文章