Contents

每個程式設計師都必須了解的 10 個基本程式設計原則

要點

本質上,KISS 原則提倡編寫簡潔、直接的程式碼。目的是透過避免複雜或複雜的解決方案而採用更簡化的方法來最大程度地降低複雜性。這包括對變數使用明確的命名約定並避免不必要的複雜結構。

透過利用可重複使用元件(例如函數、迴圈和演算法結構),避免在程式的各個部分之間複製邏輯。這種方法不僅簡化了維護和調試工作,還提高了整體可讀性和效率。

透過遵循「開放/封閉原則」這項原則,優化程式碼的可擴展性,同時保持其完整性。這涉及到精心設計的軟體設計,允許無縫添加而不影響原始結構,確保穩定性和易於維護。透過建立這種平衡,您可以擴展功能,同時保持對潛在修改的控制。

編寫有效的電腦程式碼可能很簡單,但編寫卓越的程式碼需要技巧和奉獻精神。遵守基本程式設計原則可確保建立具有最佳效能、可讀性、可靠性、安全性和可維護性的一流程式碼,無論軟體工作的規模或複雜性如何。

有效的編碼需要紀律和目的性。為了實現這一目標,必須遵守某些基本程式設計原則,以促進改進編碼實踐。透過結合這些原則,人們可以提高程式設計師的熟練程度。

保持簡單,愚蠢(KISS)

乍一看,這項原則似乎相當粗糙,但毫無疑問,它是編寫電腦程式碼時必須遵循的基本原則之一。在這種情況下,「KISS」究竟意味著什麼?

從本質上講,明智的做法是編寫盡可能簡單、簡單的程式碼。在熟練編碼的基本原則中,建議不要全神貫注於試圖透過錯綜複雜的高級語法來展示過度的獨創性或炫耀。只要可行,請用簡潔的指令力求簡潔。

這是一個簡單的函數:

 function addNumbers(num1, num2) {
    return num1 \+ num2;
} 

內容以直接的方式呈現,可以清楚地理解其訊息,其預期意義不會含糊或混亂。

體現簡單性的一項有價值的程式指南是使用顯式變數命名法。利用已建立的編碼庫和資源,利用現有工具簡化您的工作流程。透過設計一種即使在長時間中斷後也能促進恢復的方法,人們可以減輕相當大的挫折感並提高生產力。格言「保持簡單,愚蠢」(KISS)在應用於軟體開發時具有重要的優點,因為從長遠來看,維護簡單的程式碼庫可以減輕嚴重的困擾和低效率。

寫乾程式碼

電腦程式設計中的 DRY(不要重複自己)原則提倡消除重複程式碼。這是防止資料和邏輯重複的基本原則,當開發人員無意中在整個程式中複製和貼上程式碼片段時,通常會發生這種情況。擁抱這項原則可以透過減少冗餘和促進模組化來顯著提高軟體系統的可維護性和可擴展性。

看看這個腳本:

 function addNumberSequence(number) {
    number = number \+ 1;
    number = number \+ 2;
    number = number \+ 3;
    number = number \+ 4;
    number = number \+ 5;
    return number;
} 

在演算法框架內採用循環機制比複製線路更有效。

DRY(Don’t Repeat Yourself)程式碼以其極簡和簡單為特點,不僅在資源利用率方面具有高效性,而且在維護和調試方面也具有顯著的優勢。透過將重複的元素或邏輯合併到單一可重複使用的元件中,開發人員可以避免在程式中的多個位置重複程式碼,從而減少潛在的錯誤並簡化識別和解決問題的過程。從本質上講,使用 DRY 程式碼可以更有效地管理程式碼庫複雜性,同時促進模組化和可擴展性。

打開關閉

/bc/images/basi-programming-principles.jpg

軟體開發中「開閉原則」的概念表明,人們應該努力創建易於擴展但在修改後保持不變的程式碼。透過遵循這項原則,開發人員可以確保他們的程式碼庫保持功能性和適應性,即使專案的需求隨著時間的推移而變化。在設計供其他程式設計師廣泛使用的函式庫或框架時,開閉原則具有特別重要的意義。

