碼農精進之路:我不相信35歲就做不了程式設計師

異步社區 發佈 2020-01-06T15:56:43+00:00

異步導讀我曾很多次被人問到,在軟體的世界裡到底有沒有優雅的代碼和整潔的架構?是不是所有想實現DDD和想要寫好業務代碼的職場新人都只能凌亂的摸索和反覆嘗試?答案是有捷徑。 對於大多數初出茅廬的程式設計師們而言,張建飛的《代碼精進之路:從碼農到工匠》一書就是一條捷徑。

異步導讀

我曾很多次被人問到,在軟體的世界裡到底有沒有優雅的代碼和整潔的架構?是不是所有想實現DDD和想要寫好業務代碼的職場新人都只能凌亂的摸索和反覆嘗試?答案是有捷徑。

對於大多數初出茅廬的程式設計師們而言,張建飛的《代碼精進之路:從碼農到工匠》一書就是一條捷徑。通過多年的學習和工作積累,張建飛研發了COLA(全稱是Clean Object—Oriented Layered Architecture),COLA自開源以來,已經被多個技術團隊使用,解決了DDD落地和應用擴展問題,受到了普遍關注和一致好評。

他提倡「工匠精神」,對於如何打造一個追求卓越、獨具匠心的技術團隊,如何量化考核工程師的技術貢獻,都有著非常深入的思考和實踐,並探索出一套切實可行的方法論。基於該方法論打造的「工匠平台」,在阿里巴巴內部被廣泛使用,「工匠平台」豐富了對技術人員考察的維度,是除業務結果之外的從技術視角給技術人員「照鏡子」的有效工具。讓代碼變得簡潔,框架變得優美,有效減少了學習成本和探索路徑,無論你是想通過一個代碼支持多個業務,還是多個租戶的場景,COLA都適用。身為碼農圈的一員,更早地看到這本書可以說是一種幸運。


「我有一個夢想,我寫的代碼,可以像詩一樣優美。我有一個夢想,我做的設計,能恰到好處,既不過度,也無不足。」



很多人會有一種固化的思維,認為只有偉大的人才配擁有偉大的夢想,但其實這個世界上原本就沒有那麼多偉大的人。所有偉大的夢想都是由普通人一點點的小願望經過不斷地努力,最終才變得不那麼平凡,甚至稱得上偉大的。張建飛一直覺得自己就是一個再普通不過的人,但是擁有自己小小的夢想,也願意為了夢想堅持和努力。


堅強的母親帶給自己不願服輸的性格


張建飛於1982年出生在皖南一個很普通的農村家庭。出生的那天,全村人都在參加婚禮,也許是受熱鬧氣氛的影響,他比預產期提前了好幾天降臨,直到建飛已經呱呱落地了,父親才從酒席上趕回來。還好母親心態好,一切也都順利。


80年代的中國農村,雖然已經不存在溫飽問題,但是日子過得還是很緊巴,一到下大雨的天氣,家裡的土房裡就會下小雨。建飛從小就會幫助家裡做一些力所能及的活兒,一家人雖然生活清貧但也擁有樸實的幸福。


在他7歲的時候,母親決定建新房子。這可不是一件小事情,雖然媽媽和爸爸靠做衣服這個手藝掙到一些辛苦錢,但是離建房還差一些。就是在那種比較艱難的環境中,家裡還是修起了新房子。建飛知道母親在這其中做了很大的努力,這再次讓他感受到母親堅毅的性格,只要她決心要去做的事,一般都可以做成。


母親有兩個哥哥一個妹妹,在她9歲的時候外婆就去世了,外公是一個脾氣暴躁、不會關心人的粗線條男人。母親除了要給一家人洗衣做飯以外,還要在父親發火的時候,保護妹妹。不好好的生活環境養成了她堅強不願服輸的性格,而這種性格從小又帶給建飛很深刻的影響,讓他自小就願意多去嘗試和努力,不會輕易服輸。


成長中的無數小事,鋪就了日後的路


小時候的張建飛並不是一個很自信的人,總覺得學習平平的自己在各個方面都很普通。小學5年級的時候,他和幾個小夥伴在村裡的一個池塘游泳。當輪到建飛的時候,他用最大的力氣把自己拋向空,等砸到水裡之後感覺一陣劇烈的刺痛,左腳被嚴重的割傷了,腳底幾乎一半的肉已經被割開,可能是速度太快,傷口好像都來不及流血。正值小升初的關鍵期,這件事耽誤了考試,他不得不在5年級又多待了一年。


