支付宝程序员眼中的极致代码和卓越程序员是什么样的?
“雙十一”前夕,支付寶BASIC College舉辦了一場名為“超級Ma力大賽”的活動。這是一場只用代碼說話的競賽,共有數(shù)千名支付寶的工程師參加,程序員和程序媛們通過寫代碼、曬代碼,展現(xiàn)出對極致代碼的孜孜追求,并以此描摹出支付寶最強Coder的畫像——匠心、極致、傳承、創(chuàng)新。
?
我們采訪了分別獲得卓越代碼獎、優(yōu)秀代碼獎、最強CodeMan的三位支付寶程序員,聊聊在他們心中,什么是好代碼,怎樣才算是卓越的程序員。
優(yōu)秀的代碼有共性
一千個讀者有一千個哈姆雷特,一千個程序員也有一千種代碼寫作方式,但好的代碼一定是有其共性所在的,三位程序員也都給出了自己的看法。
“優(yōu)秀的代碼,在我看來就是可以跑、可以讀、可以被欣賞。”這是優(yōu)秀代碼獎得主入棧同學(xué)非常體系化的概括。
?
- “可以跑”是對機器來說的,寫代碼最基本的目的就是告訴計算機怎么干活,所以代碼首先要寫對。我們常常說的并發(fā)問題、安全問題、異常處理缺失問題等等,都是“可以跑”這個要求上面出了問題。
- 第二個“可以讀”是對人來說的,畢竟代碼閱讀的次數(shù)要遠(yuǎn)遠(yuǎn)超過編寫的次數(shù)。一份可以讀的代碼,即使在性能、擴展性上存在缺陷,還是能通過較好的可讀性,被他人理解,進(jìn)而解決這些問題。相反,有些代碼雖然精妙、高效,但是看不懂,受眾小,不好擴展,就容易被歷史所拋棄。
- 第三個是“可以被欣賞”。前兩個標(biāo)準(zhǔn),評判角度在于功用性,“可以被欣賞”則是從藝術(shù)性的角度。就像照片的本意是為了記錄,但也可以被做成藝術(shù)品,代碼也一樣。優(yōu)秀的代碼讀起來,主次分明、層次清晰、賞心悅目,就和看小說一樣,能看到代碼作者背后對領(lǐng)域問題求解的思考,看到對風(fēng)險的重視,看到精雕細(xì)琢的痕跡。
而在卓越代碼獎獲得者櫻桃同學(xué)看來,如果只能用三個詞來概括優(yōu)秀的代碼,首先應(yīng)該是正確,其次是可讀,最后才是性能。
?
正確一定是排在最優(yōu)先的位置,因為不正確的代碼達(dá)不成功能最后毫無意義。代碼首先是給人讀的,然后才是給機器讀的,可讀性對保證他人理解、項目的長期維護性上影響最大,而且可讀的代碼通常會是簡潔、優(yōu)雅的。最后才是性能,性能跟業(yè)務(wù)是伴生關(guān)系,前期代碼性能相對來說不會太重要。
摘得最強CoderMan稱號的連明同學(xué)給出的概括則是“可讀性、高穩(wěn)定性和優(yōu)雅性”。除了入棧和櫻桃都提到的可讀和優(yōu)雅以外,連明補充了一個高穩(wěn)定性的特點。
?
在他看來,穩(wěn)定性是相對難得的一個代碼特性,因為除了實現(xiàn)功能以外,穩(wěn)定性還意味著在技術(shù)風(fēng)險方面的考慮,以及當(dāng)下的穩(wěn)定性和未來業(yè)務(wù)迅猛擴展時能否保持穩(wěn)定性的考慮。
代碼可讀、正確、穩(wěn)定、簡潔優(yōu)雅,這是支付寶程序員們對優(yōu)秀代碼所下的定義。
師兄領(lǐng)進(jìn)門,修行在個人
工程師文化意味著什么?也許“Open”和“Share”兩個詞可以略作解釋。支付寶BASIC College一直有一個“師兄文化”,許多技術(shù)同學(xué)的第一本“入門教程” 就是師兄的代碼,在師兄的傳幫帶之下,支付寶的技術(shù)同學(xué)不斷提升著自己的技術(shù)實力。
入棧直到今天仍對自己的師兄功玉有著深刻的印象:
我現(xiàn)在寫代碼的嚴(yán)謹(jǐn)態(tài)度,有很大一部分就是當(dāng)年師兄帶我時培養(yǎng)起來的。我記得,有一次我們和組內(nèi)其他一些同學(xué)討論,在做vo、bo、do的轉(zhuǎn)換時,是使用Apache Beanutils好,還是直接手寫getter、setter更好,一塊白板討論了半個下午,性能、缺陷、給后人留坑等各種問題都考慮到了,最后的結(jié)論是直接手寫會更好。這與后來集團推出的《阿里巴巴Java開發(fā)手冊》不謀而合。
類似的故事也在連明身上發(fā)生過。初入行的連明第一次開發(fā)第一個迭代版本,完成后給師兄Review,師兄只提了兩點:寫代碼前有沒有裝支付寶的代碼格式化插件工具;單測、代碼安全掃描有沒有打開。然后連明就懵了,后來他才明白,前者代表的是代碼格式、規(guī)約,這些對于生產(chǎn)而言很重要。后者更容易被技術(shù)同學(xué)所忽視,魔鬼存在于細(xì)節(jié)中,如果連這些都做不好,師兄也沒有繼續(xù)做Review的必要。
如果大家對C/C++感興趣的話,可以加一下我們的學(xué)習(xí)交流Q群:637 ?935 ?295,免費領(lǐng)取一套學(xué)習(xí)資料和視頻課程喲~
?
櫻桃所在的團隊是一個新組建的團隊,他雖然沒有經(jīng)歷過師兄的傳幫帶,但對此也有自己的一番理解。
國內(nèi)計算機專業(yè)存在一個很大的缺失,就是沒有培養(yǎng)出大公司所需的、開發(fā)能力符合要求的程序員。大公司需要很多能夠?qū)懗黾軜?gòu)合理、實現(xiàn)健壯、代碼可讀的人才,代碼比賽也好、師兄文化也好,都是在填補一個鴻溝,從大學(xué)到公司之間做一個引導(dǎo),工程師要有扎實的基本功,才能聚集在一起做大規(guī)模的軟件工程。
支付寶的師兄給技術(shù)同學(xué)上了入行的第一課,播種下了匠心與傳承的種子,一代又一代支付寶技術(shù)人努力地在各自的崗位上持續(xù)追求著極致與創(chuàng)新,這就是支付寶的Code文化。
狂奔在追求卓越的代碼路上
櫻桃是清華畢業(yè)的博士,“我開始寫生產(chǎn)線上的代碼也就半年多時間”他說。
參加這次超級Ma力大賽以后,他覺得對于自己的代碼價值觀有了很好的引導(dǎo)作用。作為一個既是一線開發(fā)者又是半個Manager的技術(shù)人,他眼里的優(yōu)秀的程序員形象必須具備獨立思考能力,能夠獨立解決一個問題,可以完美Cover從需求分析、設(shè)計到落地的全過程。
入行三年多的連明,這次獲得了“最強CoderMan”殊榮,但他表示,自己不敢說最強,但是有朝著最強前進(jìn)的追求。在他看來,支付寶優(yōu)秀的程序員都有一些共性:
- 匠心。一個好的程序員就是一個好的工匠,不管是工作還是交流,都精益求精,永不滿足,具備耐心和專業(yè)的態(tài)度。
- 傳承。好的程序員應(yīng)該是一個Master,不僅自己很強,而且可以帶動他人。
- 創(chuàng)新。很少人能真正做到創(chuàng)新,連明也希望自己能夠用一個創(chuàng)新的想法和思路解決支付寶業(yè)務(wù)上的痛點,讓技術(shù)驅(qū)動業(yè)務(wù)增長。
但他認(rèn)為,態(tài)度是首要的,沒有態(tài)度支撐,這一切將毫無意義。
入棧總結(jié)了三種優(yōu)秀程序員的類型:一類是實現(xiàn)型,實現(xiàn)功能既快又好;一類是架構(gòu)型,拿到需求能快速抓住核心,提出解決方案;一類是創(chuàng)造型,能夠發(fā)現(xiàn)問題,提出創(chuàng)新的策略、算法以解決現(xiàn)存問題。“我目前還是努力成為一個架構(gòu)型程序員”,謙虛的他這么說。
提到怎么時刻保持自己的技術(shù)實力不斷提升時,三位也分別給出了自己的看法:
- 櫻桃表示自己大學(xué)時缺失的是對軟件工程能力的培養(yǎng),通過自學(xué)讀了兩本好書《可讀代碼的藝術(shù)》和《代碼大全》,學(xué)會了如何寫可讀代碼、如何去設(shè)計軟件。
- 入棧則會在廣度和深度上下功夫。廣度上時刻關(guān)注領(lǐng)域技術(shù)文章,碎片時間看看Hacker News、Reddit的programming頻道;深度上參與大型項目與牛x的10倍程序員一起共事,學(xué)習(xí)、提升自己,他提到,在財富技術(shù)部這個平臺,他參與了一系列大型項目,接觸了很多大牛,感到十分幸運。
- 連明很感謝金融核心平臺部這個平臺,讓他有機會一進(jìn)來就負(fù)責(zé)比較核心的系統(tǒng),從了解一個系統(tǒng),到了解其承載的業(yè)務(wù),再到整條線的系統(tǒng)、架構(gòu),讓他學(xué)到了很多東西。
其實對于支付寶技術(shù)人而言,初心就是做到代碼的匠心、極致、傳承和卓越,通過技術(shù)實力來回饋業(yè)務(wù),保證業(yè)務(wù)的穩(wěn)定與增長。
敬畏每一行代碼,時刻為之保持思考,支付寶的技術(shù)同學(xué)們狂奔在追求卓越代碼的路上。
總結(jié)
以上是生活随笔為你收集整理的支付宝程序员眼中的极致代码和卓越程序员是什么样的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科大星云诗社动态20210824
- 下一篇: 找一个程序员当男朋友是什么样的体验?