考慮這樣一個場景,其中有人正在監督圖形使用者介面(GUI)平台。可以想像分發一個版本,使開發人員能夠無縫修改和合併所提供的原始程式碼。然而,當四個月後大幅升級時會發生什麼?

他們的程式碼的執行預計會失敗,這將導致他們的同事的不滿。因此,這些合作者不太可能繼續使用您的軟體包,即使它在前一段時間曾經非常有用。

與其直接修改程式碼,不如建立一個限制任何變更並促進添加或增強的版本。遵守諸如此類的基本程式設計原則可以將程式的主要功能與其自訂功能分開。這種方法可以形成更強大、更易於管理的系統,使維護工作更簡單、更有效率。

組合優於繼承

當在軟體開發中採用物件導向的方法時,組合優於繼承原則 (COIP) 被證明是非常有利的。 COIP 認為,與繼承類別並隨後添加額外的行為相反,應該透過合併表現出單一行為的單獨物件來獲得更複雜的行為。

繼承的利用常常會導致兩個重大問題。最初,繼承的層次結構可能很快就會變得相當複雜。此外,在繼承框架內描述異常行為的範圍有限。例如,假設一個人希望建立在多個實體之間共享的行為;當僅依賴繼承時,這變得更具挑戰性。

/bc/images/principle-of-programming.png

組合程式設計提供了一種更簡化的程式碼編寫方法,使其更易於保存和更新,同時提供透過專門為每個獨特行為創建類別來定義適應性行為的能力。這些個體行為的聚合能夠發展出具有增強多功能性的複雜行為。

單一職責

/bc/images/principle-of-programming-language.jpg

根據單一職責原則,軟體系統中的每個類別或模組都應該專門致力於實現單一功能。正如羅伯特·C·馬丁(Robert C. Martin)所闡述的那樣,一個階級應該「只有一個改變的理由」。

隨著複雜系統的發展,在為類別和模組添加新功能或職責時務必謹慎。隨著這些實體變得越來越複雜,可能有必要將它們重構並分解為更小的子類別和模組,以改善組織和可維護性。

重載類別可能會導致多種不良後果。其中一種影響與在調試過程中識別和解決特定模組內的問題的複雜性有關。另一個有害結果涉及阻礙同一模組內進一步功能的開發。堅持良好的程式設計實踐有助於在這些潛在挑戰發生之前緩解它們。

關注點分離

分離關注點的概念是對單一目標(稱為單一責任原則)的高階解釋。根據這項原則,建議透過將軟體系統劃分為不同的元件來建立軟體系統,其中每個元件獨立運作並且與其他元件沒有知識或互動。

管理資訊的資料模型;控制器,負責處理使用者輸入並相應更新模型;視圖,表示向最終使用者顯示模型目前狀態的使用者介面。這種設計模式可以在各種當代 Web 開發框架中觀察到,只需稍作修改即可適應特定要求或偏好。

換句話說,負責管理資料庫的程式不需要任何有關在螢幕上顯示資訊的過程的知識。相反,處理此任務是另一組指令的工作。這兩套代碼是完全獨立且不同的實體。

這種方法的優點在於它能夠促進調試過程。如果需要在任何時間點對視覺化系統進行更改,他們可以完全放心地這樣做,因為他們的修改不會幹擾資料的儲存和處理。

你不會需要它(YAGNI)

/bc/images/computer-programming-principle.jpg

軟體開發的一個基本原則規定,特性和功能的實現不應以未來潛在需求的預期來進行推測。在熟練程式設計的關鍵準則中,必須認識到避免解決不存在的問題的重要性。

在努力實現乾燥程式設計原則的過程中,開發人員在遵守這項原則方面做出妥協的情況並不少見。新手編碼人員經常嘗試創建高度通用和抽象的程式碼,這可能會由於過度抽象而導致程式過於複雜且難以管理。

當認為有必要時,應考慮在程式設計中實施 DRY(Don’t Repeat Yourself)原則。重複程式碼段的存在需要建立抽象層以提高效率。然而,我們必須避免過度關注未來的開發而犧牲直接的程式碼品質。

記錄你的程式碼

