做的更多,做的比你主管安排給你的任務(wù)更多。
我在HW的時(shí)候,負(fù)責(zé)一個(gè)版本的開發(fā),這個(gè)版本的工作量大約是2000行左右,但是我除了做完這個(gè)功能,還將關(guān)聯(lián)的功能全部掌握清楚了,代碼(大約 10000行)也全部看了一遍,做完這個(gè)版本后,我對(duì)這個(gè)版本相關(guān)的整套業(yè)務(wù)全部很熟悉了。經(jīng)過一兩次會(huì)議后,大家發(fā)現(xiàn)我對(duì)這塊掌握最熟了,接下來就有趣了:產(chǎn)品討論需求找我、測(cè)試有問題也找我、老大對(duì)外支撐也找我;后來,不是我負(fù)責(zé)的功能他們也找我,即使我當(dāng)時(shí)不知道,我也會(huì)看代碼或者找文檔幫他們回答。。。。。。最后我就成了我這個(gè)系統(tǒng)的“專家”了。雖然這個(gè)時(shí)候我還是做業(yè)務(wù)的,還是寫業(yè)務(wù)代碼,但是我已經(jīng)對(duì)整個(gè)業(yè)務(wù)都很熟悉了。
以上只是一個(gè)簡單的例子,其實(shí)就是想說:要想有機(jī)會(huì),首先你得從人群中冒出來,要想冒出來,你就必須做到與眾不同,要做到與眾不同,你就要做得更多!
怎么做得更多呢?可以從以下幾個(gè)方面著手:
1)熟悉更多業(yè)務(wù),不管是不是你負(fù)責(zé)的;熟悉更多代碼,不管是不是你寫的。
這樣做有很多好處,舉幾個(gè)簡單的例子:
需求分析的時(shí)候更加準(zhǔn)確,能夠在需求階段就識(shí)別風(fēng)險(xiǎn)、影響、難點(diǎn)
問題處理的時(shí)候更加快速,因?yàn)橄嚓P(guān)的業(yè)務(wù)和代碼都熟悉,能夠快速地判斷問題可能的原因并進(jìn)行排查處理
方案設(shè)計(jì)的時(shí)候考慮更加周全,由于有對(duì)全局業(yè)務(wù)的理解,能夠設(shè)計(jì)出更好的方案
2)熟悉端到端
比如說你負(fù)責(zé)web后臺(tái)開發(fā),但實(shí)際上用戶發(fā)起一個(gè)http請(qǐng)求,要經(jīng)過很多中間步驟才到你的服務(wù)器(例如瀏覽器緩存、DNS、nginx等),服務(wù)器一般又會(huì)經(jīng)過很多處理才到你寫的那部分代碼(路由、權(quán)限等)這整個(gè)流程中的很多系統(tǒng)或者步驟,絕大部分人是不可能去參與寫代碼的,但掌握了這些知識(shí)對(duì)你的綜合水平有很大作用,例如方案設(shè)計(jì)、線上故障處理這些更加有含金量的技術(shù)工作都需要綜合技術(shù)水平。
“系統(tǒng)性”、“全局性”、“綜合性”這些字眼看起來比較虛,但其實(shí)都是技術(shù)大牛的必備的素質(zhì),要達(dá)到這樣的境界,必須去熟悉更多系統(tǒng)、業(yè)務(wù)、代碼。
3)自學(xué)
一般在比較成熟的團(tuán)隊(duì),由于框架或者組件已經(jīng)進(jìn)行了大量的封裝,寫業(yè)務(wù)代碼所用到的技術(shù)確實(shí)也比較少,但我們要明白“唯一不變的只有變化”,框架有 可能要改進(jìn),組件可能要替換,或者你換了一家公司,新公司既沒有組件也沒有框架,要你從頭開始來做。這些都是機(jī)會(huì),也是挑戰(zhàn),而機(jī)會(huì)和挑戰(zhàn)只會(huì)分配給有準(zhǔn)備的人,所以這種情況下我們更加需要自學(xué)更多東西,因?yàn)檎嬲鹊揭玫臅r(shí)候再來學(xué)已經(jīng)沒有時(shí)間了。
以java為例,大部分業(yè)務(wù)代碼就是if-else加個(gè)數(shù)據(jù)庫操作,但我們完全可以自己學(xué)些更多java的知識(shí),例如垃圾回收,調(diào)優(yōu),網(wǎng)絡(luò)編程等,這些可能暫時(shí)沒用,但真要用的時(shí)候,不是google一下就可以了,這個(gè)時(shí)候誰已經(jīng)掌握了相關(guān)知識(shí)和技能,機(jī)會(huì)就是誰的。
以垃圾回收為例,我自己平時(shí)就抽時(shí)間學(xué)習(xí)了這些知識(shí),學(xué)了1年都沒用上,但后來用上了幾次,每次都解決了卡死的大問題,而有的同學(xué),寫了幾年的java代碼,對(duì)于stop-the-world是什么概念都不知道,更不用說去優(yōu)化了。
要知道這個(gè)世界上沒有完美的東西,你負(fù)責(zé)的系統(tǒng)和業(yè)務(wù),總有不合理和可以改進(jìn)的地方,這些“不合理”和“可改進(jìn)”的地方,都是更高級(jí)別的怪物,打完后能夠增加更多的經(jīng)驗(yàn)值。識(shí)別出這些地方,并且給出解決方案,然后向主管提出,一次不行兩次,多提幾次,只要有一次落地了,這就是你的機(jī)會(huì)。
例如:
重復(fù)代碼太多,是否可以引入設(shè)計(jì)模式?
系統(tǒng)性能一般,可否進(jìn)行優(yōu)化?
目前是單機(jī),如果做成雙機(jī)是否更好?
版本開發(fā)質(zhì)量不高,是否引入高效的單元測(cè)試和集成測(cè)試方案?
目前的系統(tǒng)太龐大,是否可以通過重構(gòu)和解耦改為3個(gè)系統(tǒng)?
阿里中間件有一些系統(tǒng)感覺我們也可以用,是否可以引入 ?
。。。。。。。。。。。。。。。。。。。
只要你去想,其實(shí)總能發(fā)現(xiàn)可以改進(jìn)的地方的。如果你覺得系統(tǒng)哪里都沒有改進(jìn)的地方,那就說明你的水平還不夠,可以多學(xué)習(xí)相關(guān)技術(shù),多看看業(yè)界其它公司怎么做,BAT都怎么做。
我2013年調(diào)配到九游,剛開始接手了一個(gè)簡單的后臺(tái)系統(tǒng),每天就是配合前臺(tái)做數(shù)據(jù)增刪改查,看起來完全沒意思,是吧?如果只做這些確實(shí)沒意思,但我們接手后做了很多事情:
解耦,將一個(gè)后臺(tái)拆分為2個(gè)后臺(tái),提升可擴(kuò)展性和穩(wěn)定性;
雙機(jī),將單機(jī)改為雙機(jī)系統(tǒng),提高可靠性;
優(yōu)化,將原來一個(gè)耗時(shí)5小時(shí)的接口優(yōu)化為耗時(shí)5分鐘
還有其它很多優(yōu)化,后來我們這個(gè)組承擔(dān)了更多的系統(tǒng),后來這個(gè)小組5個(gè)人,負(fù)責(zé)了6個(gè)系統(tǒng)。
在做職業(yè)等級(jí)溝通的時(shí)候,發(fā)現(xiàn)有很多同學(xué)確實(shí)也在嘗試Do more、Do better,但在執(zhí)行的過程中,幾乎每個(gè)人都遇到同一個(gè)問題:光看不用效果很差,怎么辦?
例如:
學(xué)習(xí)了jvm的垃圾回收,但是線上比較少出現(xiàn)FGC導(dǎo)致的卡頓問題,就算出現(xiàn)了,恢復(fù)業(yè)務(wù)也是第一位的,不太可能線上出現(xiàn)問題然后讓每個(gè)同學(xué)都去練一下手,那怎么去實(shí)踐這些jvm的知識(shí)和技能呢?
Netty我也看了,也了解了Reactor的原理,但是我不可能參與Netty開發(fā),怎么去讓自己真正掌握Reactor異步模式呢?
看了《高性能MySQL》,但是線上的數(shù)據(jù)庫都是DBA管理的,測(cè)試環(huán)境的數(shù)據(jù)庫感覺又是隨便配置的,我怎么去驗(yàn)證這些技術(shù)呢?
框架封裝了DAL層,數(shù)據(jù)庫的訪問我們都不需要操心,我們?cè)趺慈チ私夥謳旆直韺?shí)現(xiàn)?
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
諸如此類問題還有很多,我這里分享一下個(gè)人的經(jīng)驗(yàn),其實(shí)就是3個(gè)詞:learning、trying、teaching!
1)Learning
這個(gè)是第一階段,看書、google、看視頻、看別人的博客都可以,但要注意一點(diǎn)是“系統(tǒng)化”,特別是一些基礎(chǔ)性的東西,例如JVM原理、Java 編程、網(wǎng)絡(luò)編程,http協(xié)議。。。。。。等等,這些基礎(chǔ)技術(shù)不能只通過google或者博客學(xué)習(xí),我的做法一般是先完整地看完一本書,有了全面的了解,然后再通過google、視頻、博客去有針對(duì)性地查找一些有疑問的地方,或者一些技巧。
2)Trying
這個(gè)步驟就是解答前面提到的很多同學(xué)的疑惑的關(guān)鍵點(diǎn),形象來說就是“自己動(dòng)手豐衣足食”,也就是自己去嘗試搭建一些模擬環(huán)境,自己寫一些測(cè)試程序。例如:
Jvm垃圾回收:可以自己寫一個(gè)簡單的測(cè)試程序,分配內(nèi)存不釋放,然后調(diào)整各種jvm啟動(dòng)參數(shù),再運(yùn)行的過程中使用jstack、jstat等命令查看jvm的堆內(nèi)存分布和垃圾回收情況。這樣的程序?qū)懫饋砗芎唵危唵我稽c(diǎn)的就幾行,復(fù)雜一點(diǎn)的也就幾十行。
Reactor原理:自己真正去嘗試寫一個(gè)Reactor模式的Demo,不要以為這個(gè)很難,最簡單的Reactor模式代碼量(包括注釋)不超過200行(可以參考Doug Lee的PPT)。自己寫完后,再去看看netty怎么做,一對(duì)比理解就更加深刻了。
MySQL:既然有線上的配置可以參考,那可以直接讓DBA將線上配置發(fā)給我們(注意去掉敏感信息),直接學(xué)習(xí);然后自己搭建一個(gè)MySQL環(huán)境,用線上的配置啟動(dòng);要知道很多同學(xué)用了很多年MySQL,但是連個(gè)簡單的MySQL環(huán)境都搭不起來。
框架封裝了DAL層:可以自己用JDBC嘗試去寫一個(gè)分庫分表的簡單實(shí)現(xiàn),然后與框架的實(shí)現(xiàn)進(jìn)行對(duì)比,看看差異在哪里。
用瀏覽器的工具查看http緩存實(shí)現(xiàn),看看不同種類的網(wǎng)站,不同類型的資源,具體是如何控制緩存的;也可以自己用Python寫一個(gè)簡單的http服務(wù)器,模擬返回各種http Headers來觀察瀏覽器的反應(yīng)。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
還有很多方法,這里就不一一列舉,簡單來說,就是要將學(xué)到的東西真正試試,才能理解更加深刻,印第安人有一句諺語:I hear and I forget. I see and I remember. I do and I understand,而且“試試”其實(shí)可以比較簡單,很多時(shí)候我們都可以自己動(dòng)手做。
當(dāng)然,如果能夠在實(shí)際工作中使用,效果會(huì)更好,畢竟實(shí)際的線上環(huán)境和業(yè)務(wù)復(fù)雜度不是我們寫個(gè)模擬程序就能夠模擬的,但這樣的機(jī)會(huì)可遇不可求,大部分情況我們還真的只能靠自己模擬,然后等到真正業(yè)務(wù)要用的時(shí)候,能夠信手拈來。
3)Teaching
一般來說,經(jīng)過Learning和Trying,能掌握70%左右,但要真正掌握,我覺得一定要做到能夠跟別人講清楚。因?yàn)樵谥v的時(shí)候,我們既需要將一個(gè)知識(shí)點(diǎn)系統(tǒng)化,也需要考慮各種細(xì)節(jié),這會(huì)促使我們進(jìn)一步思考和學(xué)習(xí)。同時(shí),講出來后看或者聽的人可以有不同的理解,或者有新的補(bǔ)充,這相當(dāng)于繼續(xù)完善了整個(gè)知識(shí)技能體系。
這樣的例子很多,包括我自己寫博客的時(shí)候經(jīng)常遇到,本來我覺得自己已經(jīng)掌握很全面了,但一寫就發(fā)現(xiàn)很多點(diǎn)沒考慮到;組內(nèi)培訓(xùn)的時(shí)候也經(jīng)??吹?,有的同學(xué)寫了PPT,但是講的時(shí)候,大家一問,或者一討論,就會(huì)發(fā)現(xiàn)很多點(diǎn)還沒有講清楚,或者有的點(diǎn)其實(shí)是理解錯(cuò)了。寫PPT、講PPT、討論P(yáng)PT,這個(gè)流程全部走一遍,基本上對(duì)一個(gè)知識(shí)點(diǎn)掌握就比較全面了。
成為技術(shù)大牛夢(mèng)想雖然很美好,但是要付出很多,不管是Do more還是Do better還是Do exercise,都需要花費(fèi)時(shí)間和精力,這個(gè)過程中可能很苦逼,也可能很枯燥,這里我想特別強(qiáng)調(diào)一下:前面我講的都是一些方法論的東西,但真正起決定作用的,其實(shí)還是我們對(duì)技術(shù)的熱情和興趣!
下一篇:皇茶加盟電話 品味飲品加盟(圖)
請(qǐng)?zhí)顚懥粞曰蚋鶕?jù)意向選擇下列快捷留言
負(fù)責(zé)聲明:以上所展示的信息由會(huì)員自行提供,內(nèi)容真實(shí)性,準(zhǔn)確性和合法性由發(fā)布會(huì)與負(fù)責(zé)。本網(wǎng)對(duì)此不承擔(dān)任何責(zé)任。
友情提醒:為規(guī)避投資風(fēng)險(xiǎn),建議您在投資前務(wù)必多咨詢,多考察,降低投資風(fēng)險(xiǎn)。