從校招生到核心架構(gòu)師,支付寶研究員李俊奎談如何成為一名優(yōu)秀的程序員

校招進入支付寶,11年時間,從一線工程師成長為支付寶安全核心架構(gòu)師,這個技術(shù)牛人就是李俊奎。

李俊奎一直聚焦風(fēng)控平臺的技術(shù)和架構(gòu)發(fā)展,并著手搭建了中國第一家云上的商業(yè)銀行——網(wǎng)商銀行。

在2016年雙11和新春紅包等活動中,李俊奎和他的團隊實現(xiàn)歷史性突破,即在系統(tǒng)不被降級的壓力下,控制資源消耗不超過2015財年雙11,并且很好地滿足了業(yè)務(wù)需求。

同時,李俊奎率領(lǐng)團隊實現(xiàn)了風(fēng)控系統(tǒng)的異地多活,打造出新一代的風(fēng)控體系。支付寶創(chuàng)立之初即提出“敢付敢賠”的口號,其背后的支撐就是由李俊奎及其團隊負(fù)責(zé)建設(shè)的實時風(fēng)控平臺。

李俊奎樂于知識分享,經(jīng)常在工作中對其他同學(xué)進行輔導(dǎo),深受一線工程師的尊重和認(rèn)可,被大家尊稱為“向爺”(花名:向秀)。

不久前,在支付寶 BASIC College以代碼為主題的分享活動中,李俊奎回顧了自己與代碼是如何結(jié)緣的,并對程序員職業(yè)發(fā)展談了談自己的想法?! ?/p>

從校招生到核心架構(gòu)師,支付寶研究員李俊奎談如何成為一名優(yōu)秀的程序員

一、給初入行程序員的建議

從在校學(xué)生到初入職場,首先是要過三關(guān),很重要的一關(guān)就是在工作的第一天或頭幾天,就要接觸到代碼,因為只有接觸到代碼心里才感覺是有點踏實的。

我加入公司的時候,還是相對比較簡單的,不像現(xiàn)在代碼量,公司體量已經(jīng)很大了,不管是系統(tǒng)數(shù)還是代碼數(shù)以及變更的數(shù)量都是很大的。08年的時候阿璽(螞蟻金服副CTO)帶著我們一起搭全站的系統(tǒng)環(huán)境,當(dāng)時是50多個,基本上三個人,花一上午就能夠把整個支付寶所有的環(huán)境搭起來。

剛剛加入公司的時候會有一段強烈的新鮮感時光,是來源于我們總覺得代碼其實是最重要的。我現(xiàn)在也會和很多的新同學(xué)說,新人同學(xué)進來首先是要過三關(guān),很重要的一關(guān)就是希望他在工作的第一天,就是要接觸到到代碼(如果是技術(shù)同學(xué)),能看到代碼,最好能寫代碼,因為只有接觸到代碼心里才感覺有點踏實的。

比如說你工作了幾天,代碼沒看到或系統(tǒng)也不知道,這個時候心里是不踏實的,不知道自己在干嘛,會有點失落。

我入職后的一兩個月都是覺得支付寶代碼也還好,數(shù)量還可以,但是后來就發(fā)現(xiàn)我只看到了冰山的一角。

二、如何快速成長?

在項目中成長,從我個人的經(jīng)歷來看也是這樣的,項目在你修煉自己的代碼的這種能力里面是非常重要的。

今天最想要講的就是項目中成長,我跟代碼結(jié)緣以來最主要的經(jīng)歷就是在項目中的成長。

1.要寫代碼先看代碼

支付寶的代碼分成三類:第一類代碼是寫得很好的,這個好跟不好其實是有非常重要的一個評價,就是你能否可以快速了解它,覺得它賞心悅目并且能夠快速地抓住它主要設(shè)計的精髓。

我覺得這種代碼是好的代碼。這一類代碼,很多就是在什么地方呢?

第一個就是在一些公共的庫,第二個是一些所謂的核心的系統(tǒng)。

我很長一段時間,一部分是自己參加一些項目,第二部分就是看代碼。

我認(rèn)為Code Review其實很多情況下并不是提交了代碼然后讓人來Code Review,這是一個過程。我認(rèn)為的Code Review更多的是“看代碼”,代碼有好的也有壞的。

好的就是我剛才說的一些比較核心的系統(tǒng),比較重要的庫,這些代碼能看到很多一些設(shè)計,很多的原理。新同學(xué)多看一些代碼,這對于其了解全貌很有益處。

2.考古

很多同學(xué)可能接觸到一些別人推送過來的系統(tǒng),交接過來的系統(tǒng),會發(fā)現(xiàn)文檔不一定是最好的,很多情況下就需要考古。我也考了很多的古,做每個項目之前很大一個工作其實就是要了解過往的系統(tǒng)到底是怎么運作的,或者說整個鏈路是怎么運作的,這個時候就需要去考古了。

不能說看一些PPT上面的東西就能把這個方案能夠做得非常細(xì)致,非常典型的是一些拆分類的項目或者移交過來的比較大的系統(tǒng)。這個時候你只能去看PPT那個層面,當(dāng)然這是一個惡習(xí),PPT畫得高大上無比,真正到代碼上就各種坑,各種不注意的細(xì)節(jié)。

考古我覺得是非常重要也是非常有必要的。只有把代碼基本上能夠粗略的看全,然后才真正能夠通過代碼大概了解它的運作方式,這是非常重要的。

3.不斷磨煉

第三類代碼就是說代碼跟配置其實很多情況下是分離的,這種情況下出問題可能會比較大。

