完美主義對程式設計師的影響

2022-09-15 07:00:15 字數 2313 閱讀 3602

乙個系統可以維持 5 年,10 年,甚至 20 年以上,但是**和設計模式的生命週期非常短,當對乙個解決方案使用不同的方法進行迭代的時候,通常只能維持數月,數日,甚至幾分鐘的時間。

隨著對**是如何改變的研究,致力於**修改藝術的人發現了乙個**庫的規律曲線。每個系統都有很多從未改變的**。但是也有小部分非常重要且有用的**一次又一次的改變,經過了多次重構和重寫。

當你對乙個系統,問題域,或者架構方法越來越熟悉的時候,就更容易發現和**哪些**會經常修改,哪些**不會被修改,即區分重要**和非重要**。

眾所周知,我們應該寫乾淨整潔的**,而乾淨整潔就應該是盡可能一致,易懂,簡單。

有些人追求極致,強迫自己寫的**要漂亮且優雅,接近於他們所能達到的完美,瘋狂的進行重構,並致力於每乙個細節。

與寫完**不再變動相比,一直修改的**會讓完美的需求和具有前瞻性的設計變得有些多餘和沒必要。

你不能寫出完美的軟體,這樣的結果會使你受傷了?沒必要,把它當做人生格言,信奉並祝賀,因為完美的軟體並不存在,在計算機歷史中沒乙個人曾經寫出過完美軟體,當然,你也不可能成為第乙個,只有接受這樣乙個事實,你才能不再在浪費時間,將精力放在可能實現的理想中。

andrew hunt

曾經寫過的**不需要優美優雅。它必須是正確的且容易理解的,因為在系統的生命週期中那些從不用修改的**也會被多次訪問。同樣這些**不需要又整潔又緊湊——只要整潔就足夠了。在一定程度上,複製貼上和其他快捷方法寫出的**是允許的。即使這些**周圍的**變了,這些**不需要反覆修改,不需要重構(直到你需要修改它)。這樣的**是不值得花費額外的時間的。

那些經常修改的**該如何處理呢?苦思冥想**風格和提出最優雅的解決方案是浪費時間的,因為這些**可能會在幾天或幾周之內再次修改,甚至重寫。因為希望**應該變得更好而痴迷地重構那些需要經常修改**,或者重構那些基本不會修改的**。**一直可以變得更好,但這並不重要。

最重要的是:**是否做到了它應該做的事?**執行正確且可用又高效嗎?能夠處理錯誤和錯誤資料而不奔潰或者至少是安全地出錯嗎?容易除錯嗎?能簡單又安全地修改**嗎?這些不是對於完美**的主觀想法,而是用來區分成功和失敗的切實可行的措施。

精益開發的核心思想是:不要浪費時間在那些不重要的事情上。這句話已告訴我們該怎樣寫**,怎樣重構**,怎樣評審**,怎樣測試**。

為了把工作做好,只重構你需要的——martin fowler 稱為機會主義重構(理解、清理不切實際的東西)和預先重構。足夠讓修改變得更簡單更安全即可,其他的不必考慮。如果你不修改那些**,那麼那些**長什麼樣子是無所謂的事。

在**評審中,只關注那些重要的。**正確嗎?有防範機制嗎?安全嗎?容易理解嗎?能夠安全地修改嗎?

忘掉編碼風格(除非編碼風格達到可理解的程度)。讓你的 ide 處理格式化。不要過多爭論:**是否可以是「更多的 oo」。只要它有意義,不管它是否適當地遵循這種或那種模式,這些都不重要。無論你喜歡還是不喜歡都沒關係。無論你能否以更好的方式做到這一點並不重要——除非你在教乙個對平台和語言都不熟悉的新手,而且你需要做一些**評審作為指導的一部分。

寫測試是有必要的。測試那些涵蓋主路徑和重要例外情況的測試。測試可以讓你以最少的工作量獲得最多的自信心。大規模全範圍測試或者小規模區域性測試——在編寫**之前測試還是之後測試,都沒關係,只要做了這個工作就行。

這不(僅)是關於**

建築學和工程學的隱喻從未在軟體開發中生效。我們不是設計和建造橋梁或摩天大樓 —— 它們會在幾年或幾代內保持基本相同。我們正在建造一些更富有創造力和抽象性、更加短暫的東西。**編寫之後是用來修改的 —— 這就是為什麼它被稱為「軟體」的原因。

「經過五年的使用和修改,成功的軟體的原始碼通常與最初版本完全不一樣,而五年之後的成功的建築幾乎沒有什麼變化。」

kevin tate

我們需要將**看作是我們工作的乙個暫存:

…有時在面對更重要的事情時,我們被引導到盲目崇拜**。我們經常會處於這樣的幻象中:在移交產品時最有價值的東西是**,實際上這可能是對問題域的理解、設計難題的進展甚至是客戶反饋。

dan grover

迭代開發教會了我們通過實驗來驗證我們工作的結果 —— 我們是否已解決了這個問題,如果沒有,我們學到了什麼,我們該如何改進?我們正在構建的軟體永遠不會完成。即使設計和**是正確的,它們可能也只是在一段時間內是正確的,直到環境要求其再次改動或被替換為更好的東西。

我們需要編寫好的**:可理解、正確、安全和可靠的**。我們需要重構和審查它,並寫出好的有用的測試用例,直到其中的一些**(也可能是全部),可能會很快被拋棄,或者可能永遠不會被再次看到,或根本不會使用了。我們需要認識到,我們的一些工作必然會被浪費掉,並要為此進行優化。做那些必須做的,不做無用功。不要浪費時間嘗試編寫完美的**。

完美主義對新手程式設計師的影響

我是乙個完美主義者,或者,至少我喜歡這樣自居。不管怎樣,我絕對離完美主義者不遠了。這樣本來挺好的。然而,我最近意識到,它實際上阻礙我成為乙個更出色的開發者。至少,它阻礙了我的進步,並妨礙了我的學習。像很多初級開發者和普通開發者,我有乙個不完成副專案 side projects 的習慣。不是因為我懶或...

完美程式設計師

完美程式設計師的每種品質都有乙個範圍,這個範圍取決於具體的問題和背景。沒有能解決所有問題的完美程式設計師 至少在我們這個星球上 並且對於特定問題,完美程式設計師應該具有以下品質 1.才智非凡 能夠理解問題 能夠用清晰可讀的 翻譯並表達想法 善於分析並且邏輯思維能力強 範圍 用簡單方式解決複雜問題 2...

公司福利對程式設計師有些什麼影響?

首先來說乙個高階程式設計師並非靠自己讀幾本書寫幾萬行 就能練就的,我更關注於低層的環境,也就是程式設計師實實在在的工作環境。因為程式設計師的高低還得 從實際的工作來衡量,而非其它。所以我想說的是,中國的軟體公司的性質直接導致程式設計師的水平的高低。而我所說的軟體公司,不是指某個或者某幾個,而是指主 ...