从校招生到核心架构师,支付宝研究员李俊奎谈如何成为一名优秀的程序员
校招進入支付寶,11年時間,從一線工程師成長為支付寶安全核心架構師,這個技術牛人就是李俊奎。
李俊奎一直聚焦風控平臺的技術和架構發展,并著手搭建了中國第一家云上的商業銀行——網商銀行。
在2016年雙11和新春紅包等活動中,李俊奎和他的團隊實現歷史性突破,即在系統不被降級的壓力下,控制資源消耗不超過2015財年雙11,并且很好地滿足了業務需求。
同時,李俊奎率領團隊實現了風控系統的異地多活,打造出新一代的風控體系。支付寶創立之初即提出“敢付敢賠”的口號,其背后的支撐就是由李俊奎及其團隊負責建設的實時風控平臺。
李俊奎樂于知識分享,經常在工作中對其他同學進行輔導,深受一線工程師的尊重和認可,被大家尊稱為“向爺”(花名:向秀)。
不久前,在支付寶 BASIC College以代碼為主題的分享活動中,李俊奎回顧了自己與代碼是如何結緣的,并對程序員職業發展談了談自己的想法。
?
一、給初入行程序員的建議
從在校學生到初入職場,首先是要過三關,很重要的一關就是在工作的第一天或頭幾天,就要接觸到代碼,因為只有接觸到代碼心里才感覺是有點踏實的。
我加入公司的時候,還是相對比較簡單的,不像現在代碼量,公司體量已經很大了,不管是系統數還是代碼數以及變更的數量都是很大的。08年的時候阿璽(螞蟻金服副CTO)帶著我們一起搭全站的系統環境,當時是50多個,基本上三個人,花一上午就能夠把整個支付寶所有的環境搭起來。
剛剛加入公司的時候會有一段強烈的新鮮感時光,是來源于我們總覺得代碼其實是最重要的。我現在也會和很多的新同學說,新人同學進來首先是要過三關,很重要的一關就是希望他在工作的第一天,就是要接觸到到代碼(如果是技術同學),能看到代碼,最好能寫代碼,因為只有接觸到代碼心里才感覺有點踏實的。
比如說你工作了幾天,代碼沒看到或系統也不知道,這個時候心里是不踏實的,不知道自己在干嘛,會有點失落。
我入職后的一兩個月都是覺得支付寶代碼也還好,數量還可以,但是后來就發現我只看到了冰山的一角。
二、如何快速成長?
在項目中成長,從我個人的經歷來看也是這樣的,項目在你修煉自己的代碼的這種能力里面是非常重要的。
今天最想要講的就是項目中成長,我跟代碼結緣以來最主要的經歷就是在項目中的成長。
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.養成看書的習慣。
現在是時間碎片化非常嚴重的時代,獲取知識的渠道非常多,但是有一些經典的書或者體系化的書,建議還是要去多看。養成看書的習慣,那么獲取的知識會比你看比如今日頭條或者一些網頁還是要來得更加的體系化。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的从校招生到核心架构师,支付宝研究员李俊奎谈如何成为一名优秀的程序员的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚂蚁“备战”TPC-C这1年
- 下一篇: Kubernetes事件离线工具kube