四年,上海,車房妹
B 哥是我的導(dǎo)師,記得我剛進(jìn)入騰訊實(shí)習(xí)的那天,是他出來(lái)接我。當(dāng)時(shí)我有點(diǎn)懷疑,不會(huì)吧,不會(huì)吧,我的導(dǎo)師這么年輕?和我想象中的經(jīng)驗(yàn)豐富的程序員的樣子簡(jiǎn)直天壤之別。

后來(lái)確認(rèn)了,他就是我的導(dǎo)師,怎么會(huì)這么年輕呢?驚訝之余,我也在期待他有沒有什么過(guò)人之處,可以帶我學(xué)習(xí)帶我飛。
直到現(xiàn)在認(rèn)識(shí) B 哥已經(jīng)一年多了。老實(shí)說(shuō),剛開始我還并沒有覺得他特別厲害,但是隨著和他在工作中的合作交流,漸漸地加深了對(duì)他的了解,我才越來(lái)越發(fā)現(xiàn),這個(gè)人是真的強(qiáng)??!

有多強(qiáng)呢?
B 哥本科畢業(yè)后直接工作,經(jīng)歷了四年的打拼,如今的他已經(jīng)是騰訊的高級(jí)軟件開發(fā)工程師和技術(shù) owner,在上海有好車、買得起市區(qū)房,前段時(shí)間還和漂亮妹子領(lǐng)了結(jié)婚證,真是典型的人生贏家??!關(guān)鍵還很帥,發(fā)量足,你說(shuō)酸人不?

那么 B 哥是怎么做到年輕有為、有事業(yè)、有車房妹的呢?
曾經(jīng) B 哥也和我講過(guò)他的成長(zhǎng)經(jīng)歷,但是今天我要分享的不是他的奮斗史,而是想和大家聊一聊,我作為他的徒弟,和他發(fā)生了那么多故事,從他的身上看到了哪些優(yōu)秀的技術(shù)人應(yīng)該具有的特質(zhì),也是我認(rèn)為 B 哥牛逼的原因。
技術(shù)控
很多優(yōu)秀的程序員應(yīng)該都有對(duì)技術(shù)的追求,或是見多識(shí)廣,或是深入研究,而且非常樂(lè)于將他們懂的技術(shù)分享給更多人。
B 哥就是這樣一位技術(shù)控,他剛畢業(yè)的時(shí)候,就通讀了很多知名框架的源碼,并且能夠?qū)⑺麄兦逦刂v出來(lái)。記得我剛進(jìn)騰訊的時(shí)候,聽的第一場(chǎng)技術(shù)分享就是 B 哥的《深入 Netty》,從分享中,能明顯地感受到 B 哥對(duì)這個(gè)技術(shù)的深入理解和融會(huì)貫通,讓我們這些小白也能深入淺出。而讓我震驚的是,B 哥早在多年前,就已經(jīng)了解并學(xué)習(xí)了這門技術(shù)。
如果不是對(duì)技術(shù)有獨(dú)特的追求,怎么能堅(jiān)持這么多年去深入學(xué)習(xí)一門技術(shù)呢?真的很佩服。

全局觀
我覺得跟 B 哥開會(huì)老有意思了。
每次和 B 哥一起開會(huì)討論技術(shù)方案,在我們其他人覺得這個(gè)方案沒問(wèn)題時(shí),B 哥都會(huì)說(shuō)一句:“我建議大家再好好想想,有沒有什么遺漏的點(diǎn),我覺得這里面可能有坑!”
其實(shí)我當(dāng)時(shí)心想:能有啥問(wèn)題啊,多好的方案??!

