究極程式設計師跨過的艱難六步
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 學習其他人從沒有學習過的東西
這是最困難的也是最後的步驟。又是另一個十年。保持興趣和做有趣的事情,離開那些不讓你享受的事情。
相關文章
- 通過艱難的六步讓你成長為一名出色的程式設計師程式設計師
- 程式設計師何苦為難程式設計師?程式設計師
- 程式設計師何必難為程式設計師程式設計師
- 程式設計師的太極程式設計師
- 招個程式設計師,難?程式設計師
- 程式設計師最艱鉅的十大任務程式設計師
- WebWorker究極探索Web
- 程式設計師如何做出“不難看”的設計程式設計師
- 程式設計師創業的兩難困境程式設計師創業
- 程式設計師也難逃的二八定律,成為頂級程式設計師真的有那麼難嗎?程式設計師
- 程式設計師,你碰到過的最難調的Bug是什麼樣的?程式設計師
- 極客漫畫:消沉的程式設計師 16程式設計師
- 關於程式設計師的極品漫畫程式設計師
- 程式設計師的美:極致與瘋狂程式設計師
- 程式設計師嘆息:太難了,三萬的程式設計師確實不如三千公務員?程式設計師
- mxgraph的艱難入門
- 學JAVA的艱難之路Java
- 雙十一,程式設計師可太難了程式設計師
- 程式設計師將面臨的三大“難題”程式設計師
- 極其出色程式設計師的各種跡象程式設計師
- 禁止程式設計師上網是極為愚蠢的程式設計師
- 為神馬說寫程式是很艱難的
- 程式設計師女朋友如何給程式設計師男朋友過生日?程式設計師
- 讓程式設計師跨界做設計,腦洞開的萬萬想不到程式設計師
- 當程式設計師遇上極品客戶的時候程式設計師
- 提高Web程式設計師積極性的10種方法Web程式設計師
- 程式設計師懶惰之極的確鑿證據程式設計師
- 程式設計師的中年該如何度過程式設計師
- 程式設計師調過的那些奇葩 Bug程式設計師
- 程式設計師的“非程式設計師”之路程式設計師
- 極限程式設計程式設計
- 細數被程式設計師吐糟的9大困難程式設計師
- java程式設計師最難面試之“今日頭條”Java程式設計師面試
- 以前的程式設計師,現在的程式設計師程式設計師
- 程式設計師必看的書-Ruby程式設計師程式設計師
- 《程式設計師的春天:EOM與程式設計師》程式設計師
- Lisp程式設計師眼中的其他程式設計師Lisp程式設計師
- Java從程式設計師到架構師其實並不難Java程式設計師架構