http://sd.csdn.net/a/20111109/307185.html
如果一個開發者能夠以他的經歷來區分,也許我們已經有了一個明確定義的路徑朝向“相當優秀的開發者”這麼一個大方向了。我揣測這麼一條路徑,應該是這樣子的:
1.標誌着從一個普通人成長成程序員的經歷
2.選擇某種經歷去追求
3.追求的經歷完成了(成就解鎖了!)
4.經歷的反思,深入的思考。[A]
5.返回第2步,這次是選擇一個新的經歷。
如何以一種更好的方式開始第一步,而不是衆包給各位。這裏我給出了一部分編程的成就,鬆散的分了組。我會在文末爲你提供多種方式,讓你來創造你自己的想法。
成就
1.學習多種編程範式:
2.體驗不同平臺上編程的來龍去脈:
-
寫過一個普通的Web應用 -
寫過一個普通的桌面應用 -
寫過一個普通的手機應用 - 寫過一個普通的嵌入式應用
- 寫過一個實時系統
3.增強你對開發人員所常用的模塊的理解:
-
寫過一個網絡客戶端(HTTP,FTP等) - 寫過一個設備驅動
- 寫過一個B-tree 數據庫
- 包裝現有的一個庫,以提供更好(更愉快)的用戶體驗
- 編寫一個應用程序或框架,提供插件模型
- 寫過測試框架
- 寫過編程語言
4.讓自己知道koans,katas,以及歲月的智慧:
完成過五個 code katas
- 對你想學習的一個語言,完成programming koans
- 參加一次coderetreat
- 閱讀SICP並完成所有練習
5.開源編程:
- 爲一個開源項目共享代碼
- 補丁被接受
- 在一個重要的開源項目中得到提交權限
- 發佈一個開源項目
- 對一個開源項目實施Refactotum
6.通過教授別人來學習[D]:
- 發表一次啓迪性的講話
- 在一個本地用戶組中演講
- 在一個會議中演講
- 教授一次培訓課程
- 發佈一個教程
- 發佈一個開源項目的constructive code review
- 寫一本編程的書
關於成就
現在,讓我們來繼續探討一會兒。注意每一個成就都是可以衡量的。每一個都是一個布爾值:你完成或者沒有完成。例如,很難衡量你是否學過一個函數式編程語言,但是卻可以輕易的知道你是否用函數式編程語言寫過一個程序。後者是客觀察、可測量、布爾的。這種可衡量性意圖適用所有這些成就。
需要承認的是,這種可衡量性並不完美。比如在一個會議演講這個成就:你完全可以做到一般稱職的時候就說你贏得了這份成就。但是如果你正在讀這篇文字,我假設你是想要變得卓越。你知道只是爲了把一項從清單中劃掉而號稱做到是非常遜的。
既然我們談到了改進
既然我們談到了改進,你會如何改進這個清單呢?
這個清單現在在github上作爲一個gist,你可以任意的fork它然後添加更多的成就(確保你加的成就是可以衡量的)。或者fork它然後標記那些你已經征服了的成就。你還可以標記你正在做的一項,(例如,你可以去看看這些forks:Justin Blake, Pierre Chapuis, Yann Esposito. )
或者發表評論:什麼經歷將你塑造成一個更好的開發者?以及你會接下來去解鎖哪一個成就?
註釋
[A]我無法充分的強調第4步。爲了獲得幾乎每個成就,你應該停頓和反思這些經歷,然後再移動到下一個。反思。問問自己,你學到什麼,花些時間來寫下這些想法。更好的是,與別人分享,並且對比其他人也已經獲得這一成就的人,看看你的學習收穫的如何。
[B]可以去coderwall.com看看基於成就的模型這些方面的,很有意思。
[C]Forth基本上是自己的範式
[D]突然想到了這句:“寓學於教”——Paulo Freire