第二天早上,韓路一醒來(lái)第一件事就是打開電腦,重新點(diǎn)開了那條外包需求。
昨晚他沒(méi)做決定,睡了一覺(jué),已經(jīng)想清楚了。
需求頁(yè)面上附著的技術(shù)概要只有三頁(yè),做了脫敏處理,去掉了公司名和項(xiàng)目名,但對(duì)韓路一來(lái)說(shuō)跟沒(méi)脫一樣。
每一段描述他都能對(duì)應(yīng)到具體的代碼文件。
“核心推薦引擎近期進(jìn)行了架構(gòu)調(diào)整,將原有的動(dòng)態(tài)權(quán)重分配模塊替換為基于規(guī)則的靜態(tài)引擎。”
韓路一看到這句話的時(shí)候,表情很微妙。
動(dòng)態(tài)權(quán)重分配,那是他花了八個(gè)月設(shè)計(jì)的核心調(diào)度模塊,整個(gè)推薦系統(tǒng)的心臟,它的精妙之處在于能根據(jù)用戶實(shí)時(shí)行為自動(dòng)調(diào)整推薦權(quán)重,每一次點(diǎn)擊、每一次滑動(dòng)、每一次停留都會(huì)被納入計(jì)算。
這套東西不是寫出來(lái)就能用的,是他一邊寫一邊調(diào),跑了上億條用戶數(shù)據(jù),一個(gè)參數(shù)一個(gè)參數(shù)地磨出來(lái)的。
然后陳博文的團(tuán)隊(duì)把它拆了,換成了靜態(tài)規(guī)則引擎。
韓路一能理解為什么,動(dòng)態(tài)權(quán)重模塊確實(shí)復(fù)雜,沒(méi)有他本人在場(chǎng),團(tuán)隊(duì)里沒(méi)有第二個(gè)人能完全看懂那套邏輯。陳博文的選擇是,看不懂的東西就換掉,換成看得懂的。
技術(shù)概要后面還列了一串癥狀:峰值期響應(yīng)延遲飆升、推薦精準(zhǔn)度下降、用戶留存率持續(xù)走低、A/B測(cè)試全面不如舊版。
說(shuō)白了就是:換了之后全面拉胯,而且越來(lái)越差。
韓路一靠在椅背上,開了視界。
精力值滿的,250/250。他把注意力集中在屏幕上那三頁(yè)技術(shù)概要上。
面板炸開了。
不是一般的彈窗。整個(gè)屏幕被半透明的紅色警告覆蓋,像一面著火的墻。
【目標(biāo)系統(tǒng):鼎盛數(shù)字科技·核心推薦引擎】
【整體穩(wěn)定性評(píng)級(jí):極度危險(xiǎn)】
【嚴(yán)重漏洞:12個(gè)|中等漏洞:37個(gè)|輕微漏洞:91個(gè)】
【預(yù)計(jì)完全崩潰時(shí)間:上線后72小時(shí)內(nèi)】
140個(gè)Bug,深紅的淺紅的,密密麻麻鋪了一屏,像一份病危通知書。
他只掃了一眼前三個(gè)嚴(yán)重漏洞就不想再看了,內(nèi)存泄漏,三天后系統(tǒng)會(huì)把自己撐死。數(shù)據(jù)管道斷裂,四分之一的用戶數(shù)據(jù)在悄悄丟失。并發(fā)鎖死,高峰期兩成概率直接雪崩。
三顆定時(shí)炸彈,隨便一顆炸了都?jí)蛏弦淮螣崴选?/p>
他花了三年時(shí)間把這套推薦系統(tǒng)從能用調(diào)到好用,每一個(gè)參數(shù)、每一條權(quán)重、每一次版本迭代,都是他一行一行敲出來(lái)的。
陳博文才接手了半個(gè)月。
他想起了第一天被裁時(shí),陳博文面板上的那行字——
【W(wǎng)ARNING:該對(duì)象存在3個(gè)嚴(yán)重Bug點(diǎn)擊展開(當(dāng)前等級(jí)不足)】
當(dāng)時(shí)他是Lv.1,看不到詳情。
那三個(gè)嚴(yán)重Bug,其中一個(gè)大概就是這個(gè),陳博文摘了他的果子,但咬不動(dòng)。
他當(dāng)然能修好,這套代碼是他寫的,都不用視界,有些Bug他看一眼就知道改哪行。
他關(guān)掉了視界。
屏幕回到了正常的外包需求頁(yè)面,右上角有兩個(gè)按鈕:【接受需求】和【忽略】。
韓路一的手指停在鼠標(biāo)上。
然后點(diǎn)了【忽略】。
不接。
他關(guān)掉了外包頁(yè)面,端起桌上已經(jīng)涼了的咖啡喝了一口。
不接歸不接,但有些東西憋著也浪費(fèi)。
他打開論壇,以NullPointer的身份花了四十分鐘寫了一篇《推薦系統(tǒng)架構(gòu)改造的七個(gè)經(jīng)典陷阱》,純技術(shù)分享。
能不能看到,看小明的運(yùn)氣吧。
發(fā)完帖子,他關(guān)掉論壇。
腦子開始轉(zhuǎn)了。
這140個(gè)Bug,這兩周接單修過(guò)的上百個(gè)Bug,再往前,五年里經(jīng)手的幾千個(gè)Bug。
它們長(zhǎng)得不一樣,但模式都一樣。
同樣的模式,在不同的項(xiàng)目里反復(fù)出現(xiàn),他每次修Bug,本質(zhì)上就做兩件事,認(rèn)出模式,匹配方案。
這不就是喂給AI干的活嗎?
他放下杯子,掏出手機(jī)翻到備忘錄里那行字——
“代碼審查工具,連接代碼與現(xiàn)實(shí)場(chǎng)景,BugKiller?”
把視界看到的Bug模式全部整理出來(lái),特征、觸發(fā)條件、修復(fù)路徑,喂給AI,讓它學(xué)會(huì)“看到代碼就知道上線后會(huì)出什么問(wèn)題”,AI不需要擁有視界,它只需要學(xué)會(huì)視界看到過(guò)的東西。
就像教AI下棋不需要教它思考,只需要讓它看夠多的棋局。
韓路一打開電腦,新建文件夾,命名“BugKiller”,新建文檔:《Bug模式數(shù)據(jù)庫(kù) v0.1》。
然后他開始寫,寫得很快,五年里踩過(guò)的坑,全從記憶里涌出來(lái),按類型自動(dòng)歸位,內(nèi)存類、并發(fā)類、數(shù)據(jù)流類、接口類,每一類下面是觸發(fā)條件、典型表現(xiàn)、修復(fù)路徑。
他像在給一個(gè)什么都不懂的新手編一本《Bug大全》。
寫了兩個(gè)小時(shí),停下來(lái)。
不夠,一個(gè)人的經(jīng)驗(yàn)撐不起一整個(gè)數(shù)據(jù)庫(kù),他需要更多樣本,更系統(tǒng)的分類。
他需要一個(gè)產(chǎn)品經(jīng)理。
韓路一拿起手機(jī),找到蘇念念的微信對(duì)話框。
“念念,上次聊的AI代碼審查方向,我有個(gè)想法,今晚有空嗎?吃個(gè)飯聊聊。”
發(fā)出去不到三十秒,蘇念念回了:“今晚?!幾點(diǎn)?”
“七點(diǎn)。”
“沒(méi)問(wèn)題!下班正好六點(diǎn)半,什么想法?先說(shuō)說(shuō)?”
“到了再說(shuō)。”
對(duì)話框頂部的“對(duì)方正在輸入…”閃了好幾次,最后發(fā)過(guò)來(lái)的不是追問(wèn),是:
“那我先選個(gè)餐廳,你想吃什么?”
“隨意,不挑。”
“好,我來(lái)定。”
韓路一覺(jué)得有點(diǎn)好笑,明明是他約的人,三句話下來(lái)主導(dǎo)權(quán)就到對(duì)方手里了。
不過(guò)也正常,蘇念念做產(chǎn)品經(jīng)理的,搶需求主導(dǎo)權(quán)是本能。
韓路一放下手機(jī),又悶頭寫起了文檔,再抬起頭已經(jīng)是下午四點(diǎn)半了。
離七點(diǎn)還有兩個(gè)半小時(shí)。
他回頭看了看屏幕上剛建好的BugKiller文件夾,想了想,沒(méi)有繼續(xù)寫文檔。今晚跟蘇念念聊的時(shí)候,腦子里得是活的想法,不能是寫僵了的文字。
他關(guān)掉電腦,起身去洗了個(gè)澡,換了件干凈的襯衫。
出門的時(shí)候,隔壁傳來(lái)林朵朵的聲音,在跟林晚晴講幼兒園的事。
韓路一帶上門,往地鐵站走去。
晚風(fēng)不涼也不暖,三月中旬的海城,恰好卡在兩個(gè)季節(jié)的縫隙里。