Workaround 一定是十惡不赦的嗎?

更新 發佈閱讀 3 分鐘

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

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

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

vocus|新世代的創作平台

Workaround — 權衡下的妥協

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

vocus|新世代的創作平台

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

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

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

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

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


留言
avatar-img
Sam Huang的沙龍
18會員
34內容數
從超過 50 個合作經驗中擷取在系統開發、顧問及營運上的經驗及心得
Sam Huang的沙龍的其他內容
2023/12/05
沒有最正確的軟體架構,通常都需要隨著時間和發展階段進行修正和修改。系統最終會變成怎樣往往也和公司的管理方式及運作模式密切相關。 在過去的幾年裡,為應對需求,公司的軟體架構走向了 JAMSTACK 的風格。這裡分享一些關於這種架構的感受和經驗。
Thumbnail
2023/12/05
沒有最正確的軟體架構,通常都需要隨著時間和發展階段進行修正和修改。系統最終會變成怎樣往往也和公司的管理方式及運作模式密切相關。 在過去的幾年裡,為應對需求,公司的軟體架構走向了 JAMSTACK 的風格。這裡分享一些關於這種架構的感受和經驗。
Thumbnail
2023/09/23
「為什麼要維護?有 bug 你們就要負責啊,你們怎麼可以給我們有 bug 的東西!」 一瞬間我也是愣了一下,還差點被說服(?)。
Thumbnail
2023/09/23
「為什麼要維護?有 bug 你們就要負責啊,你們怎麼可以給我們有 bug 的東西!」 一瞬間我也是愣了一下,還差點被說服(?)。
Thumbnail
2023/05/19
我們的世界實際上由虛擬和實體兩個部分組成。NFT已經在虛擬世界中證明了自己的價值,但如果將NFT應用於現實世界,又會有哪些可能性呢?
Thumbnail
2023/05/19
我們的世界實際上由虛擬和實體兩個部分組成。NFT已經在虛擬世界中證明了自己的價值,但如果將NFT應用於現實世界,又會有哪些可能性呢?
Thumbnail
看更多
你可能也想看
Thumbnail
既然是例外,就表示出現了我們預期以外的事情,就這點而言這個用詞跟翻譯都非常的精確。假設我們認為這段程式執行的時後不應該出現這個情況,那麼它就必須是一個例外。
Thumbnail
既然是例外,就表示出現了我們預期以外的事情,就這點而言這個用詞跟翻譯都非常的精確。假設我們認為這段程式執行的時後不應該出現這個情況,那麼它就必須是一個例外。
Thumbnail
學習軟體開發的路上常常苦於網路資訊爆炸嗎? 教學何其多,但卻遇到無法明確選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您業界開發重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 人生的道路中總會來點意外與
Thumbnail
學習軟體開發的路上常常苦於網路資訊爆炸嗎? 教學何其多,但卻遇到無法明確選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您業界開發重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 人生的道路中總會來點意外與
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
近幾年看到蠻多光怪陸離的開發鬼故事,也見識過各種奇醜無比的失事原因
Thumbnail
近幾年看到蠻多光怪陸離的開發鬼故事,也見識過各種奇醜無比的失事原因
Thumbnail
在轉職寫程式、自學程式語言的過程中,最害怕的莫過於遇到無從下手的問題。透過實際案例分享,讓零基礎從零到一的程式新手,也能快速學會如何解決複雜問題。
Thumbnail
在轉職寫程式、自學程式語言的過程中,最害怕的莫過於遇到無從下手的問題。透過實際案例分享,讓零基礎從零到一的程式新手,也能快速學會如何解決複雜問題。
Thumbnail
職場上有許多同事關係需要處理,平輩之間相互討論是一件挺不錯的事情,但我認為碰上程式問題應該自我排除,增加自我學習能力。你身旁也有不斷提問的 Bug 同事嗎?歡迎來看看我是如何應對這些同事的。
Thumbnail
職場上有許多同事關係需要處理,平輩之間相互討論是一件挺不錯的事情,但我認為碰上程式問題應該自我排除,增加自我學習能力。你身旁也有不斷提問的 Bug 同事嗎?歡迎來看看我是如何應對這些同事的。
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
前陣子在跟讀者聊天的時候,發現在 Junior 階段很容易遇到一些工作上挫折,但又不太知道怎麼解決或是優化。 也有可能在開發過程中碰到了些大地雷,但身邊的前輩、同事不一定能用比較軟性的方式好好的傳達,這是非常常出現的,尤其是在跨部門協作經驗較少的工程師,會不曉得怎麼用淺顯易懂的語言告訴⋯⋯
Thumbnail
前陣子在跟讀者聊天的時候,發現在 Junior 階段很容易遇到一些工作上挫折,但又不太知道怎麼解決或是優化。 也有可能在開發過程中碰到了些大地雷,但身邊的前輩、同事不一定能用比較軟性的方式好好的傳達,這是非常常出現的,尤其是在跨部門協作經驗較少的工程師,會不曉得怎麼用淺顯易懂的語言告訴⋯⋯
Thumbnail
作為程式開發者,每次聽到「加個 flag 就好」或者「開個變數存起來」這種話總是會心頭一驚。理由也很正常,就是像這樣子的 workaround 並沒有真正解決問題,只是徒留技術債,以後怎麼爆炸的都不知道。 workaround 聽起來真的是十惡不赦,不是嗎? 可凡存在必有道理,不如來聊聊 wor
Thumbnail
作為程式開發者,每次聽到「加個 flag 就好」或者「開個變數存起來」這種話總是會心頭一驚。理由也很正常,就是像這樣子的 workaround 並沒有真正解決問題,只是徒留技術債,以後怎麼爆炸的都不知道。 workaround 聽起來真的是十惡不赦,不是嗎? 可凡存在必有道理,不如來聊聊 wor
Thumbnail
「為什麼要維護?有 bug 你們就要負責啊,你們怎麼可以給我們有 bug 的東西!」 一瞬間我也是愣了一下,還差點被說服(?)。
Thumbnail
「為什麼要維護?有 bug 你們就要負責啊,你們怎麼可以給我們有 bug 的東西!」 一瞬間我也是愣了一下,還差點被說服(?)。
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News