但是塞翁失馬,焉知非福,在留級的那一年,張建飛小宇宙開始爆發,成績出奇得好,在各種競賽中都拿到了很好的成績。做慣了普通學生的他,突然發現自己也是有潛力變好的。後來在高考時分數剛剛跨過重點線,為了能選上一個比較熱門的專業,他特意選了一所離家很遠的普通211學校——雲南大學。


離家遙遠的代價就是每年他不得不坐上2天2夜的火車去學校上學,而且每年春運火車票非常緊張,連坐票也沒有,只有站票。因為離家太遠了,建飛基本上一年只在寒假的時候回家一次,暑假一般都留在學校勤工儉學。可以說,這個過程很大程度培養了他去探索和敢於吃苦的精神。


大學時候,張建飛有兩個興趣愛好,一個是英語,一個是打籃球。英語對編程的幫助主要還是在看書和看資料方面,打籃球也讓他擁有健康的體魄。在建飛看來,人生是一場持久戰,健康是1,其它都是0。更何況編程要學的東西非常多,沒有一個好身體打持久戰可不行。


人生每個轉折點都是一種選擇,工作讓我更成熟


2007年計算機工程碩士畢業後,張建飛先後在軟體公司InfoSys與網際網路公司eBay擔任高級研發和技術專家的職務。2007年到2010年是高級研發工程師,2010年到2014年是技術專家。這段工作經歷最大的成長是在eBay學會了大型分布式系統的技術體系。


2014年,他加入阿里巴巴,先後在1688、ICBU和零售通擔任技術主管。他非常認同阿里的文化和價值觀,比如「客戶第一,員工第二,股東第三」,就是一種利他文化,當我們越多地幫助他人成功的時候,自己才會成功。再比如「唯一不變的是變化」,阿里強調擁抱變化,他也非常認可。這兩個價值觀促使建飛不斷學習、不斷成長。


建飛在阿里工作最大的轉折點發生在2015年年底,也就是加入阿里半年後。因為自己自小就不是一個太自信的人,而且還很敏感,非常在意別人的眼光和看法,所以在入職阿里之後,張建飛想要快速地去證明自己,這種「求功心切」的想法無形中給了他巨大的壓力。在這種壓力和焦慮之下,工作也很難做好,工作做不好又會更加焦慮,形成了惡性循環。最嚴重的時候,他連續失眠兩個星期。


使得張建飛狀態逐漸調整好的方式是看書。這個階段對他影響最大的有兩本書,一本是《成長型思維》,另一本是《活出生命的意義》。


《成長型思維》教會了他要用發展的眼光看自己,焦慮不能改變現狀,而持續學習、提升自己可以。《活出生命的意義》教會他生命的潛能是無限的,即使在最糟糕的境地,我們也有選擇的自由。這之後張建飛逐漸放平了心態,平復了思緒,該學習學習,該運動運動,該努力努力,該度假度假,不再那麼敏感,也不再那麼在乎別人的眼光,這才有了後面的COLA,有了《代碼精進之路:從碼農到工匠》。


2018年的時候,建飛帶領團隊在部門的代碼大賽上拿到了第一名。當時的獎勵是和集團副總裁玄難共進晚餐。在晚餐會上,玄難同他們聊了很多有關自己的心得,這對張建飛有很大的激發。張建飛向玄難表達了想寫一本書的想法,玄難表示很支持,還答應給書寫序。
後面,每當在工作中遇到問題,玄難也會像朋友一樣給張建飛指點,給了他很多的力量。


好奇心給我熱情,寫代碼是一直探索到老的事情


對張建飛而言,當初選擇了計算機專業並不是沒有後悔過,選計算機專業沒有別的,就是因為計算機是當時的熱門專業,但其實他一度認為自己不適合編程。直到大學畢業那年,他也沒有寫過幾行代碼,還好學校的計算機課程大部分是不用編程的,否則建飛認為自己甚至會很難畢業。後來讀了研究生,研究生的前半部分生活簡直就是大學的延續,上課、寢室、球場、英語角……直到開始做一些小項目,才開始了張建飛真正的編程人生。


他是一個典型的慢熱型程式設計師,雖然很慢熱,但他一直沒有放棄學習,沒有放棄得的更好。建飛不相信什麼「35歲之後做不了程式設計師」之類的話,他認為我們就是要活到老,學到老。寫好代碼不是一件容易的事,唯有不停地學習,不停地探索,向國外的編程大師們看齊,保持精進,才有可能把這件事做得更好。


好奇心對建飛職業的影響是他一直在探索如何寫好代碼。從開始工作的第一天起,就有這個想法,不過受限於當時的技術能力和經驗,一直沒有找到很好的方法。直到《代碼精進之路:從碼農到工匠》的出版,才算是找到一些門路。但他知道,這只是開始,未來的路還很長,自己會繼續保持好奇,繼續探索。

