第十五章 字節跳動的代碼與櫻花

投票推薦 加入書籤 小說報錯

  (本章代碼濃度過高,謹慎觀看哈哈哈)

  2016年8月30日BJ字節跳動總部大廈

  周吔站在大廈玻璃幕牆前,仰頭望著「字節跳動」四個發光字,指尖無意識地摩挲著書包帶。沈硯穿著標誌性的藍衛衣,胸前別著「技術顧問」徽章,看上去和普通程式設計師無異。

  周吔跟著他穿過辦公區,此起彼伏的鍵盤聲像極了高考前的自習室。她看見有人穿著印有「代碼即正義」的T恤,有人在工位上擺著機械鍵盤,還有人對著白板激烈討論,白板上歪歪扭扭寫著「推薦算法第47次疊代方案」。

  經過茶水間時,周吔被冰箱上的便利貼吸引:「『前端組的咖啡歸我,後端組的bug歸你』這是你們的企業文化?」

  「算是『程式設計師黑話』,」沈硯從冰箱裡拿出兩罐可樂,拉環聲清脆,「意思是『別搶我咖啡,你的代碼自己debug』。」

  兩人路過一間玻璃會議室,裡面正在進行頭腦風暴,投影屏上跳動著抖音的用戶畫像。

  「他們在討論什麼?」她小聲問。

  「TikTok的海外推薦算法,」沈硯指了指屏幕上的東南亞地圖,「比如在印尼,用戶更喜歡用短視頻記錄婚禮,所以要增加『傳統服飾』的標籤權重。」

  「哇,你怎麼知道的這麼多?」

  「技術顧問的職責之一,」他晃了晃工牌,「幫不同部門翻譯『技術語言』和『人話』。」

  沈硯的工位在角落,靠近落地窗,桌上擺著《算法導論》。周吔一眼便看見鎮紙下的櫻花書籤。

  「沒想到你還留著。」她伸手觸碰書籤,發現下面壓著一張便簽:「『周吔的睫毛在逆光下的反光率是37%』這是什麼?」

  「算法筆記,」他耳尖微燙,「為了優化『逆光濾鏡』參數。」

  「騙子,」她促狹看著沈硯笑,「你明明就是想我了。」

  這時,陳默抱著文件夾路過,看見周吔時眼睛一亮:「嫂子來啦?老大工位的櫻花書籤可是他的『鎮宅之寶』」

  「陳默!」沈硯打斷他,「去幫我拿杯冰美式。」

  「懂了懂了,」陳默擠眼,「這就去,不打擾你們『技術交流』。」

  周吔望著陳默的背影:「你們程式設計師都這麼愛開玩笑?」

  「只有他愛,」沈硯嘆氣,「不過他說得對」他拿起書籤,陽光穿過櫻花花瓣的鏤空處,在她臉上投下細碎的影,「你確實是我的『鎮宅之寶』。」

  這時手機震動,周吔收到張嘉嘉的消息:「小周,雲邊鎮的劇本寫到程霜第一次遇見劉十三,需要女生主動的細節,幫我想想?」

  她抬頭看向沈硯,忽然有了靈感:「要不……女生故意把橡皮擦滾到男生腳邊,然後說『你的鞋比我的代碼還會躲BUG』?」

  沈硯挑眉:「這台詞……似曾相識?」

  她吐了吐舌頭:「抄襲我們的初遇場景,不行嗎?」

  「行,」他笑,「不過張嘉嘉要是敢把這段寫進去,我就找他收『靈感版權費』。」

  周吔跟著沈硯穿過開放式辦公區,忽然停在茶水間冰箱前。昨天在酒店整理行李時,她特意把惠州帶來的桂圓乾和酸梅湯秘方分裝成小袋,此刻正安靜地躺在帆布包側袋裡。

  「等等,」她拽了拽沈硯的衛衣下擺,「我帶了點惠州特產,要不要分給你同事?」

  「特產?」沈硯挑眉,「不是說行李箱超重了嗎?」

  「但給你的同事們的份,我偷偷留了。」她眨眼,從包里掏出印著惠州西湖風景的油紙袋,裡面是用玻璃罐裝好的桂圓乾,還有手寫的酸梅湯秘方卡片。

  路過陳默工位時,她忽然停住。工位上擺著個歪歪扭扭的程式設計師公仔,胸前掛著「代碼永不崩潰」的牌子——和沈硯送她的薩摩耶公仔是同類型。

  她遞上一罐桂圓乾,「陳默,謝謝你之前幫我查數學題的解題步驟。」

  陳默瞪大眼睛,看看沈硯又看看周吔,忽然笑出小括號:「嫂子太客氣了!不過這桂圓乾……老大平時可捨不得分享零食。」

  「誰說的?」沈硯伸手搶過罐子,「她帶的酸梅湯秘方更厲害,消暑的同時還能提神醒腦。」

  「哦~」周圍忽然響起起鬨聲,幾個程式設計師湊過來,其中一個戴著「算法之神」徽章的男生笑道:「沈顧問這是被甜到寫bug了?」


  這時,張一明端著咖啡路過,目光掃過油紙袋。

  周吔遞上卡片:「張總,這是酸梅湯秘方,夏天煮了喝能提神。」

  「收下了!」張一明接過卡片,故意提高聲音,「不過沈硯,下次再用『優化睡眠』當藉口獨吞特產,我就把你的『專屬濾鏡』代碼公開。」

  「張總!」沈硯皺眉,周圍爆發出一陣鬨笑,有人開始喊「老大重色輕友」,有人追問「周吔專屬濾鏡」是什麼。

  周吔這才想起,沈硯曾說過給她定製過「情感濾鏡」。她湊近他耳邊:「原來你真的寫了專屬代碼?」

  「只是調整了0.3%的亮度和對比度,」他別過臉,「因為你在逆光下的睫毛……」

  「會反光,反光率37%,」她替他說完,想起工位上的便簽,「所以是『周吔綠』和『睫毛濾鏡』?」

  周圍突然安靜,幾個程式設計師掏出小本本:「筆記記下來!原來老大的靈感來源是——」

  「幹活去!」沈硯抄起鍵盤作勢要敲,人群鬨笑著散開。陳默趁亂拿走兩罐桂圓乾,邊走邊喊:「嫂子下次來帶點荔枝啊!上次寄過來的超級甜!」

  周吔看著被洗劫一空的油紙袋,忽然笑出聲:「你們程式設計師搶零食的樣子,像極了我和朋友搶烤肉」

  「因為代碼消耗熱量快,」沈硯收拾著空罐子,忽然從抽屜深處摸出個鐵盒,「不過我留了一手,你送的酸梅湯原料,藏在這裡。」

  鐵盒裡裝著曬乾的酸梅、薄荷葉,還有她手寫的便簽:「程式設計師加班必備,煮15分鐘即可,忌空腹喝。」

  臨近中午的時候,沈硯帶她去員工食堂。路過休息區時,有人在玩Switch,有人在打桌球,還有個程式設計師戴著VR眼鏡調試設備。

  「好悠閒哇,你們上班環境好輕鬆呀」周吔看著有人邊吃泡麵邊寫代碼。

  「這叫『彈性工作制』,」沈硯替她挑了靠窗的位置,「不過凌晨三點的會議室,比高考考場還熱鬧。」

  12:00·員工食堂張一明端著餐盤坐到對面,故意調侃:「聽說你給一位作家提供靈感了?沈硯沒吃醋吧?」

  「吃醋?」周吔挑眉,「他幫我想了好多細節,比如『橡皮擦滾到腳邊』的梗」

  「哦~」張一明拖長聲音,「原來『技術顧問』的工作範圍,還包括幫女朋友想戀愛劇情?」

  沈硯咬著吸管斜睨他:「張總要是這麼閒,不如去優化TikTok的海外推薦算法?」

  「哪敢啊,」張一明舉手投降,「不過說真的,周吔,」他忽然正經,「如果以後想拍短劇,字節的微視部門可以直接對接。」

  「謝謝張總,」周吔笑,「不過我現在連《雷雨》的台詞都記不全……」

  「記台詞?」沈硯忽然放下可樂罐,「我寫了個『台詞記憶小程序』,用艾賓浩斯曲線幫你規劃背誦,」

  「沈硯!」她打斷他,「你是不是連我的課表都想寫成代碼?」

  「差不多,」他認真點頭,「比如把『台詞課』設為每日9點提醒,『形體課』設為14點,還有……」

  「打住!」她假裝生氣捂住他的嘴,「我自己會安排,謝謝沈顧問。」

  午餐後,沈硯帶她參觀實驗室。玻璃牆內,工程師們在調試VR設備,屏幕上閃爍著抖音的未來界面——那是沈硯參與設計的「元宇宙短視頻」原型。

  「以後用戶可以用VR拍視頻,」他指著屏幕上的虛擬櫻花,「每片花瓣都是實時渲染的3D模型,飄落軌跡符合流體力學算法。」

  「聽起來像魔法。」周吔伸手觸碰玻璃,虛擬櫻花落在她指尖。

  「是代碼的魔法,」他輕聲說,「就像我用算法算出,今天帶你參觀的最佳路線——能避開所有需要開會的同事,還能在下午三點零七分,讓陽光剛好照到你臉上。」

  她轉頭看他,發現他耳尖泛紅,沈硯,」她忽然握住他的手,「你其實……」

  「其實什麼?」他低頭看她,睫毛在陽光下投下扇形陰影。

  「其實比代碼更懂浪漫。」

  窗外,此刻陽光正好,字節跳動大廈的玻璃幕牆反射著藍天白雲。周吔望著沈硯,忽然明白——有些代碼是寫給機器的,有些浪漫是寫給人心的,而她,恰好是他代碼里最溫柔的例外。

  下午,周吔的帆布鞋踏入沈硯的辦公室,目光被他工位的白板吸引。上面用馬克筆寫著一行未擦去的代碼:if (zhouye_smile == true){ world_light += 100;}


  「這是……」她指尖划過字母,忽然想起之前在惠州夜市視頻時,他說「你笑的時候,我心跳破表了」。

  沈硯伸手擦掉代碼:「測試用的偽代碼,不值一提。」

  「明明是『周吔笑了,世界亮了』,」她歪頭看他,「程式設計師的浪漫,就是把情話寫進bug里?」

  「被你發現了,」他嘆氣,從抽屜深處抽出一本《Python入門》,封面貼著便利貼:「給周同學的第一節編程課——2016.8.30」

  她愣住:「你還記得我們的約定?」

  「約定?」他裝傻,

  陳默抱著機箱進來,忽然指著周吔的帆布包:「嫂子!上次你寄的荔枝太甜了,我吃了三顆就寫了1000行代碼!」

  周吔掏出玻璃罐,「桂圓乾也一樣甜,你們程式設計師多補補、」

  沈硯扶額:「陳默,你話太多了。」

  陳默嬉皮笑臉:「冤枉!是嫂子寄的荔枝太好吃。」

  周吔笑出梨渦:「下次還給你們寄荔枝」

  沈硯打開電腦,屏幕上是精心準備的Python教學PPT。周吔抱著《Python入門》坐在轉椅上,眼睛亮晶晶的:「聽說程式設計師上課前都要『祭鍵盤』?」

  「祭鍵盤?」沈硯挑眉,把筆記本電腦推給她,「你想祭什麼?」

  「比如……」她從帆布包里掏出袋荔枝幹,「用特產賄賂老師,換取『作業減半』特權?」

  「賄賂技術顧問,按字節規定要扣年終獎,」他接過袋子卻忍不住笑,「不過看在你剛才給陳默他們分桂圓乾的份上。先說好,今天必須學會變量賦值。」

  「首先安裝Python環境,」沈硯調出官網,「點擊這個Download按鈕,」

  「等等!」周吔突然按住他的手,「為什麼不是中文界面?你們程式設計師欺負文科生?」

  「全球統一界面,」他耐心解釋,「就像抖音的算法邏輯,不分國界。」

  周吔打開VS Code,盯著空白界面皺眉:「這和Word長得不一樣……」

  「這是專業編輯器,」他忍住笑,「就像你們表演系用的斯坦尼斯拉夫斯基體系,程式設計師用的是」

  「停!」她舉手投降,「直接教我寫代碼吧,我要看煙花!」

  沈硯推開小會議室的玻璃門,投影儀自動投射出Python官方文檔,周吔跟著他走進來坐在椅子上,盯著滿屏英文抓了抓頭髮:「為什麼第一行代碼不是『你好,世界』?」

  「因為程式設計師的浪漫,從不說人話,」沈硯拖過轉椅坐在她身側,指尖在鍵盤上敲出經典語句:

  print(「Hello, World!「)

  「這行代碼的意思是,」

  「我知道!」周吔舉手搶答,「是你好世界!」

  「……」沈硯無奈笑出聲,「是所有程式設計師的初戀,每個編程故事的起點。」

  「那我的初戀代碼,能改成『你好,沈硯』嗎?」她拽了拽他的袖子。

  「可以,但要先學會怎么正確寫。」他調出中文輸入法,「看好了,」

  周吔突然按住他的手:「我自己來!」

  她皺著眉輸入:

  print(「你好,沈硯!)

  按下F5的瞬間,紅色報錯如煙花般綻放:

  SyntaxError: EOL while scanning string literal

  「錯了?」她盯著屏幕撇嘴,「是不是因為我沒寫『世界』?」

  「是因為右引號沒閉合,」沈硯用滑鼠圈出空缺的引號,「就像你背台詞時漏了半句,觀眾會出戲。」

  「哦……」她故意拖長聲音,「那技術顧問能不能示範一下,怎麼讓『你好,沈硯』完整齣戲?」

  他無奈搖頭,補全代碼,屏幕中央跳出白色字符:

  你好,沈硯!

  「現在是『完整齣戲』了,」他說,「但少了點程式設計師的儀式感。」

  「儀式感?」

  他在代碼末尾加上一行注釋:


  #致我的Hello World

  周吔湊近屏幕,睫毛在投影光中顫動:「這行小字是什麼?」

  「注釋,」他輕聲說,「不會被計算機執行,但會被程式設計師記住——就像劇本里寫的人物小傳。」

  「接下來學變量,」沈硯新建文件,「比如用name變量存你的名字。」

  周吔突然搶走鍵盤,快速輸入:

  name =「周吔「

  「這次沒報錯!」她轉頭看他,發梢掃過他下巴,「沈硯快誇我!」

  「先別急,」他故意調出控制台,「試試列印name變量。」

  她自信地輸入:

  print(name)

  屏幕彈出:

  周吔

  「看吧,我就說,」

  「等等,」他憋著笑,「你怎麼知道要直接寫變量名?」

  「因為……」她眼神飄向窗外,「我剛才偷偷看了半章書!」

  「撒謊,」他捏了捏她的耳垂,「書里這節標題是『變量:程式設計師的儲物箱』,你連儲物箱長什麼樣都不知道。」

  「沈硯!」她捶他肩膀,「你居然考我?」

  「那我再考考你,」他在代碼里加入新變量:

  love =「代碼「

  print(name +「愛「+ love)

  「猜猜會輸出什麼?」

  周吔歪頭思考:「周吔愛代碼?」

  按下回車,屏幕卻顯示:

  周吔愛代碼

  「為什麼沒有空格?」她驚呼。

  「因為字符串相加等於拼接,」他用滑鼠劃出代碼,「想加空格,得手動寫——」

  他修改代碼:

  print(name +「愛「+ love)

  這次輸出:

  周吔愛代碼

  「現在才對,」她滿意地點頭,「就像我對你說『沈硯愛周吔』中間要留足心跳的空隙。」

  沈硯的耳尖瞬間泛紅,快速最小化窗口:「下節課再學運算符優先級。」

  「現在教你寫煙花代碼,」沈硯調出海龜繪圖庫,「先導入模塊。」

  周吔突然指著他的代碼喊:「等等!你寫錯了!urtle寫成了turtle!」

  他定睛一看,果然多了個t:「……你居然能發現?」

  「因為我記住了urtle是『烏龜』的意思,」她得意的笑,這時候的她還是准大學生,人生中知識儲存量最多的時間點。

  「原來你才是隱藏的學霸,」他無奈笑,「那接下來,由周老師指導我畫櫻花?」

  「榮幸之至!」她坐直身子,「先畫花瓣,用for循」

  「等等,」他按住她的手,「for循環要記得寫冒號,還要縮進。」

  「知道啦!」她甩開他的手,輸入:

  for i in range(5):

  turtle.circle(100)

  turtle.left(72)

  按下運行,一隻綠色烏龜在屏幕上畫出五邊形:

  「怎麼不是櫻花?」她皺眉。

  沈硯憋笑:「因為你沒告訴烏龜,這是櫻花,不是五邊形——」他修改代碼,加入顏色和弧度:

  for i in range(5):

  turtle.color(「pink「)

  turtle.circle(100, 72)

  turtle.left(144)

  粉色花瓣在屏幕上緩緩綻放,周吔眼睛發亮:「原來櫻花的秘訣是144度!」

  「也是我每次看你的角度,」他輕聲說,「能看到最亮的梨渦。」

  陳默抱著文件夾進來,瞥見屏幕上的櫻花:「喲,老大這是提前過情人節?」


  「學編程,」沈硯淡淡道,「別亂猜。」

  「學編程需要畫櫻花?」陳默挑眉,「我學的時候只畫過二叉樹。」

  周吔忽然指著代碼里的注釋:「陳默你看!這行寫著『ZY的睫毛=37%反光率』!」

  「什麼?」陳默湊近屏幕,沈硯迅速最小化窗口:「 bug注釋,不值一提。」

  「明明是——」周吔嘴角笑出弧度,「程式設計師的情話加密術。」

  沈硯收拾電腦時,周吔忽然指著他的筆記本:「這是什麼?」

  頁面上是未保存的代碼:

  if __name__==「__main__「:

  while True:

  print(「周吔是光「)

  「死循環?」她挑眉。

  「是程式設計師的執念,」他合上筆記本,「就像我每天睜開眼,第一件事是確認你有沒有發消息。」

  「那我要給這段代碼加個終止條件,」她搶過筆,在後面寫下:

  if kiss == True:

  break

  「現在,」她晃著筆笑,「只有收到吻,才能跳出循環喔。」

  「霸道,」他嘆氣,卻在她轉頭時,快速在她額頭落下一吻,「這樣,循環終止。」

  傍晚BJ·字節跳動19層小會議室,沈硯用馬克筆在白板上畫完循環結構示意圖,轉頭看見周吔正用他的鍵盤敲《小星星》旋律,櫻花發卡歪到一邊。

  「認真點,」他彈了下她的額頭,「等會要學的是,」

  「等等!」她忽然指著他電腦上的代碼片段,「這個import base64是什麼?」

  「Base64加密,」他調出示例代碼,「比如把『周吔是光』變成亂碼,」

  他敲下兩行代碼:

  message =「周吔是光「

  cipher = base64.b64encode(message.encode()).decode()

  屏幕彈出:

  「周吔是光」

  周吔眼睛一亮,指尖划過屏幕:「那我現在發消息給媽媽,用這個加密,他是不是就看不懂了?」

  「理論上是,」沈硯忍住笑,「但前提是他也要知道解密方法,」

  他補全代碼:

  decrypted = base64.b64decode(cipher.encode()).decode()

  print(decrypted)

  輸出:

  周吔是光

  「哇!」她拍手,「這是不是黑客常用的技術?」

  「黑客?」沈硯挑眉,「黑客更擅長攻防,比如滲透測試、漏洞挖掘——」

  「那我能學嗎?」她拽了拽他的衛衣袖子,「就像《黑客帝國》里的崔妮蒂,用代碼控制世界!」

  「控制世界需要先控制變量,」他調出Python官方文檔,「比如這個os.system函數——」

  他輸入:

  import os

  os.system(「shutdown -s -t 60「)

  周吔驚呼:「你要關機?!」

  「只是演示,」他快速取消命令,「真正的黑客不會用這麼粗暴的方式,而是用社會工程學」

  「社會工程學?」

  「比如,」他忽然湊近她耳邊,「假裝成快遞員騙你開門,或者,」

  「停!」她捂住耳朵,「我還是學加密吧,這樣給你發消息,別人就偷不走了。」

  「小偷要是知道你用Base64,」他彈了下她的發卡,「會笑到打鳴。」

  周吔忽然搶過鍵盤,輸入:

  import random

  def hack_shenyan():

  return random.choice([「請喝奶茶「,「陪看電影「,「寫代碼情書「])


  「這是什麼?」沈硯挑眉。

  「黑客程序,」她一本正經,「每次運行都會隨機觸發你的『指令』。」

  他看著屏幕上跳出:

  請喝奶茶

  「耍賴,」他嘆氣,「這個程序沒有終止條件。」

  「所以是死循環呀」她晃著手機,「就像我喜歡你,沒有終點。」

  沈硯的耳尖略微泛紅:「下節課學網絡爬蟲,現在去吃飯。」

  路過茶水間時,周吔忽然指著陳默的電腦:「他在幹嘛?」

  陳默正在用Wireshark抓包,屏幕上滿是數據流:「抓TikTok的海外請求包,找漏洞。」

  「漏洞?」周吔眼睛發亮,「是不是像衣服上的破洞,需要用代碼縫補?」

  「差不多,」陳默笑道,「比如發現某個接口沒有做權限校驗,黑客就能——」

  「陳默!」沈硯打斷他,「你是想讓她半夜起來寫漏洞報告?」

  「不敢不敢,」陳默舉手投降,「不過嫂子要是想學,可以參加我們的『白帽黑客訓練營』——」

  「真的?!」周吔轉頭看沈硯,眼神發光。

  「可以,但每周只能學兩小時,」沈硯妥協,「而且必須先寫完今天的作業,用Base64加密一段台詞,發給我。」

  「成交!」她伸出小手和沈硯拉勾。

章節目錄