然后 B 哥和大家就陷入了沉思,一會(huì)兒之后,果然 B 哥發(fā)現(xiàn)了這個(gè)方案的漏洞。
原來(lái),我們很多同學(xué)都只考慮這個(gè)方案對(duì)自己團(tuán)隊(duì)的項(xiàng)目是否適用,保證自己的負(fù)責(zé)的數(shù)據(jù)是否正確,而忽略了大家的項(xiàng)目是要緊密協(xié)作、相互配合的,視野太過(guò)局限。而如果將這個(gè)方案應(yīng)用到完整的大項(xiàng)目中,各個(gè)團(tuán)隊(duì)的數(shù)據(jù)可能出現(xiàn)不一致,就是一個(gè)很大的問(wèn)題!
后來(lái)和 B 哥接觸多了,發(fā)現(xiàn) B 哥非常有全局觀,總能站在一個(gè)更高、更全局的視角去考慮問(wèn)題。在設(shè)計(jì)方案時(shí),不僅考慮自己的負(fù)責(zé)的系統(tǒng),還要想想這個(gè)方案會(huì)對(duì)其他團(tuán)隊(duì)的系統(tǒng)、以及整個(gè)大項(xiàng)目會(huì)有什么影響。因此,規(guī)避了很多的風(fēng)險(xiǎn),也在各團(tuán)隊(duì)中樹立了自己 “穩(wěn)” 的形象。
想成為優(yōu)秀的技術(shù)人,一定要培養(yǎng)全局觀,否則在負(fù)責(zé)大的項(xiàng)目時(shí)可能會(huì)力不從心。
慎行
B 哥做事非常小心謹(jǐn)慎,體現(xiàn)在多個(gè)方面。
在設(shè)計(jì)方案時(shí),B 哥會(huì)盡力驗(yàn)證方案的可行性,而不是憑直覺和過(guò)去的經(jīng)驗(yàn)主觀臆斷。
在編寫代碼時(shí),B 哥堅(jiān)守『 軟件世界中的不信任原則 』,采用防御性編程,在每個(gè)可能的風(fēng)險(xiǎn)點(diǎn)加上異常處理機(jī)制,并利用監(jiān)控告警即時(shí)發(fā)現(xiàn)線上問(wèn)題。
在測(cè)試時(shí),B 哥會(huì)考慮到很多的極端情況,保證測(cè)試有效且完整。
在提交代碼時(shí),B 哥會(huì)再次整體通讀代碼,并讓我們其他同事參與代碼審核,保證代碼的質(zhì)量。
正是因?yàn)?B 哥的慎行,跟他一起做項(xiàng)目非常放心,幾乎沒有出過(guò)線上問(wèn)題。唉,好久沒有體驗(yàn)過(guò)改 bug 的緊張刺激感了。

溝通
在企業(yè)中,高效溝通太重要了。
記得有一次我遇到了一個(gè)問(wèn)題,就拉了一位相關(guān)的業(yè)務(wù)負(fù)責(zé)人來(lái)討論,然后這個(gè)負(fù)責(zé)人又拉了一個(gè)產(chǎn)品經(jīng)理,然后這個(gè)產(chǎn)品經(jīng)理又拉了一個(gè)開發(fā),最后這個(gè)開發(fā)又找到了 B 哥,然后 B 哥又來(lái)找我。

最后局面非常尷尬,其實(shí)是我自己溝通不當(dāng),沒把問(wèn)題描述清楚就去找別人幫忙了,浪費(fèi)了大家的時(shí)間。在 B 哥的指導(dǎo)下,我整理了自己的思路,清晰地描述問(wèn)題,然后直接找到相關(guān)負(fù)責(zé)人,打個(gè)電話問(wèn)題就解決了。
優(yōu)秀的技術(shù)大佬,他們的溝通能力通常是很強(qiáng)的,他們能夠用方便他人理解的方式來(lái)描述問(wèn)題,比如提供文檔、圖片、甚至是視頻等,拒絕無(wú)效溝通。而溝通能力也是需要實(shí)際鍛煉才能提升的,每個(gè)人溝通和表達(dá)的方式也不同,還是要多和他人溝通,并且向溝通達(dá)人學(xué)習(xí)和積累經(jīng)驗(yàn)。
架構(gòu)能力
B 哥很會(huì)架構(gòu)。就拿我們負(fù)責(zé)的這個(gè)項(xiàng)目來(lái)說(shuō),短短幾個(gè)月,業(yè)務(wù)功能已經(jīng)變得復(fù)雜不堪,而且請(qǐng)求量也已經(jīng)增長(zhǎng)了上千倍。
但是 B 哥在設(shè)計(jì)程序架構(gòu)時(shí),用了很多的設(shè)計(jì)模式,使得程序變得易于擴(kuò)展。即使業(yè)務(wù)增長(zhǎng)很快,我們?nèi)匀豢梢暂p松應(yīng)對(duì)業(yè)務(wù)的擴(kuò)展,每次新增一個(gè)功能也幾乎不需要改動(dòng)現(xiàn)有的代碼,而是新增代碼即可,不僅開發(fā)效率更高,風(fēng)險(xiǎn)也大大降低。
B 哥在很早前就考慮到了業(yè)務(wù)增長(zhǎng)的可能性,因此給項(xiàng)目采用微服務(wù)架構(gòu),針對(duì)部分性能瓶頸,采用可擴(kuò)容設(shè)計(jì),使得提升項(xiàng)目的性能和吞吐量變得易如反掌。請(qǐng)求量增長(zhǎng),咱加機(jī)器就行了!

