看美劇學程式設計之《輪迴派對》
題記:
本文為混沌學社的程式設計零基礎學員而寫,因為很多零基礎學員對於如何Debug程式碼很迷茫,希望他們可以藉此文章來對程式Debug的思想有一個整體認知。
介紹
《輪迴派對》英文名叫《Russian doll》,是網飛原創的新劇,目前已出第一季。一共八集,每集25分鐘。

不敢說這部片只有程式設計師能看得懂這樣的大話,但程式設計師應該能看得更加深刻。
這部劇表面上像是《恐怖郵輪》那種主角陷入了無限死亡重生迴圈的輪迴裡,就像遊戲一樣,死亡以後再出生地重生。但實際上,這部劇的死亡重生輪迴的背後遵循著一種邏輯:程式設計師程式設計日常。
且聽我慢慢道來。
故事
假如你的人生是一個程式,並且這個程式是你自己親自編寫,會怎麼樣?

本劇的女主角,名叫Nadia,是一位36歲的單身程式媛,劇情從她自己的生日派對開始。她的閨蜜幫她舉辦了一場生日派對,她從派對中出來走在路上就被車撞死了。但是她由在派對洗手間裡再次復活了,並且保留著上一次死亡的記憶。輪迴就這麼開始了。
在她被車撞之前,還回到家裡寫了一些程式碼(在派對結識某男子),看樣子像一個遊戲程式設計師。其實這個鏡頭,已經開始給觀眾暗示了: 鏡頭左邊是程式碼,右邊是虛擬空間的一個人,程式碼執行右邊的模型就開始運動。這個鏡頭其實是做了極簡的處理,真正的遊戲開發,介面沒有這麼純粹(只有程式碼和模型)。
但這是第一集,劇情剛剛開始,很少有觀眾能意識到這個暗示。我也是看完以後覆盤才抓到這個點。
第二個暗示,是在Nadia第一次復活以後派對的第二天早上去公司裡上班發生的一段對話。

Nadia第二天去了公司,和團隊其他成員開會。在會上,同事指出Nadia提交的程式碼中存在一個漏洞。然後圖中右邊的這位同事又特意跟了下面一句話:

「你不用現在就修復,Nadia」。但是Nadia馬上就打開了電腦,然後說出了下面這句話:

然後就開始改起了程式碼。同事欲言又止,還打算繼續阻止她。她馬上作出一個讓大家禁聲的動作,同事只能閉嘴。結合上面同事說的那句話,可以得到一個資訊:「Nakia可能經常這樣,獨來獨往,靠自己完全解決問題,有Bug馬上改掉,不願意溝通。」
Nadia改Bug的速度倒是挺快的。

不過她看到的是同事Bob留下的錯誤,並不是她自己的錯誤。說實話,現實中很多程式設計師都有類似的毛病,Bug都是別人的。在快速修改完之後,她就藉故離開了。從始至終,她都沒有和同事好好交流一句話。同事對她的表情顯得非常無奈和無助。

不出意料,Nadia又一次死亡了。在Nadia第二次死亡之後的早上,她手機裡收到這樣一個資訊:

手機資訊顯示,Nadia在11點30分有一個程式碼評審會議,也就是Code Review。這個評審會議就是她在第一次重生的早上參加的那個會議。這次程式碼評審會議的片段,是本劇的第二個暗示。
第一次重生之後,Nadia以為是自己吸可卡因產生的幻覺,經過求證以後,發現死亡重生是真實存在的事實。但是身為程式設計師的她,改Bug超快的她,開始意識到,她的人生是不是產生了漏洞?
但是她尋找原因,卻一直沒有找到問題所在。直到在第四集的一次電梯事故中,她遇到了一個和她一樣陷入死亡輪迴的人。在重生以後,她找到了他,發生瞭如下對話:




也許大部分觀眾能看懂這段吧,程式和漏洞的解釋都說清楚了。但是能否對映到劇情發展呢? 這是本劇的第三個暗示: 他們的死亡,就是他們的人生程式崩潰了,他們只有修復漏洞,才能跳出死亡輪迴。
那麼,如何尋找漏洞呢? 我們的女主Nadia想到了辦法:


Nadia建議,回到他們第一次相遇的便利店裡,重新進行一次互動。第一次相遇的時候,是他們第一次死亡的時候,如果能相互阻止對方的死亡,那漏洞就算解決了。可以說,Nadia之前的死亡有很多次都是她自己一個人在做單元測試。
但是,在他們準備「單元測試」的時候,還沒走到便利店,Nadia就再一次死亡了。

