最近有一些畢業不久的同事問我:「你工做的時候有沒有什麼竅門?怎麼才能快速成爲高手?」前端
想起當初剛入職,新人培訓的時候,也跟其餘同事討論過這個問題:如何才能成爲業界大牛?當時本身只是以爲興趣是最好的老師,思路方法什麼的沒有多想。linux
加入微博平臺架構部的時間也不短了,趁着快過春節總結了一下本身入職微博以來的工做狀況,從互聯網開發的半個門外漢,到現在能設計一些架構、排查一些問題、分享一些經驗,收穫頗多,感想頗多,也逐漸意識到思路和方法的重要性,在此跟你們分享一下。主要分爲學、作、想三方面。程序員
2.學會學習sql
學習無疑是程序員最爲重要的素質之一,尤爲是互聯網這種突飛猛進的行業,把學習當作工做的一大半也不爲過。編程
2.1.自主學習設計模式
最近發現身邊的人並非不想學習,只是天天都在糾結本身到底學什麼好:簡單的沒挑戰,複雜的看不懂;舊技術怕過期,新技術沒方向……服務器
講講本身畢業後的經歷,畢業以後去了個不大不小的公司,工做主要是作一些XX管理系統之類的東西,沒什麼挑戰,也用不上什麼技術,基本上前端用個extjs後面套個sql server就解決了。工做穩定了幾年,業餘時間除了wow沒別的事情作,以爲這麼閒下去不是辦法,因而以後一年的時間裏,用上班摸魚和下班休息的時間學了這些東西:網絡
閒着無聊想作個小遊戲,發現遊戲相關的書大可能是英文的,看不懂,一咬牙翻譯了《Real-time rending 3rd》的前幾章,剛開始前言都看不懂,只能一個詞一個詞的翻字典,一句話要琢磨幾個鐘頭到底做者說的究竟是什麼意思。翻譯了幾百頁英文書以後,發現本身看英文書沒什麼障礙了,因而開始天天用休息和摸魚的時間看書。 看完遊戲引擎的書以後,把irrlicht引擎的代碼看了一遍,而後本身山寨了一個3d渲染的場景管理器,還有個樸素的渲染引擎。 給本身的遊戲引擎寫了個基於腳本語言的解釋器,爲此看了很多編譯原理和虛擬機的書,瞭解了程序到底是什麼東西,這是我以爲收益很大的一件事情。 看編譯原理的書的時候發現操做系統的知識有些欠缺,又去看了linux內核相關的書。以後買了個開發板每天修改內核玩,畢業之後又一次瞭解了內核的cpu調度、內存管理和文件系統,瞭解了應用是怎麼跑在操做系統上,操做系統又是怎麼運行在硬件上的,這也是收益很大的一件事情。 看完操做系統又順着看網絡相關的書,以後把lighthttpd的代碼看了一遍,用c寫了個linux下的http服務器,把幾種網絡編程模型挨個實現了一遍。 實現http服務器的過程當中以爲本身編碼能力仍是有欠缺,把代碼大全翻了一遍,順着又去看了設計模式的書,而且用本身的理解把每一個模式用文字從新描述了一遍。 中間還看了不少語言和框架相關的書,就不一一列舉了。能夠參考這裏。 我把學習的方向分爲三類:架構
爲了工做,知足當前工做所必備的知識 爲了提高,與當前工做相關的知識(深度) 拓展視野,與當前工做無關的知識(廣度) 學習(1)以後只是個熟練工,2和3纔是提高本身的途徑,伴隨着知識儲備的提高,接觸新事物時更容易找到類似的知識加以類比,加快理解,也更容易掌握本質。若是天天都在糾結「到底學什麼」,那麼只能說明仍是學的太少了。(真正沒什麼可學的大牛們應該不會讀到這裏吧……)框架
因此,若是覺着沒什麼東西能夠學的時候,那麼能夠考慮一下學一下更有深度的知識(好比虛擬機或編譯器),或者徹底不一樣的知識(新的語言或當前比較火的方向),甚至徹底不相干的知識(單純練習英文閱讀,學習ppt排版之類)吧。隨着知識儲備增長,本身的不足和將來的學習的方向也會更加明確起來。