人生如何成為程式設計大師

2021-07-06 11:25:02 字數 2506 閱讀 2391

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 學習其他人從沒有學習過的東西

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

如何成為程式設計競賽的大師?

對許多人來說,程式設計就像是一場夢魘。程式設計不過是一門與機器交談並告訴它們該做什麼 何時做以及為什麼做的藝術。大多數學生在高中聽到這個詞。對他們中的許多人來說,程式設計從 c 開始,到 c 結束。選擇任何一種特定的程式語言都沒有問題,但是陷入一些眾所周知的 或者僅僅為了考試而需要的 是徒勞的。即將...

程式人生 如何高效學習

本文主要來自 如何高效學習 一書的讀後筆記。總的來說,這本書講述了一種聯想記憶法,並倡導知識的學習過程按照 獲取 理解 擴充套件 糾錯 應用 1 對於程式猿來說,能量管理 尤其重要,靠體力換來的加班效率並不一定高。乙個很難處理的問題或者bug,通常是在吃飯,洗澡刷牙的時候想清楚的。所以盡量給自己保證...

程式人生 如何高效學習

本文主要來自 如何高效學習 一書的讀後筆記。總的來說,這本書講述了一種聯想記憶法,並倡導知識的學習過程按照 獲取 理解 擴充套件 糾錯 應用 1 對於程式猿來說,能量管理 尤其重要,靠體力換來的加班效率並不一定高。乙個很難處理的問題或者bug,通常是在吃飯,洗澡刷牙的時候想清楚的。所以盡量給自己保證...