編程目標:開發人員如何提高能力

來源: 伯樂在線  發布時間: 2012-02-07 14:51  閱讀: 5785 次  推薦: 1   原文鏈接   [收藏]  

  英文原文:Programming Achievements: How to Level Up as a Developer

  一個優秀的程序員如何能練就成一個卓越的程序員?

  先等等,暫時不談卓越,先談談如何成為一個優秀的程序員。

  從第一步到第N步并沒有明確的路線圖。事實上,第N步到底是什么還不確定。就像邏輯型思維的開發者一樣,缺乏明確的目標會讓從入門到精通的道路變得異常崎嶇。

  過去的幾年中,我花了不少時間來思索這個問題。我該如何從一名能力尚可的程序員修煉成一個真正優秀的程序員呢?

  成功是什么?

  當我對成功有清晰的目標、量化的標準的時候,我就能發揮我的最大潛力。比如,我想實現5分鐘跑完一英里這個目標。好吧,這個路程很容易測量,成功的界限分明。我很容易知道跑一英里需要多久,網上也到處都是提高跑步速度的建議和訓練計劃。我可以選擇一個計劃并付諸努力,我深信我最終能夠實現目標。這是一個神奇的可量化的計劃,因此,每個星期我都可以檢測到距離我的終極目標還有多遠。

  但是如何界定你是否成為了“足夠優秀的程序員”呢?一言蔽之,難以界定。這個目標從一開始就太主觀,太模糊,太簡單,無法量化。那么我們能找到能量化的東西嗎?

  我們都有過一些提高我們技能的經驗。我們可能曾經學過一門開啟我們思路的新語言。我們也可能曾經有過一套完美的設計方案,但直到最終投入生產時才發現它漏洞百出,但我們因此而成長。有一些經驗增長你的技能,有一些讓你遇見反模式(注:反模式是指軟件開發中經常被用到的但效率不高的模式。),并讓你認知它們為什么是反模式。正是這些經驗給你上了課,影響了你的思維模式,改變了你解決問題的方法,最終改善了你的設計。而你是否獲得了某種經驗,這是顯而易見的。把經驗當做是我們的收獲或許很有趣。

  所以,雖然這需要付出時間,但我現在學會了適應成為“一個真正優秀的程序員”這一目標的不可量化性。如果一個程序員依靠經驗取得了某些進展,那么我們就能有一個清晰的路線圖來實現“成為真正優秀的程序員”這一終極目標。我想這個路線圖應該是這樣的:

  • 1. 確定哪些技能能夠幫助程序員進步
  • 2. 著重積累某一個技能的經驗
  • 3. 直到這個技能完全掌握(成功攻關!)
  • 4. 反復思考這個技能,直到融會貫通[A]
  • 5. 重新回到第二步,選擇一項新的技能

  如何更好的開始第一步呢?下面列出了一些編程目標,我粗略的分了一下類。[B]我會在本文的結尾和你一起討論下想法。

  編程目標

  學習不同的編程語言范例

  • 用匯編語言寫一個應用
  • 用函數式語言寫一個應用
  • 用面向對象語言寫一個應用
  • 用基于原型的語言寫一個應用
  • 用邏輯編程語言寫一個應用
  • 用Actor模型寫一個應用
  • 用Forth語言寫一個應用[C]

  擴寬對我們開發時使用的基本組件的了解:

  • 寫一個網絡客戶端(如HTTP, FTP客戶端)
  • 寫一個設備驅動程序
  • 寫一個B叉樹數據庫
  • 改進一個現有的庫包,來獲得更好的用戶體驗
  • 寫一個提供插件模型的應用或框架
  • 寫一個測試框架
  • 寫一個程序語言

  更上一層樓:不斷的練習,積累

  • 完成五個code katas (Kata是來自日本武術的概念,通過不斷的重復和練習來提高技藝)
  • Koan編程來學習一種你想學的語言
  • 參加編程進修課程
  • 閱讀SICP,完成所有的練習

  編寫程序并開源:

  • 為開源項目貢獻力量
  • 讓別人接受你的補丁
  • 獲得一個重要的開源項目的提交權限
  • 發布一個開源項目
  • 優化一個開源項目的代碼,詳細記錄并分享出來。

  通過教導別人來提高自己[D]

  • 做一個繪聲繪色的演講
  • 在一個本地用戶組面前演講
  • 在一個會議上演講
  • 開設一個訓練課程
  • 發布一個教程
  • 發布一個開源項目的有建設性代碼審核
  • 寫一本有關編程的書

  關于這些目標

  現在讓我們來多說一點。注意這些目標都是可量化的。每一個都有個布爾值:你要么完成了,要么沒有。例如,雖然很難界定你是否掌握了一門函數式語言,但是非常容易確定你是否用函數式語言寫了一個應用。后者是可觀測的,可量化的,布爾值。以上所有的目標都具有這一特性──可量化性。

  無可否認,這個可量化性并非無懈可擊。就拿在一個會議上進行演講來說,你當然可以做一個很爛的演講,然后還可以拍拍胸脯說你實現了這個目標。不過既然你是我這篇博客的讀者,我假設你想成為一個優秀的程序員,你是一個對自身要求很高的人,不會是僅僅完成了某個任務就沾沾自喜的人。

  既然我們在討論改善,那么你對這份列表有什么改進意見呢?

  這個列表作為GitHub的有效依據,你們可以隨意fork并添加更多的成績。(確保它們是可量化的)

  或者fork之后,你可以劃分出你已經取得的成績。你還可以為你正在努力的目標做上標記。(可以參考Justin Blake, Pierre Chapuis, Yann Esposito的分支)

  你也可以寫評論,什么經驗讓你變得更為優秀,以及你希望下一步實現什么目標。

  注釋

  [A]不得不強調下第四步。想要更出色的實現目標,你必須在你進行下一步之前停下來回想一下,問問自己到底學到了什么。花些時間寫下些想法,更好的做法是,和他人分享,與其他完成同樣任務的人作個對比,看看你的學習效果。
  [B]在coderwall.com這個網站,你可以更詳細了解以目標為驅動的學習方法。
  [C]Forth本身就是一個語言范例。
  [D]我想起Paulo Freire 的一句名言:“傳授知識本身就是在學習傳授知識的藝術...”


  -------------------------------------------------------------------
  譯文出處:伯樂在線- 職場博客 - 程序員
  譯文鏈接:http://www.jobbole.com/entry.php/1420

  原文:Jason Rudolph  翻譯:敏捷翻譯 - 唐小娟

  如需轉載,但請注明原文/譯文出處、譯文超鏈接和譯者等信息,否則視為侵權,謝謝合作!

1
0
 
標簽:程序員
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()