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的一句名言:「傳授知識本身就是在學習傳授知識的藝術...」
文章出自:jasonrudolph
程式設計目標 開發人員如何提高能力
乙個優秀的程式設計師如何能練就成乙個卓越的程式設計師?先等等,暫時不談卓越,先談談如何成為乙個優秀的程式設計師。從第一步到第n步並沒有明確的路線圖。事實上,第n步到底是什麼還不確定。就像邏輯型思維的開發者一樣,缺乏明確的目標會讓從入門到精通的道路變得異常崎嶇。過去的幾年中,我花了不少時間來思索這個問...
程式設計成就 開發人員如何公升級
成功到底是什麼樣子的?當我有乙個清晰的目標以及乙個可以衡量的成功標準的時候,我做的最好。比如,我想5分鐘跑一英里,這很好衡量,而且成功是明確定義了的。我知道現在我一英里我可以跑多快,而且網上到處都是如何跑快的建議和訓練專案。我可以選擇一種訓練專案,努力訓練,我非常自信最後能夠達到我所期待的目標。而且...
程式設計成就 開發人員如何公升級
成功到底是什麼樣子的?當我有乙個清晰的目標以及乙個可以衡量的成功標準的時候,我做的最好。比如,我想5分鐘跑一英里,這很好衡量,而且成功是明確定義了的。我知道現在我一英里我可以跑多快,而且網上到處都是如何跑快的建議和訓練專案。我可以選擇一種訓練專案,努力訓練,我非常自信最後能夠達到我所期待的目標。而且...