究極程式設計師跨過的艱難六步

Web開發者發表於2012-11-22

  Step 1 別抱怨了.準備好漫長的征程,或者晾在一邊賞鳥去吧

  對於真正希望成為一名優秀的程式設計師的人,希望成為專家,成為究極人物的人,如果真的值得去做,那麼投入十年進去,並不算什麼,對嗎?

  第一步就是吞下這顆子彈。接受這個過程將不止花去十年,而是一生的追求。只因為你想去做它,才去做它。如果一個人不情願做某事,他是不會成為它的專家的。

  Step 2 寫很多很多的程式碼

  同時寫許多許多的程式碼。不一定是好的程式碼。很長時間內,你寫的程式碼都不是好的程式碼。好的程式碼,好的taste,是需要大量的實踐培養的。對什麼新的工具、新的演算法、新的問題感興趣,或者遇到了什麼問題,就去儘可能地寫程式碼實踐,嘗試使用它。

  學習的過程永不停止。如果你懷著在每一天中儘自己最大的可能去學習,取得你所能得的最大的“里程數”的態度去學習,你將會走很遠。進入這樣一種狀態:任何的一天/一週/一月中沒有學到有趣的東西的話就是失敗。每天都有足夠多的酷的、有趣的東西等待你去學習。即使你已經學習了15年,雖然找到它們更困難了,但仍然可能找到。沒有一個人能夠掌握程式設計世界中所有的知識,所以如果你覺得沒有東西可學了,就去找到一個新的專案,寫更多的程式碼。

  在你做這些東西的時候,注意了,你要尋找中間的模式,如那些可以自動化執行有用的東西,或者你寫了許多的程式碼可以分離出來作為共享的庫的東西,或者其他集中的位置。去尋找對於特定任務簡單的程式語言。找出來那些對於同樣的任務不擅長的程式語言,並思考為什麼一些語言對於這些任務相比其他的更加具有生產力。

  但最重要的,就是寫許多許多程式碼。但記住了,如果做的事情不再有趣,就沒必要做下去了,如果你不能在此期間享受過程。

  Step 3 讀更多的程式碼

  當你積累了一些專案的時候,開始讀其他人的程式碼。剛開始的時候,這樣做很困難。他們做了許多你從沒有做過的事,或者使用了你不習慣的風格,甚至使用了你沒有學習過的程式語言。如果你覺得它有趣的話,儘可能地去讀這些程式碼。不要擔心深入地分析任何給定的專案的程式碼,至少剛開始時不要擔心。

  讀一些新的程式碼可以展示給你新的思維方式,這有利於擴充套件你的思維。擴充套件思維對於保持進步是很重要的事。它幫助你確保當你前進時能夠持續發現新的東西去學。

  一定要與其他的程式設計師交流。問他們如何和為什麼做那些特定的事,是否採取了不同的角度做事情,問他們對自己的程式碼是否有建議。一定要禮貌,因為高階的程式設計師非常地忙。尊重會帶你走很遠,這是個緊密聯絡的行業,名聲很重要。

  Step 4 學習許多程式語言。在一些中成為專家

  你實際上不會有很多盈餘的時間,至少不足夠同時學習許多的語言,除非你異常地幸運。所以可以在一個較淺的層面上學習許多的程式語言,足夠了解什麼使他們流行,什麼使它們擅長於它常用的領域,它們的缺陷是什麼。擴充套件很重要。不要侷限於一種型別的語言,如命令式的語言,或者OO語言,擴充套件學習一些函式式語言或者宣告式語言。

  學習Lisp的一種方言。對於你日常的編碼來說,你不會去使用它。但學習、實踐它會令你成為一名更好的思考著,你會對簡單的遞迴的系統的魅力有更深刻的理解。堅持學習它、實踐它直到令你情不自禁地叫出“啊哈”的那一刻到來。那一刻之前,你都會覺得那是一坨奇怪的語法和蹩腳的用法。在你剩餘的職業生涯中,它便會成為人類設計的最令人瞠目結舌的優雅的概念。

  之後,學習一門純粹的函式式語言。我推薦Haskell。它通過其它函式式語言包括Lisp的方言都不用的方式強迫你純粹地使用函式思想。當你理解了設計monads的目的後,或者其它“啊哈”時刻,你將會進入到思索的能力和設計優雅系統的能力的更高的層次上。

  最後,學一門宣告式語言。SQL也算,雖然比較弱。Prolog常常被推薦。還有XAML,XSLT和XQuery。宣告式語言是你告訴計算機你希望它做什麼,計算機來琢磨如何做它;而命令式語言則相反,你告訴計算機如何去完成一件事並希望它正確地做了你想做的事;而在函式式語言中,你描述了資料域型別如何轉換。

  Step 5 自創程式語言

  它不需要很複雜,或者高階,甚至不需要特別優雅。甚至不需要是原生的想法。我常常推薦寫一個Lisp直譯器(如果使用Lisp的方言寫更好)。這是你學習基礎知識的一個很好的方式。實際上,你可以對計算機程式設計設計的基礎有很好的感覺:詞法分析,語法分析,編譯,解釋,虛擬機器,還有基本的設計抉擇對一門語言在各個領域的實用程度如何影響。

  你將會在此過程中得到以下3樣東西:

  1)你將會對你選擇的工具如何工作有更加深刻的認識,這樣你就可以寫出更加高效的程式碼。

  2)你將會開始意識到主流語言和工具背後的設計抉擇的原因。這將會使你更有效地選擇你要用的工具。

  3)你將瞥見一些仍然存在於工具和語言中的未發現的可能性,這樣使你開闊了眼界,可以發現新的可以學習和實驗的有趣的酷的東西。

  Step 6 學習其他人從沒有學習過的東西

  這是最困難的也是最後的步驟。又是另一個十年。保持興趣和做有趣的事情,離開那些不讓你享受的事情。

英文來源:become-a-good-programmer-in-six-really-hard-steps/

相關文章