Workaround 一定是十惡不赦的嗎?

閱讀時間約 3 分鐘

作為程式開發者,每次聽到「加個 flag 就好」或者「開個變數存起來」這種話總是會心頭一驚。理由也很正常,就是像這樣子的 workaround 並沒有真正解決問題,只是徒留技術債,以後怎麼爆炸的都不知道。

workaround 聽起來真的是十惡不赦,不是嗎?

可凡存在必有道理,不如來聊聊 workaround 的好處在哪(?)

raw-image

Workaround — 權衡下的妥協

先來看看哪些情況下我們會以 workaround 作為解法

  1. 突發事件下的緊急修復:當系統發生意外(比如重大錯誤或者漏洞),此時為避免事態擴大,緊急下 workaround 來修復是個不錯的做法。
  2. 第三方套件造成的問題:引入第三方套件的目的就是要「使用」而非「重製」,在這種情況下遇到問題或者不符使用時下些 workaround 繞開或補丁可能就是個常見做法。
  3. 歷史代碼的封裝:陳年舊程式碼往往無法保證其正確性,復用時透過 workaround 隱藏錯誤可能是必要的。
  4. 不確定的環境及平台問題:程式的正確不只是內在邏輯正確即可,還需要執行環境的配合,尤其在跨平台時這個狀況更容易發生,透過 workaround 可以將一些不值得深究的問題包裝起來。

當然也有可能只是單純因為偷懶 — 不過這也代表開發者狀態不好或者對工作品質要求過低。重要的可能不是 workaround 本身,而是產生這個 workaround 的背後原因到底是什麼

或者,換句話說,一個好的 workaround 應該要能夠展現其不得已以及當下的妥協

有好有壞,端看從哪個角度觀察

既然 workaround 可能是來自某些當下的不得已,那與其檢討其結果不如討論如何好好的控制其範圍。

把視角拉遠看,長期開發的目的是追求可持續性,會有以下兩個目標

  • 讓我們可以在需要時改動任何想改動的地方
  • 讓軟體可以因應時間及環境變化帶來的任何改變

結合這兩點思考就會發現其實 workaround 可能不過是某種開發方式。

畢竟有時候站在系統及營運層次來看,在某些時候快速反應、減少重工,甚至是暫時封住問題可能會比徹底消除隱患來的重要。

workaround 可能在開發上有消極意義,但站在管理及大系統層面來看可能具有某種積極意義 — 只要我們能將其生命週期好好的嵌入進迭代中。

開發是連續過程 — 重點是對於邊界的掌控

我們可能可以這樣做,假如判斷當前狀態需要下 workaround 時,除了 coding 本身之外,再多做幾件額外的事情

  1. 記錄當前觀測到的問題:目的是確定此次治標的範圍,最好是連復現的辦法及相依性也留存
  2. 設想可能的問題成因及解法:目的提供未來治本時的建議參考
  3. 將徹底解決問題加入開發時程:一方面強調長期來看需要治本,一方面也是思考這次 workaround 的生命週期

也就是說,倘若我們將 workaround 視為是解決問題的階段一,目的是引出後面根除的流程,那其實問題就不會太大

raw-image

軟體工程 — 兼顧長期可控及短期可用

真實世界的開發是多個維度妥協下的產物,限制可能來自於客戶需求、團隊能力、框架成熟度及資源配置,工具箱多點招數及彈性不會是壞事。

但這並非代表 workaround 就可以被接受,頭痛醫頭腳痛醫腳始終不是正道。只能說在兼顧長期可控及短期可用的原則下,workaround 並沒有這麼十惡不赦

普拿疼畢竟不是萬靈丹,對吧!

忻旅科技:https://www.revtel.tech/
Sam Huang:https://www.sam-huang.info/


