成為究極程式設計師的艱難的六步

2021-06-23 06:51:18 字數 2569 閱讀 3231

翻譯精編自become a good programmer in six really hard steps(

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

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

it takes ten years to learn to be a programmer).

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

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

step 2 寫很多很多的**

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

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

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

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

step 3 讀更多的**

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

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

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

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

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

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

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

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

step 5 create a language

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

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

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

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

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

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

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

10步讓你成為更優秀的程式設計師

1.永遠不要複製 不惜任何代價避免重複的 如果乙個常用的 片段出現在了程式中的幾個不同地方,重構它,把它放到乙個自己的函式裡。重複的 會導致你的同事在讀你的 時產生困惑。而重複的 如果在乙個地方修改,在另外乙個地方忘記修改,就會產生到處是bug,它還會使你的 體積變得臃腫。現代的程式語言提供了很好的...

10步讓你成為更優秀的程式設計師

1.永遠不要複製 不惜任何代價避免重複的 如果乙個常用的 片段出現在了程式中的幾個不同地方,重構它,把它放到乙個自己的函式裡。重複的 會導致你的同事在讀你的 時產生困惑。而重複的 如果在乙個地方修改,在另外乙個地方忘記修改,就會產生到處是bug,它還會使你的 體積變得臃腫。現代的程式語言提供了很好的...

10步讓你成為更優秀的程式設計師

這篇文章要介紹的,是我作為專業程式設計師這些年來學到的能真正提高我的 質量和整體工作效率的10件事情。不惜任何代價避免重複的 如果乙個常用的 片段出現在了程式中的幾個不同地方,重構它,把它放到乙個自己的函式裡。重複的 會導致你的同事在讀你的 時產生困惑。而重複的 如果在乙個地方修改,在另外乙個地方忘...