細數編程能力的四重境界
原創【51CTO經典譯文】無論你是干什么的,無論你在哪個行業,都必須面對一個事實:成功的人必然走過艱辛的路,必須一步一步踏踏實實前進。對程序員而言也一樣,剛接觸編程的程序員非常渴望精通一門編程語言,有點編程經驗的程序員想掌握架構設計,有多年工作經歷的程序員則想成為大師級人物,總之編程能力不是一蹴而就的,我將其分為四個階段,看看你現在處于哪個階段。
51CTO向您推薦:《程序員的十個層次 你屬于哪一層?》
第一階段:無意識,無能力
John是一位年輕的Web開發人員,他曾經是法律系的學生,但他認為讀法律賺不了大錢,因此轉移了方向,他總是能幫助好哥們修理好電腦,因此他認為干這一行應該很容易,于是他找了一個離家較近的培訓班,以便有更多的時間學習電腦知識,六個月后,他聲稱自己是Web開發專家,他的簡歷列出了幾乎所有編程語言,應用軟件和平臺。
但真正要動手寫點代碼時,John就只能復制粘貼了,他認為要在瀏覽器中彈出警告窗口只有JavaScript可以辦到,PHP?小Case,他安裝了WordPress,Linux?他有一張Ubuntu LiveCD,他甚至肯定地表示可以創建一個Apache Web服務器負載均衡集群,他的知識是不分邊界的。
問題是John不知道他學到的東西是多么膚淺,他經常在論壇和郵件列表中滔滔不絕地發表自己的“高見”,當真正的高手試圖以溫和的語氣指出他知識欠缺時,它便迅速以生硬的語氣回擊,固步自封的John最終一事無成。
因此John還屬于既無能力,又無良好意識的那一類人,屬于尚未入門的那種。
第二階段:有意識,無能力
Mark是一位數學教師,他在一所大學教書,他希望獲得更多的課程資料,因此他決定創建一個在線平臺分享課程資料。
Mark首先想到應該做一些研究,獲得一些有用的信息,于是他開始閱讀維基百科,經過漫長的閱讀后,他發現他的問題其實早已有人提出了開源的解決方案。
Mark開始為這個項目忙碌,他從網站上找到文檔和教程開始閱讀,自認為有些基礎后,他下載并安裝了程序,當他看到數據庫連接錯誤時,他所有的興奮勁一下全部消失了,在經過多次嘗試后,問題仍然沒有得到解決,Mark并沒有生氣,他有自知之明,這不是他的專業領域。
他前往郵件列表用他知道的知識準確地描述了他遇到的問題,他警告那些不知道在做什么的人,最好是多閱讀一些文檔,或其他人分享的技巧,不要盲目做事。
因此Mark屬于有意識,但無能力的那一類人。
第三階段:有意識,有能力
兩年前Adrian第一次拿起講解HTML的書,他夢想成為一名不折不扣的Web開發人員,Adrian每天都在想如何提高自己的技能,幾個月前,他在一家網站找到了一份兼職工作,雖然工資很低,所做的事情也很基礎,但他充滿了激情。
他始終相信一句話:最好的學習方法就是堅持,嘗試,失敗,然后再嘗試。他總是研究如何把工作做好,把任務完成得更漂亮,他深知只有自己努力才能寫出更安全的代碼,因此他會一遍又一遍地復查代碼,不厭其煩地修復每一個細小的BUG。
有一天,他為自己的一個私人項目寫了30-40行代碼,過了幾天,當他看到自己所寫的代碼后不禁感到有點失望,這時他突然發現其實還有更好的寫法,Adrian一時糊涂了,為什么自己就不能一次性寫出更好的代碼呢?在經過一翻思考后,他決定全部重寫一遍,絕不做復制粘貼的操作。
Adrian的做法值得借鑒,他正在朝優秀的專業人士進化,他沒有給自己加冕任何頭銜,他知道還需要等待。
因此Adrian屬于有意識,也有一定能力的那類人,已經達到第三階段的境界。
第四階段:無意識,有能力
這是編程大師追求的終極境界,就好像武林高手隨手撿起一片樹葉也能當飛鏢殺人一樣,這不僅是知識日積月累的結果,也是個人多年歷練和琢磨的結果,達到這種境界的程序員已經不是靠思考的方法來解決問題了,而是“聞”,或者說“靠感覺”,他們往往具有攻克復雜問題的超人能力,簡單的問題基本上都遇到過無數次,難的問題看一下也就能感覺到幾種可行的解決方法。
編寫優化的,可維護的和安全的代碼對他們來說已成為習慣,設計模式都已被他們用爛,用什么語言和開發工具都可以,你說了算。
結束語
我想當你知道這四個階段后,一定會有點羞愧,不要害怕,正如我開篇時就說過,大師(或高手)不是一日練就的,先達到有意識,有能力的階段,堅持下去,你自然就會達到無意識,有能力的境界。
值得一提的是,還有一些學者提出了第五階段,即要有能力將自己掌握的知識和技巧教授或傳輸給其他人,就好像武俠小說中一代大師在Over時要將自己的功力強制輸送給一個有潛力的后生一樣,必須要具有準確的眼光,找到那個有潛力的人。
原文標題:The four stages of programming competence
【編輯推薦】