如何成爲一個優秀的程序員

導讀:本文是由做者Jason Rudolph發表的一篇博文《Programming Achievements: How to Level Up as a Developer》翻譯而來。html

文章內容以下:程序員

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

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

從第一步到第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的一句名言:「傳授知識自己就是在學習傳授知識的藝術...」

相關文章
相關標籤/搜索