1. 程式人生 > >程式設計師如何在3年內快速成長為技術專家?

程式設計師如何在3年內快速成長為技術專家?

 

程式設計師如何在3年內快速成長為技術專家?

如果有對大資料感興趣程式設計師,可來我們的大資料交流扣qun哦:877070344裡面免費送大資料的系統教程噢! 小編也是一名從事了5年的資料演算法工程師,花了近兩個月整理了一份較適合當下學習的乾貨,以及我這5年的工作經驗,分享給每一位想學大資料的小夥伴,這裡是大資料學習者聚集地,歡迎初學和進階中的小夥伴。

在我們公司有些同學在前三年中就快速成為某一個領域的技術專家,有些同學也可能止步不前。

本文將從學習方法和實戰技巧兩個方面和大家一起探討如何在三年內快速成長為一名技術專家。

學習方法:

  • 掌握良好的學習心態
  • 掌握系統化的學習方法
  • 知識如何內化成能力
  • 廣度和深度的選擇

實戰技巧:

  • 你需要學會的編碼習慣
  • 在業務團隊做開發如何成長

 

程式設計師如何在3年內快速成長為技術專家?

 

 

掌握良好的學習心態

空杯心態

首先要有空杯的學習心態,而不是傲嬌自滿,固步自封,空杯子才可以裝下更多的東西。

然後要學會取百家之長,帶著欣賞的眼光看團隊的同事或學校的同學,欣賞每位同事或同學的優點,然後吸取他們的優點,因為每個同事都有其擅長的能力。

比如有的同事技術能力強,那麼可以觀察下他如何學習的(或者找他請教學習方法),有的同學擅長解決線上問題,那麼觀察他是如何解決線上問題的,解決思路是什麼?

如果他解決不了時,他是如何尋求幫助。有的同學擅長使用 IDE 或 MAC 的快捷鍵,那麼可以向他學習提高工作效率。

有的同學能快速理解業務知識,觀察他是如何做到的,自己如何達到他的程度。溝通能力,解決問題能力以及規劃能力都可以向同事學習。

挑戰權威

從書上看到一個知識點,或者從別人那裡聽到一個知識點,一定要去挑戰和質疑這個知識點的正確性,否則學到的知識點可能是錯誤的。

先用邏輯思維推測下,再實戰檢測下,一定要記住實踐是檢驗真理的唯一標準。

比如同事說這個 SQL 加這個索引是最快的,首先要思考同事的結論是如何得出的,是靠歷史經驗還是測試過?

如果我們沒有經驗,就加上這個索引跑下 SQL,看看執行計劃和執行時間,再換下其他索引試試會不會更快。

依次類推,併發一定比序列快嗎?無鎖一定比加鎖快嗎? 很多結論都是在特定的場景下才會產生的,一定要自己親手實踐驗證下。

堅持學習

有的同學可能工作了五年,但是學習的時間可能一年都不到。學技術不能急於求成,只要學習方法正確,量變一定會引起質變。

我在大學剛學 Java 時,怎麼都學不會,但是堅持學習了幾個月,每天看張老師的 Java 視訊教學。然後買書,按照書裡的程式碼一行一行的敲程式碼。

我白天睡覺,晚上學習和寫程式碼,寫到宿舍關燈時就去避風塘呆一晚上,早上 6 點鐘回宿舍睡覺,學到一定時間後,突然恍然大悟,才入了門。

在工作中,我曾經花了一個月的時間學習 AOP 的實現原理,學習了各種方式來實現 AOP 的原理,並寫了幾種實現方式的程式碼。

雖然花的時間很多,但是到現在仍記憶猶新,對於排查問題和學習其他知識都非常有幫助。

要做到堅持學習,學習的環境非常重要。如果你想學,但是又不在學習狀態,可以考慮換個學習環境,我經常會去星巴克看書和學習。我聽說有的同事會週末抽一天去大學教室上自習。

把事做精

對自己要求越高,進步越快,要有強烈的把事情做完美的心態。

