軟體是一種生物

更新於 發佈於 閱讀時間約 3 分鐘

最近同事工作上遇到了一些關於系統設計的問題來找我討論,聽了描述之後我的直覺反應告訴他「會有這樣的問題,應該是設計時少考慮了什麼!」

是的,大多數軟體工程師從初學者階段開始進入到能夠獨立工作的時候,大多會需要自己考慮一個功能的設計,直到一個完整的系統設計。然而,我們總是找不到正確答案

永遠要看情況

其實,不管是誰提出了怎樣的問題,現在要我給一個「方案」我大多只能告訴對方「這需要看情況」

舉個例子,以購物網站來舉例,我們在 PChome 上面購買商品,跟在 LINE 上面購買商品,都是「購買商品」這一件事情。然而會因為商品的類型(實體、虛擬)以及是否能夠退換貨、獲得紅利點數等等不同的「情況」必須將系統的設計做出不一樣的調整。

這就表示,大多數時候我們很很難用書本、網路教學等等提供的方法解決問題,因為同樣的概念,在不同的公司、產品會有無數種變化。

有生命的軟體

除此之外,很多時候我們會覺得當一段程式被寫出來之後,就不會再有變化。其實,軟體是根據人的想法去實現的,因此經過一段時間我們對他增加、刪減功能,這個軟體就改變了!

這就表示,我們的軟體是有生命的。跟生物一樣,會因為時間、環境產生改變,一個小型購物網站成長為一個大型電商需要的系統設計是不同的,因為要負擔的使用者、流量等級不同,用相同的程式碼很難對應這樣差異巨大的情況。

同時,如果所屬公司的計畫改變、所在國家的政策變化,也都會讓我們需要針對各種法律、行銷企劃等等情境,不斷的改變我們的軟體。

在一個軟體停止更新時,會用 EOL(End of Life,終止生命)來描述,確實是非常貼切的用語,因為當我們停止修改、更新,他就不會隨著現實狀況成長、變化,最後變得無法適應當下的時代。

維持軟體品質

如同我們需要運動、健身跟健康的飲食、作息一樣,我們對待軟體也需要思考該在哪裡調整、加入功能的時候是否會造成不良的影響。

這也是當代軟體開發中會對於 CI(Continuous Integration,持續整合)非常推崇的原因之一,因為我們需要持續的驗證今天吃了這個食物(功能)會不會造成不好的影響、這次調整了這個邏輯(穿搭)會不會影響原本的系統表現等等。

尤其軟體的構成在我們撰寫程式時,往往是由小而大的去觀察,因此常常忘記當系統變得極為複雜時相互影響的情況,在這樣錯綜復雜的系統之中,還需要經常性配合功能變化的重構(Refactor)來維持一個系統的穩定。

我們所處的時代變化的非常快,如果沒有小心的評估維持軟體品質的方法,很容易就會讓軟體生病,最後變得緩慢而笨重,最後不得不結束生命。


封面圖片使用 UnsplashSarah Dorweiler 的作品,有想聽的主題可以透過匿名提問告訴我,想了解專業的技術主題可以到弦而時習之找找靈感。