如果不是程式設計師,恐怕很難理解這是為什麼?
本劇中還有一個現象,就是隨著死亡不斷地輪迴,女主派對上的人和物、男主家裡的東西都在逐漸消失。
其實程式設計師在Debug程式的時候,有一種方法: 通過逐步刪除掉一些程式碼來逐步定位到Bug產生的根源。如果刪掉了程式碼,程式還繼續崩潰,那麼說明Bug就存在剩下的程式碼中。可以認為是一種排除法。
而隨著劇集不斷消失的人和物,想必就是被刪除的程式碼了。當Bug逐漸要浮出水面的時候,程式碼的崩潰速度就會越來越快。女主的心肌梗塞,正是表示人生程式碼Debug即將成功定位到Bug的象徵。
經過幾次心肌梗塞,女主終於發現了自己人生程式碼中的漏洞:



原來女主小的時候,有一個很差勁的母親(精神不穩定)。她現在的性格,多少是有點母親的影響: 別人都是錯的,就她自己是對的。並且,也道出了一個祕密:


Nadia是她母親的閨蜜養大的,而且是Nadia實在受不了她的母親,拋棄了她的母親,去找了她母親的閨蜜住在了一起。不到一年,她母親就死了。但是這件事一直讓她走不出來,她長大以後一直認為是自己害死了母親。
但是她母親閨蜜的一句話讓她解脫了:

Nadia最終認識到,母親的死亡不是她自己的過錯。她的人生漏洞,被修復了。而男主呢,也意識到了自己的問題,同樣修復了自己的人生漏洞。

所以,他倆再次重生了。這次重生,之前消失的人和物都回歸到了第一次死亡的時候。
這就是程式設計師定位到Bug,將之前Debug程式碼復原的象徵。
Bug定位了,漏洞修復了。我們的女主和男主按之前的約定,打算去最初見面的便利店做「單元測試」的時候,卻發現:

非程式設計師看來,這是一個平行宇宙。但程式設計師看來,這只不過是因為程式碼沒有合併而已。
程式設計師修復Bug,通常會從程式碼版本管理工具的主分支中各自切出一個子分支,然後各自修復程式碼,修復完程式碼之後,再進行合併處理。
也就是說,Nadia和男主,分別從世界主分支中,各自切出了自己的子分支去修復了漏洞。
Nadia修復了自己的漏洞,去找男主,但是發現男主並不認識他。這其實就是Nadia自己的程式碼分支,男主的人生程式碼還是之前的。
而男主修復了自己的漏洞,同樣發現Nadia也並不認識自己。他是在自己的程式碼分支。
那麼接下來該怎麼辦呢? 好辦!Merge程式碼。但是在Merge程式碼之前,是不是要來個程式碼評審呢?
在「分支錯位」的這段時間裡,雖然互相不認識,但是Nadia和男主都在盡力去幫助對方,阻止對方的死亡再次發生。直到二人最終走到了一起。
這個過程,就是程式設計師程式碼評審的象徵。 Nadia看男主的程式碼是哪裡錯了,看他是否修改的正確,同理,男主看Nadia的程式碼是哪裡錯了,是否修改正確,並且相互交流意見。雙方達成一致就可以Merge程式碼了。



本劇最後的這幾個鏡頭,在我看來, 完全像是Git分支合併的視覺化。
小結
《輪迴派對》給了我兩組啟示:程式設計啟示和人生啟示。
程式設計啟示:
1. 單元測試很重要,否則你可能連分支錯位都發現不了。(程式設計師經常發生選錯分支修改程式碼的烏龍)
2. 不要逃避程式碼評審會議,團隊溝通很重要。
3. 發現Bug,不要著急修改。要系統性地定位Bug的根源。一切都有因果。
4. Debug程式使用逐步刪除的方式(進一步簡化程式碼),是一個好的技巧。
所以,現在大家都明白我說《輪迴派對》程式設計師可能會看得更加深刻的原因了吧?
人生啟示:
1. 命運,就像是程式,看你如何編寫。
2. 人生中遭遇波折與低谷,不必糾結對與錯。它們其實就像是程式裡的Bug,只要找到問題的根源,即可修復它。
3. 就算你不想成為程式設計師,學一點程式設計還是很有用的。是不是?
你呢?有什麼啟示?