校招進入支付寶,11年時間,從一線工程師成長爲支付寶安全核心架構師,這個技術牛人就是李俊奎。程序員
李俊奎一直聚焦風控平臺的技術和架構發展,並着手搭建了中國第一家雲上的商業銀行——網商銀行。設計模式
在2016年雙11和新春紅包等活動中,李俊奎和他的團隊實現歷史性突破,即在系統不被降級的壓力下,控制資源消耗不超過2015財年雙11,而且很好地知足了業務需求。安全
同時,李俊奎率領團隊實現了風控系統的異地多活,打造出新一代的風控體系。支付寶創立之初即提出「敢付敢賠」的口號,其背後的支撐就是由李俊奎及其團隊負責建設的實時風控平臺。架構
李俊奎樂於知識分享,常常在工做中對其餘同窗進行輔導,深受一線工程師的尊重和承認,被你們尊稱爲「向爺」(花名:向秀)。框架
不久前,在支付寶 BASIC College以代碼爲主題的分享活動中,李俊奎回顧了本身與代碼是如何結緣的,並對程序員職業發展談了談本身的想法。分佈式
從在校學生到初入職場,首先是要過三關,很重要的一關就是在工做的第一天或頭幾天,就要接觸到代碼,由於只有接觸到代碼內心才感受是有點踏實的。單元測試
我加入公司的時候,仍是相對比較簡單的,不像如今代碼量,公司體量已經很大了,無論是系統數仍是代碼數以及變動的數量都是很大的。08年的時候阿璽(螞蟻金服副CTO)帶着咱們一塊兒搭全站的系統環境,當時是50多個,基本上三我的,花一上午就可以把整個支付寶全部的環境搭起來。學習
剛剛加入公司的時候會有一段強烈的新鮮感時光,是來源於咱們總以爲代碼實際上是最重要的。我如今也會和不少的新同窗說,新人同窗進來首先是要過三關,很重要的一關就是但願他在工做的第一天,就是要接觸到到代碼(若是是技術同窗),能看到代碼,最好能寫代碼,由於只有接觸到代碼內心才感受有點踏實的。測試
好比說你工做了幾天,代碼沒看到或系統也不知道,這個時候內心是不踏實的,不知道本身在幹嗎,會有點失落。spa
我入職後的一兩個月都是以爲支付寶代碼也還好,數量還能夠,可是後來就發現我只看到了冰山的一角。
在項目中成長,從我我的的經從來看也是這樣的,項目在你修煉本身的代碼的這種能力裏面是很是重要的。
今天最想要講的就是項目中成長,我跟代碼結緣以來最主要的經歷就是在項目中的成長。
1.要寫代碼先看代碼
支付寶的代碼分紅三類:第一類代碼是寫得很好的,這個好跟很差實際上是有很是重要的一個評價,就是你可否能夠快速瞭解它,以爲它賞心悅目而且可以快速地抓住它主要設計的精髓。
我以爲這種代碼是好的代碼。這一類代碼,不少就是在什麼地方呢?
第一個就是在一些公共的庫,第二個是一些所謂的核心的系統。
我很長一段時間,一部分是本身參加一些項目,第二部分就是看代碼。
我認爲Code Review其實不少狀況下並非提交了代碼而後讓人來Code Review,這是一個過程。我認爲的Code Review更多的是「看代碼」,代碼有好的也有壞的。
好的就是我剛纔說的一些比較核心的系統,比較重要的庫,這些代碼能看到不少一些設計,不少的原理。新同窗多看一些代碼,這對於其瞭解全貌頗有益處。
2.考古
不少同窗可能接觸到一些別人推送過來的系統,交接過來的系統,會發現文檔不必定是最好的,不少狀況下就須要考古。我也考了不少的古,作每一個項目以前很大一個工做其實就是要了解過往的系統究竟是怎麼運做的,或者說整個鏈路是怎麼運做的,這個時候就須要去考古了。
不能說看一些PPT上面的東西就能把這個方案可以作得很是細緻,很是典型的是一些拆分類的項目或者移交過來的比較大的系統。這個時候你只能去看PPT那個層面,固然這是一個惡習,PPT畫得高大上無比,真正到代碼上就各類坑,各類不注意的細節。
考古我以爲是很是重要也是很是有必要的。只有把代碼基本上可以粗略的看全,而後才真正可以經過代碼大概瞭解它的運做方式,這是很是重要的。
3.不斷磨鍊
第三類代碼就是說代碼跟配置其實不少狀況下是分離的,這種狀況下出問題可能會比較大。
個人例子就是當時我是在作前臺業務,交易核心是最重要的系統的服務。交易其實代碼跟它的配置是分離的,交易的代碼,若是不知道它下一步往哪裏走的,就只能把代碼跟配置一塊兒來看,甚至要調試。
這個時候,經過運行它的配置的代碼,在整個運行中看它的過程,而不是隻看JAVA的代碼,實際上這個配置表明一些很重要的邏輯在裏面,如今這樣的狀況愈來愈多。我理解如今是比之前更加的難,或者說範圍更加的廣。
第三類代碼就是不斷地去作這樣的一個磨鍊,個人理解就是本身在項目中作這種磨鍊。
關於磨練,我這裏有幾個例子是本身經歷過的。
(1)看書
不知道你們如今還看不看書?我固然是指不是看《故事會》《小人書》,而是看一些設計的書或者別人代碼的這些書,我之前參加項目的過程當中,其實忙裏偷閒仍是要去看一些書,我看魯肅(螞蟻金服CTO)也是這樣的習慣,常常看到魯肅拿了一堆的書本身在那裏狂啃,這個確實是一個比較好的習慣。我本身的經驗是,看書的過程當中可使你們開闊思路。
(2)單元測試
第二個我剛纔說會看代碼,其實還有一部分看單元測試。固然如今是在強制作,有覆蓋率的要求,單元測試是很是重要的一個環節。單元測試是相對很是小的一段,它能作一些測試、模擬,甚至說作一些演示的工做。
若是你們一味地看註釋,註釋不必定是準確的,有的註釋寫得好,有的註釋寫得差,可是實際上單元測試若是它有必定的覆蓋率的話,其實在哪些邏輯不清楚的狀況下,看或者寫一些單元測試對於理解系統運行也是很是重要的。
(3)設計的經驗
好比SOFA框架(分佈式中間件),我對新同窗說,若是在試用期或實習期,可以把SOFA框架的總體的原理圖可以搞清楚,它的一個依賴關係的那張圖能搞清楚,那麼就抓住了SOFA的精髓。而後再去看支付寶主要的系統的代碼,就有據可依,這就是設計的一個好處。SOFA的框架至關於龍骨,能看懂就會知道主要的一些代碼,核心代碼是寫在哪裏的,一些主要的邏輯放在哪裏的,這個很重要。
設計的第一塊是向框架去學習,第二塊其實就是向他人去學習。我常常看項目組其餘同窗的代碼,看優秀的代碼還會作一些總結。
在項目中成長,對工程師來講是很是重要的。從我我的的經從來看也是這樣的,項目在本身修煉代碼能力方面是很是重要的,大概佔了百分之七八十。
最後,是我給你們的一些建議。
1.多看代碼,不管好壞,保持代碼敏感度。
代碼方面,我認爲首先要看代碼,多看代碼,由於不管如何要保持本身對代碼的敏感。你們可能常常本身吐槽是一個碼農,每天無論需求在哪裏,只管代碼碼哪裏,這個確定不是最好的方式。好代碼跟壞代碼是有本質的差距,好代碼是體現了人的思想,體現人的設計。壞代碼,爲何看壞代碼?某種緣由也是給你們一個警示,這個咱們要避免。
2.寫代碼,多作總結,一次比一次好。
除了常常看別人寫的好代碼或者考古別人的代碼,我也會常常回過去看之前本身寫的代碼。看的時候就想,這個代碼,爲何以爲寫得好?爲何它那個地方是有一些問題的。
我相信不是全部的代碼都是好的,本身寫的代碼也不必定全部都是好的。可是本身給本身是有個評判,有的時候去看,這個地方作一下更多的抽象,或者更多地提取一些公共的一些東西,這個是很是重要的。
多作總結實際上是爲了讓本身一次比一次寫得少,一次比一次好,可以避免之前的一些坑,或者說可以避免之前的一些錯誤,這個就是一個進步。
3.寫代碼前,一些設計很重要。
寫代碼有不少種,有的是直接徹底按照需求實現,按邏輯實現。但我想即便這樣,若是你們要提升本身的代碼的能力或者代碼的意識,一些設計特別重要。這個設計不是要去整設計模式,整高大上的框架。不少狀況下是可以經過一些代碼,可以把一些這種共性的東西作一些寫法的不同,可能都是很好的設計。可是若是隻是純粹的把邏輯實現,或者說就按照這個邏輯去這樣作,有的時候並不必定是最好的。
4.養成看書的習慣。
如今是時間碎片化很是嚴重的時代,獲取知識的渠道很是多,可是有一些經典的書或者體系化的書,建議仍是要去多看。養成看書的習慣,那麼獲取的知識會比你看好比今日頭條或者一些網頁仍是要來得更加的體系化。
本文爲雲棲社區原創內容,未經容許不得轉載。