做者:程序之心丁儀html
來源:https://chengxuzhixin.com/blog/post/zen_me_cheng_wei_ji_shu_da_niu.html程序員
每天寫業務代碼,感受沒長進,技術深度止步不前,感受很煩躁。不少人都在問,怎麼樣才能成爲技術大牛?機會老是留給有準備的人,仍是有一些方法能夠幫助咱們在工做中提高技術水平的。spring
《黑客與畫家》裏說到,畫家學畫必需要臨摹,從大師的做品中進行學習,美術博物館即是他們最好的學校。而黑客則是經過觀看優秀的程序來學習編程,研究它們的源代碼,開源社區是他們最好的學校。編程
看優秀源碼是很是有效的學習方式,好比通讀 spring 代碼能夠深入理解 IOC、AOP 關鍵技術。經過對優秀代碼的探索和發現,能夠深入理解技術方案和涉及的知識點,加深本身的技術深度。優秀的開源項目通過千錘百煉,架構設計是比較優美的,能夠學到不少架構設計方面的知識和技巧。性能優化
模仿是進步最快的學習方式。看了源代碼以後,不妨從模仿開始,搭建一套本身的框架。經過模仿能夠站在巨人的肩膀上,直接把前輩的經驗轉變爲本身的能力,少走了不少彎路。不少良好的設計,並非一開始就一步到位設計好的,也會通過不少人的討論和優化,才變成咱們看到的模樣。而模仿能夠幫助咱們更深入地理解設計背後的思考。架構
不少人會抱怨,公司的代碼很爛,學不到牛逼的技術。其實大部分技術問題並不難,難在沒有多少人願意去作。解決的問題多了,才能創建起我的影響力,纔會有更多的疑難雜症交給你,才能得到不少成長的機會。當別人遇到問題首先想到你,你不進步誰進步呢?框架
公司除了須要技術能力,更須要的是做爲技術專家解決公司實際問題的能力。只有知道爛代碼爛在什麼地方,才能寫出更好的代碼,獲得上級更多的賞識和承認。若是能全面掌握現有代碼,看的越透徹,越能輕鬆進行重構和變革,就會成爲不可替代的人。分佈式
學習一項技術,理解一套代碼,最重要的是學習技術原理和設計思想,這是很長時間內都不會改變的東西。經過畫類圖能夠很好的理解技術方案和設計思想。大部分抱怨工做重複學不到技術的同窗,可能都聚焦在具體的技術細節上了,而技術細節是變化比較頻繁的東西,既消耗了大量的時間和精力,又讓人把握不住重點。post
要想深入理解系統的運做原理,須要畫出系統流程圖,才能看到整個系統如何工做。經過分析流程,能夠整理出一個業務完整的交互圖,寫成文檔,在後續的重構和需求溝通中會起到很是大的做用。性能
在畫圖過程當中,最好適當運用系統化思惟進行一些分析。找到軟件系統中存在的各個部分,和這些部分之間的關係。經過觀察和分析,劃定各個部分的邊界,明確系統中可變和不變的東西。經過分析關係能夠很好地理解系統的運行機制,明確系統中貫穿如一的關鍵核心事件,方便理解系統思想。
若是說最好的提高技術的方式是什麼,那必定是從 0 到 1 作一個產品。從頭開始作一個技術產品,很是鍛鍊架構設計能力。可以讓開發者在架構方面有極大的提高,又同時會鍛鍊一些領域的縱深點。
若是從零開始設計一個數據同步系統,假設天天要處理上億數據,這個系統對開發者的技術成長是巨大的。在大數據處理、性能優化、分佈式部署等方面也會有史無前例的積累。尤爲是在用戶量大起來後,要解決不少問題,倒逼本身有更多的深刻學習和實戰。
不少程序員突破瓶頸的臨界點,都是在從 0 到 1 的時候。這意味着,咱們要全方位思考和覆盤,被迫放大本身的技術視野,對不少問題的理解很快就加深了。
輪子哥說他在學校的時候天天8小時,連續練了4年。大三去了微軟上海實習,晚上還在寫本身的代碼。陳道明有句廣告語,若是再演一次,能夠演的更好嗎?我以爲就講的很好。回到程序員身上,不妨問一問,若是再寫一次,能夠寫的更好嗎?
若是真的想成爲優秀的程序員,不要管那麼多,靜下心多寫代碼就夠了,剩下的交給時間,學會作時間的朋友。可能開始練習的時候仍是模仿,可是通過多輪練習,必定會產生屬於本身的認知和經驗。通過反覆的推倒重來,當有一天寫出的代碼和模仿的對象不同了,融入了本身的真知灼見,那可能就是突破的臨界點了。
只有深度的思考,才能逼近問題的本質。而深度思考,必然是須要反覆練習的。若是老是浮於表面,永遠沒法突破瓶頸,很可貴到提高。刻意練習能夠一次次、一層層不斷突破本身的認知極限,在反覆思考中逐漸走到問題的中心、逼近問題的本質,天然可以開闊視野看到不同的風景。
本文整理了 5 種提高技術的有效方式,能夠交叉運用: