B 哥是個人導師,記得我剛進入騰訊實習的那天,是他出來接我。當時我有點懷疑,不會吧,不會吧,個人導師這麼年輕?和我想象中的經驗豐富的程序員的樣子簡直天壤之別。程序員
後來確認了,他就是個人導師,怎麼會這麼年輕呢?驚訝之餘,我也在期待他有沒有什麼過人之處,能夠帶我學習帶我飛。數據庫
直到如今認識 B 哥已經一年多了。老實說,剛開始我還並無以爲他特別厲害,可是隨着和他在工做中的合做交流,漸漸地加深了對他的瞭解,我才愈來愈發現,這我的是真的強啊!編程
有多強呢?小程序
B 哥本科畢業後直接工做,經歷了四年的打拼,現在的他已是騰訊的高級軟件開發工程師和技術 owner,在上海有好車、買得起市區房,前段時間還和漂亮妹子領告終婚證,真是典型的人生贏家啊!關鍵還很帥,髮量足,你說酸人不?設計模式
那麼 B 哥是怎麼作到年輕有爲、有事業、有車房妹的呢?markdown
曾經 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 哥混啊,有朝一日青出於藍而勝於藍,我也能成長爲一名優秀的技術人,成爲別人的導師,幫助更多人進步!