工作前三年是職業(yè)生涯中成長最快的幾年乐设,在這段時間里你會充滿激情部脚,做事專注译秦,也容易養(yǎng)成良好的習(xí)慣。在我們公司有些同學(xué)在前三年中就快速成為某一個領(lǐng)域的技術(shù)專家劣纲,有些同學(xué)也可能止步不前逢捺。本文和大家一起探討下如何在三年內(nèi)快速成長為一名技術(shù)專家。
學(xué)習(xí)方法
1:掌握良好的學(xué)習(xí)心態(tài)
2:掌握系統(tǒng)化的學(xué)習(xí)方法
3:知識如何內(nèi)化成能力
4:廣度和深度的選擇
實戰(zhàn)技巧
1:你需要學(xué)會的編碼習(xí)慣
2:在業(yè)務(wù)團隊做開發(fā)如何成長
空杯心態(tài)
首先要有空杯的學(xué)習(xí)心態(tài)癞季,而不是傲嬌自滿劫瞳,故步自封,空杯子才可以裝下更多的東西余佛。首先要學(xué)會取百家之長,帶著欣賞的眼光看團隊的同事或?qū)W校的同學(xué)窍荧,欣賞每位同事或同學(xué)的優(yōu)點辉巡,然后吸取他們的優(yōu)點,每個同事都有其擅長的能力蕊退,比如有的同事技術(shù)能力強郊楣,那么可以觀察下他如何學(xué)習(xí)的(或者找他請教學(xué)習(xí)方法),有的同學(xué)擅長解決線上問題瓤荔,那么觀察他是如何解決線上問題的净蚤,解決思路是什么?如果他解決不了時输硝,他是如何尋求幫助今瀑。有的同學(xué)擅長使用IDE或MAC的快捷鍵,那么可以向他學(xué)習(xí)提高工作效率点把。有的同學(xué)能快速理解業(yè)務(wù)知識橘荠,觀察他是如何做到的,自己如何達到他的程度郎逃。溝通能力哥童,解決問題能力以及規(guī)劃能力都可以向同事學(xué)習(xí)。
挑戰(zhàn)權(quán)威
從書上看到一個知識點褒翰,或者從別人那里聽到一個知識點贮懈,一定要去挑戰(zhàn)和質(zhì)疑這個知識點的正確性匀泊,否則學(xué)到的知識點可能是錯誤的。先用邏輯思維推測下朵你,再實戰(zhàn)檢測下各聘,一定要記住實踐是檢驗真理的唯一標準。比如同事說這個SQL加這個索引是最快的撬呢,首先要思考同事的結(jié)論是如何得出的伦吠,是靠歷史經(jīng)驗還是測試過,如果我們沒有經(jīng)驗魂拦,就加上這個索引跑下SQL毛仪,看看執(zhí)行計劃和執(zhí)行時間,再換下其他索引試試會不會更快芯勘。依次類推箱靴,并發(fā)一定比串行快嗎?無鎖一定比加鎖快嗎? 很多結(jié)論都是在特定的場景下才會產(chǎn)生的荷愕,一定要自己親手實踐驗證下衡怀。
堅持學(xué)習(xí)
有的同學(xué)可能工作了五年,但是學(xué)習(xí)的時間可能一年都不到安疗。學(xué)技術(shù)不能急于求成抛杨,只要學(xué)習(xí)方法正確,量變一定會引起質(zhì)變荐类。我在大學(xué)剛學(xué)JAVA時怖现,怎么都學(xué)不會,但是堅持學(xué)習(xí)了幾個月玉罐,每天看張老師的JAVA視頻教學(xué)屈嗤,買書按照書里的代碼一行一行的敲代碼,白天睡覺吊输,晚上學(xué)習(xí)和寫代碼饶号,寫到宿舍關(guān)燈時就去避風(fēng)塘呆一晚上,早上6點鐘回宿舍睡覺季蚂,學(xué)到一定時間后茫船,突然恍然大悟,才入了門扭屁。
在工作中透硝,我曾經(jīng)花了一個月的時間學(xué)習(xí)AOP的實現(xiàn)原理,學(xué)習(xí)了各種方式來實現(xiàn)AOP的原理疯搅,并寫了幾種實現(xiàn)方式的代碼濒生,雖然花的時間很多,但是到現(xiàn)在仍記憶猶新幔欧,對于排查問題和學(xué)習(xí)其他知識都非常有幫助。
要做到堅持學(xué)習(xí),學(xué)習(xí)的環(huán)境非常重要香罐。如果你想學(xué)蔬将,但是又不在學(xué)習(xí)狀態(tài),可以考慮換個學(xué)習(xí)環(huán)境,我經(jīng)常會去星巴克看書和學(xué)習(xí)。我聽說有的同事會周末抽一天去大學(xué)教師上自習(xí)。
把事做精
對自己要求越高霉撵,進步越快。要有強烈的把事情做完美的心態(tài)洪囤,我剛開始工作的時候徒坡,總是快而不精,做事做的不夠細致瘤缩,總希望快速拿出結(jié)果證明自己喇完,但是反而證明不了什么,技術(shù)能力也得不到提升剥啤,缺少技術(shù)亮點锦溪,在團隊中也沒什么影響力,后面就開始鍛煉一次就把事情做對的心態(tài)和方法府怯。我觀察過刻诊,很多人都擅長快速做事情,但是把事情做好做精致的人會比較少牺丙,但是結(jié)果卻是**在精益求精的路上才會快速提高自己的能力**则涯。比如用100行代碼實現(xiàn)的功能,思考下是否可以用10行來實現(xiàn)赘被,以便于降低運維成本是整,提高下次的編碼效率肖揣。引用GUAVA等類庫民假,提取公共方法,和使用JDK8新特性等龙优。系統(tǒng)的方法壓測過后羊异,單機只能承受1700QPS,可以思考和實踐能否優(yōu)化下程序提高QPS彤断,減少服務(wù)器數(shù)量野舶。
把事情做精,一定是要強迫自己多花心思多花時間在這件事情上宰衙。有位技術(shù)牛人給我分享了一個心得平道,我覺得說的非常好,老板給你布置了一個任務(wù)供炼,**你要花百分之150的精力做到100分一屋,這樣在老板那里你就能拿到80分或者60分**窘疮。
如果學(xué)習(xí)到的知識不成體系,那么遇到問題時就會非常難解決冀墨。有些同學(xué)會出現(xiàn)這些情況闸衫,比如編碼時遇到問題百度搜索,如果百度上找不到答案诽嘉,這個問題就解決不了蔚出。再比如,在開發(fā)中要用到某個技術(shù)點虫腋,就學(xué)習(xí)下API骄酗,程序調(diào)通后就不再深入研究,淺嘗輒止岔乔,如果程序遇到其他問題也不知道如何解決酥筝。
以上情況我認為叫**點狀學(xué)習(xí)**。遇到一個問題雏门,解決一個問題嘿歌,需要一項技術(shù),學(xué)習(xí)一項技術(shù)茁影。那么如何由點到面宙帝,由面到體,形成系統(tǒng)化學(xué)習(xí)呢募闲。
首先要確定學(xué)習(xí)的知識領(lǐng)域步脓,需要達成的學(xué)習(xí)目標,針對目標制定學(xué)習(xí)計劃浩螺,就像你要寫一本書一樣靴患,先把目錄寫出來,然后根據(jù)目錄上的知識點逐步去學(xué)習(xí)要出,最后把這些知識點關(guān)聯(lián)起來鸳君,形成一個系統(tǒng)化的知識體系。學(xué)習(xí)的時候患蹂,可以制定一個計劃或颊,以周為單位,比如第一周學(xué)什么传于,第二周學(xué)什么囱挑。
比如我最近在學(xué)習(xí)人工智能,學(xué)習(xí)步驟是:
1: 高數(shù)基礎(chǔ)知識:線性代數(shù)沼溜,微積分和統(tǒng)計學(xué)平挑。最近在打德州撲克時,我也會用統(tǒng)計學(xué)里的知識計算下輸贏的概率系草。
2: 人工智能基礎(chǔ):買幾本書人工智能的基礎(chǔ)書籍通熄,如《機器學(xué)習(xí)基礎(chǔ)教程》《Python機器學(xué)習(xí)》
3:框架:TensorFlow等否淤。
4:實戰(zhàn):在工作中找到一個應(yīng)用場景,把學(xué)到的知識運用進去棠隐。
作家格拉德威爾在《異類》一書中指出石抡,1萬小時的錘煉是任何人從平凡變成世界級大師的必要條件。1萬小時有多久助泽?每天學(xué)習(xí)10小時啰扛,需要大約三年。但是很多人都工作了五年甚至更長嗡贺,但是為什么成為世界級大師的卻非常少隐解。讀者可以先自己思考下這個問題。接下來談?wù)勎业目捶ā?/p>
成長必須經(jīng)歷一個步驟诫睬,就是把知識內(nèi)化成能力煞茫。**知識是用腦記住的,能力是用手練習(xí)出來的**摄凡。在工作的幾年里续徽,我們可能看過很多書,聽過很多技術(shù)講座和視頻亲澡,但是通過聽和看只是讓你能記住這些知識钦扭,這些知識還不能轉(zhuǎn)換成你的能力。
聽和看只是第一步床绪,更重要的是實踐客情,通過刻意練習(xí)把聽到和看到的知識內(nèi)化成你的能力。
刻意練習(xí)癞己,就是有目的的練習(xí)膀斋,先規(guī)劃好,再去練習(xí)痹雅。首先給自己定一個目標仰担,目標可以有效的引導(dǎo)你學(xué)習(xí),然后使用3F練習(xí)法:
1: 專注(Focus)练慕,專注在眼前的任務(wù)上惰匙,在學(xué)習(xí)過程中保持專注技掏,可以嘗試使用番茄工作法铃将。
2:反饋(Feedback),意識到自己的不足哑梳,學(xué)習(xí)完之后進行反思劲阎,思考下自己哪些方面不足,為什么不足鸠真,
3: 修正(Fix)悯仙,改進自己的不足龄毡。
不停的練習(xí)和思考可以改變大腦結(jié)構(gòu),大腦像肌肉一樣锡垄,挑戰(zhàn)越大沦零,影響越大,學(xué)習(xí)更高效货岭,并且也會產(chǎn)生突破性路操。
技術(shù)人員的學(xué)習(xí)路徑有兩個維度,深度和廣度千贯。很多程序員都有這個疑問屯仗,是先深后廣,還是先廣后深呢搔谴?
通過這么多年的學(xué)習(xí)和思考魁袜,我的建議先深后廣,因為當技術(shù)學(xué)到一定深度后敦第,就會有觸類旁通的能力峰弹,自己掌握的廣度也自然有了深度。但是在實際學(xué)習(xí)過程中芜果,深度和廣度相互穿插著學(xué)習(xí)垮卓,比如學(xué)習(xí)并發(fā)編程時,首先學(xué)習(xí)JDK源碼师幕,然后學(xué)進去之后粟按,開始看JVM源碼,最后看CPU架構(gòu)霹粥,在技術(shù)點逐漸深度研究的過程中灭将,廣度也得到了完善。
所以無論哪種學(xué)習(xí)方式后控,學(xué)習(xí)態(tài)度才是最重要的庙曙,在廣度學(xué)習(xí)的時候有深入研究的態(tài)度就能達到一定的深度,在深度學(xué)習(xí)的時候浩淘,主動學(xué)習(xí)相關(guān)的技術(shù)點捌朴,廣度也得到拓寬。
程序員應(yīng)該學(xué)會通過技術(shù)的手段來提高效率张抄。幾個常用的手段是使用工具砂蔽,快捷鍵和編寫腳本。
1. 使用各種工具
技術(shù)人員電腦盡量用MAC署惯,使用命令行效率一定比在1024*1024像素中找一個10*10像素的按鈕更快左驾。IDE用IDEA,比Eclipse更智能。命令行工具用iTerm和IDEA里的Terminal诡右。寫文章用MAC的客戶端工具MacDown安岂,左邊編寫,右邊展示帆吻,比Word等工具方便快速很多域那。有時候我還會用按鍵精靈里配置腳本需要解決工作問題,比如通過點擊我們的系統(tǒng)猜煮,來執(zhí)行任務(wù)琉雳。這樣的工具很多,只要能提高工作效率的工具友瘤,大家都可以嘗試使用翠肘。
2. 使用快捷鍵
MAC,IDEA和Eclipse有很多快捷鍵都要學(xué)會使用辫秧,比如在MAC命令行中通過idea .快速打開工程束倍,通過open . 快速的打開文件夾,把IDEA里通過快捷鍵把一段代碼抽成一個單獨的方法盟戏,快速生成getter setter方法绪妹。
3. 用腳本寫工具
當我們用人工的方式做一件重復(fù)性很強的事情,首先要考慮使用工具來幫我們自動完成柿究,如果沒有類似工具邮旷,可以自己寫個腳本來實現(xiàn),這樣除了能快速解決問題蝇摸,還能提高自己的技術(shù)能力婶肩。
比如,我經(jīng)常要在兩個maven倉庫發(fā)布jar包貌夕,我就寫了個腳本來實現(xiàn)jar包的發(fā)布律歼,deploy.sh代碼如下:
我一直在業(yè)務(wù)團隊中做開發(fā),在業(yè)務(wù)團隊最主要的提高的能力是業(yè)務(wù)抽象和架構(gòu)能力啡专,通過業(yè)務(wù)場景险毁,不斷思考如何通過合理的架構(gòu)和業(yè)務(wù)抽象能快速支持業(yè)務(wù),降低運維成本们童。同時在這個過程中鍛煉技術(shù)能力畔况,比如寫一些技術(shù)框架來快速支持業(yè)務(wù),做到技術(shù)驅(qū)動業(yè)務(wù)慧库。
可配置化的方式支持業(yè)務(wù)
設(shè)計業(yè)務(wù)的領(lǐng)域模型跷跪,把不隨著業(yè)務(wù)邏輯變化的領(lǐng)域模型做成系統(tǒng)能力,把隨著業(yè)務(wù)邏輯變化功能完沪,做成可配置化域庇,上一個新業(yè)務(wù),通過配置的方式或少量開發(fā)就能支持覆积。
在做客戶后臺功能時听皿,由于需要展示的數(shù)據(jù)種類非常多,每種數(shù)據(jù)展示可能需要花費幾天的時間宽档,所以設(shè)計了一個通用的技術(shù)框架尉姨,實現(xiàn)了通過配置化的方式展示各種數(shù)據(jù)。
寫框架解決業(yè)務(wù)問題
我在上家公司經(jīng)常做一些CRUD的業(yè)務(wù)功能吗冤,我就自己開發(fā)了一個快速做CRUD的框架jdbcutil,通過配置實體生成SQL語句又厉,實現(xiàn)了子類只要繼承父類,就自動擁有CRUD的能力椎瘟。后面還寫過生成CRUD頁面代碼的程序覆致。
目前我們團隊在做的TITAN框架通過模塊化開發(fā)的方式,解決易變的業(yè)務(wù)系統(tǒng)在多人開發(fā)時遇到的問題肺蔚。
技術(shù)驅(qū)動業(yè)務(wù)
在業(yè)務(wù)團隊煌妈,一定要不斷的思考如何利用技術(shù)來支持快速支持業(yè)務(wù),配置化是一種思路宣羊,但是有些功能配置復(fù)雜度比較高璧诵,配置加驗證的工作量,可能需要一個星期的時間仇冯,那么能不能減少人工配置之宿,實現(xiàn)系統(tǒng)自動化配置,于是可以研究下人工智能苛坚,通過人工智能的方式實現(xiàn)比被,系統(tǒng)告訴人需要配置哪些東西,然后交給人來進行確認泼舱,這樣可以大大減少人工成本姐赡,更快的支持業(yè)務(wù)。
很多問題其實答案很簡單柠掂,但是背后的思考和邏輯不簡單项滑,要做到知其然還要知其所以然。如果想學(xué)習(xí)Java工程化涯贞、高性能及分布式枪狂、深入淺出。微服務(wù)宋渔、Spring州疾,MyBatis,Netty源碼分析的朋友可以加我的Java進階群:629740746皇拣,群里有阿里大牛直播講解技術(shù)严蓖,以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費分享給大家薄嫡。