這兩天我拿了一個從 TypeScript 編譯後,又經過 webpack 壓縮過的 JavaScript 檔案,到一個比較老舊版本的 node 環境(node 6)上面執行。一跑下去,出錯。
Node 直接跳出 syntax error 語法錯誤,錯誤訊息則是遇到了不認識的 token 也就是,這份編譯打包過的 JavaScript 中,包含了老舊版本 node 不支援的新語法。
遇到這的錯誤的當下我束手無策。那個編譯過的 JavaScript 裡頭只有一行,但是在那一行當中總共有 8k 個字元,光憑編輯器與肉眼,根本不可能看出(或是不可能想去看)是什麼地方出了錯。光憑印象把把 TypeScript 與 Webpack 的設定改了改,要求輸出成 ES5 時代的語法,沒用。
2026 年遇到問題直接先找 AI 可能已經是起手勢,AI 先跳下去看那個 8k 大小的檔案,鎖定了問題不在我自己的程式中,而是一個外部 depedency,這個外部套件用了非常新的語法,而且我所做的 Webpack 設定並不會套用到這個外部 dependency 上。AI 給的建議是除了 TSC 與 Webpack 外,我還需要再加上 Babel,讓 Babel 把所有的程式都轉成 ES5 語法。
再跑一次,syntax error 消失了,取而代之的是一個 runtime error,錯誤是那個 dependency 用了新版的 RegEx 的語法,在轉譯過程中,導致出現了沒有初始化的變數名稱。既然都用上 AI,那就繼續用到底 — AI 就自己多加了一段 poly-fill,拿一段呼叫舊版 RegEx 的函式,把那段用上新版 RegEx 的部分換掉。好了,終於可以跑起來。
這在沒有 AI 之前,光是要鎖定問題是出在哪個部分 — 自己的程式、打包設定,還是其他 dependency — 對人類來說就十分困難。人類的慣性就是先去看自己熟悉、能夠掌握的部分,比起去看整個打包過的 webpack 以及別人寫的 dependency 那些超過腦力負荷的地方,還是會先去看自己寫的部分,問題其實不在那個地方,但人類的選擇就是會在那消磨時間。你明知道問題也可能會在舒適圈之外,但舒適圈之外,只有滿滿的不舒適。
解決問題的那瞬間,我是那麼強大,又是那麼無力。
※ 其一
解決問題之後,就難免會去想 — 在 AI 的時代,程式語言到底應該是什麼樣子。
目前最常看到的各種 AI coding 工具,還是去讓 AI 去寫人類常用的幾門程式語言,去做常見的前後端、app 開發之類的工作,或者是看到有人覺得可以拿現在一些程式語言當作設計 AI prompt 的工具,我還記得去年 Matz 在 COSCUP 上演講的時候,老王賣瓜說 Ruby 非常適合用來跟 AI 溝通。但顯然,AI 可以讀懂人類肉眼無法閱讀的程式,那反過來,AI 寫也會那些人類自己不想寫、不會寫的程式。短時間大概不會有什麼變化,但是在 AI 的時代,程式語言不見得要是現在的樣子。
某方面來看,如果 AI 會讓更多原本不也程式的人也投入軟體開發,那麼程式語言是不是要更接近自然語言,讓更多人類也更容易理解 AI 寫了什麼?過去的程式語言的發展過程中,一直有讓讓程式語言接近自然語言的嘗試,上古時期有 COBOL,我自己小的時候也玩過一些 HyperTalk 與 AppleScript,別的語言寫 $a =1,HyperTalk 寫成 put 1 into a。這些語言到現在都不流行,原因或許是寫起來囉唆,輸入的成本與邏輯的密度不成比例,人類不想寫,但如果變成是 AI 的產能,AI 不覺得累,會讓這樣子程式語言復興嗎?
也或許是,最後不管 AI 寫出了什麼,人類也根本不想去看,最後就直接讓 AI 去寫機器碼直接執行算了。
然後,人類自己讀不懂的 binary code,AI 卻有辦法理解裡頭的所有符號,還原成原本的邏輯,原本可能很困難的反編譯等逆向工程,突然就變得自動化了。而為了防止 AI 太容易理解 binary code,所以編譯器裡頭也需要加上 AI,讓 AI 在 binary code 裡頭塞上一些其他 AI 不容易理解但是又不影響機器執行的 code,在編譯跟反編譯的過程中,會有一堆 AI 神仙打架,而這些都不關人類的事,人類最後知道 AI 幫你加上了保護,但自己也不知道 AI 加了什麼保護。
前幾年新聞還在說,許多銀行還在使用早期的資訊系統,但卻苦於找不到熟悉 COBOL 的老工程師,現在這問題的解方也很清楚,既然人類不會寫,那就讓 AI 寫,AI 成為了我們的永生的老工程師,幾十年的經驗最終被壓縮在幾百個英文字的 agent skill Markdown 檔案裡頭。同時,過去人們抱怨 COBOL 這樣的語言又臭又長,現在則開始把 prompt 與 skill 寫得更臭更長。
Become a Medium member
我們的金融系統接下來就會被 AI 統治,在 AI 發展出自我意識消滅人類的時候,首先會做的就是癱瘓金融系統。
※ 其二
軟體從來就不只是寫程式而已。程式寫出來、經過測試,完成了 99% 之後,接下來 99% 才要開始,後面的 99% — 是交付與發布。
我有個朋友說,AI 創造了一個個人化軟體的時代,但個人化了,然後呢?AI 像是讓每個人都可以在自家的車庫輕鬆變出一台名車,這台名車可以隨便按照你自己的意思客製,可是當你想要讓車子上路的時候,卻發現你需要一張牌照,而且路上到處都是收費站與憲兵的檢查哨。
你想要將 App 發布到 iOS、macOS 這些蘋果的平台上,你要付上架用的年費,如果提供各種數位商品另外抽成。Android 平台上現在也要逐步限制不能隨意打開 APK。
Windows 平台呢,你可以選擇將軟體上到 Market 上,如果不想透過 Market,軟體沒有經過 code sign,就直接被當成惡意軟體,想要自己 code sign,又得去那幾家公司買個憑證,還不是線上刷卡就好,人家會來查核到底有沒有你這個人,或是你成立的公司,然後寄給你一個包含憑證的 USB Dongle,每年再付一次錢,用 AI 弄出一個個人化軟體之後,你也不知道能不能回收這些費用。
Web 平台很自由吧?而 2026 年的 AI 工具,每個都讓你除了一鍵產生一個網站之外(中間可能還有個步驟,要你輸入 API Key),還做到一鍵發布,把網站發布到各式各樣的雲端 SaaS 上。這意思也很清楚,對方也不知道你的網頁 app 有沒有人用,會不會成功,但等到你的流量上去了,也不管你的流量是否可以轉換成收益,帳單都會先寄到你的信箱。
Linux 上面或許沒有收費站,但也充滿了麻煩的發布方式碎片化。你沒辦法只放出一個 tgz、rpm 或是 deb 檔案,還得發布到各種各立山頭的套件管理系統上,apt、AUR、Flatpak、Snap、AppImage。在 Linux 的世界中,你像是將車子開到了每五公里就有一個村落的小路上,每個村落都有自己的交通規則。
曾幾何時,那種大家紛紛架設 ftp 站,從 ftp 上可以找到各種軟體的發布方式,就已經一去不復返了,現在大概 Linux 的安裝 iso 還用這種方式發布。那時候不同的 ftp 站互相 mirror,軟體下載下來就能用,也沒不會突然跳出這個軟體可能會傷害你電腦之類的訊息。
在自由軟體這一塊,某方面來說,或許可以發明一種新的 AI installer,開發者也不用去打包上架到各種套件管理上,所有軟體都用程式碼方式提供,讓 AI 自己讀懂 README 然後按照說明把專案 clone 下來,然後安裝編譯工具(當然也是透過 AI Installer 裝)自己編起來。
不管每個人做了多少台名車,監理所、收費站、檢查哨與交通規則一開始就在那邊,現在在那邊,以後也還在那邊。當動手造車的樂趣被機器代勞之後,人類的工作也不只是監督機器而已,而是要有更多人要去跟監理所、收費站與檢查哨打交道,要用信用卡與商業登記取得各種證明,要去處理合規,而有愈多的車想要上路,代表監理所、收費站與檢查哨需要愈多人。
人類的這類型工作,我們通常叫做 paper work,負責 paper work 的職位,我們通常稱為官僚。
※ 其三
也或許未來根本就不需要那麼多人工作,有愈來愈多的人可以離開職場回到家庭,回去從事家務勞動、育兒與長照,遠離職場的紛紛擾擾,回歸家門裡頭的恩恩怨怨,人們可以花更多力氣去愛、去恨、去燒幹、去爭奪遺產,去繼續互相傷害。
也或許未來的社會,會是一個由算力建立起來的社會,AI 消耗的 token 會代替現在的貨幣,怎樣濫用算力成為了新時代的奢侈,算力自由才是真正的財富自由。算力重新定義我們所知道的階級,顯示卡變成了婚嫁時最有價值的嫁妝與采禮。也或許有算力的男人可以娶四個老婆,有算力的女人也可以娶四個老公。