英文原文:TechRepublic,編譯: IT168
在一封與TechRepublic會員交流的郵件當中,提到了面向程式設計師的部落格、文章及雜誌分成兩類:面向初學者類以及面向專家類。這個觀點很好,有關程式設計師如何從初級躍升到中級的資訊極少。以下是為了實現這種轉變需要你去做的10件事。
1. 學習另一門語言
其實你學的是哪一門語言並沒有關係,但是學習另一門語言(不管你已經瞭解多少種語言)將把你打造為更好的程式設計師。能學會一門與你日常使用的語言風格迥異的 語言則更佳。打個比方,如果你是C#程式設計師,學習VB.NET或者Java對你的幫助就沒有學習Ruby或者Groovy大。 我說“學另一門語言”的意思是要真正學會它。學習一門語言包括三個領域的知識:語法、內建操作符和庫,以及“如何使用”。前面兩個簡單;我認為一名有經驗 的程式設計師,根據語言的不同,能在半小時到幾小時內掌握足以維護程式碼的語法知識。操作符和庫只不過是知識逐步積累的過程,你什麼時候想清楚要了解什麼了,再去查閱參考材料也不遲。只有第三項,“如何使用它”-要花上你幾個月的時間去跟這門語言打交道,真正的奇蹟就在此發生。我建議用這門語言的風格去做一個適 合該語言的專案。 真正學會了另一門語言之後,我敢保證你的程式設計師水平一定會突飛猛進。(另推薦閱讀:《學習不同程式語言的重要性》)
2. 學習先進的搜尋技術、手段和及策略
作為一名優秀的程式設計師,不僅僅是技能的問題了,而是你尋找資訊的技巧,這個趨勢越來越明顯。對大部分人而言,僅僅輸入“現代語言及開發框架”,這都是泛泛之 談,記不住多少的。因此,你完成工作的能力通常取決於你的檢索能力。不幸的是,瞭解到如何找到準確而高質量的資訊可不僅僅是跑到TechRepublic 來找答案,或者在你選好的搜尋引擎上敲幾個字那麼簡單。 “技術(Techniques)”、“手段(tactics)”和“策略(strategies)”看起來是一回事,實際上並非如此。你需要學會的技術是 掌握你喜愛的搜尋引擎的高階搜尋系統;你需要了解諸如布林操作符,如何過濾結果(像“非”關鍵字,域限制等等),關鍵字的詞序扮演什麼角色,等等。一句話,RTFM(Read The Fucking Manual,讀那些他媽的手冊)吧。 你應該學會這些手段,諸如如何接近特定的搜尋,以及瞭解自己實際上想查些什麼。查錯誤很容易—只需查出錯程式碼即可—但是許多搜尋的關鍵字選擇要困難得多。 至於策略,你需要學會的東西,包括像應該使用哪種搜尋引擎(提示:普通的搜尋引擎不一定就是最佳選擇),使用普通搜尋引擎前應該訪問哪個網站,甚至是應該到哪個論壇去尋求幫助,等等。
3. 幫助別人
教別人始終是學習一切東西的最好方法之一。相對而言,由於你在開發領域還是個新手,認為自己沒什麼可教給人家的,這可以理解。但這毫無意義。記住,你所學 到的一切都是你從別人或別處學到的;因此請嘗試一下,成為另外一個人要請教的“別人”。每天儘量花一點時間試著回答TechRepublic上的問題,其他網站的亦可。讀讀其他會員的回答,你也可以學到很多東西。
(伯樂線上編注:提攜新人。協助並且培養初級/入門的開發人員學習優秀的程式設計方法和技巧。也許你還不知道,在幫助他們向更高一層前進時,你自己也在向更高一層提升,你會更加自信。摘自《風雨20年:我所積累的20條程式設計經驗》)
4. 有耐心,常練習
研究表明,要成為一名“專家”,需要花費10年,或者10000到20000小時的刻意練習時間。真的很久。還有,成為專家不盡然就是執行10年同樣的任 務;通常這意味著要在特定領域內執行廣泛的任務。需要花費大量的時間和精力才能成為“專家”;做幾年程式設計師是不夠的。想在30歲左右成為一名高階軟體開發 工程師?要麼儘早接受教育/培訓,要麼你得願意在閒暇時間進行大量的工作、閱讀和練習。我從高中開始程式設計,還犧牲了許多休息時間去跟蹤行業發展、學習新技 能等等。結果,我獲得中級和高階程式設計師的時間就比我的大部分同事都要早得多,隨著時間的推移,這些就轉化成為很多的金錢。
5. 對教條拒之門外
是時候開誠佈公了:也許初級程式設計師瞭解的東西還不足以說出做某件事情有一種最好的方式。尊重朋友或者權威的觀點是好的,但直到你更有經驗之前,不要把他們 的觀點說成是你自己的。很簡單,如果你所瞭解的不足以讓你獨立地找出這些東西來,你又怎麼會認為你知道哪一位“專家”是對的呢?話是難聽了點,不過請相信 我;由於受某些愚蠢建議的蠱惑,或者追隨某些根本不知道自己在說些什麼的所謂專家,白白把自己的職業生涯耽擱了幾年,這樣毛頭小夥程式設計師,我見過多了。這 一點有一個很好的例子,就是物件導向結構的濫用。比如說,許多初級者讀了一些有關物件導向的資訊後,突然間,他們那簡單的應用程式的類圖看起來就像艾菲爾 鐵塔一樣了。
6. 深入學習一點先進理念
成為一名中級程式設計師,很大一部分是要在程式碼裡面體現出一些所擅長的概念。就我而言,是多執行緒/並行性,是正規表示式,以及如何對動態語言進行變化(後兩個 在我離Perl漸行漸遠後開始退化)。這是如何發生的?多執行緒和並行處理是因為我讀了相關文章,覺得它看起來很有趣,然後再自己把它弄清楚了;然後我就一 直使用這些技術來寫應用。我做過一件工作,是用Perl寫的,裡面運用了大量的正規表示式。我也用一個過程引擎模板和內建資料庫系統寫過我自己的電子商務引擎;那時我幾乎花了2年時間在這上面。 找到真正令你著迷的東西。也許是影像處理,也許是資料庫設計,等等。即便你是一個入門級的程式設計師,也要嘗試一下成為某一自己所關注領域的專家。這會讓你相 當快速地進入到中級水平,一旦你到了那個水平,你的專家之路也走到一半了。
7. 學習你所在領域裡面的基本理論
寫出“Hello World”,跟理解那些字是如何顯示到螢幕上的是兩碼事。通過學習支撐你所從事的工作的“基礎/底層工作(groundwork)”,你會變得更加在 行。為什麼?因為你會理解事物為何會以這種方式運作,當東西壞了就能知道是哪裡的問題,等等。通過掌握工作的底層機制,你變會得更出色。 如果你是Web程式設計師,讀讀HTTP RFC和HTML規範。如果你使用程式碼生成器,好好看看它生成的程式碼;如果你使用資料庫工具,看看它生成的底層SQL語句,不一而足。
8. 看看高階程式設計師的程式碼
在工作中看看高階程式設計師寫的程式碼,然後問一問事情是如何以某種特別的方式完成的,為什麼?可能的話看看開源的專案。甚至即使其他程式設計師沒有最好的程式設計習 慣,你也會學到許多程式設計經驗。當然,要小心別學到壞習慣。我的意思是說不要生搬硬套人家的東西;你要能領會到哪些是能行的通的,哪些是有道理的,然後再模仿人家。(另推薦閱讀:《閱讀優秀程式碼是提高開發人員修為的一種捷徑》)
9. 學習優秀的習慣
愚蠢的變數名,糟糕的縮排習慣以及其他一些凌亂的跡象就是一個沒有經驗的程式設計師的最好標記。一個程式設計師在學會如何程式設計時,卻經常沒有被傳授到那些不那麼有 趣的細節,像程式碼格式編排。甚至儘管學習這些東西並不會令你的程式碼更好,也不會令你成為更好的程式設計師,它也會確保你不被同事視為入門級的程式設計師。甚至即使 某人是高階程式設計師,如果他的變數是以他那97只貓的名字來命名,或者其函式叫做“doSomething()”的,他們看起來也不像是知道自己在幹什麼的 人。而且會令其程式碼在過程中更難以維護。
10. 要玩的開心
想要痴迷於單調乏味的工作?痛恨工作吧。要想升級為中級程式設計師,可不僅僅是為了拿到不斷增長的工資不達目的誓不罷休,而是要真正享受工作。如果你不喜歡自己的工作,且還是初級程式設計師,你怎麼會認為成為中級或高階程式設計師情況就會有所好轉呢?換工作或改職業吧。反過來說,如果你喜愛所從事的工作,那就好!只要你堅持下去,我保證你能成為一名更優秀的程式設計師。