寫程式最困難的地方

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

最近跟同事討論一個功能模組的設計有什麼問題,當我很流暢的找出問題點並且提供幾種不同的方向時。同事就問我說,要怎麼樣才有一個「標準做法」去設計這些系統呢?

沒有正確答案

我只能告訴他,這一切都要根據當下狀況判斷。在過去的學習經驗中,我們總是學著所謂的「標準答案」因此會很習慣的認為有一個標準做法。同時,在學習撰寫程式的時候,我們參考的教科書、文章、課程也都會有一個完整的案例。

在這樣的狀態下,就會發生所謂不知變通的狀況。也就是每一次都會想著要套用一個公式進去,然而這樣的系統很多時候會變得難以維護甚至完全不符合產品、客戶、使用者的需要。

情況永遠會變

即使我們能夠針對一個情況判斷,也仍然會因為人、時間等因素讓情況改變。這也是在上週的軟體是一種生物這篇文章所提到的觀點,我們是需要不斷的更新、改變設計來對應當下最為真實的狀況。

這就表示,即使我們再怎麼努力的設計一個當下「完美」的系統,依舊還是會面臨需要被調整跟修改的情況。這也是在軟體開發中最為困難的一個能力,要做到所謂的「剛好」是非常困難的。同時,在許多軟體開發的技巧中,會追求所謂的「解耦(Decoupling)」這個特性,就是為了盡可能的減少無法靈活調整的情況。

扎實的基本功

要能夠在這樣的狀況下應對自如,大多數時候需要扎實的基本功以及足夠的經驗。因為有經驗,就能夠快速的想像一個系統至少具備怎樣的特性、規格、盲點,進而避開這些問題,這也是為什麼在同一個領域轉換會比較常見的原因。

至於基本功,就是對於程式的運作、電腦科學的理解,也就是軟體工程師的素養所提到的「素養」問題。當我們嘗試去解決一個複雜的問題,最好的方法就是找到切分問題的方式,由大到小的分解,最後的結果就會回到這些關於電腦、程式運作原理的概念上。

然而,大多數新手容易遇到的是,剛開始工作都會被分配到「小單元」的工作,往往是由小而大的堆疊,因此常常看不見完整系統的樣貌。要解決這樣的狀況,由比較資深的工程師所規劃、設計並且切分的工作就變得極為重要。

簡單來說,寫程式最困難的地方往往不是技術上的問題,而是如何對當下的狀況正確判斷並且建立良好協作的狀態,才會是最為困難的地方。


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

留言
avatar-img
留言分享你的想法!
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