在大淘寶技術(shù),前端、后端、算法工程師的日常是什么樣的?
算法工程師的思考、寫代碼的時(shí)間是怎么分配的?前端工程師每天都在干什么呢?后端工程師衡量工作的重要指標(biāo)是什么,給誰提供服務(wù)?
我們邀請(qǐng)了算法、前端、后端三位工程師,來看看他們的工作日常。
01推薦算法工程師的日常
閱謙
大家好,我是來自大淘寶技術(shù)的一名推薦算法工程師。下面以我電腦記錄的App使用時(shí)間為線索簡單分享一個(gè)算法工程師的日?!?/p>
1. Chrome
Chrome是占用時(shí)間最多的App,日常工作中有絕大部分的任務(wù)是通過瀏覽器完成的,主要包含以下4個(gè)方面:
查看業(yè)務(wù)數(shù)據(jù)報(bào)表
每天到公司,我的第一件事情就是查看最新業(yè)務(wù)數(shù)據(jù)報(bào)表,這包括大盤的數(shù)據(jù)、AB的數(shù)據(jù)和各個(gè)細(xì)分維度的數(shù)據(jù)。了解最新數(shù)據(jù)情況可以指導(dǎo)我們下一步工作的展開。算法的優(yōu)化是一個(gè)不斷迭代試錯(cuò)的過程,及時(shí)獲得反饋并進(jìn)行調(diào)整是非常重要的一環(huán)。
進(jìn)行數(shù)據(jù)分析和建模
在機(jī)器學(xué)習(xí)領(lǐng)域,garbage in garbage out 意味著如果送給算法的數(shù)據(jù)質(zhì)量不高,那么得到的結(jié)果也不會(huì)太好。曾經(jīng)我就有過因?yàn)樵跍?zhǔn)備數(shù)據(jù)過程中不小心出現(xiàn)樣本穿越的問題,導(dǎo)致后續(xù)整個(gè)的模型訓(xùn)練得到的結(jié)果都是不可信的,后來又花了很多時(shí)間來排查問題和重新搭建數(shù)據(jù)鏈路。除了算法使用的數(shù)據(jù)外,數(shù)據(jù)分析的邏輯不合理也會(huì)引導(dǎo)我們采取錯(cuò)誤的行動(dòng),這樣的行動(dòng)很可能對(duì)業(yè)務(wù)是無效甚至是負(fù)向優(yōu)化。重視數(shù)據(jù)環(huán)節(jié)可以起到事半功倍的效果。公司一般通過DataWorks網(wǎng)頁端進(jìn)行數(shù)據(jù)處理代碼的編寫和定時(shí)調(diào)度節(jié)點(diǎn)的發(fā)布,這占用了日常工作的大部分時(shí)間。
業(yè)務(wù)方案和算法模型的部署和發(fā)布
推薦算法工程師是需要面對(duì)線上流量的,而所有的業(yè)務(wù)邏輯和算法模型從離線到在線都需要經(jīng)過一個(gè)發(fā)布的流程,通常是先灰度,再小流量,然后逐步擴(kuò)量最后全量。公司的中臺(tái)團(tuán)隊(duì)開發(fā)了諸如TPP,BE,RTP等平臺(tái),算法工程師可以聚焦于算法和業(yè)務(wù)本身,工程性的工作由平臺(tái)完成。在這些平臺(tái)的網(wǎng)頁端,我們可以快速完成業(yè)務(wù)方案和算法模型的發(fā)布工作。
學(xué)習(xí)充電
公司內(nèi)部有一個(gè)技術(shù)分享論壇,可以說是算法工程師的寶藏之地。在這里有各個(gè)業(yè)務(wù)線和不同崗位的同學(xué)分享自己的實(shí)踐經(jīng)驗(yàn)以及對(duì)前沿技術(shù)的解讀,每次逛都有很大的收獲。另外,閱讀一些領(lǐng)域相關(guān)的paper可以保持對(duì)技術(shù)的敏感性,如果發(fā)現(xiàn)不錯(cuò)的思路可以結(jié)合自己的業(yè)務(wù)場(chǎng)景進(jìn)行嘗試。最后,我還會(huì)在github等技術(shù)社區(qū)看看有沒有什么實(shí)用或者有趣的項(xiàng)目,作為技術(shù)儲(chǔ)備或直接進(jìn)行復(fù)用。我自己在業(yè)余時(shí)間也維護(hù)了一些推薦相關(guān)的開源項(xiàng)目,感興趣的朋友歡迎加入一起學(xué)習(xí)交流~https://github.com/shenweichen/DeepCTRhttps://github.com/shenweichen/DeepMatch
2. DingTalk
DingTalk就是大家熟知的釘釘,在公司里大家都是協(xié)同辦公,每一個(gè)業(yè)務(wù)模塊的迭代都涉及到諸如產(chǎn)品,運(yùn)營,開發(fā),算法等不同崗位的同學(xué)。高效的溝通交流對(duì)推動(dòng)工作前進(jìn)來說非常重要的。除了協(xié)同,日常工作中使用公司內(nèi)部工具可能會(huì)遇到一些問題,這時(shí)候也需要和相關(guān)答疑同學(xué)交流解決。我有時(shí)候也會(huì)看別人交流,在一些群看別人聊天也有收獲。
3. PyCharm
PyCharm是我常用的Python IDE,主要用來編寫各種tf的模型代碼。也許很多未工作的同學(xué)覺得算法工程師的日常就是寫模型,調(diào)模型,就我自己而言,寫模型代碼的時(shí)間相對(duì)并不多(這也得益于公司的強(qiáng)大中臺(tái)和內(nèi)部開源代碼庫)。
4. PowerPoint
團(tuán)隊(duì)內(nèi)部有分享機(jī)制,我們分為業(yè)務(wù)分享和算法分享兩大方向,截圖的這周正好是我準(zhǔn)備PPT的那周,所以花了一些時(shí)間寫PPT。除了內(nèi)部分享,在季度末,績效季末,晉升季等時(shí)間點(diǎn),也會(huì)投入一些精力去做工作總匯報(bào)的PPT。
5. Intellij IDEA
Intellij IDEA是一個(gè)java IDE。除了算法模型和數(shù)據(jù)處理外,整個(gè)推薦系統(tǒng)的鏈路從用戶請(qǐng)求到來到諸如畫像獲取,召回,排序,重排等模塊的串聯(lián)也是需要算法工程師來實(shí)現(xiàn)的。公司里一般通過編寫java代碼實(shí)現(xiàn),所以給即將入行推薦算法的同學(xué)們的建議是除了Python外再學(xué)一下java或者cpp吧!
02 前端開發(fā)工程師的日常
時(shí)川
加入阿里第 6 年,目前負(fù)責(zé)集團(tuán)內(nèi)用戶量最大的頁面搭建平臺(tái):斑馬。用戶在淘寶瀏覽各種商品活動(dòng)頁面的時(shí)候,中間有很多頁面就是通過這個(gè)平臺(tái)發(fā)布上線的。我的日常的主要工作就是圍繞淘寶的搭建服務(wù)能力建設(shè)展開。
嚴(yán)格意義上來說,我是一個(gè)“圍繞前端工作”的工程師,或許叫做“面向運(yùn)營交付前端頁面解決方案工程師”更合理一些,日常工作總的來說可以分為兩部分:
- 搭建平臺(tái)服務(wù)支持
- 產(chǎn)品建設(shè)和技術(shù)探索
1. 搭建平臺(tái)服務(wù)支持
大白話講就是答疑,解決使用平臺(tái)產(chǎn)品的技術(shù)研發(fā)同學(xué)和業(yè)務(wù)運(yùn)營同學(xué)遇到的問題,一般會(huì)基于自己負(fù)責(zé)的系統(tǒng)鏈路,或面向業(yè)務(wù)運(yùn)營,或面向技術(shù)開發(fā)。由于我負(fù)責(zé)的平臺(tái)比較特殊,這兩部分都有涉及。
面向研發(fā)的服務(wù)支持
一般從業(yè)務(wù)的技術(shù)選型階段就會(huì)開始介入,提供基于搭建體系的專業(yè)技術(shù)方案支持,包括基礎(chǔ)的前端框架方案、頁面的渲染服務(wù)(SSR、CDN等)、面向個(gè)性化場(chǎng)景的數(shù)據(jù)網(wǎng)關(guān)服務(wù)能力等,涉及的面會(huì)比較多,因此必須了解整個(gè)技術(shù)生態(tài)和服務(wù)體系。在業(yè)務(wù)技術(shù)側(cè)確認(rèn)好相關(guān)的技術(shù)方案后,就進(jìn)入了常規(guī)的前后端研發(fā)流程,這里一般只需要協(xié)助解答一些搭建域特有的技術(shù)規(guī)范問題即可,直至業(yè)務(wù)正式發(fā)布上線。后續(xù)研發(fā)側(cè)基本上就進(jìn)入了一個(gè)業(yè)務(wù)自運(yùn)營的階段,在平臺(tái)能力和業(yè)務(wù)需求場(chǎng)景沒有太大變化的情況下,我們很少需要長時(shí)間的持續(xù)投入的場(chǎng)景。
運(yùn)營服務(wù)支持
對(duì)于運(yùn)營的服務(wù)支持,除去一些基礎(chǔ)的功能指引,更多的是業(yè)務(wù)實(shí)際需求場(chǎng)景的問題。這部分對(duì)于技術(shù)研發(fā)來說還是比較有挑戰(zhàn)的,因?yàn)榧夹g(shù)同學(xué)的邏輯思維慣性比較大,非常容易把業(yè)務(wù)的需求過度技術(shù)化,面向運(yùn)營的服務(wù),需要切換到一個(gè)完全不同的視角,去消化理解用戶的實(shí)際訴求,從產(chǎn)品流程層面給到對(duì)應(yīng)的支持。同時(shí)收集相關(guān)的信息,最終再反饋到后續(xù)的產(chǎn)品建設(shè)中。
2. 產(chǎn)品建設(shè)和技術(shù)探索
作為一個(gè)平臺(tái)的產(chǎn)品、技術(shù)負(fù)責(zé)人,從產(chǎn)品的整體發(fā)展規(guī)劃,到面向內(nèi)部運(yùn)營的搭建平臺(tái)研發(fā)、面向終端用戶的基礎(chǔ)渲染方案架構(gòu)都需要參與,真·全(?。#ㄥX)工程師無疑了。
- 產(chǎn)品規(guī)劃及演進(jìn)?;谟脩魳I(yè)務(wù)場(chǎng)景和需求,不斷演進(jìn)搭建服務(wù)的能力,讓平臺(tái)上的業(yè)務(wù)能夠更快的交付上線,同時(shí)作為淘寶搭建服務(wù)的重要組成部分,斑馬也是搭建基礎(chǔ)服務(wù)和上層業(yè)務(wù)的橋梁,這期間會(huì)持續(xù)把業(yè)務(wù)能力做剝離和抽象,推動(dòng)底層的基礎(chǔ)搭建服務(wù)能力進(jìn)行迭代。大白話翻譯就是:我兼職 PD~。當(dāng)然整個(gè)項(xiàng)目組的同學(xué)都會(huì)參與到這項(xiàng)工作中來,因?yàn)槎际乔岸司€的技術(shù)研發(fā),我們建立了一套基礎(chǔ)的產(chǎn)品方案評(píng)審流程,從基礎(chǔ)的技術(shù)方案實(shí)現(xiàn),到產(chǎn)品交互流程優(yōu)化,按照雙周的節(jié)奏進(jìn)行評(píng)審、研發(fā)、發(fā)布。
- 運(yùn)營端平臺(tái)的架構(gòu)和研發(fā)。這部分工作占據(jù)了我大部分時(shí)間,也比較繁雜,因?yàn)橐嫦虮姸鄻I(yè)務(wù),需要確保平臺(tái)的架構(gòu)足夠輕巧,不被業(yè)務(wù)侵入的同時(shí)具備足夠的靈活性和擴(kuò)展性??偨Y(jié)幾個(gè)關(guān)鍵詞:Node.js / Midway / Fusion / 飛冰,基本上涵蓋整個(gè)平臺(tái)的技術(shù)棧,這些多是一些軟件工程的基礎(chǔ)實(shí)踐,這里不再贅述。
- 消費(fèi)者端渲染方案探索。這是一個(gè)技術(shù)側(cè)比較純粹但是關(guān)聯(lián)鏈路比較多的部分。核心目標(biāo)是讓終端用戶更快地訪問到頁面,目前主要是和大促會(huì)場(chǎng)的同學(xué)共建,將雙十一等大促活動(dòng)中通過考驗(yàn)的極致方案通用化,覆蓋到更多的業(yè)務(wù),關(guān)鍵詞:Rax / Weex (沒錯(cuò)) / FaaS / EdgeRoutine / CDN
3. 除了工作還有什么?
- 肝原神。每天中飯時(shí)間我都會(huì)先擼半小時(shí)打個(gè)日常再去食堂,錯(cuò)峰吃飯還能打個(gè)折,精致省錢大佬無疑了(話說最近好不容易攢了 8000 原石想抽個(gè)凌華結(jié)果歪成了琴團(tuán)長,還有救么=。=);
- 奶娃。工作日會(huì)爭取在 6 點(diǎn)左右下班回家,常規(guī)陪玩陪練(我不會(huì)告訴你我家學(xué)的二胡,每次開練都怕樓上樓下的鄰居打進(jìn)來),雙休日條件允許的話一般會(huì)周邊一日游(家住杭州但是基本不去西湖那種),比較喜歡去野外探索,不僅環(huán)境好,還人少,小朋友們也能更多接觸大自然;
- 折騰魚缸。幾年前迷上草缸,后來又添置一個(gè)原生缸,雖然缸都不大,偶爾坐在草缸前面看水草冒泡泡其實(shí)挺解壓的,家里小朋友也喜歡缸里的小魚小蝦,放個(gè)照片吧;
03 后端工程師的日常
松香
作為一名阿里巴巴普通java開發(fā)工作者,從工作模塊和職責(zé)的角度,給大家分享一下我的具體工作范圍,并從個(gè)人經(jīng)驗(yàn)角度給新人一些建議。在阿里巴巴,像我這樣的一個(gè)普通java開發(fā)工作者的工作時(shí)間普遍是早上9點(diǎn)到晚上8點(diǎn)。具體工作內(nèi)容可以分為開發(fā),運(yùn)維,答疑,每一項(xiàng)工作的時(shí)間占比對(duì)于不同崗位職責(zé)的同學(xué)比例也有所區(qū)別。在一個(gè)成熟的中間件或運(yùn)維團(tuán)隊(duì),答疑運(yùn)維的時(shí)間和工作量更多;而在一個(gè)初創(chuàng)的剛起步的團(tuán)隊(duì),開發(fā)的工作量會(huì)更多。我的具體工作內(nèi)容如下——
1. 開發(fā)工作
廣義的開發(fā)工作的內(nèi)容非常復(fù)雜,涵蓋的范圍也非常廣,從最基礎(chǔ)的開會(huì)討論環(huán)節(jié)(例如需求評(píng)審或設(shè)計(jì)評(píng)審)到狹義的開發(fā)環(huán)節(jié)即代碼Coding實(shí)現(xiàn)到測(cè)試和上線都是屬于開發(fā)工作的一部分,詳細(xì)來說開發(fā)工作包含了如下內(nèi)容:
2. 需求評(píng)審
在項(xiàng)目中,需求分析是最開始的工作,同時(shí)也是最重要的工作。在這一步驟中,開發(fā)人員需要和產(chǎn)品經(jīng)理,測(cè)試等人員就項(xiàng)目目標(biāo)、需求理解、系統(tǒng)原型、術(shù)語定義等達(dá)成一致。
3. 系統(tǒng)設(shè)計(jì)
在理解項(xiàng)目的目標(biāo)之后就可以開始做系統(tǒng)設(shè)計(jì),其中包含了技術(shù)選型(項(xiàng)目使用什么語言,使用什么框架,數(shù)據(jù)持久化選用sql/nosql,數(shù)據(jù)庫又該選用什么),模塊拆分(大到網(wǎng)關(guān)/入口/功能/基礎(chǔ)設(shè)施的架構(gòu)分層設(shè)計(jì),小到具體功能間的耦合拆分設(shè)計(jì)),細(xì)節(jié)設(shè)計(jì)(通過諸如時(shí)序圖,類圖等描述某個(gè)功能或者設(shè)計(jì)的關(guān)系與流程,定義交互協(xié)議的數(shù)據(jù)格式),設(shè)計(jì)評(píng)審(通過團(tuán)隊(duì)內(nèi)外評(píng)審的方式查缺補(bǔ)漏看看設(shè)計(jì)是否有錯(cuò)誤或者是不恰當(dāng)?shù)牡胤?。這一步在整體開發(fā)工作中有著至關(guān)重要的作用,一個(gè)好的系統(tǒng)設(shè)計(jì)可以非常有效地減少編寫代碼時(shí)的思考和工作量。
4. 代碼實(shí)現(xiàn)
在完成系統(tǒng)或者是方案設(shè)計(jì)后,就可以按照預(yù)先定義的流程進(jìn)行代碼編寫和實(shí)現(xiàn),在完成編寫后需要邀請(qǐng)1位以上同學(xué)進(jìn)行CodeReview評(píng)審代碼的質(zhì)量與邏輯的完備性。
5. 測(cè)試回歸
對(duì)于開發(fā)人員來說,測(cè)試主要是代碼層面和功能實(shí)現(xiàn)層面的測(cè)試,前者主要是編寫unit test單元測(cè)試以方法或者類的維度驗(yàn)證代碼的正確性,后者是功能編寫完畢后進(jìn)行全鏈路的測(cè)試從入口開始編造流量看整體效果是否和預(yù)期一致,通常這步也需要專業(yè)的測(cè)試人員介入,在出現(xiàn)異常問題時(shí),需要進(jìn)行debug和問題修復(fù)。
6. 功能上線
任何一個(gè)功能或系統(tǒng)上線都是復(fù)雜的,引入流量前需要配置關(guān)鍵業(yè)務(wù)節(jié)點(diǎn)上的監(jiān)控,發(fā)布過程中最開始先beta灰度并進(jìn)行功能驗(yàn)證,確認(rèn)功能正常,指標(biāo)監(jiān)控平穩(wěn)后可以開始作分批發(fā)布(如果是大規(guī)模的系統(tǒng)集群),在發(fā)布過程中與完成后需要實(shí)時(shí)緊盯監(jiān)控指標(biāo)以防止出現(xiàn)線上問題。
7. 效果驗(yàn)證
項(xiàng)目上線后就可以通過服務(wù)端的埋點(diǎn)日志數(shù)據(jù)進(jìn)行篩選統(tǒng)計(jì),查看上線后整體功能是否滿足預(yù)期的目標(biāo)。
8. 文檔記錄
寫文檔是一個(gè)開發(fā)人員工作的本職工作,上述的每一個(gè)開發(fā)步驟都應(yīng)該在項(xiàng)目文檔或者是系統(tǒng)文檔中予以記錄。
9. 運(yùn)維工作
運(yùn)維工作包括日常運(yùn)維,包括系統(tǒng)容器的狀態(tài)的管理(重啟/置換/擴(kuò)容/縮容),大促運(yùn)維(預(yù)算申報(bào),預(yù)案管理與演練,重保節(jié)點(diǎn)配置等)以我本人為例,我負(fù)責(zé)的是淘寶直播互動(dòng)消息擴(kuò)散架構(gòu),在每次大促活動(dòng)或者是頭部主播搞大活動(dòng),都需要作直播間相關(guān)信息的提前配置與準(zhǔn)備,確認(rèn)容器狀態(tài)都正常,這些都是系統(tǒng)運(yùn)維相關(guān)的工作。
10. 答疑工作
每個(gè)人負(fù)責(zé)的系統(tǒng)應(yīng)該都只是一個(gè)系統(tǒng)鏈路的一部分,這種時(shí)候?qū)τ谀愕臉I(yè)務(wù)方就需要提供答疑工作: 幫助完成系統(tǒng)接入,幫助排查問題,解答功能細(xì)節(jié)等等,現(xiàn)在在阿里巴巴內(nèi)部這部分工作逐漸轉(zhuǎn)為由自動(dòng)化答疑和排查工具來完成,但免不了出現(xiàn)疑難雜癥需要開發(fā)人員介入解決。
11. 工作外的充電
阿里巴巴內(nèi)部有一個(gè)技術(shù)分享論壇,在其中能看到各種系統(tǒng)設(shè)計(jì)介紹,疑難問題的排查亦或者是思維方法論等等,我們?cè)陂e暇時(shí)間都會(huì)在論壇上學(xué)習(xí)他人的分享,踩坑記錄或者是成功經(jīng)驗(yàn)。我們團(tuán)隊(duì)內(nèi)部也經(jīng)常會(huì)有技術(shù)分享和文章書籍介紹,例如《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》《重構(gòu)》《Designing Data-Intensive Application》等等,這些必要的充電對(duì)于個(gè)人能力的提升也是非常巨大的。
12. 對(duì)新人的建議
一般情況下,團(tuán)隊(duì)內(nèi)來了新人后會(huì)有一段時(shí)間來適應(yīng)工作環(huán)境和內(nèi)容,團(tuán)隊(duì)也會(huì)給新人配備一個(gè)mentor的角色(阿里巴巴則稱之為”師兄“)來負(fù)責(zé)入職后的適應(yīng)階段。新人做的第一件事情就是熟悉環(huán)境,包括同事間的相處風(fēng)格、公司技術(shù)棧、中間件等等。在適應(yīng)完成后一般主管會(huì)給你分配一些簡單的任務(wù)比如一個(gè)模塊功能的實(shí)現(xiàn),新人就需要通過這樣一個(gè)任務(wù)去落地,包括功能效果的實(shí)現(xiàn),團(tuán)隊(duì)和上下游業(yè)務(wù)的熟悉了解等等。最后給新人的一些建議就是要在工作中要多溝通交流,剛?cè)肼毜臅r(shí)候?qū)φw的業(yè)務(wù)和技術(shù)棧甚至包括自己擔(dān)任的職責(zé)和負(fù)責(zé)的范圍等等都會(huì)有疑惑,這是非常正常的一件事情。這種時(shí)候多和主管或者是mentor作溝通交流不斷明確你的工作的目標(biāo)和當(dāng)前的進(jìn)度情況,這樣新人落地也會(huì)更加順利一點(diǎn)。有時(shí)候新人在技術(shù)實(shí)現(xiàn)上會(huì)遇到困難,這種時(shí)候除了需要靠自己多思考學(xué)習(xí)外同樣需要多和同事討論,向資深員工學(xué)習(xí)請(qǐng)教也會(huì)讓你工作更加順利。
工程師的工作日常,沒有那么多的轟轟烈烈,大多時(shí)候是日拱一卒,反復(fù)且平淡。因?yàn)閾碛心繕?biāo),擁有方向,所以只需保持認(rèn)真與專注,然后心無旁騖,一往無前。