張建飛的偶像是維克多·弗蘭克爾博士,正是他讓自己看到人類如何在最惡劣的環境下仍然可以發出人性的光輝。反觀自己,我們受的這點苦,根本就不值得一提。維克多·弗蘭克爾博士說過:「人越是忘記自己——投身於某種事業或獻身於所愛的人——他就越有人性,越能實現自己的價值。所謂自我實現,絕不是指某種可以實現的目標,因為人越是追求這個目標,越是容易失去。自我實現是自我超越唯一的副產品。」這些都給了建飛很大的啟迪。

說到研發COLA(全稱是Clean Object-Oriented Layered Architecture)的初衷,建飛覺得在做了多年業務技術開發之後,他發現「日子再也不能這麼過」,為什麼所有的業務代碼都這麼混亂,這麼複雜?解決複雜度就是他研發COLA的初衷。


COLA的優點是它給那些想實踐DDD、想寫好業務代碼的同學提供了一個可以落地的框架,可以減少他們的學習成本和探索路徑。COLA對行業的最大貢獻是讓DDD從一個形而上的思想,變成一個可以看得見、摸得著的代碼框架。同時其擴展點的設計是繼承之阿里中台的擴展設計,對於那些想要通過一套代碼支持多個業務,或者多個租戶的場景也能提供幫助。


創作《代碼精進之路》的初衷,寫出更好的代碼


2018年7月,張建飛在阿里巴巴內部的技術博客ATA發表了一篇文章《技術人自己的KPI》,表達了對技術團隊越來越沒有「技術味道」的擔憂,以及技術團隊除了業務項目之外,還應該有屬於自己的KPI,而不是完全和業務的KPI綁定。讓業務先贏應該是底線,而不是全部。文章中還提到,程式設計師要有工匠精神,並鼓勵大家通過學習、實踐、分享不斷提升編碼能力和設計能力。用工匠精神寫每一行代碼,而不是簡單地通過代碼堆砌實現業務功能來交差。


該文章在阿里巴巴內部和外部(在公眾號「阿里技術」上也有發表)引起了不小的反響,道出了很多一線工程師和技術Leader的心聲。大家紛紛表示技術味道的缺失不利於工程師自己的成長,從長遠來看,也不利於公司的發展。我們需要做出改變,需要一種追求卓越的工匠精神。


基於這個出發點,建飛提出了一套對技術人員技術工作進行量化的指標,並通過「工匠平台」這個產品進行落地。「工匠平台」會收集這些技術指標,並對其進行評分和統計,從而提供一個更加全面的技術人員畫像,更加客觀地反映技術人員的技術貢獻。


張建飛很多次在思考,在軟體的世界裡,到底有沒有優雅的代碼和整潔的架構呢?他想還是有的,但是更準確地說是:有優雅代碼和整潔架構,但是沒有一成不變的優雅代碼和整潔架構。在軟體的世界裡,一定要學會變通,不能教條。


就是這樣的,我們學會規則的目的是為了知道在什麼時候打破規則。不是說你使用了COLA,就一定要遵守COLA的條條框框。不是的,你完全可以變通,可以發展,可以嘗試不一樣的做法。只要這種做法在你的語境下是合理的,就可以去做。

張建飛說,他有一個夢想,他寫的代碼,可以像詩一樣優美;他做的設計,能恰到好處,既不過度,也無不足。他認為工程師最大的美德就是寫出讓人可以看懂的代碼。

編後語:張建飛說過,他最希望將《代碼精進之路》推薦給職場新人看,因為如果在你初入職場的時候,就有一個人教你怎麼寫好代碼,那一定是一件很幸運的事情。


「種一棵樹最好的時間是在十年前,其次是現在」。我不相信什麼「35歲做不了程式設計師」,也不相信什麼「年紀大了,精力不夠」。我只知道有些人在持續學習,有些人過早地享受安逸。


願你在新的一年可以快樂,也能有所收穫。


《代碼精進之路:從碼農到工匠》

張建飛

本書是一本專門為專業程式設計師而寫的書,主線是介紹如何化解代碼複雜度,幫助程式設計師寫出可讀性好、可維護性好的代碼。


本書共有13章內容,主要分為技藝部分、思想部分和實踐部分。技藝部分詳細介紹了編程技巧和方法論,並配以詳盡的代碼案例,有助於讀者提高編寫代碼的能力,優化代碼質量。思想部分主要包括抽象能力、分治思想,以及程式設計師應該具備的素養等內容。實踐部分主要介紹了常見的應用架構模式,以及COLA架構的設計原理。


- END-

關鍵字: