程序員的編程套路
Table of Contents
與你所相信的偏偏相反,單純地天天埋頭於工做並不能算是真正意義上的鍛鍊: css
參加會議並不能鍛鍊你的人際交往能力;回覆郵件並不能提升你的打字水平。 html
你必須按期留出時間,集中鍛鍊,這樣才能把事情作得更好。 – Steve Yegge java
相似地,咱們天天都開車去上班,但並不能使咱們的駕駛水平達到專業車手的水平;咱們每天編程可能也並不足以使咱們成爲一名專業的程序員。那麼,什麼才能把一個普通人變成一名專業車手或者專業程序員呢?你須要鍛鍊什麼呢? python
《萬小時天才理論》早就給出了答案,如今應該也已經人盡皆知了,但並無所以出現不少的天才。這個是有緣由的,這個理論應該是正確的,可是,天才的煉成卻須要兩方面。一方面,是練習者的堅持,你們都知道最難堅持的就是堅持;另外一方面,須要有好的教練者,可以看到練習者的缺點,可以有針對性地提出好的練習方法,這一點更加稀缺。 程序員
相對而言,練習者的堅持,或者叫自律,仍是本身能夠控制的。而有一個好的教練者,那真的叫可遇不可求。大多數,或者說絕大多數人都是不具有這樣的條件的。 面試
編程領域,是各類高智商的牛人彙集的地方,也有不少的天才。而且,他們樂於分享,寫了不少很好的教程,可讓咱們從小白,即便沒有導師,按照他們的例子和方法,也能夠慢慢地掌握基本的編程方法和技巧。甚至有些大牛也寫出了一些「教練者」的方法,咱們按照他們的套路能夠取得更高的成績,甚至成爲大牛。 算法
那麼,咱們就來看看他們給出的方法,最重要的是,要按照他們的套路來進行鍛鍊: sql
1 SteveYegge
- 寫一份本身的簡歷。把本身全部相關技能都羅列出來,而後把那些在100年後還用得着的標出來,給每一個技能打分,滿分爲10分。
- 羅列出你所景仰的程序員。儘可能包括那些與你一塊兒工做的人,由於你會在工做中從他們身上得到一些技能。記錄下他們身上的1~2個閃光點,也就是你但願本身有所提升的方面。
- 查看維基百科上的「計算機科學」欄目,找到「計算機領域先驅者」這個分類,從這個列表中挑選一我的,閱讀他的事蹟,並在閱讀時打開任何你感興趣的連接。
- 花20分鐘通讀別人的代碼。讀出色的代碼和讀糟糕的代碼都是有益的,二者都要讀,輪流切換。若是你沒法感受出它們之間的區別,能夠求助於一位你尊敬的程序員,讓他給你展現一下什麼事出色的代碼、什麼事糟糕的代碼。把你讀過的代碼給別人也看看,問問他們的見解。
- 羅列出你最喜歡的10個編程工具–那些你以爲你用得最多、非有不行的工具。隨機挑選其中的一個工具,花一個小時去閱讀它的文檔。在這一個小時裏,努力去學習這個工具的某個你未曾意識到的新功能,或者發現某種新的使用方法。
- 想想,除了編程以外你最擅長什麼事情?再想想,你是經過怎樣的鍛鍊才變得如此熟練和專業的?這對於你的編程工做又有什麼啓發呢?
- 拿出一疊簡歷,並和一組面試官在同一個房間裏待上一個小時。確保每份簡歷都至少被3個面試官看過,而且要給出1~3分的評分。針對那些不一樣面試官評判截然不同的簡歷展開討論。
- 參與一個電話面試。過後寫下你的反饋,拋出你的觀點,而後與主持電話面試的聊一聊,看看你嗎是否達成了一致的結論。
- 進行一次技術面試,而且被面試的人應該是某個你不太瞭解的領域裏面的專家。讓他假定聽衆在改領域裏一無所知,所以請他從最基礎的講起。努力去理解他所說的,必要時問一些問題。
- 有機會參與別人的技術面試。期間,你只是認真地聽、認真地學。在應聘者努力解決技術問題的同時,你也要在本身腦子裏嘗試解決這些問題。
- 找到一個能與你交換實際問題的人,每隔一週,相互交流編程問題。花10~15分鐘來嘗試解決這些問題,再用10~15分鐘進行討論(不管可否解決)。
- 當你聽到任何你一時之間也沒法解決的面試問題時,趕忙回到你的座位上,把這個問題用電子郵件發給本身,以留做往後的提醒。在那一週裏找出點時間,用本身最喜歡的編程語言來解決它。
2 Peter Novig 《Teach Yourself Programming in Ten Years》
- 與別的程序員交流。讀別人的代碼。這比任何書籍或者培訓課程都要更重要。
- 動手寫程序!最好的學習方法就是邊作邊學。
- 在本科或者研究生的課程中學習編程課程。
- 找一些項目來作,而且須要與其餘程序員造成團隊來合做。在項目的進行過程當中,學會辨別最出色的程序員以及最糟糕的程序員。
- 在項目中跟隨別的程序員一塊兒工做,瞭解如何維護那些不是你寫的代碼,而且學習如何寫出利於他人維護的代碼。
- 學習多種不一樣的編程語言,特別是那些與你如今所熟悉的語言有着不一樣的世界觀和編程模型的。
- 瞭解硬件對軟件的影響。知道你的電腦執行一條指令須要多少時間,從內存中取出一個字(在有緩存或沒緩存的狀況下)須要多少時間,在以太網(或者因特網)上傳輸數據須要多少時間,從磁盤中讀取連續的數據或者在磁盤上跳轉到令一個位置須要多少時間,等等。
3 Others
- 寫博客。不少牛人都堅持寫博客,寫做做爲一項技能,在任什麼時候候都是很重要的。一方面,能夠記錄和整理本身的思路,想法寫出來,和在腦子裏過一遍是懂非懂是有很大的不一樣的,另外一方面,也能夠鍛鍊本身的表達能力。
- 積極參與著名的開源項目。
- 在lintcode之類的OJ(online judge)上面刷題,也是一條不錯的鍛鍊算法的方法。