Workaround 一定是十惡不赦的嗎?

更新於 2024/11/28閱讀時間約 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/


avatar-img
18會員
33內容數
從超過 50 個合作經驗中擷取在系統開發、顧問及營運上的經驗及心得
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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 為虛實整合介面又是合理的嗎?
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
AI 所提供的資料不一定是真實的,因為其回應取決於訓練數據的品質與廣度。如果AI的訓練資料包含錯誤或偏見,生成的答案可能會不準確。此外,AI無法獨立驗證資料的真實性,只是依賴既有的數據做出推斷。因此,AI可能會提供過時、不正確或片面的資訊。
Thumbnail
前面探討完setup time / hold time violation的原因跟解法, 來更進一步探討一下現實面, 實際ic design中, 我們有可能會碰到一個狀況, synthesis過後path出現了setup time violation 或 hold time violatio
Thumbnail
你對超現實主義有什麼想法呢?對於這種藝術表現是感到有趣還是奇怪?超現實主義(Surrealism)是一個極富影響力的藝術和文學運動,蓬勃發展於混亂的第一次世界大戰後的歐洲。由詩人安德烈·布勒東(André Breton)創立,其主要目標在於解放思想、語言和人類經歷,擺脫理性主義所
人們卻因為直覺反應(無法靜下心來看證據),變成:中央與地方政府、官員與民代、政黨與政黨間互咬。
Thumbnail
作為程式開發者,每次聽到「加個 flag 就好」或者「開個變數存起來」這種話總是會心頭一驚。理由也很正常,就是像這樣子的 workaround 並沒有真正解決問題,只是徒留技術債,以後怎麼爆炸的都不知道。 workaround 聽起來真的是十惡不赦,不是嗎? 可凡存在必有道理,不如來聊聊 wor
Thumbnail
小說可能兩種,其一是:「很多元素是虛構的,但有一是真的」,比如哈利波特,所有的時間、場景、人物都是虛構與想像的,但有一是真的-人的情感。
Thumbnail
夢一定是前世實際發生過的事情嗎? . 這是網友問的。 . 答案是不一定, 有時候只是你那一世的 [ 某種想法 ] 而已, 比如你喜歡某人,但是那一世你跟他並不是戀人, 只是你自己在幻想跟他能交往, 類似這樣的想法留到這一世產生影響, 這也是有可能的, 簡單說,就是你前世的各種不同的情形, 它會使用各
Thumbnail
舊屋翻修工程的第一步通常是拆除, 但是拆除時要注意什麼你知道嗎? 一般來說,樑柱,樓地板,樓梯等; 通常這都是結構的一部分, 一般情況都不會去動到這些部分, 但如果必須動到時該怎麼辦? 那就應該在送裝修審查的時候, 委請結構技師先進行鑑定, 因此要動這些項目的時候, 業主就必須接受額外負擔結構技師費
Thumbnail
本文可以了解各種情境 沒有5年請求權時效限制。 因十年間不行使而消滅。 消滅時效,自請求權可行使時起算。 雇主按月溢扣薪資充作應勞工退休提繳金,勞工請求權應如何主張? 勞退提撥短少之部分,勞工離職後5年內均得行使該損害賠償請求權,與消滅時效之問題。 勞基法/勞退條件得行使退休金請求權的起算點。 勞工
Thumbnail
前幾天我夢到自己帶貓出去玩,然後貓腳不小心拉到脫臼,奄奄一息,我既愧疚又恐慌。醒來之後,雖然知道是虛驚一場,但仍然很想哭、心有餘悸很久。 做夢的虛驚,容易理解。 但其實,我們心中也常上演這類小劇場,而不自知。 -交上企劃書之後,老闆奇怪的看我一眼,是否對我不滿意?
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
AI 所提供的資料不一定是真實的,因為其回應取決於訓練數據的品質與廣度。如果AI的訓練資料包含錯誤或偏見,生成的答案可能會不準確。此外,AI無法獨立驗證資料的真實性,只是依賴既有的數據做出推斷。因此,AI可能會提供過時、不正確或片面的資訊。
Thumbnail
前面探討完setup time / hold time violation的原因跟解法, 來更進一步探討一下現實面, 實際ic design中, 我們有可能會碰到一個狀況, synthesis過後path出現了setup time violation 或 hold time violatio
Thumbnail
你對超現實主義有什麼想法呢?對於這種藝術表現是感到有趣還是奇怪?超現實主義(Surrealism)是一個極富影響力的藝術和文學運動,蓬勃發展於混亂的第一次世界大戰後的歐洲。由詩人安德烈·布勒東(André Breton)創立,其主要目標在於解放思想、語言和人類經歷,擺脫理性主義所
人們卻因為直覺反應(無法靜下心來看證據),變成:中央與地方政府、官員與民代、政黨與政黨間互咬。
Thumbnail
作為程式開發者,每次聽到「加個 flag 就好」或者「開個變數存起來」這種話總是會心頭一驚。理由也很正常,就是像這樣子的 workaround 並沒有真正解決問題,只是徒留技術債,以後怎麼爆炸的都不知道。 workaround 聽起來真的是十惡不赦,不是嗎? 可凡存在必有道理,不如來聊聊 wor
Thumbnail
小說可能兩種,其一是:「很多元素是虛構的,但有一是真的」,比如哈利波特,所有的時間、場景、人物都是虛構與想像的,但有一是真的-人的情感。
Thumbnail
夢一定是前世實際發生過的事情嗎? . 這是網友問的。 . 答案是不一定, 有時候只是你那一世的 [ 某種想法 ] 而已, 比如你喜歡某人,但是那一世你跟他並不是戀人, 只是你自己在幻想跟他能交往, 類似這樣的想法留到這一世產生影響, 這也是有可能的, 簡單說,就是你前世的各種不同的情形, 它會使用各
Thumbnail
舊屋翻修工程的第一步通常是拆除, 但是拆除時要注意什麼你知道嗎? 一般來說,樑柱,樓地板,樓梯等; 通常這都是結構的一部分, 一般情況都不會去動到這些部分, 但如果必須動到時該怎麼辦? 那就應該在送裝修審查的時候, 委請結構技師先進行鑑定, 因此要動這些項目的時候, 業主就必須接受額外負擔結構技師費
Thumbnail
本文可以了解各種情境 沒有5年請求權時效限制。 因十年間不行使而消滅。 消滅時效,自請求權可行使時起算。 雇主按月溢扣薪資充作應勞工退休提繳金,勞工請求權應如何主張? 勞退提撥短少之部分,勞工離職後5年內均得行使該損害賠償請求權,與消滅時效之問題。 勞基法/勞退條件得行使退休金請求權的起算點。 勞工
Thumbnail
前幾天我夢到自己帶貓出去玩,然後貓腳不小心拉到脫臼,奄奄一息,我既愧疚又恐慌。醒來之後,雖然知道是虛驚一場,但仍然很想哭、心有餘悸很久。 做夢的虛驚,容易理解。 但其實,我們心中也常上演這類小劇場,而不自知。 -交上企劃書之後,老闆奇怪的看我一眼,是否對我不滿意?