我問(wèn) B 哥:“你的架構(gòu)能力是怎么提升的?”
B 哥卻告訴我,沒有捷徑。想要提升架構(gòu)能力可不簡(jiǎn)單,不僅僅需要閱讀大量的書籍,更重要的是在企業(yè)中不斷參與項(xiàng)目實(shí)踐,積累經(jīng)驗(yàn)。
刨根問(wèn)底
剛來(lái)實(shí)習(xí)的時(shí)候,對(duì)公司的很多技術(shù)框架、業(yè)務(wù)知識(shí)都不太懂,就經(jīng)常去請(qǐng)教大佬們一些問(wèn)題。但是每次只要成功地解決了問(wèn)題,我就心滿意足了,而不去關(guān)心問(wèn)題背后的原因。
比如有一次程序掛了,后來(lái)又恢復(fù)了,我就沒去排查。
然后 B 哥問(wèn)我:“程序?yàn)槭裁磼炝???/p>
我根本沒去查,所以也沒辦法回答 B 哥,就說(shuō)了一句:“現(xiàn)在好了不就行了么?”
B 哥語(yǔ)重心長(zhǎng)地說(shuō):“程序出現(xiàn)問(wèn)題不可怕,但是出現(xiàn)了問(wèn)題不去追溯原因,下次再出現(xiàn)相同的問(wèn)題,怎么辦?尤其是偶發(fā)問(wèn)題,是最致命的!”
我覺得有理,就去分析日志,查出來(lái)是有一段時(shí)間數(shù)據(jù)庫(kù)宕機(jī)了,就趕緊開心地告訴 B 哥。
結(jié)果 B 哥很嚴(yán)肅:“數(shù)據(jù)庫(kù)宕機(jī)不是小事!你知道數(shù)據(jù)庫(kù)為什么宕機(jī)么?”
我心想:我怎么知道??!去問(wèn)運(yùn)維?。?/p>
后來(lái)我就去問(wèn)運(yùn)維,發(fā)現(xiàn)是由于數(shù)據(jù)庫(kù)壓力過(guò)大導(dǎo)致的宕機(jī),就又屁顛屁顛地告訴 B 哥。
B 哥依然嚴(yán)肅:“數(shù)據(jù)庫(kù)壓力為什么大?”
我就又去分析日志,聯(lián)合運(yùn)維一起進(jìn)行排查,最后發(fā)現(xiàn)是其他共庫(kù)業(yè)務(wù)的慢查詢導(dǎo)致的數(shù)據(jù)庫(kù)請(qǐng)求阻塞。這才終于真相大白!于是我們將數(shù)據(jù)庫(kù)獨(dú)立遷移,很好地規(guī)避了日后的風(fēng)險(xiǎn)。
這件事之后,我開始像 B 哥一樣,遇到問(wèn)題刨根問(wèn)底,深挖問(wèn)題的本質(zhì),我認(rèn)為這個(gè)過(guò)程遠(yuǎn)遠(yuǎn)比解決問(wèn)題更重要,讓我得到了更大的成長(zhǎng)。

潔癖
有一次,我寫了一坨自認(rèn)為不錯(cuò)的代碼,提交前把代碼先交給 B 哥來(lái)檢查一下。
然后 B 哥看了一會(huì)兒,神情凝重,緩緩轉(zhuǎn)過(guò)身問(wèn)我。
“你有潔癖么?”
我當(dāng)時(shí)一愣,隨即明白 B 哥是在說(shuō)我寫的代碼不夠整潔。
作為一個(gè)讀過(guò)《代碼整潔之道》的程序員,我很自信地回答:“當(dāng)然有潔癖!”

