Life Wrapped 2024:帶來傷的人,帶來愛的人
最不可控的是人,因為那是命運。超過一定程度的合作,價值觀一致、能力互補,依然是基本條件。
Richard Lin 林柏儒,2024-12-26

六月在診所工作上遇到一連串事情,讓我需要休養一段時間。這些事情,我簡單歸結於:診所經營理念的分歧,已經無法形成共識。

那一晚,在全然漆黑的書房中凝視夜空,緩慢而仔細的拆解思緒,試著遍歷每一種可能。當曙光透出雲頂,我決定結束一切,因為希望僅存於結束之後。

上半年雖然不是沒有波折,但和下半年相比簡直不值一提。接下來,我會把焦點放在下半年來的日子。

從積極逃避到隨心所欲

七月初的前兩週,積極逃避了一陣子。

稱為積極逃避,是因為那時所做的事乍看之下都很積極。和獵頭接觸、和幾位朋友聊聊可能的機會、接下許多工作。共同的核心,卻是逃避某件事,一件顯而易見的事。

後來換了一套策略,姑且稱為隨心所欲模式:當下想做什麼,就做什麼。

這意外的非常困難。大部分時候並不知道自己想做什麼,焦慮感不斷湧上,又做不了什麼。

之前太習慣理性規劃後按部就班執行,對自己的感受並沒有很敏銳。一時要把框架都放下,還真不知道怎麼過日子。

當時我想,不如就做任何能讓心情變好的事。我用手機 app 追蹤自己的情緒,仔細記錄一天內的情緒波動。分析時發現,心情高峰經常伴隨同一個活動。

(學)寫程式。

This is CS50

之前我並沒有寫過程式。雖然偶爾興起想學的念頭,卻常因工作太忙,只有假日零星看過幾次教學影片。既然這讓我感到開心,時間又多了不少,那就多投入一些吧?

於是從七月開始加大投入,沒想到後來直接上癮,幾乎每天都想寫,一路延續至今。

這堂頗具盛名的 CS50 ,是哈佛大學的計算機概論課。課程影片可以在 Youtube 免費觀看,教學品質相當好,我很喜歡。

而現在 AI 工具也相當方便,等同一個 24 小時無限耐心家教。雖然不總是正確,但對學習依然很有幫助。

進度上到一半,就忍不住先配合 AI 開發自己想用的腳本。例如,做個小爬蟲把新聞網站的日報爬取給我,詳細的專案內容我放在 Github 網站上。現在回頭看,自然是不忍卒睹,但作為第一個實作成果也是蠻有成就感。

這也成為與好幾位工程師好友的話題。除了入門方式與相關社群外,居然還有朋友建議可以刷個 Leetcode,挑戰軟體工程師技術面試的題庫,也太狠🤣

在眾多建議中,「做中學」非常中肯。所有的 bug 都是來教我的,不管用什麼方式 debug,是 debugger、google、stackoverflow、ChatGPT,甚至大神朋友,觀念和經驗就是這樣建立起來。

在嘗試中也發現,「不懂程式也能用 AI 寫程式」的路線雖然表面上可行,但少了關鍵的基礎知識,往往在完成度 85% 時突然陷入泥淖。龐大的程式碼讓 AI 更常陷入幻覺,AI debug 進一步退兩步,鬼打牆半天走不出來。

這時能走出來的關鍵,往往還是靜下來弄懂幾個核心概念。CS 知識會決定 AI 寫程式的上限,這是事實,其他領域也可能如此。

如果你想嘗試 CS50 這堂課,前期會需要多點耐心,因為前半段的基礎概念幾乎都是用 C 語言來教學。這對於很多基本概念的理解有幫助,但如果不在意基礎概念,想更快上手用程式解決問題,也可以考慮從 Python 開始。

Running on the Net

雖然自己並不特別喜歡網站開發,但畢竟是最直觀的應用之一,還是嘗試接觸了一段時間。

即便僅是透過螢幕顯示,但網站和餐廳意外相似。IP、port、DNS 這些概念就像地址、房號與地址簿。前端就是外場服務團隊,後端是內場廚房團隊,資料庫則是冰箱。營運流程如何順暢、防呆,許多原理都是共通的。

因為早期對 Python 相對比較熟悉,專案後端先選了基於 Python 的老框架 Django,避免在摸索後端概念時還要面對語言問題。不過前端就離不開 Javascript 了,使用 React 框架後還需要進一步變化為 Typescript, JSX 與 TSX。