我的例子就是當(dāng)時我是在做前臺業(yè)務(wù),交易核心是最重要的系統(tǒng)的服務(wù)。交易其實代碼跟它的配置是分離的,交易的代碼,如果不知道它下一步往哪里走的,就只能把代碼跟配置一起來看,甚至要調(diào)試。

這個時候,通過運行它的配置的代碼,在整個運行中看它的過程,而不是只看JAVA的代碼,實際上這個配置代表一些很重要的邏輯在里面,現(xiàn)在這樣的情況越來越多。我理解現(xiàn)在是比以前更加的難,或者說范圍更加的廣。

第三類代碼就是不斷地去做這樣的一個磨煉,我的理解就是自己在項目中做這種磨煉。

關(guān)于磨練,我這里有幾個例子是自己經(jīng)歷過的。

(1)看書

不知道大家現(xiàn)在還看不看書?我當(dāng)然是指不是看《故事會》《小人書》,而是看一些設(shè)計的書或者別人代碼的這些書,我以前參加項目的過程中,其實忙里偷閑還是要去看一些書,我看魯肅(螞蟻金服CTO)也是這樣的習(xí)慣,經(jīng)常看到魯肅拿了一堆的書自己在那里狂啃,這個確實是一個比較好的習(xí)慣。我自己的經(jīng)驗是,看書的過程中可以使大家開闊思路。

(2)單元測試

第二個我剛才說會看代碼,其實還有一部分看單元測試。當(dāng)然現(xiàn)在是在強制做,有覆蓋率的要求,單元測試是非常重要的一個環(huán)節(jié)。單元測試是相對非常小的一段,它能做一些測試、模擬,甚至說做一些演示的工作。

如果大家一味地看注釋,注釋不一定是準(zhǔn)確的,有的注釋寫得好,有的注釋寫得差,但是實際上單元測試如果它有一定的覆蓋率的話,其實在哪些邏輯不清楚的情況下,看或者寫一些單元測試對于理解系統(tǒng)運行也是非常重要的。

(3)設(shè)計的經(jīng)驗

比如SOFA框架(分布式中間件),我對新同學(xué)說,如果在試用期或?qū)嵙?xí)期,能夠把SOFA框架的整體的原理圖能夠搞清楚,它的一個依賴關(guān)系的那張圖能搞清楚,那么就抓住了SOFA的精髓。然后再去看支付寶主要的系統(tǒng)的代碼,就有據(jù)可依,這就是設(shè)計的一個好處。SOFA的框架相當(dāng)于龍骨,能看懂就會知道主要的一些代碼,核心代碼是寫在哪里的,一些主要的邏輯放在哪里的,這個很重要。

設(shè)計的第一塊是向框架去學(xué)習(xí),第二塊其實就是向他人去學(xué)習(xí)。我經(jīng)??错椖拷M其他同學(xué)的代碼,看優(yōu)秀的代碼還會做一些總結(jié)。

在項目中成長,對工程師來說是非常重要的。從我個人的經(jīng)歷來看也是這樣的,項目在自己修煉代碼能力方面是非常重要的,大概占了百分之七八十。

三、總結(jié)

最后,是我給大家的一些建議。

1.多看代碼,無論好壞,保持代碼敏感度。

代碼方面,我認(rèn)為首先要看代碼,多看代碼,因為無論如何要保持自己對代碼的敏感。大家可能經(jīng)常自己吐槽是一個碼農(nóng),天天不管需求在哪里,只管代碼碼哪里,這個肯定不是最好的方式。好代碼跟壞代碼是有本質(zhì)的差距,好代碼是體現(xiàn)了人的思想,體現(xiàn)人的設(shè)計。壞代碼,為什么看壞代碼?某種原因也是給大家一個警示,這個我們要避免。

2.寫代碼,多做總結(jié),一次比一次好。

除了經(jīng)??磩e人寫的好代碼或者考古別人的代碼,我也會經(jīng)?;剡^去看以前自己寫的代碼??吹臅r候就想,這個代碼,為什么覺得寫得好?為什么它那個地方是有一些問題的。

我相信不是所有的代碼都是好的,自己寫的代碼也不一定所有都是好的。但是自己給自己是有個評判,有的時候去看,這個地方做一下更多的抽象,或者更多地提取一些公共的一些東西,這個是非常重要的。

多做總結(jié)其實是為了讓自己一次比一次寫得少,一次比一次好,能夠避免以前的一些坑,或者說能夠避免以前的一些錯誤,這個就是一個進步。

3.寫代碼前,一些設(shè)計很重要。

寫代碼有很多種,有的是直接完全按照需求實現(xiàn),按邏輯實現(xiàn)。但我想即使這樣,如果大家要提高自己的代碼的能力或者代碼的意識,一些設(shè)計特別重要。這個設(shè)計不是要去整設(shè)計模式,整高大上的框架。很多情況下是能夠通過一些代碼,能夠把一些這種共性的東西做一些寫法的不一樣,可能都是很好的設(shè)計。但是如果只是純粹的把邏輯實現(xiàn),或者說就按照這個邏輯去這樣做,有的時候并不一定是最好的。

4.養(yǎng)成看書的習(xí)慣。

現(xiàn)在是時間碎片化非常嚴(yán)重的時代,獲取知識的渠道非常多,但是有一些經(jīng)典的書或者體系化的書,建議還是要去多看。養(yǎng)成看書的習(xí)慣,那么獲取的知識會比你看比如今日頭條或者一些網(wǎng)頁還是要來得更加的體系化。

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2019-09-10
從校招生到核心架構(gòu)師,支付寶研究員李俊奎談如何成為一名優(yōu)秀的程序員
校招進入支付寶,11年時間,從一線工程師成長為支付寶安全核心架構(gòu)師,這個技術(shù)牛人就是李俊奎。

長按掃碼 閱讀全文