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會員
33內容數
從超過 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 為虛實整合介面又是合理的嗎?
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
小說可能兩種,其一是:「很多元素是虛構的,但有一是真的」,比如哈利波特,所有的時間、場景、人物都是虛構與想像的,但有一是真的-人的情感。
Thumbnail
夢一定是前世實際發生過的事情嗎? . 這是網友問的。 . 答案是不一定, 有時候只是你那一世的 [ 某種想法 ] 而已, 比如你喜歡某人,但是那一世你跟他並不是戀人, 只是你自己在幻想跟他能交往, 類似這樣的想法留到這一世產生影響, 這也是有可能的, 簡單說,就是你前世的各種不同的情形, 它會使用各
Thumbnail
舊屋翻修工程的第一步通常是拆除, 但是拆除時要注意什麼你知道嗎? 一般來說,樑柱,樓地板,樓梯等; 通常這都是結構的一部分, 一般情況都不會去動到這些部分, 但如果必須動到時該怎麼辦? 那就應該在送裝修審查的時候, 委請結構技師先進行鑑定, 因此要動這些項目的時候, 業主就必須接受額外負擔結構技師費
Thumbnail
本文可以了解各種情境 沒有5年請求權時效限制。 因十年間不行使而消滅。 消滅時效,自請求權可行使時起算。 雇主按月溢扣薪資充作應勞工退休提繳金,勞工請求權應如何主張? 勞退提撥短少之部分,勞工離職後5年內均得行使該損害賠償請求權,與消滅時效之問題。 勞基法/勞退條件得行使退休金請求權的起算點。 勞工
Thumbnail
前幾天我夢到自己帶貓出去玩,然後貓腳不小心拉到脫臼,奄奄一息,我既愧疚又恐慌。醒來之後,雖然知道是虛驚一場,但仍然很想哭、心有餘悸很久。 做夢的虛驚,容易理解。 但其實,我們心中也常上演這類小劇場,而不自知。 -交上企劃書之後,老闆奇怪的看我一眼,是否對我不滿意?
「啊哈!他一定是用不同的造字系統打錯字的!」 注音、倉頡、大易、嘸蝦米等等造字系統,是這個世代大家一定會學的東西,年輕世代的人可能只有學注音,但在社會上有一點歷練的人為求打字快速,可能會去學嘸蝦米或其他的系統,他的優點就是不需要選字,你只要知道字長什麼樣子就可以打出來了。 「恩!是的!」 後記
Thumbnail
書中的悄悄話: 於是奇奇和小歐靜靜待在那裡,享受著沒有東西,和一切東西。 奇奇想送禮物給小歐,卻發現小歐什麼都有了,於是奇奇開始思考要送除了「什麼都有」的東西,最後奇奇決定送「沒有東西」給小歐。
Thumbnail
前言 故事本身只是故事而已,意義是被閱讀的人所附加上去的個人價值。我們永遠讀的不是同樣的故事,因為我們看的都是自己。誰都說不了作者寫了什麼,因為誰也當不了作者的眼睛。
Thumbnail
很多人透過兼差、打工、斜槓或創業的方式來累積財富,並期望著某一天存到足夠的錢就可以實現自己的理想生活,可以開始過著悠閒的生活並做著自己喜歡的事情。 很妙的是,觀察到大部分的有錢人,他們似乎都不是為了賺錢而賺錢,更多的情況是他們做著喜歡的某一件事情,經年累月地將這件事情愈做愈好,而這件事「恰好」為他
Thumbnail
  我們是如何理解外界世界?親眼所見的是否真實?從形象的感知到理解,包含著複雜的過程。首先,從眼睛開始。   眼睛-從外觀看是一對肉體形象,呈現著兩頭尖的橢圓形,範圍由上下眼瞼所限定,從外部觀察可以看到睫毛、眼球、瞳孔等部份。睫毛有長有短,眼球可能有不同的顏色。在更進一步,不用顯微鏡也可以看到眼睛
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
小說可能兩種,其一是:「很多元素是虛構的,但有一是真的」,比如哈利波特,所有的時間、場景、人物都是虛構與想像的,但有一是真的-人的情感。
Thumbnail
夢一定是前世實際發生過的事情嗎? . 這是網友問的。 . 答案是不一定, 有時候只是你那一世的 [ 某種想法 ] 而已, 比如你喜歡某人,但是那一世你跟他並不是戀人, 只是你自己在幻想跟他能交往, 類似這樣的想法留到這一世產生影響, 這也是有可能的, 簡單說,就是你前世的各種不同的情形, 它會使用各
Thumbnail
舊屋翻修工程的第一步通常是拆除, 但是拆除時要注意什麼你知道嗎? 一般來說,樑柱,樓地板,樓梯等; 通常這都是結構的一部分, 一般情況都不會去動到這些部分, 但如果必須動到時該怎麼辦? 那就應該在送裝修審查的時候, 委請結構技師先進行鑑定, 因此要動這些項目的時候, 業主就必須接受額外負擔結構技師費
Thumbnail
本文可以了解各種情境 沒有5年請求權時效限制。 因十年間不行使而消滅。 消滅時效,自請求權可行使時起算。 雇主按月溢扣薪資充作應勞工退休提繳金,勞工請求權應如何主張? 勞退提撥短少之部分,勞工離職後5年內均得行使該損害賠償請求權,與消滅時效之問題。 勞基法/勞退條件得行使退休金請求權的起算點。 勞工
Thumbnail
前幾天我夢到自己帶貓出去玩,然後貓腳不小心拉到脫臼,奄奄一息,我既愧疚又恐慌。醒來之後,雖然知道是虛驚一場,但仍然很想哭、心有餘悸很久。 做夢的虛驚,容易理解。 但其實,我們心中也常上演這類小劇場,而不自知。 -交上企劃書之後,老闆奇怪的看我一眼,是否對我不滿意?
「啊哈!他一定是用不同的造字系統打錯字的!」 注音、倉頡、大易、嘸蝦米等等造字系統,是這個世代大家一定會學的東西,年輕世代的人可能只有學注音,但在社會上有一點歷練的人為求打字快速,可能會去學嘸蝦米或其他的系統,他的優點就是不需要選字,你只要知道字長什麼樣子就可以打出來了。 「恩!是的!」 後記
Thumbnail
書中的悄悄話: 於是奇奇和小歐靜靜待在那裡,享受著沒有東西,和一切東西。 奇奇想送禮物給小歐,卻發現小歐什麼都有了,於是奇奇開始思考要送除了「什麼都有」的東西,最後奇奇決定送「沒有東西」給小歐。
Thumbnail
前言 故事本身只是故事而已,意義是被閱讀的人所附加上去的個人價值。我們永遠讀的不是同樣的故事,因為我們看的都是自己。誰都說不了作者寫了什麼,因為誰也當不了作者的眼睛。
Thumbnail
很多人透過兼差、打工、斜槓或創業的方式來累積財富,並期望著某一天存到足夠的錢就可以實現自己的理想生活,可以開始過著悠閒的生活並做著自己喜歡的事情。 很妙的是,觀察到大部分的有錢人,他們似乎都不是為了賺錢而賺錢,更多的情況是他們做著喜歡的某一件事情,經年累月地將這件事情愈做愈好,而這件事「恰好」為他
Thumbnail
  我們是如何理解外界世界?親眼所見的是否真實?從形象的感知到理解,包含著複雜的過程。首先,從眼睛開始。   眼睛-從外觀看是一對肉體形象,呈現著兩頭尖的橢圓形,範圍由上下眼瞼所限定,從外部觀察可以看到睫毛、眼球、瞳孔等部份。睫毛有長有短,眼球可能有不同的顏色。在更進一步,不用顯微鏡也可以看到眼睛