這個時候就會想起,為什麼 CS50 的課程目標會設定為學習如何寫程式、如何自行學會其他語言,而不是學習某個語言。這些語言背後有許多共同的思維,真的是一法通萬法通。

有趣的是,對於不同的程式語言,符號差異通常不是大問題。在 Python 中句尾不需要分號,C 和 Javascript 需要,這不是重點。在這之上有一道隱形的「文法」門檻,也就是程式設計典範(programming paradigm)。

不管用什麼語言,入門學到的通常是命令式程式設計(imperative programming),也就是你叫電腦做什麼,它就做什麼,一個口令一個動作。

而 Python 流行的文法叫做物件導向程式設計(object-oriented programming),這種文法會模擬真實世界的互動行為。寫得好的話,整個程式讀起來會很像英文,名詞、動詞、形容詞都有。

另一方面,Javascript 流行的文法則是事件驅動程式設計(event-driven programming),這種文法寫起來就像一條條的「若 A 則 B」,對應人類使用網頁的行為。此外也有不少類似函數式程式設計(functional programming)的寫法,例如函數表達式,看起來就像一組不斷嵌套的數學方程式。

這些文法如果沒學會,就像學了很多單字卻不會講話,怎麼寫都很卡,也是我前期比較苦手的部份。

如果後退一步來看,這些語法文法也都只是實踐的工具,而電腦科學真正重要的概念自成一格。資料結構、演算法、計算機網路、作業系統、系統設計……與種種延伸的應用領域,構成當代科技史的關鍵背景之一。

在 CS50 的作業中,最開心投入的還是資料結構與演算法,那比寫網站有趣多了。在目前的網站專案完成後,或許換個方向看看。

沒想到,自然狀態下的自己,依然是那個東摸摸西摸摸、卻總能玩得有模有樣的人。在丹麥、在臺灣,在臺北、在臺南,都是如此。小時候如此,現在如此,未來說不定也是如此。

帶來傷的人

在這個階段,有興趣作為緩衝,或許也是好事。簡報團隊的同事描述:「我從未見過你如此傷心。」

確實,他沒有見過。目前為止的人生中,最令我傷心的事件恰好發生在加入簡報團隊前幾個月,那已經是十年前了。這一次,可能排第二或第三名吧。

在許久之前的文章〈柱間的世界:自由、意義與人生追求〉中,曾提過我的人生意義來自價值、關係與超越三大支柱。在這次事件中,一次斷掉兩根。

斷掉會再長回來,這無庸置疑。先留下幾個語焉不詳的感想。

命運難以介入,不必抱持過多期待

順手幫忙之類的善行當然沒問題,畢竟不會抱持期待或要求回報,改變也有可能發生。

然而,命運不只是隨機性,更是性格、認知與環境交織構成的結構。雖非牢不可破,卻有大量的負回饋機制使其難以撼動。最不可控的是人,因為那是命運,人的能動性只佔一小部分。被擾動的系統,終將回歸穩定態。

不是不該介入,當然可以介入。只是不必強求,求不來的。

以為是罰金的,其實是入場費

在兩年前決定答應邀約之際,我就有犧牲友誼的覺悟。如果診所事業在我參與後依然失敗,要維護友誼自然不切實際。

大致正確,但有個細節我徹底搞錯:那不是罰金,而是入場費。

關係不是在事業失敗後才會改變,而是無論事業多麼成功、相處多麼融洽,在開始合作的第一天就已經改變。而且,合作越成功,改變越劇烈。

關係的耦合不會正交。相關性為正的時候,生命的波動自然會加劇,無論是向上,或是向下。

如今看來,既然我的初衷已經完成,也要把尾款繳清,不然利率可是很高的。

利益一致並不足夠,遠遠不夠

我在設計系統時,一定會確保利益對齊,以引導行為方向一致。雖然合理,但不是最上位的作法。原因很簡單,人類不是理性經濟人。

價值觀決定長期目標,目標決定何謂利益。只要不是價值觀幾乎一致,共同利益就有期限。至於何時到期,再一次,最不可控的是人,因為那是命運。

超過一定程度的合作,價值觀一致、能力互補,依然是基本條件。

帶來愛的人

而與我價值觀一致、能力互補的女友,今日也正式成為前女友。

十歲相識,二十相戀,三十成婚。簽下至今最具份量的合約,帶回一對有彼此姓名的身分證,是如此沈重又輕盈。

此後的每個十年,都是妳。