乙個優秀開發者如何才能變得偉大?
還是先不想如何變得偉大:乙個不錯的開發者如何變成乙個優秀的開發者?
從第一步到第n步並沒有確定的路徑,哎呀,甚至不知道第n步是什麼. 能邏輯思考的都明白,缺乏乙個確定的路線意味著,想從新手到大師,將會是乙個艱辛的旅程。在過去幾年間,我還是花了相當一些時間,反覆思考這乙個難題。接下來是什麼?我該如何做才能從乙個優秀的開發者成為乙個相當優秀的開發者?
成功到底是什麼樣子的?
當我有乙個清晰的目標以及乙個可以衡量的成功標準的時候,我做的最好。比如,我想5分鐘跑一英里,這很好衡量,而且成功是明確定義了的。我知道現在我一英里我可以跑多快,而且網上到處都是如何跑快的建議和訓練專案。我可以選擇一種訓練專案,努力訓練,我非常自信最後能夠達到我所期待的目標。而且這個非常容易被衡量,每一周我都可以知道我距離自己的終極目標還有多少.
但是,你如何去衡量自己是否達到了乙個「相當優秀的開發者」這樣乙個級別呢?簡單得講,你不能夠。這個目標,如上所述,非常的主觀,非常的寬泛,簡直是無法衡量的。所以,我們該如何定義乙個可以衡量的東西?
和想5分鐘跑一英里差不多,我們可以從對比現在作為程式設計師的自己和所期望能成為的程式設計師來入手。五分鐘一英里的賽跑者有而十分鐘一英里的賽跑者缺乏的經歷是什麼?讓大師級程式設計師獲益而新手程式設計師缺乏的經歷是什麼?這裡關鍵的是經歷。
我們都曾有過某種特定的經歷提公升了我們作為程式設計師的技能。我們曾學習過一種新的語言,而讓我們有一種新的思維方式。或者,我們都曾精雕細琢過完美的設計,只是為了觀察其在苛刻的現實環境下暴露出的缺陷. 我們因此變成更好的程式設計師。所以,有些經歷給了你新的技術。而有些則是不同的模式,並且能夠讓你理解為什麼會這樣。正是這些經歷在教你,影響你的思維過程,,影響你解決問題的方法,改進你的設計。方便的是,你是否有過某種特定的經歷是很容易被衡量的。(如果把這些經歷想成是成就就很有意思啦。)
雖然花了些時間,但是我已經對我那不可衡量懸而未絕的目標,達到「相當優秀的開發者」的級別,感到不煩惱了。如果乙個開發者能夠以他的經歷來區分,也許我們已經有了乙個明確定義的路徑朝向「相當優秀的開發者」這麼乙個大方向了。我揣測這麼一條路徑,應該是這樣子的:
1、標誌著從乙個普通人成長成程式設計師的經歷
2、選擇某種經歷去追求
3、追去的經歷完成了。(成就解鎖了!)
4、經歷的反思,深入的思考。[a]
5、返回第2步,這次是選擇乙個新的經歷。
如何以一種更好方式開始第一步,而不是眾包給各位。這裡我給出了一部分程式設計的成就,鬆散的分了組。[b]我會在文末為你提供多種方式,讓你來創造你自己的想法。
成就
學習多種程式設計正規化:
用組合語言寫乙個程式
用函式式程式語言寫乙個應用
用物件導向語言寫乙個應用
用基於原型的語言寫乙個應用
用邏輯程式語言寫乙個應用
用actor模型寫乙個應用
用forth語言寫乙個應用[c]
體驗不同平台上程式設計的來龍去脈:
寫過乙個普通的web應用
寫過乙個普通的桌面應用
寫過乙個普通的手機應用
寫過乙個普通的嵌入式應用
寫過乙個實時系統
增強你對開發人員所常用的模組的理解:
寫過乙個網路客戶端(http, ftp等)
寫過乙個裝置驅動
寫過乙個b-tree資料庫
包裝現有的乙個庫,以提供更好(更愉快)的使用者體驗
編寫乙個應用程式或框架,提供外掛程式模型
寫過測試框架
寫過程式語言
讓自己知道koans, katas, 以及歲月的智慧型:
完成過五個code katas
對你想學習的乙個語言,完成programming koans
參加一次 coderetreat
閱讀 sicp並完成所有練習
開源程式設計:
為乙個開源專案共享**
補丁被接受
在乙個重要的開源專案中得到提交許可權
發布乙個開源專案
對乙個開源專案實施refactotum
通過教授別人來學習[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
乙個優秀開發者如何才能變得偉大?
乙個優秀開發者如何才能變得偉大?還是先不想如何變得偉大 乙個不錯的開發者如何變成乙個優秀的開發者?從第一步到第n步並沒有確定的路徑,哎呀,甚至不知道第n步是什麼.能邏輯思考的都明白,缺乏乙個確定的路線意味著,想從新手到大師,將會是乙個艱辛的旅程。在過去幾年間,我還是花了相當一些時間,反覆思考這乙個難...
如何成為乙個偉大的開發者(二)
作者簡介 peter nixey,ruby on rails程式設計師,前計算機視覺學者 企業家,clickpass公司ceo,yc孵化器的企業規劃導師,brojure公司cto。程式設計師在開發過程中,常常會遇到各種各樣的問題,但很少是完全陌生 其它團隊也沒有遇到過的。在stack overflo...
如何保持乙個開發者技術棧更新
作為乙個剛畢業三年的研究僧,並且本科學的是機械,在面對複雜多變的it技術圈時,常常感到困惑。我該拿什麼是作為立身之本?要怎麼樣才能時常保持競爭力?銷售靠嘴巴,碼農靠鍵盤。因此個人理解碼農的立身之本就是高效率基於功能完成編碼,交付需求。高效率編碼如果糾結細節,是乙個永恆討論不完的話題,原因是不同時代有...