摘要:
墨玦,阿里巴巴 iDST 高級(jí)技術(shù)專家。博士畢業(yè)于北京郵電大學(xué),計(jì)算機(jī)應(yīng)用專業(yè),目前主要從事語音技術(shù)工程化方面的研發(fā)?;仡櫾诎⒗锏娜陼r(shí)光,他感慨良多,寫下了這篇總結(jié),與大家共勉。
博士畢業(yè)工作以來,最大的樂趣就是學(xué)習(xí)和深入思考。所以,從來不以工作過程中項(xiàng)目或者業(yè)務(wù)的簡單或者復(fù)雜而困惑。對自身的發(fā)展,我一直有一個(gè)明確的指導(dǎo)方針:一步一個(gè)腳印,提升自己解決問題的能力,不給自己設(shè)限。我大概在10年前面試一個(gè)40歲的大叔的時(shí)候,就認(rèn)真地思考過,結(jié)論是:我喜歡寫代碼,我會(huì)為此堅(jiān)持一輩子。
一、既然這個(gè)項(xiàng)目這么重要,我們就干吧
回歸正題,總結(jié)一下在阿里最近3年的工作。前兩年,我主要在御膳房數(shù)據(jù)引擎團(tuán)隊(duì)做豬頭小隊(duì)長,聊兩個(gè)重點(diǎn)經(jīng)歷的項(xiàng)目。
第一個(gè)就是5k+,一個(gè)通用大數(shù)據(jù)平臺(tái)。剛?cè)ヒ粋€(gè)月就趕上這個(gè)集合京杭兩地的大項(xiàng)目,確實(shí)蠻幸運(yùn)的。在這個(gè)項(xiàng)目中印象深刻的有幾個(gè)地方吧,一個(gè)是立項(xiàng)的時(shí)候參與方案的討論,因?yàn)樯婕熬┖純傻?、跨部門、跨團(tuán)隊(duì)的溝通,各個(gè)團(tuán)隊(duì)的老大難免在一起相愛相殺,我們一幫小弟在旁邊參與討論。一直相殺到凌晨的時(shí)候,在自由發(fā)言的階段,我實(shí)在忍不住,跳出來說:既然這個(gè)項(xiàng)目這么重要,我覺得我們就干吧。真的是仗著自己在創(chuàng)業(yè)公司積累的銳氣跳出來說這一句。我覺得大不了就是拼啦。
我說完就意識(shí)到這可能給自己的老大帶來了巨大的麻煩。很幸運(yùn)我老大也早就扯煩了,站出來承擔(dān)責(zé)任,一時(shí)間各個(gè)老大分別出人出槍,一時(shí)間群情激奮。最后的責(zé)權(quán)分配在20分鐘內(nèi)就完成了,甚至一位老阿里都哭了。
感謝那一晚上的感覺,也感謝阿里給我一幫很棒的隊(duì)友和老大。永遠(yuǎn)記得,后面996兩個(gè)月,在京杭兩地互換出差的過程中,我負(fù)責(zé)兩個(gè)小模塊的項(xiàng)目管理,我發(fā)揮自己解決問題快的能力,哪里有窟窿我就去哪里堵,當(dāng)然,整個(gè)團(tuán)隊(duì)的人都非常強(qiáng)大也非常努力。在最后項(xiàng)目結(jié)束評(píng)獎(jiǎng)的時(shí)候,我拿了個(gè)最佳救火隊(duì)員獎(jiǎng),我真喜歡這個(gè)獎(jiǎng)。
雖然我也是項(xiàng)目的PMO之一,但是除了打醬油,更多的是觀摩和學(xué)習(xí)阿里的項(xiàng)目管理和組織協(xié)調(diào)。這個(gè)項(xiàng)目真的很難,做的過程中經(jīng)歷了各種妥協(xié),項(xiàng)目完工后我們又?jǐn)鄶嗬m(xù)續(xù)還了一年的技術(shù)債,但是當(dāng)時(shí)那種拼搏自己和燃燒自己成就BIG ONE的感覺,再難重現(xiàn)。后來也跟一些其他公司的同學(xué)溝通關(guān)于數(shù)據(jù)平臺(tái)構(gòu)建的事情,發(fā)現(xiàn)我們真的走得很遠(yuǎn)。因?yàn)槭菍懽约旱母惺埽筒槐頁P(yáng)其他同學(xué)了,要不然寫一本書都可以啦。
二、這不是我一個(gè)人的工作,只是努力使它變得完美
第二個(gè)項(xiàng)目也帶有我自己的強(qiáng)烈特色,我們一直被業(yè)務(wù)壓得很緊。但是對于引擎層研發(fā)來說,團(tuán)隊(duì)成員也有自己的訴求,而且,系統(tǒng)要逐步完善和改進(jìn)。在5K+項(xiàng)目完成后,我們依賴的一個(gè)重要模塊開始頻繁出現(xiàn)問題,隨著團(tuán)隊(duì)間溝通的深入,我們發(fā)現(xiàn)對方團(tuán)隊(duì)的不穩(wěn)定和發(fā)展方向不確定導(dǎo)致這個(gè)模塊未來風(fēng)險(xiǎn)非常高。
我們首先想到的是部署一套新的作為過渡。在過渡階段,為了完成業(yè)務(wù)的同時(shí)來做這件事,我把團(tuán)隊(duì)兩位同學(xué)的一部分業(yè)務(wù)工作承接過來,騰出人力開始做這件事。兩位同學(xué)遠(yuǎn)赴杭州,出差一個(gè)月,把平臺(tái)基本接過來,保障了我們業(yè)務(wù)的平穩(wěn)運(yùn)行。
隨后,我們調(diào)研后果斷拋棄了這個(gè)模塊的原有實(shí)現(xiàn),調(diào)集團(tuán)隊(duì)的技術(shù)力量重新規(guī)劃設(shè)計(jì)新的模塊,除了替換,更重要的是為了發(fā)展。這一步走出后發(fā)現(xiàn)后面很多東西都活了,數(shù)據(jù)服務(wù)開始作為一個(gè)重要的點(diǎn)慢慢從整個(gè)平臺(tái)浮現(xiàn)出來,與數(shù)據(jù)團(tuán)隊(duì)產(chǎn)生更深度的互動(dòng),進(jìn)而隨著原數(shù)據(jù)服務(wù)的不穩(wěn)定,催生了新的數(shù)據(jù)服務(wù)平臺(tái)。
這不是我一個(gè)人的工作,我只是努力使它變得完美。當(dāng)初萬分糾結(jié),每一步都步步驚心,現(xiàn)在相信每個(gè)參與這個(gè)項(xiàng)目的同學(xué),心里都是美好的回憶。而且,我們不僅通過這個(gè)項(xiàng)目成就了自己,更成就了兄弟團(tuán)隊(duì),成就了御膳房的發(fā)展。說大了。
三、技術(shù)挑戰(zhàn)是獵物,是機(jī)會(huì),是戰(zhàn)功
在這三年里,我不認(rèn)為自己遇到了很大的技術(shù)挑戰(zhàn),很多事情提前想到,組織技術(shù)專家提前討論,當(dāng)和團(tuán)隊(duì)在一起的時(shí)候,技術(shù)挑戰(zhàn)是獵物,是機(jī)會(huì),是戰(zhàn)功。
舉一個(gè)簡單的例子來說明我做一個(gè)項(xiàng)目的過程,例如:我們要實(shí)現(xiàn)一個(gè)限流的服務(wù),就是允許一個(gè)租戶的QPS最高多少。首先需要界定問題的邊界,包括:要不要考慮網(wǎng)絡(luò)層攻擊(可能被其他模塊處理掉)、未來一段時(shí)間業(yè)務(wù)的規(guī)模,系統(tǒng)穩(wěn)定性、架構(gòu)擴(kuò)展性等。
這些問題確定后,會(huì)有一系列的技術(shù)方案成為技術(shù)選型,那么如何判斷采用什么技術(shù)方案,當(dāng)時(shí)不是最新最酷的最好的,要考慮將來部署環(huán)境,上下游環(huán)境。最重要的這是一個(gè)分布式需求。簡單來說,N臺(tái)服務(wù)器共同維護(hù)一個(gè)QPS值,這后面的分布式理論,樸素來說就是CAP,在CAP三者不能同時(shí)滿足的情況下,應(yīng)該降低那個(gè)并保證業(yè)務(wù)的目標(biāo)。
為此,我們參考分布式的BASE模型,降低了一致性的需求,采用分區(qū)和主體配額池結(jié)合的思路解決了大租戶的流量控制,而針對長尾租戶采用了另一套控制來保證精確限流。
同時(shí)考慮第三方模塊和非關(guān)鍵模塊掛掉或者降級(jí)中的應(yīng)急預(yù)案,以及模塊部分宕機(jī)或者機(jī)房斷電導(dǎo)致的服務(wù)不可用,以及某些服務(wù)的單點(diǎn)問題等而設(shè)計(jì)完整的穩(wěn)定性方案。當(dāng)然,最后還要考慮擴(kuò)展性方案,如果需求規(guī)模突然變大,但是整體是有邊界的。
總結(jié)起來,整個(gè)項(xiàng)目要有明確的目標(biāo)和階段以及對應(yīng)的關(guān)鍵指標(biāo),做到可觀測、可評(píng)估、可擴(kuò)展、可恢復(fù)、以及容易交付給其他人繼續(xù)研發(fā)和維護(hù)。我不認(rèn)為自己做得很好,但是當(dāng)逐步完善一個(gè)系統(tǒng)時(shí),真的蠻快樂的。
四、我不認(rèn)為做到35歲轉(zhuǎn)管理是必要的
現(xiàn)在細(xì)想起來,在我的成長道路上,給我提供技術(shù)指導(dǎo)的大牛真的很少,更多的時(shí)候,我更喜歡向任何一個(gè)我遇到的人學(xué)習(xí),我學(xué)習(xí)的目的不是超越別人,而是超越自己。
轉(zhuǎn)崗到iDST團(tuán)隊(duì)后,我坐在iDST老大的旁邊,有幸耳濡目染研發(fā)和管理達(dá)人的工作,受益匪淺。我一直覺得,程序員沒有人能教會(huì),要的是自己的鉆研和用心的學(xué)習(xí)。包括我原來御膳房團(tuán)隊(duì)的同學(xué)和現(xiàn)在iDST的同學(xué),在合作和交流中,總能發(fā)現(xiàn)那些令你眼前一亮的優(yōu)點(diǎn)和閃光點(diǎn),這如何不欣喜?
另外,我覺得保持持續(xù)的思考和以開放的態(tài)度與其他同學(xué)溝通非常重要,互通有無。我覺得我目前最大的技術(shù)優(yōu)勢可能還是在工程領(lǐng)域,主要是服務(wù)器后端研發(fā)以及數(shù)據(jù)平臺(tái)建設(shè)這邊,主要是思考和經(jīng)驗(yàn)比較多。我會(huì)在理論和實(shí)踐兩個(gè)方面繼續(xù)增強(qiáng)自己的能力。與此同時(shí),我一直在儲(chǔ)備自己在人工智能方面的知識(shí)。得益于我博士論文期間在信息檢索方向的深入思考,我很早就發(fā)現(xiàn)了這個(gè)能讓我著迷的領(lǐng)域。
這里稍微聊兩句人工智能領(lǐng)域,雖然一些人說這里面也就是所謂的調(diào)參、特征工程、訓(xùn)練深度網(wǎng)絡(luò)等。這些真的是門外漢才會(huì)這么說。真正里面需要的是理性的思維,解決這種沒有明確的路徑可尋的問題需要非常深入的思考、嘗試,經(jīng)歷無數(shù)次失敗可能有一點(diǎn)小收獲,然后還要把這種小收獲用最精準(zhǔn)的數(shù)學(xué)語言闡述出來,為后續(xù)的研發(fā)鋪平道路。
目前我剛剛讀完NLP領(lǐng)域的一本綜述——《統(tǒng)計(jì)自然語言處理》,正在重新構(gòu)建自己的概率論和統(tǒng)計(jì)學(xué)的知識(shí)體系,盡量做到基本的概念信手拈來,然后找一個(gè)小的領(lǐng)域進(jìn)行深入的思考和嘗試。對于我來說,找一個(gè)點(diǎn)建立一個(gè)模型,改改參數(shù)出一篇論文的誘惑不大,我希望能夠研究前人的研究成果,在理論深度有一定的突破。
在這個(gè)領(lǐng)域,那些談35歲就轉(zhuǎn)管理的程序員可能根本就無法明白。當(dāng)遇到一個(gè)可以持續(xù)投入精力去鉆研,并且越鉆研覺得越難的事情的時(shí)候,對于我來說,何其幸運(yùn)。更何況,我不認(rèn)為做到35歲轉(zhuǎn)管理是必要的。管理并不好做,很多人以為管理就是分配工作,技術(shù)人員都是心高氣傲之輩,能力低的根本領(lǐng)導(dǎo)不了,只能領(lǐng)導(dǎo)能力更低的。而且真正的管理和寫代碼一樣,也是一門學(xué)問,一門理論與實(shí)踐相結(jié)合,需要邊探索邊實(shí)踐的學(xué)問。人家讓你領(lǐng)導(dǎo),是把自己的發(fā)展托付到你的手里,所以是更重的責(zé)任。from 朋友虞老板拍攝,當(dāng)我們吟誦春風(fēng)不度玉門關(guān)的時(shí)候,玉門關(guān)其實(shí)是這個(gè)小土坑了。所以要辯證思考那些流傳的話,比如35歲前必須轉(zhuǎn)管理。
我主要利用上下班路上的時(shí)間來做機(jī)器學(xué)習(xí)的鉆研,每天大概3個(gè)鐘頭左右,上班時(shí)間主要還是寫業(yè)務(wù)代碼,我熱愛寫碼,調(diào)通一個(gè)功能的感覺真爽!最后想說的是,在阿里,一樣經(jīng)歷繁華,經(jīng)歷迷茫,經(jīng)歷失落甚至冷落,最重要的是守住自己的技術(shù)之心,與大家共勉。PS:下面給大家分享一份成為高級(jí)工程師學(xué)習(xí)路線,如果想學(xué)習(xí)Java工程化、高性能及分布式、深入淺出。性能調(diào)優(yōu)、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java進(jìn)階群:288351179 ,群里有阿里大牛直播講解技術(shù),以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。