留言
avatar-img
留言分享你的想法!
韋弘智-avatar-img
2024/07/11
沒有最好的架構,只有最適合的架構。
avatar-img
蒼時弦也的沙龍
55會員
40內容數
軟體工程師逐漸變成一個熱門的職業,當我們進入這個職業之後應該要具備怎樣的技能才會在工作上更加順利呢?這系列的專欄會分享日常工作中的經驗以及一些案例分析,讓我們一起努力成為一位更優秀的軟體工程師吧!
蒼時弦也的沙龍的其他內容
2022/04/11
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
Thumbnail
2022/04/11
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
Thumbnail
2022/04/04
在我們要進行壓力測試的時候,必定會需要有「目標」而這個目標大多就是商業考量,也就是我們希望提供多大規模的服務。
Thumbnail
2022/04/04
在我們要進行壓力測試的時候,必定會需要有「目標」而這個目標大多就是商業考量,也就是我們希望提供多大規模的服務。
Thumbnail
2022/03/28
在一個功能完成後,比較嚴謹的方式會進行壓力測試來驗證是否能夠符合業務上的需求,在測試的時候是否能夠準確的測試就變得相當重要。
Thumbnail
2022/03/28
在一個功能完成後,比較嚴謹的方式會進行壓力測試來驗證是否能夠符合業務上的需求,在測試的時候是否能夠準確的測試就變得相當重要。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
一旦甲乙方進到零和賽局,情感上開始對抗之後,兩敗俱傷就是必然的結局了。既然是這樣,合約的撰寫及執行不妨看作是合作誠意的具象表態。
Thumbnail
一旦甲乙方進到零和賽局,情感上開始對抗之後,兩敗俱傷就是必然的結局了。既然是這樣,合約的撰寫及執行不妨看作是合作誠意的具象表態。
Thumbnail
軟體開發是在虛擬的空間重新描述並解決現時的問題,多數時候並不存在正確答案。如何穿越這些不確定及未知就體現了開發者的功力以及對事物的把握度。 標題有點聳動,但且以這篇短文紀錄幾個印象比較深的、飛一陣後發現什麼節論都沒得到的可能作法(? 所以其實是要反著看 … 以下列舉三個常碰到的情況跟大家分享
Thumbnail
軟體開發是在虛擬的空間重新描述並解決現時的問題,多數時候並不存在正確答案。如何穿越這些不確定及未知就體現了開發者的功力以及對事物的把握度。 標題有點聳動,但且以這篇短文紀錄幾個印象比較深的、飛一陣後發現什麼節論都沒得到的可能作法(? 所以其實是要反著看 … 以下列舉三個常碰到的情況跟大家分享
Thumbnail
這系列大概花了快兩個月的時間快速的把學到的一些知識記錄下來,然而還是有許多內容很難用文章簡單的說明。
Thumbnail
這系列大概花了快兩個月的時間快速的把學到的一些知識記錄下來,然而還是有許多內容很難用文章簡單的說明。
Thumbnail
大多數的工程師常常會有一個疑問,就是「測試」應該要怎麼測試才是正確的?在過去,軟體測試大多還是以人工為主,在這幾年逐漸的出現自動化測試之後,實際上我們是不清楚應該要怎麼寫測試。
Thumbnail
大多數的工程師常常會有一個疑問,就是「測試」應該要怎麼測試才是正確的?在過去,軟體測試大多還是以人工為主,在這幾年逐漸的出現自動化測試之後,實際上我們是不清楚應該要怎麼寫測試。
Thumbnail
簡單來說,寫程式最困難的地方往往不是技術上的問題,而是如何對當下的狀況正確判斷並且建立良好協作的狀態,才會是最為困難的地方。
Thumbnail
簡單來說,寫程式最困難的地方往往不是技術上的問題,而是如何對當下的狀況正確判斷並且建立良好協作的狀態,才會是最為困難的地方。
Thumbnail
聽了描述之後我的直覺反應告訴他「會有這樣的問題,應該是設計時少考慮了什麼!」 大多數軟體工程師從初學者階段開始進入到能夠獨立工作的時候,大多會需要自己考慮一個功能的設計,直到一個完整的系統設計。然而,我們總是找不到正確答案。
Thumbnail
聽了描述之後我的直覺反應告訴他「會有這樣的問題,應該是設計時少考慮了什麼!」 大多數軟體工程師從初學者階段開始進入到能夠獨立工作的時候,大多會需要自己考慮一個功能的設計,直到一個完整的系統設計。然而,我們總是找不到正確答案。
Thumbnail
軟體開發一個很迷人的地方是可以在架空的世界(電腦世界)中重新思考、解構並處理真實世界的問題。但要怎樣真正有效的解決問題就很看各家功力了。 這篇文章我們暫且放下溝通及流程規劃的議題,聚焦來看看純粹領域差異造成的困難以及該怎麼面對。 回顧過往曾經觸碰過的領域真的滿多,茲列舉幾個
Thumbnail
軟體開發一個很迷人的地方是可以在架空的世界(電腦世界)中重新思考、解構並處理真實世界的問題。但要怎樣真正有效的解決問題就很看各家功力了。 這篇文章我們暫且放下溝通及流程規劃的議題,聚焦來看看純粹領域差異造成的困難以及該怎麼面對。 回顧過往曾經觸碰過的領域真的滿多,茲列舉幾個
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News