沒有SNS的日子(八)

前章

(第十天,星期六)

(致讀者:鑑於內含許多外文技術用語,本章建議切成橫書閱讀。感謝網友丹尼提供的知識補充說明)

「我們要不要改用TypeScript?」我們團隊忙於解決一堆雛型面對的bug時,我在早上的視訊會議說出這句。

雖然我知道這有點晚了,但是我覺得有這個必要性。

目前我們的專案,我發現因為JavaScript是動態型別的,經常會發現假設沒有先確認好給函數吃的變數的型別前,函數會跑出奇怪的型別,我今天晚上又花了一段時間,才找到Profile輸入數字結果導致程式儲存錯誤的問題。如果一開始改用像TypeScript靜態型別的語言,會不會就能夠減少這樣的bug?

誰知道這樣的一種發文,竟然也會引起我們這個團隊的漫天風雨。

社長首先說:「你到底為什麼現在才想要用靜態型別語言?」

「我發現現在我們issue tracker有許多的問題,比如說判斷某則回覆po文的推文是否該被刪除變數因為沒有察覺只能存表示是或否的布林值,結果我們花了一個小時才找到bug。如果當初用靜態型別,許多bug就可以用編譯器找出來,就算要打比較多字,但是後續維護會比較輕鬆。」

「可是現在要移植到TypeScript,要花多少時間?Tekolas他會嗎?」社長問。

「TS的語法和一般物件導向程式語言比較像,我相信應該不會有太大的陣痛期,何況相容性應該比較好。我覺得,應該還好吧……?」

Tekolas說:「就算不考慮這個,我覺得這也不是個好選擇。另外,我聽說TS的型別推論系統是不健全的。」

「什麼是不健全的?」

「用英文說是unsound。型別推論這東西其實很複雜,但是和邏輯推論是很像的。假設我們將邏輯推論分成語法和語意兩個方面來看,語法就像是數學的運算規則,比如說『若P則Q』可以代換為『若非Q則非P』。另一面,語意就像是邏輯前後敘述文句的含意,比如說『買這東西要付100元,甲買了這東西,甲要付100元』的文意就是語意。

如果我們用邏輯的運算規則推導出從A求出B的證明,而滿足我們預期的A則B的語意,那就是健全的系統。編譯器推論函數吐出的值的型別也是一種邏輯推導,但如果這種運算證明不滿足過程中各環節語意的話,你推導出來的一個變數的型別,就會是錯誤的或是不嚴謹的,就會unsound。就像法官判決求出一個人要被課罰金的證明,但是證明過程期盼的文意是有期徒刑,那麼對司法執行就會有爭議。

換過頭來,如果我們用錯誤的語意推導,那不就是對後續的變數應用產生問題了嗎?」

「可是我們到哪找到替代方案?你想要用ReasonML?還是Elm?你確定這些語言有足夠的線上資源可以馬上找到問題解答?Elm這種,我查了一下,連整個前端界面都要重寫。我們有時間嗎?」

Tekolas停頓一下,然後說:「我覺得這些東西還是可以考慮看看,並不是什麼都不能考慮嘛。何況你轉到TS還不是要轉移成本。我還是回你那句,我們真的有這麼多時間嗎?」

我頓時追著說:「如果我們放著自己慢慢追蹤這些型別的錯誤,那這樣還是問題很多,我認為TS轉移成本已經算小了。」

Tekolas 說:「等到之後我們進入維護期再逐步替換還不遲啊。」

我這時聲量變大聲:「但是程式一大,切換的陣痛期就會變長,何況萬一之後有需求改變,怎麼辦?」

Tekolas:「我們現在要講求先完成大家的需求。何況你寫Javascript的時間有比我多嗎?你才剛學而已。」

我這時反唇相譏:「你寫過的,我看都是動態型別的語言吧?自我認識你開始,你學的程式語言我觀察也只是從網頁語言開始,連C都沒碰過……對不對?」

這時候社長發現氣氛搞僵了,急忙說:「大家冷靜一下,我覺得這是前端的技術選用問題,但或許其他人有不同的想法,聽看看吧。」

女中的後端負責人慕玲說:「我們開發Python的時候,通常使用單元測試解決現有的bug太多的問題。我覺得Tekolas說得有幾分道理,JS應該也可以用單元測試來偵錯,減少錯誤率。何況我們現在是競賽性質,等到以後要進行維護,再逐步遷移到TypeScript,不知道可不可行?」

銘緯說:「但是不是有句話說:『動態一時爽,重構火葬場』嗎?利用大量的測試進行減少錯誤率,固然是一種解決方法沒錯,但是這樣又會增加測試時間的成本,我們不該花太多時間在測試上。還是有些東西給電腦自己偵錯比較好。」

佩忻說:「我覺得,什麼方法都行,但就是能夠不要影響開發速度最好。我覺得大家冷靜一下,明天再表決吧,就在Line群組,下午4:00 截止,以+1表決,且各有一票,逾時者棄權。」

慢著,前端的問題為什麼要大家一起表決?可是我聽到社長應諾的聲音,頓時也沉默下來。

結束視訊會議後,我關上電腦,覺得眼睛很酸澀,我出了房間。

今天去探望阿公阿媽的老爸老媽回來了,我打了聲招呼並且問了父親:「現在阿公還可以吧?」

「阿公的高血壓這馬恢復正常矣,有去予醫生看。阿媽抑閣勇khiàn-khiàn(健康的樣子),定定咧講最近有一个家族仔的Line群組。汝的阿伯、阿嬸、叔伯兄弟姊妹(堂兄弟姊妹)攏加入去矣,欲共汝加無?」

「我閣考慮看覓。」我隨便應付。

大家或許因為沒有臉書,所以要聯絡家族的事情,就開始用這樣的方式了。雖然不加入不好意思,因為伯伯嬸嬸等等的都加入了,但是加入料想手機會更常叮叮咚咚,有可能會像臉書一樣,一些不想看到的東西又滿天飛而且過濾不掉。還真是令人苦惱。

媽媽又說,「最近隔壁的阿美阿姨,說某個論壇已經開始開放加入我們區的地方版,裡面一些生活的資訊都可以在這邊分享。」

我好奇問:「不是PTT有T市板嗎?」

媽媽說:「阿姨她女兒說,PTT現在還不開放註冊。」

的確還是如此呢。如果PTT開放這麼多人進去申請,其他問題不說,光負載就是一個很大的問題。

但看樣子,許多人已經漸漸習慣了沒有SNS的生活了。有些同學也會用Line傳說他的部落格開張,請我過去看一下。我頓時覺得,時光好像回到了10年前,除了多了智慧型手機以外。我們開發SNS,真的能夠幫助他們多少呢?

如果當初不寫SNS,現在我和Tekolas就不用搞到那麼僵,虧他還是我之前認識已久的朋友。我不應該酸他說他不會靜態型別語言。我應該要和他道歉的,不光是看在之前的情誼,或是不要傷和氣這種話。

而是我覺得技術這種東西,應該是可以商量的,不應該為了這麼點東西把專案搞到這麼難看。或許還有其他可行的方法吧。

後章