我剛開始工作的時候,總是快而不精,做事做的不夠細緻,總希望快速拿出結果證明自己,但是反而證明不了什麼,技術能力也得不到提升,缺少技術亮點,在團隊中也沒什麼影響力,後面就開始鍛鍊一次就把事情做對的心態和方法。

我觀察過,很多人都擅長快速做事情,但是把事情做好做精緻的人會比較少,但是結果卻是在精益求精的路上才會快速提高自己的能力。

比如用 100 行程式碼實現的功能,思考下是否可以用 10 行來實現,以便於降低運維成本,提高下次的編碼效率。

引用 GUAVA 等類庫,提取公共方法和使用 JDK8 新特性等。系統的方法壓測過後,單機只能承受 1700 QPS,可以思考和實踐能否優化下程式提高 QPS,減少伺服器數量。

把事情做精,一定是要強迫自己多花心思多花時間在這件事情上。有位技術牛人給我分享了一個心得,我覺得說的非常好。

老闆給你佈置了一個任務,你要花百分之 150 的精力做到 100 分,這樣在老闆那裡你就能拿到 80 分或者 60 分。

 

程式設計師如何在3年內快速成長為技術專家?

 

 

掌握系統化的學習方法

如果學習到的知識不成體系,那麼遇到問題時就會非常難解決。有些同學會出現這些情況,比如編碼時遇到問題百度搜索,如果百度上找不到答案,這個問題就解決不了。

再比如,在開發中要用到某個技術點,就學習下 API,程式調通後就不再深入研究,淺嘗輒止,如果程式遇到其他問題也不知道如何解決。

以上情況我認為叫點狀學習。遇到一個問題,解決一個問題,需要一項技術,學習一項技術。那麼如何由點到面,由面到體,形成系統化學習呢。

首先要確定學習的知識領域,需要達成的學習目標,針對目標制定學習計劃。

就像你要寫一本書一樣,先把目錄寫出來,然後根據目錄上的知識點逐步去學習,最後把這些知識點關聯起來,形成一個系統化的知識體系。

學習的時候,可以制定一個計劃,以周為單位,比如第一週學什麼,第二週學什麼。

比如我最近在學習人工智慧,學習步驟是:

  • 高數基礎知識:線性代數,微積分和統計學。最近在打德州撲克時,我也會用統計學裡的知識計算下輸贏的概率。
  • 人工智慧基礎:買幾本人工智慧的基礎書籍,如《機器學習基礎教程》《Python 機器學習》。
  • 框架:TensorFlow 等。
  • 實戰:在工作中找到一個應用場景,把學到的知識運用進去。

 

程式設計師如何在3年內快速成長為技術專家?

 

 

知識如何內化成能力

作家格拉德威爾在《異類》一書中指出,1 萬小時的錘鍊是任何人從平凡變成世界級大師的必要條件。

1 萬小時有多久?每天學習 10 小時,需要大約三年。但是很多人都工作了五年甚至更長,但是為什麼成為世界級大師的卻非常少?讀者可以先自己思考下這個問題,接下來談談我的看法。

成長必須經歷一個步驟,就是把知識內化成能力。知識是用腦記住的,能力是用手練習出來的。

在工作的幾年裡,我們可能看過很多書,聽過很多技術講座和視訊,但是通過聽和看只是讓你能記住這些知識,這些知識還不能轉換成你的能力。

聽和看只是第一步,更重要的是實踐,通過刻意練習把聽到和看到的知識內化成你的能力。

刻意練習,就是有目的的練習,先規劃好,再去練習。首先給自己定一個目標,目標可以有效的引導你學習。

然後使用 3F 練習法:

  • 專注(Focus),專注在眼前的任務上,在學習過程中保持專注,可以嘗試使用番茄工作法。
  • 反饋(Feedback),意識到自己的不足,學習完之後進行反思,思考下自己哪些方面不足,為什麼不足。
  • 修正(Fix),改進自己的不足。

不停的練習和思考可以改變大腦結構,大腦像肌肉一樣,挑戰越大,影響越大,學習更高效,並且也會產生突破性。

 

程式設計師如何在3年內快速成長為技術專家?

 

 

廣度和深度的選擇