B 哥就給我指出了代碼中的問(wèn)題,原來(lái)有一段邏輯我使用了多個(gè) if-else,其實(shí)應(yīng)該用設(shè)計(jì)模式來(lái)代替。
我當(dāng)時(shí)還振振有詞:“我覺得這里直接用 if-else 就行了,省事兒啊!”
B 哥:“不通過(guò),改!”
后來(lái)我乖乖地改了。果然之后這段代碼增加了一些復(fù)雜的邏輯,如果用原先 if-else 的方式,代碼的改動(dòng)工作量非常大,還容易出錯(cuò)。而用了設(shè)計(jì)模式,程序變得更加可擴(kuò)展、可維護(hù)。感謝 B 哥和代碼潔癖!
現(xiàn)在想想,當(dāng)時(shí)的自己不過(guò)為偷懶找個(gè)理由罷了。
用戶為本
B 哥非常寵用戶,體現(xiàn)在兩個(gè)方面。
首先,他在和產(chǎn)品討論需求和設(shè)計(jì)方案時(shí)一切從用戶出發(fā)。只要對(duì)用戶真的有幫助、能提高他們的使用體驗(yàn),哪怕工作量多一點(diǎn),只要性價(jià)比是合理的,B 哥也會(huì)去做。因此,我們的產(chǎn)品才能變得更加易用,得到用戶的好評(píng)。
此外,每次出現(xiàn)線上用戶的問(wèn)題和反饋,B 哥都會(huì)在第一時(shí)間積極地配合產(chǎn)品進(jìn)行處理和引導(dǎo)。在幫助用戶解決問(wèn)題后,B 哥會(huì)記錄這些問(wèn)題發(fā)生的原因,并思考如何改進(jìn)程序來(lái)防止類似問(wèn)題的發(fā)生,以及如何進(jìn)一步提升用戶的體驗(yàn)。
不僅僅是產(chǎn)品經(jīng)理才要堅(jiān)持 “用戶為本” 的原則,優(yōu)秀的技術(shù)人也會(huì)關(guān)心用戶、傾聽用戶,而不是一門心思陷到代碼中,只想著如何把代碼寫的又好看又簡(jiǎn)潔。

執(zhí)行力
B 哥做事一向快、狠、準(zhǔn),有著極強(qiáng)的執(zhí)行力,只要答應(yīng)過(guò)別人的事情都會(huì)按時(shí)完成。
曾經(jīng)我也一直覺得自己的執(zhí)行力很強(qiáng),但到了公司后,發(fā)現(xiàn)很多事情也喜歡拖延。比如答應(yīng)給別人提供接口文檔,結(jié)果后來(lái)就忘了,直到別人再三催促才草草寫了幾筆應(yīng)付了事。
我就很好奇 B 哥是如何做到 “雷厲風(fēng)行” 的?

暗中觀察 B 哥一段時(shí)間后,發(fā)現(xiàn) B 哥始終保持對(duì)工作的熱情和積極性,別人有事找他時(shí),他能夠站在對(duì)方的角度去考慮這個(gè)事情的緊急程度,然后將其進(jìn)行記錄,并和自己正要處理的其他事情按優(yōu)先級(jí)進(jìn)行排序。有時(shí),B 哥還會(huì)設(shè)置一個(gè)定時(shí)提醒防止自己忘記。
安排好要做的事后,B 哥就保持專注地一件一件去處理事務(wù),并在完成后及時(shí)回復(fù)對(duì)方。即使有時(shí)實(shí)在太忙,也會(huì)提前告訴對(duì)方自己暫時(shí)無(wú)法處理,并給對(duì)方一些臨時(shí)的處理方案。
比起亂序地同時(shí)去處理多個(gè)事,B 哥的這種工作方式顯得更加沉穩(wěn),這也是 B 哥能持續(xù)保持強(qiáng)執(zhí)行力的原因吧。這么一想,很多技術(shù)大佬好像都是這樣。
懶
剛剛夸完 B 哥執(zhí)行力強(qiáng),怎么又提到 “懶” 了呢?
的確,無(wú)論是在處理業(yè)務(wù)還是具體到敲代碼,B 哥都很懶。