重要的是不要忽視考慮最終將與程式碼互動並瀏覽程式碼的個人的重要性。在討論程式設計基礎知識的過程中,重要的是要記住有人參與其中,他們可能需要在某些時候深入研究程式碼。

在經驗豐富的開發人員看來,透過在原始碼中進行細緻的註釋來堅持完整的文件的重要性怎麼強調都不為過。每種程式語言都提供此功能,因此編寫此類註釋必須成為一種根深蒂固的做法。這些註釋的目的不僅僅是澄清物件或增強變數解釋;它們還有助於闡明功能的複雜性,從而使它們更容易理解。

當然,這裡有一個 JavaScript 函數,已被註釋以提供其功能的解釋:

 // This function will add 5 to the input if odd, or return the number if even
function evenOrOdd(number) {
    // Determine if the number is even
    if (number % 2 == 0) {
        return number;
    }
    // If the number is odd, this will add 5 and return
     else {
        return number \+ 5;
    }
} 

在編寫程式碼時,註解可以被視為一項額外任務,因為它們需要投入時間和精力。雖然人們可能對自己的程式碼有深入的了解,但重要的是要認識到對於可能與程式互動的其他人進行清晰溝通的價值。一次性概念不應該應用於技術,因為有效的溝通對於成功的協作和長期可用性至關重要。

當與其他人合作時,強烈建議採取額外措施,並在可能存在歧義或混淆的地方提供澄清意見。這種主動措施可以防止因誤解代碼或缺乏透明度而引起的任何潛在誤解。透過這樣做,可以避免給可能需要闡明複雜語法的同事帶來過多的負擔,從而促進有效的團隊合作並促進開發過程中的清晰溝通。

經過較長一段時間的休眠後,重新審視軟體專案通常會引起恐懼感,因為隨著時間的推移可能會出現潛在的複雜性。然而,人們可以透過遵循一種稱為「基於時間的文檔」的做法來減輕這種不確定性。這種方法需要以一種即使在相當長的中斷之後也能促進理解的方式記錄有關程式碼庫的相關資訊。透過這樣做,開發人員不必為了回憶其功能而仔細檢查每個函數,從而節省了寶貴的時間和資源。

重構

/bc/images/what-is-computer-programming-principle.jpg

完善一個人的技術通常需要透過重構過程進行迭代完善。透過仔細檢查和評估現有程式碼庫,可以在效率和可讀性方面進行改進,從而在不犧牲準確性或功能的情況下獲得最佳化的結果。最終目標是產生高品質且結構良好的程式碼,以有效地實現其預期目的。

程式碼庫的不斷發展是程式設計領域的自然現象。重要的是要認識到並接受重新訪問、重寫甚至完全重新設計部分程式碼是開發過程中不可或缺的一部分。

隨著人們越來越習慣於某個特定的程式設計項目,他們自然會對其複雜性有更深入的了解和理解。利用這種累積的智慧可以對正在開發的軟體進行有意義的改進。透過採用這些進步,開發人員可以提高他們的技能並相應地調整他們的方法。

不惜一切代價保持程式碼整潔

為了有效應對技術挑戰,拋開個人自豪感,避免為了展示自己的能力而編寫複雜的程式碼至關重要。重點應該放在設計實用的解決方案上,而不是創建類似謎題的模糊代碼。重要的是要記住,程式設計的主要目標是解決問題,而不是尋求他人的認可。

建議不要用過多的邏輯操作使單行負擔過重。透過評論和文件提供清晰簡潔的指導至關重要。此外,當程式碼易於閱讀時,它通常也變得更易於管理以供將來維護。

精通的程式設計師通常都會附有清晰的原始碼。重要的是在適當的情況下添加註釋,遵循既定的風格約定,並在編寫程式碼時經常考慮未來開發人員的觀點。

學習電腦程式設計原理,成為一名優秀的程式設計師

作為一名軟體開發人員,獲得熟練的技能需要大量的奉獻和努力。編碼的基本原則是掌握該領域的重要藍圖。遵守這些既定準則無疑將為一個人在電腦程式設計領域蓬勃發展的職業生涯中取得成就鋪平道路。