西元 845 年,唐武宗李炎在位,長安城燈火通明。在這座繁華無比的帝都,欽天監的燈火卻徹夜不滅。隔著重重宮牆,沒人知道,一位來自一千兩百年後的「異世界軟體工程師」,正坐在陰陽混雜的星圖前,寫下人類曆法史上第一次由「程式碼」召喚的奇蹟。這是一場穿越時空的技術革命,也是一次大膽的古代「複盤」──他用 Python 改寫了整個唐朝的日曆。
想像一下:現代人熟悉的「時間戳記」、「閏年判斷」與「物件導向」,遇上「黃道吉日」與「太初立元」,會迸發出什麼樣的火花?當唐武宗發現,這個看似荒唐的年輕人真能預測百年一遇的日蝕,並且算得分毫不差時,他不禁驚呼:「此人莫非天機入體?」大筆一揮,當場封其為「天機真人」。這篇歷史腦洞文,將帶你一步步走進欽天監,看見一位程式設計師如何用現代演算法,重寫大唐的星空。
他叫林知遠,典型的現代工程師,白天寫前端,晚上刷 LeetCode,最大的技能是在 5 分鐘內寫出爬蟲抓股票資料。一切的一切,都斷送在一場荒謬的「加班後宿醉」──醒來時,身邊沒有機械鍵盤,取而代之的是竹簡、毛筆與一屋子滿臉驚恐的唐朝官員。
「來人!有刺客!」「大膽!竟敢夜闖欽天監!」林知遠還沒反應過來,就被五花大綁帶到太史令面前。太史令是個白鬍子老人,手裡捧著巨大渾天儀,看著眼前這個滿嘴「靠北」「架構」「雲端」的年輕人,認定他「妖言惑眾」。但作為古代最講究「實證」的機構,欽天監沒有隨便斬人,而是丟給他一個「不可能的任務」:修正即將出現的日蝕預測誤差。
「若你三日內,能算準下個月蝕的時刻,老夫保你不死。否則……」太史令指了指遠處的龍首渠,意思不言自明。表面上,這是個生死考驗,但對林知遠來說,這根本是送分題──他的筆記型電腦雖然沒電了,但他最自豪的,就是那顆能用「手算迴圈」的大腦。他撿起樹枝,在沙盤上寫下人生第一行古代 Python:if 日蝕_預測_時間 == 真實_時間: print("皇上萬歲")。
他很快發現,唐朝的欽天監不是沒有能力,而是被古老的「曆元」系統綁架了。唐代的曆法(如《大衍曆》與《宣明曆》)其實已相當精準,但曆法推算必須仰賴大量人工手算,中間只要一個變數抄錯,就會導致整個月份偏移。林知遠的任務,不是發明天文學,而是建立一套「去蕪存菁」的資料管道。
林知遠沒有立即動手寫程式,而是先做了一場「技術閒聊」。他翻開《宣明曆》的推步表,發現唐代的天文官早已明白「朔望月週期約為 29.53059 日」,這與現代數值相差極微。但問題在於,他們必須將這個小數以「分數」的方式呈現,並且套入六十甲子循環。換句話說,每位天文官都是一台「人形計算機」,而人難免出錯。
得知自己可以透過「精算表格」來一一驗證舊資料後,林知遠突發奇想:不如把這些數據全部結構化,用「資料庫」重新建模。他找來幾十片空木簡,在上面刻下「朔月」、「望月」、「盈虛」、「歲差」欄位,並以公元 845 年作為基準點,開始建立唐朝第一個「降水與星象的演算法模型」。這在旁人看來,只是數星星,但在現代人眼中,這叫「ETL 資料清洗」。
既然要寫程式,就得有邏輯抽象化能力。林知遠將所有天文現象視為「天體物件」:月球、太陽、黃道帶之間,透過「繼承」與「介面」相互關聯。他設計了三個主要類別:
在木簡上,他用小篆刻下「class 太陽曆:」和「def 計算節氣(self)」,雖然沒有直譯器,但他腦內的「Python 直譯器」運轉得飛快。他將唐代既有的「定朔法」改為「平朔法與定朔法雙通道比對」,並採用牛頓迭代法(用古老的算籌模擬逼近)來計算月球不規則運動。此舉讓預測結果的誤差,從原本的「時辰級」縮小到「一刻鐘內」。
「這太扯了!你這小子到底用了什麼妖術?」太史令瞪著眼睛,看著木簡上整齊的「輸出行」:西元845年9月13日,辰時一刻,日蝕初虧。這與他手上祖傳的手抄本完全不同,但他總有種直覺,這個奇怪的年輕人,或許真的將「天道」變成「迴圈」了。
有了初步預測的成功,欽天監上下開始對林知遠改觀。太史令決定將整個部門「數位轉型」──當然,在唐代沒有伺服器,只有「木簡雲端」與「人工儲存」。林知遠組建了一支「敏捷開發團隊」,成員包括兩位擅長算術的司曆、一位懂星象的靈台郎,還有一位專門磨墨的工讀生。
林知遠建立了每日「站會」的機制:每天早上,所有人都要站在渾天儀前,報告昨天算出的星數以及今日的「阻塞點」。他把工作流程拆分成「需求文件」(用詩經體撰寫)、「開發任務」(刻在竹片上)與「測試案例」(以日蝕與月蝕為標準)。這根本是古代版的「Scrum」。
古代沒有 GitHub,但有繩結。林知遠教導團隊,每當修改一個曆法參數,就要在對應的繩子上打一個結,並在旁註明「commit message」。起初,兩位老官員相當排斥:「我們幫朝廷算曆法,豈能學這粗鄙之術?」直到一次失誤,有人不小心將節氣時間抄錯,導致地方官員提前播種。林知遠淡淡說:「若是用版本控制,我們就能回溯是哪一條繩結出了錯。」從此,再也沒人敢說繩結沒用。
甚至在一次長安城的文化祭上,林知遠還開發了一套「互動式曆法查詢介面」(ILC):只要在欽天監外設置一個巨型圓盤,百姓轉動指針,就能查出「明日宜忌」與「日蝕警報」。這被後世視為「唐代的第一支互動式 App」,而林知遠則苦笑:「這其實只是 .getElementById 的一種變體。」
在唐代,天文被視為神祕學,老百姓只懂得仰望星空,卻無法理解複雜的天文圖表。林知遠決定打破這道鴻溝。他耗費大量心力,將星象模擬成「十二星座雷達圖」,並將其畫在絹布上。他教導伶人,將每月節氣與日蝕發生機率編成歌謠,讓兒童傳唱。皇帝見了甚是歡喜,稱這叫「順天應人」。
更妙的是,他用五色絲線與琉璃珠,在欽天監大堂內製作了一幅「動態星空圖」。當牽動特定索繩,星辰的位置會隨之移動,呈現出未來三個月的日、月軌跡。這個發明,既是「天文望遠鏡的投影」,也是「古代版 GUI」:不需任何數學背景,只要看看珠子位置,就知道何時會發生月暈或日蝕。皇宮貴族爭相參觀,一時間,欽天監竟成了長安城最熱門的「博物館」。
然而,太平盛世底下,暗潮洶湧。林知遠的革新,勢必得罪了舊有的天文世族。在唐代,天文曆法之學多由世家大族掌握,例如「李淳風」後人與「南宮說」的弟子,皆視欽天監為世襲領地。如今,一個「不懂禮法」的穿越者竟能獲得皇帝信任,他們豈能善罷甘休?
為首的太史丞王伯溫,聯合數位權臣,遞上奏章,痛斥林知遠「以妖術亂天象,妄言日蝕,動搖社稷」。他直言:「臣等夜觀天象,發現彼之預測乃源自西洋幻術,非正統太乙神數!」一時間,長安街頭謠言四起,說「天機真人」其實是蠱惑人心的狐妖,甚至有人見到欽天監外出現「會發光的鐵盒」(其實是林知遠的太陽能計算機)。
這是一場前所未見的「近代科學與古代迷信」的對決。皇帝唐武宗雖對林知遠深感好奇,但也必須平衡朝廷勢力。因此,他欽定了一場「公開辯論賽」:由王伯溫主講舊曆法,林知遠主講新演算法,三日後,於太極殿前,用「實測」決定勝負。
這正是林知遠最擅長的戰場。他深知,權威無法靠嘴炮撼動,唯一的證據就是「數據」。他啟動了「最強回歸測試」:將過去三十年間的日月蝕紀錄全部重新輸入(從木簡中挖出),並以他的 Python 演算法進行「回溯測試」。結果顯示,新演算法能百分之百重現過去正確的紀錄,並能精準指出舊曆法的誤差在何處。