比如,由于網(wǎng)絡(luò)等原因,我們的定時(shí)任務(wù)程序可能執(zhí)行異常,就需要重新去執(zhí)行一次。最開始都是我們?nèi)斯とテ脚_(tái)上點(diǎn)重新執(zhí)行的,但次數(shù)多了就比較煩了。B 哥懶啊,就提出寫個(gè)程序自動(dòng)重跑執(zhí)行失敗的任務(wù)。后來(lái)我們?cè)僖膊挥萌斯とゲ僮髁?,巴適得很!
用 B 哥的話來(lái)說(shuō),所有人工的操作本質(zhì)上都可以交給機(jī)器自動(dòng)來(lái)完成,只是實(shí)現(xiàn)的難度不同罷了。如果編寫一個(gè)小程序就能省去重復(fù)的工作,何樂(lè)而不為呢?
其實(shí),大部分優(yōu)秀的技術(shù)人都很 “懶”。懶得寫重復(fù)代碼,我們就抽象、封裝、組件化、復(fù)用;懶得去核對(duì)數(shù)據(jù),就寫任務(wù)定時(shí)自動(dòng)去檢測(cè)數(shù)據(jù);懶得寫代碼,就使用一些腳手架、框架、低代碼構(gòu)建平臺(tái)等。
懶人推動(dòng)世界。
畫圖能力
這里的畫圖不是指電腦上的 “畫圖程序”,而是指計(jì)算機(jī)相關(guān)的圖片,比如系統(tǒng)架構(gòu)圖、部署圖、UML 類圖、時(shí)序圖等。
在認(rèn)識(shí) B 哥前啊,我覺得自己畫圖老厲害了,簡(jiǎn)直 “靈魂畫手”,巧奪天工啊。
直到后來(lái)看了 B 哥畫的一些架構(gòu)圖、時(shí)序圖、狀態(tài)機(jī)圖等等,我才發(fā)現(xiàn)自己真的是井底之蛙。B 哥畫的圖不僅大氣干凈,而且利用一些小技巧幫助大家更快地理解這些圖要表達(dá)的意思,比如用不同的顏色來(lái)區(qū)分關(guān)鍵信息等。
最佩服的是,B 哥畫圖不僅好看,還特別快。有時(shí)畫圖的速度甚至超過(guò)了我們?nèi)ラ喿x理解圖的速度,恐怖如斯!
后來(lái),在公司待久了,閱讀了更多的技術(shù)方案,才發(fā)現(xiàn)優(yōu)秀的畫圖能力是技術(shù)大牛的必備技能。很多復(fù)雜的系統(tǒng)和方案,我們無(wú)法單純地用語(yǔ)言去表達(dá),而使用圖片的形式能夠幫助大家理解。
當(dāng)然,想畫好圖本身并不容易,也是需要設(shè)計(jì)思維和經(jīng)驗(yàn)的。因此,我們需要多多鍛煉自己的畫圖能力。建議多看他人的圖,模仿的多了,說(shuō)不定就超越了呢?

引路人
我放棄保研,選擇直接實(shí)習(xí)轉(zhuǎn)正留在騰訊,很大一部分是因?yàn)?B 哥。
B 哥可能不是技術(shù)最強(qiáng)的師傅,但一定是一位好師傅。別的不說(shuō),B 哥給新人非常多的發(fā)揮空間,讓我自己去思考和設(shè)計(jì)方案來(lái)實(shí)現(xiàn)需求。在我遇到一些問(wèn)題后,并不是直接幫助我解答,而是引導(dǎo)我自己去解決這個(gè)問(wèn)題。
B 哥非常信任新人,一些項(xiàng)目的技術(shù)選型、方案調(diào)研、架構(gòu)設(shè)計(jì),B 哥都能夠交給我來(lái)做。因此,我非常有動(dòng)力,也變得更加自主,在短時(shí)間內(nèi)得到了很大的成長(zhǎng)。
B 哥還非常關(guān)心新人的成長(zhǎng),經(jīng)常和我交流,給了我很多實(shí)用的意見,真的很感謝 B 哥。
此外,B 哥還經(jīng)常耐心地幫助其他同學(xué)解答問(wèn)題,不是簡(jiǎn)簡(jiǎn)單單三言兩語(yǔ)就完事兒,而是直到提問(wèn)的同學(xué)徹底理解,方才罷休。
優(yōu)秀的技術(shù)人不僅要自身技術(shù)過(guò)硬,還應(yīng)該懂得如何分享傳授技術(shù)、帶領(lǐng)他人進(jìn)步,不斷提升自己的影響力,甚至是成為某項(xiàng)技術(shù)的布道者。

愛生活
最后啊,分享 B 哥保持年輕的秘訣吧!
B 哥不像大家想象中的程序員,雙眼無(wú)神、眼圈發(fā)黑、脊背彎曲、格子襯衫、不愛運(yùn)動(dòng)。相反,B 哥非常熱愛生活,每周會(huì)堅(jiān)持健身、自己下廚做飯、養(yǎng)了一只布偶貓,還經(jīng)常帶妹子去各種地方玩!

羨慕了,什么時(shí)候我能像 B 哥一樣,平衡工作和生活,活的瀟瀟灑灑??!
其實(shí),還要很多優(yōu)秀的技術(shù)人需要具備的其他特質(zhì),比如追求極致、洞察力、決策力、創(chuàng)造力等等。學(xué)無(wú)止境,我們?nèi)匀恍枰粩嗯统砷L(zhǎng)。
最后,正好 B 哥的生日也在這個(gè)月,就提前祝 B 哥生日快樂(lè)叭!
希望能夠繼續(xù)跟著 B 哥混啊,有朝一日青出于藍(lán)而勝于藍(lán),我也能成長(zhǎng)為一名優(yōu)秀的技術(shù)人,成為別人的導(dǎo)師,幫助更多人進(jìn)步!
