第2章
我用算法收割全球資本
第一步入門------------------------------------------,已經(jīng)快八點(diǎn)四十。,熱浪裹著尾氣撲上來(lái)。陳末下車,鞋底踩過(guò)一層發(fā)軟的柏油,路邊法桐被曬得沒(méi)什么精神,葉子邊緣卷著灰。園區(qū)門口那家包子鋪正往蒸籠里添水,白汽直往上竄,帶著一點(diǎn)發(fā)酵過(guò)頭的酸味。。。,味道卻很熟。陸仁甲要的從來(lái)都不止代碼,他要的是一把能隨時(shí)把人拎起來(lái)、又能隨時(shí)扔出去的繩子。,玻璃門上貼著褪色的**海報(bào)。前臺(tái)還沒(méi)把空調(diào)開足,走廊里悶著一股機(jī)箱灰和廉價(jià)空氣清新劑混在一起的味道。陳末刷卡進(jìn)門,工位區(qū)零零散散來(lái)了幾個(gè)人,椅子輪子在地磚上拖出刺耳的聲。。,順手把靠窗那個(gè)沒(méi)壞扶手的位置留了出來(lái)。桌上的顯示器一亮,群消息又跳了幾條,都是在猜今天誰(shuí)先談、誰(shuí)會(huì)先走。有人發(fā)了個(gè)“保佑”的表情,后面沒(méi)人接。,先把U盤插上。,真正值錢的是里面那堆補(bǔ)丁和臨時(shí)繞路。銀行那邊回調(diào)字段亂,商戶側(cè)又催得急,上個(gè)月項(xiàng)目上線時(shí),陸仁甲為了趕進(jìn)度,拍板砍掉了兩輪測(cè)試。后來(lái)線上不出血,全靠陳末一點(diǎn)點(diǎn)補(bǔ)。,交出去一份壓縮包,別人也未必真接得住。,行政小妹從走廊那頭探出身子,沖技術(shù)區(qū)喊了一句:“陳末,陸總讓你到了就過(guò)去?!?,又很快落回屏幕。沒(méi)人說(shuō)話。,又帶上電腦,沿著走廊往里走。會(huì)議室門縫漏出冷氣,技術(shù)總監(jiān)辦公室的百葉窗半開著,里面有人影晃了一下。。
“進(jìn)。”
陸仁甲今天穿了件淺藍(lán)襯衫,袖口卷到小臂,桌上擺著一杯沒(méi)喝完的豆?jié){和兩份打印材料。屋里空調(diào)開得很低,壓住了外頭的悶熱,空氣里卻還是有股煙味,像昨晚加班時(shí)關(guān)門抽過(guò)。
“坐?!标懭始滋Я讼卵燮?,笑意掛在臉上,眼角沒(méi)動(dòng),“來(lái)得挺快?!?br>陳末把文件放到桌上,坐下后把電腦擱在腿邊,“你郵件里要的東西,我?guī)?lái)了?!?br>“這么積極,說(shuō)明你還是重視公司的?!标懭始咨焓址菐醉?yè)說(shuō)明,指尖在紙上點(diǎn)了點(diǎn),“最近公司情況你也知道,大家都難。老板那邊壓得緊,我夾在中間也不好做。今天先找你聊,算是提前打個(gè)招呼?!?br>他說(shuō)話慢,尾音拖著,像總給人留著回旋余地。
陳末看著他,沒(méi)有接話。
陸仁甲翻到第二頁(yè),停了會(huì)兒,抬頭笑道:“上個(gè)月這個(gè)支付接口,是你主做的吧。”
“主邏輯是我寫的,張偉幫我補(bǔ)過(guò)日志追蹤?!?br>陸仁甲點(diǎn)點(diǎn)頭,“那就更簡(jiǎn)單了。你把代碼、部署流程、異常處理都交清楚,后面方便團(tuán)隊(duì)接手。公司接下來(lái)會(huì)做組織調(diào)整,誰(shuí)留誰(shuí)走,現(xiàn)在還沒(méi)定。我個(gè)人是希望留下能扛事的人。”
這句話落下來(lái),辦公室里安靜了兩秒。
空調(diào)出風(fēng)口在頭頂輕輕響,陳末聞到打印紙的熱味。他知道對(duì)方在等什么,等他開口表態(tài),等他露出慌,最好再主動(dòng)把全部底牌擺平。
陳末把電腦打開,調(diào)出項(xiàng)目目錄,鼠標(biāo)在幾個(gè)文件夾間緩慢移動(dòng)。
“文檔我可以補(bǔ)全。”他說(shuō),“今天能先給到你主體流程、數(shù)據(jù)庫(kù)映射和上線步驟。異常處理要分開說(shuō)。”
陸仁甲的笑淡了一點(diǎn),“什么意思?”
“銀行那邊接口文檔有兩版,四月底那版和五月中旬那版字段不一致。正式環(huán)境里還留著老回調(diào)?,F(xiàn)在商戶量小,看著平穩(wěn),單子一密就會(huì)把重復(fù)通知頂出來(lái)。上周三夜里出現(xiàn)過(guò)一次,十五分鐘,支付狀態(tài)回寫延遲了七百多筆。”
陸仁甲手指停住,“怎么沒(méi)人報(bào)我?”
“我修了?!标惸┌讶罩菊{(diào)出來(lái),推到桌前,“那天是凌晨一點(diǎn)十七,監(jiān)控沒(méi)配短信告警,郵件第二天才到。我先加了去重鎖,又把回寫隊(duì)列拆開了。問(wèn)題壓住了,白天沒(méi)影響**?!?br>屏幕上一行行時(shí)間戳排著,日志里有清晰的異常記錄、修復(fù)注釋和提交時(shí)間。東西擺在眼前,比任何解釋都硬。
陸仁甲目光在屏幕上掃了幾遍,靠回椅背,臉上的笑重新掛起來(lái),只是更薄了。
“你這個(gè),之前沒(méi)寫進(jìn)周報(bào)?!?br>“修完時(shí)已經(jīng)凌晨,第二天我補(bǔ)在內(nèi)部提交備注里了?!标惸╊D了頓,“你那天在外面談客戶,可能沒(méi)看到?!?br>一句話遞出去,輕飄飄的,桌面下卻帶了刺。
陸仁甲沒(méi)發(fā)作。他拿起豆?jié){喝了一口,杯沿碰到牙齒,發(fā)出很輕的一聲。
“行,技術(shù)細(xì)節(jié)先放一邊?!彼鸭埻巴屏送?,“你直接說(shuō),這東西如果交給別人,多長(zhǎng)時(shí)間能接起來(lái)。”
陳末很快給了答案,“看是誰(shuí)接。張偉接,三天能摸清主流程,一周能單獨(dú)盯線上。別人來(lái),要多留緩沖。這個(gè)模塊跟財(cái)務(wù)對(duì)賬綁得深,出錯(cuò)不會(huì)立刻炸,月底結(jié)算會(huì)出事。”
陸仁甲盯著他,像在掂量這句話里有幾分水分。
陳末沒(méi)閃,繼續(xù)把幾處邊角問(wèn)題點(diǎn)出來(lái)。數(shù)據(jù)庫(kù)里兩張歷史表的索引沖突,商戶退款接口還掛著舊版本開關(guān),銀行端證書月底前要換,測(cè)試環(huán)境一直沒(méi)完全復(fù)刻正式參數(shù)。這些都不是天塌的大坑,卻足夠說(shuō)明一個(gè)事實(shí),眼下動(dòng)他,交接成本不低,真出了漏子,第一口鍋會(huì)飛回技術(shù)總監(jiān)頭上。
陸仁甲最怕的就是這種鍋。
辦公室外有人走過(guò),皮鞋踩在地磚上,節(jié)奏急。屋里卻一直很靜。
過(guò)了半分鐘,陸仁甲才笑了笑,“你最近成長(zhǎng)挺快?!?br>這話聽著像夸,味道很涼。
陳末把電腦合上一半,“項(xiàng)目做多了,總會(huì)碰到?!?br>“公司需要這種人?!标懭始装颜f(shuō)明書重新摞齊,“這樣,你今天先把完整交接文檔補(bǔ)出來(lái),重點(diǎn)把線上風(fēng)險(xiǎn)寫明白。下午面談?wù)粘W?,我?huì)把你的情況往上說(shuō)。能不能留下,我一個(gè)人定不了,但該爭(zhēng)取的我會(huì)爭(zhēng)取?!?br>他把自己放回了“幫忙的人”位置,熟練得很。
陳末點(diǎn)頭,“可以。還有一件事。”
“你說(shuō)?!?br>“如果真要做交接,最好別在今天切權(quán)限。中午以后商戶那邊有一批活動(dòng)單子,峰值會(huì)高一點(diǎn)。等晚上的日志跑完,再動(dòng)更穩(wěn)?!?br>陸仁甲眼皮一跳。
這是提醒,也是把時(shí)間線釘死。只要今天線上還得靠他,至少白天這把刀落不下來(lái)。
“行,先按你說(shuō)的辦?!标懭始装盐募牧伺模叭ッΠ?,十一點(diǎn)前把第一版發(fā)我郵箱。”
陳末起身,拿回電腦。
走到門口時(shí),陸仁甲又叫住他:“對(duì)了,陳末。”
他回頭。
“團(tuán)隊(duì)里誰(shuí)的代碼能力你最放心?”
這個(gè)問(wèn)題來(lái)得很順,像隨口一問(wèn)。
陳末停了半秒,“張偉寫得穩(wěn),慢一點(diǎn),毛病少?!?br>陸仁甲瞇了下眼,笑著擺手,“知道了?!?br>門關(guān)上后,走廊里的熱氣一下子裹回來(lái)。陳末往工位走,腳步?jīng)]變,后背卻繃得更緊了些。
陸仁甲會(huì)記住這句,也會(huì)拿這句去算人。
回到工位時(shí),張偉剛好氣喘吁吁地拎著電腦包進(jìn)門,額頭一層汗,襯衫后背都濕了一小塊。他看見靠窗那張椅子空著,先愣了一下,又轉(zhuǎn)頭看向陳末。
“你給我留的?”
“嗯?!标惸┌岩淮涡约埍郎弦环牛绊樎穾У乃??!?br>張偉低頭看了看,擰開喝了一口,喉結(jié)滾了兩下?!爸x了,今天路上追尾,堵死了。群里那點(diǎn)消息看得我腦仁疼?!?br>他聲音不高,帶著點(diǎn)喘過(guò)勁后的沙啞。
“陸總找過(guò)你沒(méi)?”張偉問(wèn)。
“剛出來(lái)。”
“怎么說(shuō)的?”
陳末把顯示器轉(zhuǎn)回自己這邊,手指敲了兩下鍵盤,“先交文檔,下午面談?!?br>張偉“哦”了一聲,沒(méi)再追問(wèn)。他這種性子,知道對(duì)方想說(shuō)時(shí)自然會(huì)說(shuō)??伤稚锨面I盤的速度比平時(shí)快了些,顯然心里也壓著石頭。
到了十點(diǎn)多,整個(gè)技術(shù)區(qū)都安靜得反常。鍵盤聲密密麻麻,誰(shuí)都像在趕最后一份保命材料。有人去茶水間接水,回來(lái)時(shí)壓低聲音說(shuō),行政那邊已經(jīng)在打印離職協(xié)議。幾個(gè)人抬頭看了一眼,又各自埋回去。
陳末把交接文檔補(bǔ)得很細(xì),卻在邊界處卡得很準(zhǔn)。
該寫的寫,能證明工作量的都擺上去,能讓人一眼看出短期離不開他的地方也都留著。到十一點(diǎn)整,他把文檔發(fā)給陸仁甲,抄送了部門公共郵箱和項(xiàng)目負(fù)責(zé)人。
郵件主題寫得規(guī)規(guī)矩矩,正文最后附了一句,今天中午到晚高峰期間建議保持現(xiàn)有權(quán)限不變,以免影響商戶活動(dòng)回調(diào)。
字越平,分量越足。
發(fā)出去后,張偉側(cè)過(guò)頭看了他一眼,“你抄送項(xiàng)目組了?”
“留痕?!?br>張偉沉默兩秒,低聲道:“有道理。”
這算是兩人今天第一句真正搭上線的話。很短,卻不空。
中午食堂的米飯有點(diǎn)夾生,青椒炒肉全是辣油。陳末端著盤子坐下時(shí),周圍幾桌都在說(shuō)裁員。有人說(shuō)外面工作難找,有人罵老板畫餅,還有個(gè)測(cè)試姑娘紅著眼睛在打電話,聲音壓得很低,聽得出在跟家里解釋。
張偉端著餐盤坐到他對(duì)面,猶豫了一下,還是開口:“你剛才在郵件里提的重復(fù)回調(diào),我之前看日志時(shí)也碰到過(guò)一點(diǎn),沒(méi)你說(shuō)的那么集中?!?br>“你記得哪天?”
“上周一和上周三,量都不大?!睆垈ツ每曜訐芰藫茱?,“我當(dāng)時(shí)以為是商戶自己重試?!?br>陳末抬眼看他。
這句話有用。張偉看到過(guò),說(shuō)明那不是只有他知道的隱患。真到后面掰扯責(zé)任時(shí),多一個(gè)看過(guò)現(xiàn)場(chǎng)的人,話就更穩(wěn)。
“下午你把那兩天的日志備一份?!标惸┱f(shuō),“先別聲張?!?br>張偉點(diǎn)頭,“行?!?br>他答應(yīng)得很干脆,沒(méi)有多問(wèn)為什么。陳末心里那根一直繃著的線,微微松了一絲。張偉這種人,給他一件能落到手上的事,比跟他說(shuō)一百句拉攏的話都實(shí)在。
下午兩點(diǎn)半,正式面談開始。
技術(shù)區(qū)一個(gè)個(gè)被叫進(jìn)去,回來(lái)的人神色各異。有個(gè)前端小伙拿著煙盒去樓梯間,一根接一根地抽;測(cè)試組那邊有個(gè)姑娘收拾包時(shí)手在發(fā)抖,拉鏈拉了三次都沒(méi)合上。真正的名單還沒(méi)貼出來(lái),空氣卻已經(jīng)帶了分開的味道。
陳末被叫進(jìn)去時(shí),房間里除了陸仁甲,還有HR的女經(jīng)理。話術(shù)和他預(yù)想得差不多,先談公司困難,再談個(gè)人匹配,再談“希望員工和公司雙向理解”。陸仁甲在旁邊不時(shí)補(bǔ)一句,說(shuō)陳末負(fù)責(zé)的支付模塊短期還需要穩(wěn)定過(guò)渡,公司傾向于先觀察一段時(shí)間。
HR翻了翻記錄,問(wèn)他能不能承擔(dān)更多運(yùn)維值班和接口排障。
“可以?!标惸┐鸬闷椒€(wěn),“前提是職責(zé)邊界寫清楚,現(xiàn)有項(xiàng)目排期要調(diào)整。不然問(wèn)題來(lái)了,誰(shuí)都說(shuō)不清?!?br>HR看了他一眼,像是沒(méi)料到這時(shí)候他還敢提邊界。陸仁甲倒接得快,“這個(gè)后面部門內(nèi)部細(xì)化?!?br>一來(lái)一回,時(shí)間不長(zhǎng)。
最后落下來(lái)的結(jié)果很含糊,沒(méi)有承諾,也沒(méi)讓他簽東西。陳末出來(lái)時(shí)就知道,這一關(guān)算是先挪開了半步。留得久不久還不好說(shuō),至少今天,陸仁甲不敢把刀直接按下來(lái)。
下班時(shí)天色還亮,積了一天的熱氣貼著路面往上翻。張偉背著包站在電梯口,像是想說(shuō)什么,最后只擠出一句:“那份日志,我晚上發(fā)你私人郵箱。”
“好?!?br>“還有,今天謝謝占座。”
“順手的事。”
電梯門合上前,張偉沖他點(diǎn)了下頭。動(dòng)作很小,眼神倒比早上落得更實(shí)。
陳末出了辦公樓,沒(méi)有直接回家。
他先去附近營(yíng)業(yè)廳給手機(jī)開了國(guó)際短信服務(wù),又到銀行自助機(jī)查了卡里余額。屏幕上的數(shù)字不多,看著有點(diǎn)寒酸。機(jī)器吐卡時(shí)發(fā)出“嗒”的一聲,他把卡攥在手里,掌心出了層汗。
這點(diǎn)錢,拿去填房租窟窿只夠喘兩天。
可要是連第一步都不敢下,后面全是空話。
天黑透后,他回到出租屋,先把風(fēng)扇打開。扇葉帶起來(lái)的風(fēng)里有灰味,桌上的主機(jī)嗡嗡響著,像一頭老牛。陳末沒(méi)急著開網(wǎng)頁(yè),先把門反鎖,又拿筆在紙上列了三個(gè)篩選條件。
一,平臺(tái)要有托管機(jī)制,錢和幣別直接裸奔。
二,賣家交易記錄足夠長(zhǎng),反饋要能對(duì)上時(shí)間。
三,第一筆只能做小額,試通道,不求多。
條件列完,他才打開電腦,掛上**,進(jìn)了幾個(gè)英文論壇和早期交易社區(qū)。頁(yè)面加載很慢,廣告條閃個(gè)不停。陳末耐著性子翻了一個(gè)多小時(shí),把兩家看起來(lái)稍穩(wěn)的平臺(tái)和幾個(gè)老賣家都記下來(lái),最后把視線停在一個(gè)做托管中介的場(chǎng)外頁(yè)面上。
賣家賬戶注冊(cè)時(shí)間一年多,成交記錄不算夸張,評(píng)價(jià)里能看見幾條中文和英文混著的留言。收款方式寫的是國(guó)內(nèi)***轉(zhuǎn)賬,放幣要等平臺(tái)確認(rèn)。
陳末沒(méi)有立刻下單,先把對(duì)方近三十筆成交時(shí)間都掃了一遍,又核了兩條反饋里的用詞,確認(rèn)不像批量刷出來(lái)的。接著,他開了個(gè)新郵箱,重新注冊(cè)賬戶,驗(yàn)證、綁定、設(shè)置獨(dú)立密碼,一個(gè)步驟一個(gè)步驟往下走。
十一點(diǎn)出頭,他發(fā)起第一筆訂單。
金額控制得很小,只買一枚。
網(wǎng)頁(yè)上那串?dāng)?shù)字跳出來(lái)時(shí),他還是停了一下。按今天的匯率和溢價(jià)算,這一筆會(huì)切走他一塊本來(lái)就薄的肉。陳末盯著“確認(rèn)”鍵看了兩秒,手指落下去。
訂單生成。
頁(yè)面提示賣家已在線,等待付款。陳末按照頁(yè)面要求,先截圖訂單號(hào),再去網(wǎng)銀轉(zhuǎn)賬。銀行頁(yè)面的藍(lán)底白字照得他眼睛發(fā)澀,鍵盤被汗沾得有點(diǎn)滑。他把收款戶名、賬號(hào)、金額來(lái)回核了三遍,確認(rèn)無(wú)誤,才點(diǎn)提交。
短信驗(yàn)證碼發(fā)過(guò)來(lái)時(shí),手機(jī)在桌上震了一下。
這一聲很輕,屋子里卻像更靜了。
支付完成后,頁(yè)面轉(zhuǎn)入托管等待。賣家的聊天框里彈出一句英文,大意是已收到,十分鐘內(nèi)放幣。陳末沒(méi)回,只把網(wǎng)頁(yè)、郵箱和網(wǎng)銀回單同時(shí)截屏,存了兩份。
風(fēng)扇轉(zhuǎn)了一圈又一圈,吹得紙頁(yè)邊角輕輕顫。十分鐘過(guò)得比白天那場(chǎng)面談還慢。
終于,頁(yè)面右上角的小錢包數(shù)字從零變成了1。
只有一枚。
放在后來(lái)的牌桌上,這點(diǎn)東西連水花都濺不起來(lái)。可在這一晚,它像一顆極小的釘子,先把他和未來(lái)釘在了一起。
陳末沒(méi)有沉浸太久,立刻開始做下一步。
他先把那枚幣提到新建的錢包地址里,記錄私鑰備份方式,又把助記信息拆開抄到兩張紙上,一張壓進(jìn)技術(shù)書里,一張塞進(jìn)舊主機(jī)箱底部。做完這些,他才長(zhǎng)出一口氣,肩膀慢慢落下去。
屋里熱得厲害,后背的衣服黏在皮膚上。
他擦了把汗,打開編輯器,新建腳本文件。
屏幕上很快敲出第一行代碼。Python 2.7,requests,*eautifulSoup,SQLite。先抓公開報(bào)價(jià),再抓幾個(gè)論壇的帖子標(biāo)題,留時(shí)間戳,做最簡(jiǎn)單的異常提醒。外部接口一時(shí)不穩(wěn),就先把容錯(cuò)寫重一點(diǎn),抓不到就退回網(wǎng)頁(yè)解析。這個(gè)版本很粗,像用鐵絲先擰出來(lái)的籠子,卻夠他把最早那批信號(hào)先攔住。
鍵盤聲在深夜里格外清楚。
一行,兩行,三行。
窗口外有摩托車轟鳴著沖過(guò)去,樓下小飯館收攤時(shí)鐵門嘩啦一響。陳末盯著屏幕,眼睛被代碼映得發(fā)亮。白天那場(chǎng)交鋒給他換來(lái)了一點(diǎn)時(shí)間,剛剛那一筆小額入場(chǎng),給他換來(lái)了一點(diǎn)位置。
還遠(yuǎn)遠(yuǎn)不夠。
腳本跑到第一次測(cè)試時(shí),時(shí)間已經(jīng)過(guò)了零點(diǎn)??刂婆_(tái)吐出幾條報(bào)價(jià),最后一行卻卡住了。陳末皺了下眉,把日志拉出來(lái)看。
不是網(wǎng)絡(luò)斷了。
是其中一個(gè)頁(yè)面結(jié)構(gòu)和記憶里對(duì)不上,抓取字段空了一半。
他盯著那片空白,指尖懸在鍵盤上,沒(méi)有立刻敲下去。前世留下來(lái)的路,并不會(huì)一模一樣地鋪在今生腳下。有些節(jié)點(diǎn)能認(rèn),有些細(xì)節(jié)已經(jīng)偏了。
風(fēng)扇吹過(guò)來(lái),帶著一點(diǎn)發(fā)熱電路板的味道。
陳末重新坐直,把解析規(guī)則刪掉一段,從頭改。
屏幕冷光照著他的側(cè)臉,窗外的夜越來(lái)越深。桌上的手機(jī)靜靜躺著,收件箱里還停著陸仁甲白天那封郵件,像一根沒(méi)拔掉的刺。另一邊,新錢包地址里那一枚幣安安靜靜待著,像一粒剛埋進(jìn)土里的種子。
凌晨一點(diǎn)零七分,腳本第二次跑通。
報(bào)價(jià)、論壇標(biāo)題、新聞***,開始一條條落進(jìn)本地?cái)?shù)據(jù)庫(kù)。陳末看著滾動(dòng)的輸出,眼神沉了下去。真正麻煩的事,從來(lái)不會(huì)只來(lái)一件。工作這邊,他剛把自己從邊上挪開一點(diǎn)。市場(chǎng)那邊,他才剛把鞋尖踩上去。
可就在腳本抓取新聞頁(yè)面時(shí),一條英文標(biāo)題被拉了下來(lái)。
不是價(jià)格,不是技術(shù)更新。
標(biāo)題里帶著兩個(gè)單詞,礦機(jī),**。
陳末的目光停在那行字上,手指慢慢收緊。
陸仁甲白天那句“團(tuán)隊(duì)里誰(shuí)的代碼能力你最放心”,和前世某段模糊的影子,突然貼得更近了。
“進(jìn)。”
陸仁甲今天穿了件淺藍(lán)襯衫,袖口卷到小臂,桌上擺著一杯沒(méi)喝完的豆?jié){和兩份打印材料。屋里空調(diào)開得很低,壓住了外頭的悶熱,空氣里卻還是有股煙味,像昨晚加班時(shí)關(guān)門抽過(guò)。
“坐?!标懭始滋Я讼卵燮?,笑意掛在臉上,眼角沒(méi)動(dòng),“來(lái)得挺快?!?br>陳末把文件放到桌上,坐下后把電腦擱在腿邊,“你郵件里要的東西,我?guī)?lái)了?!?br>“這么積極,說(shuō)明你還是重視公司的?!标懭始咨焓址菐醉?yè)說(shuō)明,指尖在紙上點(diǎn)了點(diǎn),“最近公司情況你也知道,大家都難。老板那邊壓得緊,我夾在中間也不好做。今天先找你聊,算是提前打個(gè)招呼?!?br>他說(shuō)話慢,尾音拖著,像總給人留著回旋余地。
陳末看著他,沒(méi)有接話。
陸仁甲翻到第二頁(yè),停了會(huì)兒,抬頭笑道:“上個(gè)月這個(gè)支付接口,是你主做的吧。”
“主邏輯是我寫的,張偉幫我補(bǔ)過(guò)日志追蹤?!?br>陸仁甲點(diǎn)點(diǎn)頭,“那就更簡(jiǎn)單了。你把代碼、部署流程、異常處理都交清楚,后面方便團(tuán)隊(duì)接手。公司接下來(lái)會(huì)做組織調(diào)整,誰(shuí)留誰(shuí)走,現(xiàn)在還沒(méi)定。我個(gè)人是希望留下能扛事的人。”
這句話落下來(lái),辦公室里安靜了兩秒。
空調(diào)出風(fēng)口在頭頂輕輕響,陳末聞到打印紙的熱味。他知道對(duì)方在等什么,等他開口表態(tài),等他露出慌,最好再主動(dòng)把全部底牌擺平。
陳末把電腦打開,調(diào)出項(xiàng)目目錄,鼠標(biāo)在幾個(gè)文件夾間緩慢移動(dòng)。
“文檔我可以補(bǔ)全。”他說(shuō),“今天能先給到你主體流程、數(shù)據(jù)庫(kù)映射和上線步驟。異常處理要分開說(shuō)。”
陸仁甲的笑淡了一點(diǎn),“什么意思?”
“銀行那邊接口文檔有兩版,四月底那版和五月中旬那版字段不一致。正式環(huán)境里還留著老回調(diào)?,F(xiàn)在商戶量小,看著平穩(wěn),單子一密就會(huì)把重復(fù)通知頂出來(lái)。上周三夜里出現(xiàn)過(guò)一次,十五分鐘,支付狀態(tài)回寫延遲了七百多筆。”
陸仁甲手指停住,“怎么沒(méi)人報(bào)我?”
“我修了?!标惸┌讶罩菊{(diào)出來(lái),推到桌前,“那天是凌晨一點(diǎn)十七,監(jiān)控沒(méi)配短信告警,郵件第二天才到。我先加了去重鎖,又把回寫隊(duì)列拆開了。問(wèn)題壓住了,白天沒(méi)影響**?!?br>屏幕上一行行時(shí)間戳排著,日志里有清晰的異常記錄、修復(fù)注釋和提交時(shí)間。東西擺在眼前,比任何解釋都硬。
陸仁甲目光在屏幕上掃了幾遍,靠回椅背,臉上的笑重新掛起來(lái),只是更薄了。
“你這個(gè),之前沒(méi)寫進(jìn)周報(bào)?!?br>“修完時(shí)已經(jīng)凌晨,第二天我補(bǔ)在內(nèi)部提交備注里了?!标惸╊D了頓,“你那天在外面談客戶,可能沒(méi)看到?!?br>一句話遞出去,輕飄飄的,桌面下卻帶了刺。
陸仁甲沒(méi)發(fā)作。他拿起豆?jié){喝了一口,杯沿碰到牙齒,發(fā)出很輕的一聲。
“行,技術(shù)細(xì)節(jié)先放一邊?!彼鸭埻巴屏送?,“你直接說(shuō),這東西如果交給別人,多長(zhǎng)時(shí)間能接起來(lái)。”
陳末很快給了答案,“看是誰(shuí)接。張偉接,三天能摸清主流程,一周能單獨(dú)盯線上。別人來(lái),要多留緩沖。這個(gè)模塊跟財(cái)務(wù)對(duì)賬綁得深,出錯(cuò)不會(huì)立刻炸,月底結(jié)算會(huì)出事。”
陸仁甲盯著他,像在掂量這句話里有幾分水分。
陳末沒(méi)閃,繼續(xù)把幾處邊角問(wèn)題點(diǎn)出來(lái)。數(shù)據(jù)庫(kù)里兩張歷史表的索引沖突,商戶退款接口還掛著舊版本開關(guān),銀行端證書月底前要換,測(cè)試環(huán)境一直沒(méi)完全復(fù)刻正式參數(shù)。這些都不是天塌的大坑,卻足夠說(shuō)明一個(gè)事實(shí),眼下動(dòng)他,交接成本不低,真出了漏子,第一口鍋會(huì)飛回技術(shù)總監(jiān)頭上。
陸仁甲最怕的就是這種鍋。
辦公室外有人走過(guò),皮鞋踩在地磚上,節(jié)奏急。屋里卻一直很靜。
過(guò)了半分鐘,陸仁甲才笑了笑,“你最近成長(zhǎng)挺快?!?br>這話聽著像夸,味道很涼。
陳末把電腦合上一半,“項(xiàng)目做多了,總會(huì)碰到?!?br>“公司需要這種人?!标懭始装颜f(shuō)明書重新摞齊,“這樣,你今天先把完整交接文檔補(bǔ)出來(lái),重點(diǎn)把線上風(fēng)險(xiǎn)寫明白。下午面談?wù)粘W?,我?huì)把你的情況往上說(shuō)。能不能留下,我一個(gè)人定不了,但該爭(zhēng)取的我會(huì)爭(zhēng)取?!?br>他把自己放回了“幫忙的人”位置,熟練得很。
陳末點(diǎn)頭,“可以。還有一件事。”
“你說(shuō)?!?br>“如果真要做交接,最好別在今天切權(quán)限。中午以后商戶那邊有一批活動(dòng)單子,峰值會(huì)高一點(diǎn)。等晚上的日志跑完,再動(dòng)更穩(wěn)?!?br>陸仁甲眼皮一跳。
這是提醒,也是把時(shí)間線釘死。只要今天線上還得靠他,至少白天這把刀落不下來(lái)。
“行,先按你說(shuō)的辦?!标懭始装盐募牧伺模叭ッΠ?,十一點(diǎn)前把第一版發(fā)我郵箱。”
陳末起身,拿回電腦。
走到門口時(shí),陸仁甲又叫住他:“對(duì)了,陳末。”
他回頭。
“團(tuán)隊(duì)里誰(shuí)的代碼能力你最放心?”
這個(gè)問(wèn)題來(lái)得很順,像隨口一問(wèn)。
陳末停了半秒,“張偉寫得穩(wěn),慢一點(diǎn),毛病少?!?br>陸仁甲瞇了下眼,笑著擺手,“知道了?!?br>門關(guān)上后,走廊里的熱氣一下子裹回來(lái)。陳末往工位走,腳步?jīng)]變,后背卻繃得更緊了些。
陸仁甲會(huì)記住這句,也會(huì)拿這句去算人。
回到工位時(shí),張偉剛好氣喘吁吁地拎著電腦包進(jìn)門,額頭一層汗,襯衫后背都濕了一小塊。他看見靠窗那張椅子空著,先愣了一下,又轉(zhuǎn)頭看向陳末。
“你給我留的?”
“嗯?!标惸┌岩淮涡约埍郎弦环牛绊樎穾У乃??!?br>張偉低頭看了看,擰開喝了一口,喉結(jié)滾了兩下?!爸x了,今天路上追尾,堵死了。群里那點(diǎn)消息看得我腦仁疼?!?br>他聲音不高,帶著點(diǎn)喘過(guò)勁后的沙啞。
“陸總找過(guò)你沒(méi)?”張偉問(wèn)。
“剛出來(lái)。”
“怎么說(shuō)的?”
陳末把顯示器轉(zhuǎn)回自己這邊,手指敲了兩下鍵盤,“先交文檔,下午面談?!?br>張偉“哦”了一聲,沒(méi)再追問(wèn)。他這種性子,知道對(duì)方想說(shuō)時(shí)自然會(huì)說(shuō)??伤稚锨面I盤的速度比平時(shí)快了些,顯然心里也壓著石頭。
到了十點(diǎn)多,整個(gè)技術(shù)區(qū)都安靜得反常。鍵盤聲密密麻麻,誰(shuí)都像在趕最后一份保命材料。有人去茶水間接水,回來(lái)時(shí)壓低聲音說(shuō),行政那邊已經(jīng)在打印離職協(xié)議。幾個(gè)人抬頭看了一眼,又各自埋回去。
陳末把交接文檔補(bǔ)得很細(xì),卻在邊界處卡得很準(zhǔn)。
該寫的寫,能證明工作量的都擺上去,能讓人一眼看出短期離不開他的地方也都留著。到十一點(diǎn)整,他把文檔發(fā)給陸仁甲,抄送了部門公共郵箱和項(xiàng)目負(fù)責(zé)人。
郵件主題寫得規(guī)規(guī)矩矩,正文最后附了一句,今天中午到晚高峰期間建議保持現(xiàn)有權(quán)限不變,以免影響商戶活動(dòng)回調(diào)。
字越平,分量越足。
發(fā)出去后,張偉側(cè)過(guò)頭看了他一眼,“你抄送項(xiàng)目組了?”
“留痕?!?br>張偉沉默兩秒,低聲道:“有道理。”
這算是兩人今天第一句真正搭上線的話。很短,卻不空。
中午食堂的米飯有點(diǎn)夾生,青椒炒肉全是辣油。陳末端著盤子坐下時(shí),周圍幾桌都在說(shuō)裁員。有人說(shuō)外面工作難找,有人罵老板畫餅,還有個(gè)測(cè)試姑娘紅著眼睛在打電話,聲音壓得很低,聽得出在跟家里解釋。
張偉端著餐盤坐到他對(duì)面,猶豫了一下,還是開口:“你剛才在郵件里提的重復(fù)回調(diào),我之前看日志時(shí)也碰到過(guò)一點(diǎn),沒(méi)你說(shuō)的那么集中?!?br>“你記得哪天?”
“上周一和上周三,量都不大?!睆垈ツ每曜訐芰藫茱?,“我當(dāng)時(shí)以為是商戶自己重試?!?br>陳末抬眼看他。
這句話有用。張偉看到過(guò),說(shuō)明那不是只有他知道的隱患。真到后面掰扯責(zé)任時(shí),多一個(gè)看過(guò)現(xiàn)場(chǎng)的人,話就更穩(wěn)。
“下午你把那兩天的日志備一份?!标惸┱f(shuō),“先別聲張?!?br>張偉點(diǎn)頭,“行?!?br>他答應(yīng)得很干脆,沒(méi)有多問(wèn)為什么。陳末心里那根一直繃著的線,微微松了一絲。張偉這種人,給他一件能落到手上的事,比跟他說(shuō)一百句拉攏的話都實(shí)在。
下午兩點(diǎn)半,正式面談開始。
技術(shù)區(qū)一個(gè)個(gè)被叫進(jìn)去,回來(lái)的人神色各異。有個(gè)前端小伙拿著煙盒去樓梯間,一根接一根地抽;測(cè)試組那邊有個(gè)姑娘收拾包時(shí)手在發(fā)抖,拉鏈拉了三次都沒(méi)合上。真正的名單還沒(méi)貼出來(lái),空氣卻已經(jīng)帶了分開的味道。
陳末被叫進(jìn)去時(shí),房間里除了陸仁甲,還有HR的女經(jīng)理。話術(shù)和他預(yù)想得差不多,先談公司困難,再談個(gè)人匹配,再談“希望員工和公司雙向理解”。陸仁甲在旁邊不時(shí)補(bǔ)一句,說(shuō)陳末負(fù)責(zé)的支付模塊短期還需要穩(wěn)定過(guò)渡,公司傾向于先觀察一段時(shí)間。
HR翻了翻記錄,問(wèn)他能不能承擔(dān)更多運(yùn)維值班和接口排障。
“可以?!标惸┐鸬闷椒€(wěn),“前提是職責(zé)邊界寫清楚,現(xiàn)有項(xiàng)目排期要調(diào)整。不然問(wèn)題來(lái)了,誰(shuí)都說(shuō)不清?!?br>HR看了他一眼,像是沒(méi)料到這時(shí)候他還敢提邊界。陸仁甲倒接得快,“這個(gè)后面部門內(nèi)部細(xì)化?!?br>一來(lái)一回,時(shí)間不長(zhǎng)。
最后落下來(lái)的結(jié)果很含糊,沒(méi)有承諾,也沒(méi)讓他簽東西。陳末出來(lái)時(shí)就知道,這一關(guān)算是先挪開了半步。留得久不久還不好說(shuō),至少今天,陸仁甲不敢把刀直接按下來(lái)。
下班時(shí)天色還亮,積了一天的熱氣貼著路面往上翻。張偉背著包站在電梯口,像是想說(shuō)什么,最后只擠出一句:“那份日志,我晚上發(fā)你私人郵箱。”
“好?!?br>“還有,今天謝謝占座。”
“順手的事。”
電梯門合上前,張偉沖他點(diǎn)了下頭。動(dòng)作很小,眼神倒比早上落得更實(shí)。
陳末出了辦公樓,沒(méi)有直接回家。
他先去附近營(yíng)業(yè)廳給手機(jī)開了國(guó)際短信服務(wù),又到銀行自助機(jī)查了卡里余額。屏幕上的數(shù)字不多,看著有點(diǎn)寒酸。機(jī)器吐卡時(shí)發(fā)出“嗒”的一聲,他把卡攥在手里,掌心出了層汗。
這點(diǎn)錢,拿去填房租窟窿只夠喘兩天。
可要是連第一步都不敢下,后面全是空話。
天黑透后,他回到出租屋,先把風(fēng)扇打開。扇葉帶起來(lái)的風(fēng)里有灰味,桌上的主機(jī)嗡嗡響著,像一頭老牛。陳末沒(méi)急著開網(wǎng)頁(yè),先把門反鎖,又拿筆在紙上列了三個(gè)篩選條件。
一,平臺(tái)要有托管機(jī)制,錢和幣別直接裸奔。
二,賣家交易記錄足夠長(zhǎng),反饋要能對(duì)上時(shí)間。
三,第一筆只能做小額,試通道,不求多。
條件列完,他才打開電腦,掛上**,進(jìn)了幾個(gè)英文論壇和早期交易社區(qū)。頁(yè)面加載很慢,廣告條閃個(gè)不停。陳末耐著性子翻了一個(gè)多小時(shí),把兩家看起來(lái)稍穩(wěn)的平臺(tái)和幾個(gè)老賣家都記下來(lái),最后把視線停在一個(gè)做托管中介的場(chǎng)外頁(yè)面上。
賣家賬戶注冊(cè)時(shí)間一年多,成交記錄不算夸張,評(píng)價(jià)里能看見幾條中文和英文混著的留言。收款方式寫的是國(guó)內(nèi)***轉(zhuǎn)賬,放幣要等平臺(tái)確認(rèn)。
陳末沒(méi)有立刻下單,先把對(duì)方近三十筆成交時(shí)間都掃了一遍,又核了兩條反饋里的用詞,確認(rèn)不像批量刷出來(lái)的。接著,他開了個(gè)新郵箱,重新注冊(cè)賬戶,驗(yàn)證、綁定、設(shè)置獨(dú)立密碼,一個(gè)步驟一個(gè)步驟往下走。
十一點(diǎn)出頭,他發(fā)起第一筆訂單。
金額控制得很小,只買一枚。
網(wǎng)頁(yè)上那串?dāng)?shù)字跳出來(lái)時(shí),他還是停了一下。按今天的匯率和溢價(jià)算,這一筆會(huì)切走他一塊本來(lái)就薄的肉。陳末盯著“確認(rèn)”鍵看了兩秒,手指落下去。
訂單生成。
頁(yè)面提示賣家已在線,等待付款。陳末按照頁(yè)面要求,先截圖訂單號(hào),再去網(wǎng)銀轉(zhuǎn)賬。銀行頁(yè)面的藍(lán)底白字照得他眼睛發(fā)澀,鍵盤被汗沾得有點(diǎn)滑。他把收款戶名、賬號(hào)、金額來(lái)回核了三遍,確認(rèn)無(wú)誤,才點(diǎn)提交。
短信驗(yàn)證碼發(fā)過(guò)來(lái)時(shí),手機(jī)在桌上震了一下。
這一聲很輕,屋子里卻像更靜了。
支付完成后,頁(yè)面轉(zhuǎn)入托管等待。賣家的聊天框里彈出一句英文,大意是已收到,十分鐘內(nèi)放幣。陳末沒(méi)回,只把網(wǎng)頁(yè)、郵箱和網(wǎng)銀回單同時(shí)截屏,存了兩份。
風(fēng)扇轉(zhuǎn)了一圈又一圈,吹得紙頁(yè)邊角輕輕顫。十分鐘過(guò)得比白天那場(chǎng)面談還慢。
終于,頁(yè)面右上角的小錢包數(shù)字從零變成了1。
只有一枚。
放在后來(lái)的牌桌上,這點(diǎn)東西連水花都濺不起來(lái)。可在這一晚,它像一顆極小的釘子,先把他和未來(lái)釘在了一起。
陳末沒(méi)有沉浸太久,立刻開始做下一步。
他先把那枚幣提到新建的錢包地址里,記錄私鑰備份方式,又把助記信息拆開抄到兩張紙上,一張壓進(jìn)技術(shù)書里,一張塞進(jìn)舊主機(jī)箱底部。做完這些,他才長(zhǎng)出一口氣,肩膀慢慢落下去。
屋里熱得厲害,后背的衣服黏在皮膚上。
他擦了把汗,打開編輯器,新建腳本文件。
屏幕上很快敲出第一行代碼。Python 2.7,requests,*eautifulSoup,SQLite。先抓公開報(bào)價(jià),再抓幾個(gè)論壇的帖子標(biāo)題,留時(shí)間戳,做最簡(jiǎn)單的異常提醒。外部接口一時(shí)不穩(wěn),就先把容錯(cuò)寫重一點(diǎn),抓不到就退回網(wǎng)頁(yè)解析。這個(gè)版本很粗,像用鐵絲先擰出來(lái)的籠子,卻夠他把最早那批信號(hào)先攔住。
鍵盤聲在深夜里格外清楚。
一行,兩行,三行。
窗口外有摩托車轟鳴著沖過(guò)去,樓下小飯館收攤時(shí)鐵門嘩啦一響。陳末盯著屏幕,眼睛被代碼映得發(fā)亮。白天那場(chǎng)交鋒給他換來(lái)了一點(diǎn)時(shí)間,剛剛那一筆小額入場(chǎng),給他換來(lái)了一點(diǎn)位置。
還遠(yuǎn)遠(yuǎn)不夠。
腳本跑到第一次測(cè)試時(shí),時(shí)間已經(jīng)過(guò)了零點(diǎn)??刂婆_(tái)吐出幾條報(bào)價(jià),最后一行卻卡住了。陳末皺了下眉,把日志拉出來(lái)看。
不是網(wǎng)絡(luò)斷了。
是其中一個(gè)頁(yè)面結(jié)構(gòu)和記憶里對(duì)不上,抓取字段空了一半。
他盯著那片空白,指尖懸在鍵盤上,沒(méi)有立刻敲下去。前世留下來(lái)的路,并不會(huì)一模一樣地鋪在今生腳下。有些節(jié)點(diǎn)能認(rèn),有些細(xì)節(jié)已經(jīng)偏了。
風(fēng)扇吹過(guò)來(lái),帶著一點(diǎn)發(fā)熱電路板的味道。
陳末重新坐直,把解析規(guī)則刪掉一段,從頭改。
屏幕冷光照著他的側(cè)臉,窗外的夜越來(lái)越深。桌上的手機(jī)靜靜躺著,收件箱里還停著陸仁甲白天那封郵件,像一根沒(méi)拔掉的刺。另一邊,新錢包地址里那一枚幣安安靜靜待著,像一粒剛埋進(jìn)土里的種子。
凌晨一點(diǎn)零七分,腳本第二次跑通。
報(bào)價(jià)、論壇標(biāo)題、新聞***,開始一條條落進(jìn)本地?cái)?shù)據(jù)庫(kù)。陳末看著滾動(dòng)的輸出,眼神沉了下去。真正麻煩的事,從來(lái)不會(huì)只來(lái)一件。工作這邊,他剛把自己從邊上挪開一點(diǎn)。市場(chǎng)那邊,他才剛把鞋尖踩上去。
可就在腳本抓取新聞頁(yè)面時(shí),一條英文標(biāo)題被拉了下來(lái)。
不是價(jià)格,不是技術(shù)更新。
標(biāo)題里帶著兩個(gè)單詞,礦機(jī),**。
陳末的目光停在那行字上,手指慢慢收緊。
陸仁甲白天那句“團(tuán)隊(duì)里誰(shuí)的代碼能力你最放心”,和前世某段模糊的影子,突然貼得更近了。