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