技術人員的學習路徑有兩個維度,深度和廣度。很多程式設計師都有這個疑問,是先深後廣,還是先廣後深呢?

通過這麼多年的學習和思考,我的建議先深後廣,因為當技術學到一定深度後,就會有觸類旁通的能力,自己掌握的廣度也自然有了深度。

但是在實際學習過程中,深度和廣度是相互穿插著學習,比如學習併發程式設計時,首先學習 JDK 原始碼,然後學進去之後,開始看 JVM 原始碼,最後看 CPU 架構,在技術點逐漸深度研究的過程中,廣度也得到了完善。

所以無論哪種學習方式,學習態度才是最重要的,在廣度學習的時候有深入研究的態度就能達到一定的深度;在深度學習的時候,主動學習相關的技術點,廣度也得到拓寬。

你需要學會的編碼習慣

程式設計師應該學會通過技術的手段來提高效率。幾個常用的手段是使用工具,快捷鍵和編寫指令碼。

使用各種工具

技術人員電腦儘量用 MAC,使用命令列效率一定比在 1024*1024 畫素中找一個 10*10 畫素的按鈕更快。IDE 用 IDEA,比 Eclipse 更智慧。命令列工具用 iTerm 和 IDEA 裡的 Terminal。

寫文章用 MAC 的客戶端工具 MacDown,左邊編寫,右邊展示,比 Word 等工具方便快速很多。

有時候我還會用按鍵精靈裡配置指令碼解決工作問題,比如通過點選我們的系統,來執行任務。

這樣的工具很多,只要能提高工作效率的工具,大家都可以嘗試使用。

使用快捷鍵

MAC,IDEA 和 Eclipse 有很多快捷鍵都要學會使用,比如在 MAC 命令列中通過 idea . 快速開啟工程,通過 open . 快速的開啟資料夾,在 IDEA 裡通過快捷鍵把一段程式碼抽成一個單獨的方法,快速生成 getter setter 方法。

用指令碼寫工具

當我們用人工的方式做一件重複性很強的事情,首先要考慮使用工具來幫我們自動完成,如果沒有類似工具,可以自己寫個指令碼來實現,這樣除了能快速解決問題,還能提高自己的技術能力。

比如,我經常要在兩個 maven 倉庫釋出 jar 包,我就寫了個指令碼來實現 jar 包的釋出,deploy.sh 程式碼如下:

 

程式設計師如何在3年內快速成長為技術專家?

 

 

在業務團隊做開發如何成長

我一直在業務團隊中做開發,在業務團隊最主要提高的能力是業務抽象和架構能力,通過業務場景,不斷思考如何通過合理的架構和業務抽象能快速支援業務,降低運維成本。

同時在這個過程中鍛鍊技術能力,比如寫一些技術框架來快速支援業務,做到技術驅動業務。

可配置化的方式支援業務

設計業務的領域模型,把不隨著業務邏輯變化的領域模型做成系統能力,把隨著業務邏輯變化功能,做成可配置化,上一個新業務,通過配置的方式或少量開發就能支援。

在做客戶後臺功能時,由於需要展示的資料種類非常多,每種資料展示可能需要花費幾天的時間,所以設計了一個通用的技術框架,實現了通過配置化的方式展示各種資料。

寫框架解決業務問題

我在上家公司經常做一些 CRUD 的業務功能,我就自己開發了一個快速做 CRUD 的框架 jdbcutil,通過配置實體生成 SQL 語句,實現了子類只要繼承父類,就自動擁有 CRUD 的能力。後面還寫過生成 CRUD 頁面程式碼的程式。

目前我們團隊在做的 TITAN 框架通過模組化開發的方式,解決易變的業務系統在多人開發時遇到的問題。

技術驅動業務

在業務團隊,一定要不斷的思考如何利用技術來快速支援業務,配置化是一種思路,但是有些功能配置複雜度比較高,配置加驗證的工作量,可能需要一個星期的時間。

那麼能不能減少人工配置,實現系統自動化配置?建議可以研究下人工智慧,通過人工智慧的方式實現,系統告訴人需要配置哪些東西,然後交給人來進行確認,這樣可以大大減少人工成本,更快的支援業務。