四年,上海,车房妹
B 哥是我的導(dǎo)師,記得我剛進入騰訊實習(xí)的那天,是他出來接我。當(dāng)時我有點懷疑,不會吧,不會吧,我的導(dǎo)師這么年輕?和我想象中的經(jīng)驗豐富的程序員的樣子簡直天壤之別。
后來確認(rèn)了,他就是我的導(dǎo)師,怎么會這么年輕呢?驚訝之余,我也在期待他有沒有什么過人之處,可以帶我學(xué)習(xí)帶我飛。
直到現(xiàn)在認(rèn)識 B 哥已經(jīng)一年多了。老實說,剛開始我還并沒有覺得他特別厲害,但是隨著和他在工作中的合作交流,漸漸地加深了對他的了解,我才越來越發(fā)現(xiàn),這個人是真的強啊!
有多強呢?
B 哥本科畢業(yè)后直接工作,經(jīng)歷了四年的打拼,如今的他已經(jīng)是騰訊的高級軟件開發(fā)工程師和技術(shù) owner,在上海有好車、買得起市區(qū)房,前段時間還和漂亮妹子領(lǐng)了結(jié)婚證,真是典型的人生贏家啊!關(guān)鍵還很帥,發(fā)量足,你說酸人不?
那么 B 哥是怎么做到年輕有為、有事業(yè)、有車房妹的呢?
曾經(jīng) B 哥也和我講過他的成長經(jīng)歷,但是今天我要分享的不是他的奮斗史,而是想和大家聊一聊,我作為他的徒弟,和他發(fā)生了那么多故事,從他的身上看到了哪些優(yōu)秀的技術(shù)人應(yīng)該具有的特質(zhì),也是我認(rèn)為 B 哥牛逼的原因。
技術(shù)控
很多優(yōu)秀的程序員應(yīng)該都有對技術(shù)的追求,或是見多識廣,或是深入研究,而且非常樂于將他們懂的技術(shù)分享給更多人。
B 哥就是這樣一位技術(shù)控,他剛畢業(yè)的時候,就通讀了很多知名框架的源碼,并且能夠?qū)⑺麄兦逦刂v出來。記得我剛進騰訊的時候,聽的第一場技術(shù)分享就是 B 哥的《深入 Netty》,從分享中,能明顯地感受到 B 哥對這個技術(shù)的深入理解和融會貫通,讓我們這些小白也能深入淺出。而讓我震驚的是,B 哥早在多年前,就已經(jīng)了解并學(xué)習(xí)了這門技術(shù)。
如果不是對技術(shù)有獨特的追求,怎么能堅持這么多年去深入學(xué)習(xí)一門技術(shù)呢?真的很佩服。
全局觀
我覺得跟 B 哥開會老有意思了。
每次和 B 哥一起開會討論技術(shù)方案,在我們其他人覺得這個方案沒問題時,B 哥都會說一句:“我建議大家再好好想想,有沒有什么遺漏的點,我覺得這里面可能有坑!”
其實我當(dāng)時心想:能有啥問題啊,多好的方案啊!
然后 B 哥和大家就陷入了沉思,一會兒之后,果然 B 哥發(fā)現(xiàn)了這個方案的漏洞。
原來,我們很多同學(xué)都只考慮這個方案對自己團隊的項目是否適用,保證自己的負(fù)責(zé)的數(shù)據(jù)是否正確,而忽略了大家的項目是要緊密協(xié)作、相互配合的,視野太過局限。而如果將這個方案應(yīng)用到完整的大項目中,各個團隊的數(shù)據(jù)可能出現(xiàn)不一致,就是一個很大的問題!
后來和 B 哥接觸多了,發(fā)現(xiàn) B 哥非常有全局觀,總能站在一個更高、更全局的視角去考慮問題。在設(shè)計方案時,不僅考慮自己的負(fù)責(zé)的系統(tǒng),還要想想這個方案會對其他團隊的系統(tǒng)、以及整個大項目會有什么影響。因此,規(guī)避了很多的風(fēng)險,也在各團隊中樹立了自己 “穩(wěn)” 的形象。
想成為優(yōu)秀的技術(shù)人,一定要培養(yǎng)全局觀,否則在負(fù)責(zé)大的項目時可能會力不從心。
慎行
B 哥做事非常小心謹(jǐn)慎,體現(xiàn)在多個方面。
在設(shè)計方案時,B 哥會盡力驗證方案的可行性,而不是憑直覺和過去的經(jīng)驗主觀臆斷。
在編寫代碼時,B 哥堅守『 軟件世界中的不信任原則 』,采用防御性編程,在每個可能的風(fēng)險點加上異常處理機制,并利用監(jiān)控告警即時發(fā)現(xiàn)線上問題。
在測試時,B 哥會考慮到很多的極端情況,保證測試有效且完整。
在提交代碼時,B 哥會再次整體通讀代碼,并讓我們其他同事參與代碼審核,保證代碼的質(zhì)量。
正是因為 B 哥的慎行,跟他一起做項目非常放心,幾乎沒有出過線上問題。唉,好久沒有體驗過改 bug 的緊張刺激感了。
溝通
在企業(yè)中,高效溝通太重要了。
記得有一次我遇到了一個問題,就拉了一位相關(guān)的業(yè)務(wù)負(fù)責(zé)人來討論,然后這個負(fù)責(zé)人又拉了一個產(chǎn)品經(jīng)理,然后這個產(chǎn)品經(jīng)理又拉了一個開發(fā),最后這個開發(fā)又找到了 B 哥,然后 B 哥又來找我。
最后局面非常尷尬,其實是我自己溝通不當(dāng),沒把問題描述清楚就去找別人幫忙了,浪費了大家的時間。在 B 哥的指導(dǎo)下,我整理了自己的思路,清晰地描述問題,然后直接找到相關(guān)負(fù)責(zé)人,打個電話問題就解決了。
優(yōu)秀的技術(shù)大佬,他們的溝通能力通常是很強的,他們能夠用方便他人理解的方式來描述問題,比如提供文檔、圖片、甚至是視頻等,拒絕無效溝通。而溝通能力也是需要實際鍛煉才能提升的,每個人溝通和表達的方式也不同,還是要多和他人溝通,并且向溝通達人學(xué)習(xí)和積累經(jīng)驗。
架構(gòu)能力
B 哥很會架構(gòu)。就拿我們負(fù)責(zé)的這個項目來說,短短幾個月,業(yè)務(wù)功能已經(jīng)變得復(fù)雜不堪,而且請求量也已經(jīng)增長了上千倍。
但是 B 哥在設(shè)計程序架構(gòu)時,用了很多的設(shè)計模式,使得程序變得易于擴展。即使業(yè)務(wù)增長很快,我們?nèi)匀豢梢暂p松應(yīng)對業(yè)務(wù)的擴展,每次新增一個功能也幾乎不需要改動現(xiàn)有的代碼,而是新增代碼即可,不僅開發(fā)效率更高,風(fēng)險也大大降低。
B 哥在很早前就考慮到了業(yè)務(wù)增長的可能性,因此給項目采用微服務(wù)架構(gòu),針對部分性能瓶頸,采用可擴容設(shè)計,使得提升項目的性能和吞吐量變得易如反掌。請求量增長,咱加機器就行了!
我問 B 哥:“你的架構(gòu)能力是怎么提升的?”
B 哥卻告訴我,沒有捷徑。想要提升架構(gòu)能力可不簡單,不僅僅需要閱讀大量的書籍,更重要的是在企業(yè)中不斷參與項目實踐,積累經(jīng)驗。
刨根問底
剛來實習(xí)的時候,對公司的很多技術(shù)框架、業(yè)務(wù)知識都不太懂,就經(jīng)常去請教大佬們一些問題。但是每次只要成功地解決了問題,我就心滿意足了,而不去關(guān)心問題背后的原因。
比如有一次程序掛了,后來又恢復(fù)了,我就沒去排查。
然后 B 哥問我:“程序為什么掛了?”
我根本沒去查,所以也沒辦法回答 B 哥,就說了一句:“現(xiàn)在好了不就行了么?”
B 哥語重心長地說:“程序出現(xiàn)問題不可怕,但是出現(xiàn)了問題不去追溯原因,下次再出現(xiàn)相同的問題,怎么辦?尤其是偶發(fā)問題,是最致命的!”
我覺得有理,就去分析日志,查出來是有一段時間數(shù)據(jù)庫宕機了,就趕緊開心地告訴 B 哥。
結(jié)果 B 哥很嚴(yán)肅:“數(shù)據(jù)庫宕機不是小事!你知道數(shù)據(jù)庫為什么宕機么?”
我心想:我怎么知道啊!去問運維啊?
后來我就去問運維,發(fā)現(xiàn)是由于數(shù)據(jù)庫壓力過大導(dǎo)致的宕機,就又屁顛屁顛地告訴 B 哥。
B 哥依然嚴(yán)肅:“數(shù)據(jù)庫壓力為什么大?”
我就又去分析日志,聯(lián)合運維一起進行排查,最后發(fā)現(xiàn)是其他共庫業(yè)務(wù)的慢查詢導(dǎo)致的數(shù)據(jù)庫請求阻塞。這才終于真相大白!于是我們將數(shù)據(jù)庫獨立遷移,很好地規(guī)避了日后的風(fēng)險。
這件事之后,我開始像 B 哥一樣,遇到問題刨根問底,深挖問題的本質(zhì),我認(rèn)為這個過程遠遠比解決問題更重要,讓我得到了更大的成長。
潔癖
有一次,我寫了一坨自認(rèn)為不錯的代碼,提交前把代碼先交給 B 哥來檢查一下。
然后 B 哥看了一會兒,神情凝重,緩緩轉(zhuǎn)過身問我。
“你有潔癖么?”
我當(dāng)時一愣,隨即明白 B 哥是在說我寫的代碼不夠整潔。
作為一個讀過《代碼整潔之道》的程序員,我很自信地回答:“當(dāng)然有潔癖!”
B 哥就給我指出了代碼中的問題,原來有一段邏輯我使用了多個 if-else,其實應(yīng)該用設(shè)計模式來代替。
我當(dāng)時還振振有詞:“我覺得這里直接用 if-else 就行了,省事兒啊!”
B 哥:“不通過,改!”
后來我乖乖地改了。果然之后這段代碼增加了一些復(fù)雜的邏輯,如果用原先 if-else 的方式,代碼的改動工作量非常大,還容易出錯。而用了設(shè)計模式,程序變得更加可擴展、可維護。感謝 B 哥和代碼潔癖!
現(xiàn)在想想,當(dāng)時的自己不過為偷懶找個理由罷了。
用戶為本
B 哥非常寵用戶,體現(xiàn)在兩個方面。
首先,他在和產(chǎn)品討論需求和設(shè)計方案時一切從用戶出發(fā)。只要對用戶真的有幫助、能提高他們的使用體驗,哪怕工作量多一點,只要性價比是合理的,B 哥也會去做。因此,我們的產(chǎn)品才能變得更加易用,得到用戶的好評。
此外,每次出現(xiàn)線上用戶的問題和反饋,B 哥都會在第一時間積極地配合產(chǎn)品進行處理和引導(dǎo)。在幫助用戶解決問題后,B 哥會記錄這些問題發(fā)生的原因,并思考如何改進程序來防止類似問題的發(fā)生,以及如何進一步提升用戶的體驗。
不僅僅是產(chǎn)品經(jīng)理才要堅持 “用戶為本” 的原則,優(yōu)秀的技術(shù)人也會關(guān)心用戶、傾聽用戶,而不是一門心思陷到代碼中,只想著如何把代碼寫的又好看又簡潔。
執(zhí)行力
B 哥做事一向快、狠、準(zhǔn),有著極強的執(zhí)行力,只要答應(yīng)過別人的事情都會按時完成。
曾經(jīng)我也一直覺得自己的執(zhí)行力很強,但到了公司后,發(fā)現(xiàn)很多事情也喜歡拖延。比如答應(yīng)給別人提供接口文檔,結(jié)果后來就忘了,直到別人再三催促才草草寫了幾筆應(yīng)付了事。
我就很好奇 B 哥是如何做到 “雷厲風(fēng)行” 的?
暗中觀察 B 哥一段時間后,發(fā)現(xiàn) B 哥始終保持對工作的熱情和積極性,別人有事找他時,他能夠站在對方的角度去考慮這個事情的緊急程度,然后將其進行記錄,并和自己正要處理的其他事情按優(yōu)先級進行排序。有時,B 哥還會設(shè)置一個定時提醒防止自己忘記。
安排好要做的事后,B 哥就保持專注地一件一件去處理事務(wù),并在完成后及時回復(fù)對方。即使有時實在太忙,也會提前告訴對方自己暫時無法處理,并給對方一些臨時的處理方案。
比起亂序地同時去處理多個事,B 哥的這種工作方式顯得更加沉穩(wěn),這也是 B 哥能持續(xù)保持強執(zhí)行力的原因吧。這么一想,很多技術(shù)大佬好像都是這樣。
懶
剛剛夸完 B 哥執(zhí)行力強,怎么又提到 “懶” 了呢?
的確,無論是在處理業(yè)務(wù)還是具體到敲代碼,B 哥都很懶。
比如,由于網(wǎng)絡(luò)等原因,我們的定時任務(wù)程序可能執(zhí)行異常,就需要重新去執(zhí)行一次。最開始都是我們?nèi)斯とテ脚_上點重新執(zhí)行的,但次數(shù)多了就比較煩了。B 哥懶啊,就提出寫個程序自動重跑執(zhí)行失敗的任務(wù)。后來我們再也不用人工去操作了,巴適得很!
用 B 哥的話來說,所有人工的操作本質(zhì)上都可以交給機器自動來完成,只是實現(xiàn)的難度不同罷了。如果編寫一個小程序就能省去重復(fù)的工作,何樂而不為呢?
其實,大部分優(yōu)秀的技術(shù)人都很 “懶”。懶得寫重復(fù)代碼,我們就抽象、封裝、組件化、復(fù)用;懶得去核對數(shù)據(jù),就寫任務(wù)定時自動去檢測數(shù)據(jù);懶得寫代碼,就使用一些腳手架、框架、低代碼構(gòu)建平臺等。
懶人推動世界。
畫圖能力
這里的畫圖不是指電腦上的 “畫圖程序”,而是指計算機相關(guān)的圖片,比如系統(tǒng)架構(gòu)圖、部署圖、UML 類圖、時序圖等。
在認(rèn)識 B 哥前啊,我覺得自己畫圖老厲害了,簡直 “靈魂畫手”,巧奪天工啊。
直到后來看了 B 哥畫的一些架構(gòu)圖、時序圖、狀態(tài)機圖等等,我才發(fā)現(xiàn)自己真的是井底之蛙。B 哥畫的圖不僅大氣干凈,而且利用一些小技巧幫助大家更快地理解這些圖要表達的意思,比如用不同的顏色來區(qū)分關(guān)鍵信息等。
最佩服的是,B 哥畫圖不僅好看,還特別快。有時畫圖的速度甚至超過了我們?nèi)ラ喿x理解圖的速度,恐怖如斯!
后來,在公司待久了,閱讀了更多的技術(shù)方案,才發(fā)現(xiàn)優(yōu)秀的畫圖能力是技術(shù)大牛的必備技能。很多復(fù)雜的系統(tǒng)和方案,我們無法單純地用語言去表達,而使用圖片的形式能夠幫助大家理解。
當(dāng)然,想畫好圖本身并不容易,也是需要設(shè)計思維和經(jīng)驗的。因此,我們需要多多鍛煉自己的畫圖能力。建議多看他人的圖,模仿的多了,說不定就超越了呢?
引路人
我放棄保研,選擇直接實習(xí)轉(zhuǎn)正留在騰訊,很大一部分是因為 B 哥。
B 哥可能不是技術(shù)最強的師傅,但一定是一位好師傅。別的不說,B 哥給新人非常多的發(fā)揮空間,讓我自己去思考和設(shè)計方案來實現(xiàn)需求。在我遇到一些問題后,并不是直接幫助我解答,而是引導(dǎo)我自己去解決這個問題。
B 哥非常信任新人,一些項目的技術(shù)選型、方案調(diào)研、架構(gòu)設(shè)計,B 哥都能夠交給我來做。因此,我非常有動力,也變得更加自主,在短時間內(nèi)得到了很大的成長。
B 哥還非常關(guān)心新人的成長,經(jīng)常和我交流,給了我很多實用的意見,真的很感謝 B 哥。
此外,B 哥還經(jīng)常耐心地幫助其他同學(xué)解答問題,不是簡簡單單三言兩語就完事兒,而是直到提問的同學(xué)徹底理解,方才罷休。
優(yōu)秀的技術(shù)人不僅要自身技術(shù)過硬,還應(yīng)該懂得如何分享傳授技術(shù)、帶領(lǐng)他人進步,不斷提升自己的影響力,甚至是成為某項技術(shù)的布道者。
愛生活
最后啊,分享 B 哥保持年輕的秘訣吧!
B 哥不像大家想象中的程序員,雙眼無神、眼圈發(fā)黑、脊背彎曲、格子襯衫、不愛運動。相反,B 哥非常熱愛生活,每周會堅持健身、自己下廚做飯、養(yǎng)了一只布偶貓,還經(jīng)常帶妹子去各種地方玩!
羨慕了,什么時候我能像 B 哥一樣,平衡工作和生活,活的瀟瀟灑灑啊!
其實,還要很多優(yōu)秀的技術(shù)人需要具備的其他特質(zhì),比如追求極致、洞察力、決策力、創(chuàng)造力等等。學(xué)無止境,我們?nèi)匀恍枰粩嗯统砷L。
最后,正好 B 哥的生日也在這個月,就提前祝 B 哥生日快樂叭!
希望能夠繼續(xù)跟著 B 哥混啊,有朝一日青出于藍而勝于藍,我也能成長為一名優(yōu)秀的技術(shù)人,成為別人的導(dǎo)師,幫助更多人進步!
總結(jié)
- 上一篇: 通俗讲解【重定向】及其实践
- 下一篇: 共享程序集