18會員
33Content count
從超過 50 個合作經驗中擷取在系統開發、顧問及營運上的經驗及心得
留言0
查看全部
發表第一個留言支持創作者!
Sam Huang的沙龍 的其他內容
「為什麼要維護?有 bug 你們就要負責啊,你們怎麼可以給我們有 bug 的東西!」 一瞬間我也是愣了一下,還差點被說服(?)。
我們的世界實際上由虛擬和實體兩個部分組成。NFT已經在虛擬世界中證明了自己的價值,但如果將NFT應用於現實世界,又會有哪些可能性呢?
一旦甲乙方進到零和賽局,情感上開始對抗之後,兩敗俱傷就是必然的結局了。既然是這樣,合約的撰寫及執行不妨看作是合作誠意的具象表態。
「幫我做的跟 Facebook 一樣單純就好」 「嗯 … ?」 不管怎麼估計都可能失準,在一件事做完之前你怎麼知道能不能做到?
殺雞用牛刀,降維打擊總是一個安全做法。殺雞何必用牛刀?但牛刀是真的有用啊!而手上有錘子什麼看起來都像釘子,問題是錘子真的能敲啊!
這幾天有個蠻大的新聞是 Azuki 的背後團隊 Chiru Labs 繼 ERC721a 後又提出了 Physical Backed Token (PBT) 這個新的代幣標準。 但 NFT 虛實結合是有道理的嗎?而以 NFC 為虛實整合介面又是合理的嗎?
「為什麼要維護?有 bug 你們就要負責啊,你們怎麼可以給我們有 bug 的東西!」 一瞬間我也是愣了一下,還差點被說服(?)。
我們的世界實際上由虛擬和實體兩個部分組成。NFT已經在虛擬世界中證明了自己的價值,但如果將NFT應用於現實世界,又會有哪些可能性呢?
一旦甲乙方進到零和賽局,情感上開始對抗之後,兩敗俱傷就是必然的結局了。既然是這樣,合約的撰寫及執行不妨看作是合作誠意的具象表態。
「幫我做的跟 Facebook 一樣單純就好」 「嗯 … ?」 不管怎麼估計都可能失準,在一件事做完之前你怎麼知道能不能做到?
殺雞用牛刀,降維打擊總是一個安全做法。殺雞何必用牛刀?但牛刀是真的有用啊!而手上有錘子什麼看起來都像釘子,問題是錘子真的能敲啊!
這幾天有個蠻大的新聞是 Azuki 的背後團隊 Chiru Labs 繼 ERC721a 後又提出了 Physical Backed Token (PBT) 這個新的代幣標準。 但 NFT 虛實結合是有道理的嗎?而以 NFC 為虛實整合介面又是合理的嗎?
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
小說可能兩種,其一是:「很多元素是虛構的,但有一是真的」,比如哈利波特,所有的時間、場景、人物都是虛構與想像的,但有一是真的-人的情感。
Thumbnail
夢一定是前世實際發生過的事情嗎? . 這是網友問的。 . 答案是不一定, 有時候只是你那一世的 [ 某種想法 ] 而已, 比如你喜歡某人,但是那一世你跟他並不是戀人, 只是你自己在幻想跟他能交往, 類似這樣的想法留到這一世產生影響, 這也是有可能的, 簡單說,就是你前世的各種不同的情形, 它會使用各
Thumbnail
舊屋翻修工程的第一步通常是拆除, 但是拆除時要注意什麼你知道嗎? 一般來說,樑柱,樓地板,樓梯等; 通常這都是結構的一部分, 一般情況都不會去動到這些部分, 但如果必須動到時該怎麼辦? 那就應該在送裝修審查的時候, 委請結構技師先進行鑑定, 因此要動這些項目的時候, 業主就必須接受額外負擔結構技師費
Thumbnail
本文可以了解各種情境 沒有5年請求權時效限制。 因十年間不行使而消滅。 消滅時效,自請求權可行使時起算。 雇主按月溢扣薪資充作應勞工退休提繳金,勞工請求權應如何主張? 勞退提撥短少之部分,勞工離職後5年內均得行使該損害賠償請求權,與消滅時效之問題。 勞基法/勞退條件得行使退休金請求權的起算點。 勞工
Thumbnail
前幾天我夢到自己帶貓出去玩,然後貓腳不小心拉到脫臼,奄奄一息,我既愧疚又恐慌。醒來之後,雖然知道是虛驚一場,但仍然很想哭、心有餘悸很久。 做夢的虛驚,容易理解。 但其實,我們心中也常上演這類小劇場,而不自知。 -交上企劃書之後,老闆奇怪的看我一眼,是否對我不滿意?
「啊哈!他一定是用不同的造字系統打錯字的!」 注音、倉頡、大易、嘸蝦米等等造字系統,是這個世代大家一定會學的東西,年輕世代的人可能只有學注音,但在社會上有一點歷練的人為求打字快速,可能會去學嘸蝦米或其他的系統,他的優點就是不需要選字,你只要知道字長什麼樣子就可以打出來了。 「恩!是的!」 後記
Thumbnail
書中的悄悄話: 於是奇奇和小歐靜靜待在那裡,享受著沒有東西,和一切東西。 奇奇想送禮物給小歐,卻發現小歐什麼都有了,於是奇奇開始思考要送除了「什麼都有」的東西,最後奇奇決定送「沒有東西」給小歐。
Thumbnail
前言 故事本身只是故事而已,意義是被閱讀的人所附加上去的個人價值。我們永遠讀的不是同樣的故事,因為我們看的都是自己。誰都說不了作者寫了什麼,因為誰也當不了作者的眼睛。
Thumbnail
很多人透過兼差、打工、斜槓或創業的方式來累積財富,並期望著某一天存到足夠的錢就可以實現自己的理想生活,可以開始過著悠閒的生活並做著自己喜歡的事情。 很妙的是,觀察到大部分的有錢人,他們似乎都不是為了賺錢而賺錢,更多的情況是他們做著喜歡的某一件事情,經年累月地將這件事情愈做愈好,而這件事「恰好」為他
Thumbnail
  我們是如何理解外界世界?親眼所見的是否真實?從形象的感知到理解,包含著複雜的過程。首先,從眼睛開始。   眼睛-從外觀看是一對肉體形象,呈現著兩頭尖的橢圓形,範圍由上下眼瞼所限定,從外部觀察可以看到睫毛、眼球、瞳孔等部份。睫毛有長有短,眼球可能有不同的顏色。在更進一步,不用顯微鏡也可以看到眼睛
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
小說可能兩種,其一是:「很多元素是虛構的,但有一是真的」,比如哈利波特,所有的時間、場景、人物都是虛構與想像的,但有一是真的-人的情感。
Thumbnail
夢一定是前世實際發生過的事情嗎? . 這是網友問的。 . 答案是不一定, 有時候只是你那一世的 [ 某種想法 ] 而已, 比如你喜歡某人,但是那一世你跟他並不是戀人, 只是你自己在幻想跟他能交往, 類似這樣的想法留到這一世產生影響, 這也是有可能的, 簡單說,就是你前世的各種不同的情形, 它會使用各
Thumbnail
舊屋翻修工程的第一步通常是拆除, 但是拆除時要注意什麼你知道嗎? 一般來說,樑柱,樓地板,樓梯等; 通常這都是結構的一部分, 一般情況都不會去動到這些部分, 但如果必須動到時該怎麼辦? 那就應該在送裝修審查的時候, 委請結構技師先進行鑑定, 因此要動這些項目的時候, 業主就必須接受額外負擔結構技師費
Thumbnail
本文可以了解各種情境 沒有5年請求權時效限制。 因十年間不行使而消滅。 消滅時效,自請求權可行使時起算。 雇主按月溢扣薪資充作應勞工退休提繳金,勞工請求權應如何主張? 勞退提撥短少之部分,勞工離職後5年內均得行使該損害賠償請求權,與消滅時效之問題。 勞基法/勞退條件得行使退休金請求權的起算點。 勞工
Thumbnail
前幾天我夢到自己帶貓出去玩,然後貓腳不小心拉到脫臼,奄奄一息,我既愧疚又恐慌。醒來之後,雖然知道是虛驚一場,但仍然很想哭、心有餘悸很久。 做夢的虛驚,容易理解。 但其實,我們心中也常上演這類小劇場,而不自知。 -交上企劃書之後,老闆奇怪的看我一眼,是否對我不滿意?
「啊哈!他一定是用不同的造字系統打錯字的!」 注音、倉頡、大易、嘸蝦米等等造字系統,是這個世代大家一定會學的東西,年輕世代的人可能只有學注音,但在社會上有一點歷練的人為求打字快速,可能會去學嘸蝦米或其他的系統,他的優點就是不需要選字,你只要知道字長什麼樣子就可以打出來了。 「恩!是的!」 後記
Thumbnail
書中的悄悄話: 於是奇奇和小歐靜靜待在那裡,享受著沒有東西,和一切東西。 奇奇想送禮物給小歐,卻發現小歐什麼都有了,於是奇奇開始思考要送除了「什麼都有」的東西,最後奇奇決定送「沒有東西」給小歐。
Thumbnail
前言 故事本身只是故事而已,意義是被閱讀的人所附加上去的個人價值。我們永遠讀的不是同樣的故事,因為我們看的都是自己。誰都說不了作者寫了什麼,因為誰也當不了作者的眼睛。
Thumbnail
很多人透過兼差、打工、斜槓或創業的方式來累積財富,並期望著某一天存到足夠的錢就可以實現自己的理想生活,可以開始過著悠閒的生活並做著自己喜歡的事情。 很妙的是,觀察到大部分的有錢人,他們似乎都不是為了賺錢而賺錢,更多的情況是他們做著喜歡的某一件事情,經年累月地將這件事情愈做愈好,而這件事「恰好」為他
Thumbnail
  我們是如何理解外界世界?親眼所見的是否真實?從形象的感知到理解,包含著複雜的過程。首先,從眼睛開始。   眼睛-從外觀看是一對肉體形象,呈現著兩頭尖的橢圓形,範圍由上下眼瞼所限定,從外部觀察可以看到睫毛、眼球、瞳孔等部份。睫毛有長有短,眼球可能有不同的顏色。在更進一步,不用顯微鏡也可以看到眼睛