學會這11個主要元知識概念,媽媽再也不用擔心我的代碼編寫啦!
在小芯認識的程序員之中,大部分人都更注重實操實踐,對于知識點的學習沒有那么在意,雖然那些基礎知識常常在編碼中發揮不可取代的作用,但還是難以逃脫被人們看輕或忽視的命運。
當然現在也出了很多知識學習,指南指導類的文章或者課程,成為大家“投機取巧”、短時間掌握大量核心知識的“捷徑”。
并不是說這種“捷徑”不好。
在大多數情況下,有很多指南都是可以參考的,它們能夠指導讀者學習那些最熱門的語言以及最熱門的知識,從而使讀者成為行業的佼佼者。
盡管這些指南可能有用,但它們僅引導讀者獲得表面價值。這些指南提供了淺層次的學習路線,如果想要往更深層次發展,還是需要自己去慢慢實踐和探索。
因此,小芯今天幫大家整理了能“獲得成為一個真正有效的開發人員所需的深度知識“。
但是這些生僻的編程“元”知識,仍需要讀者自己去主動潛心鉆研。
編程元知識是計算機科學專業畢業生必學的東西,而自學者經常會漏掉這些知識點。編程元知識是查看和編寫代碼的基礎。
圖片由Aphinya Dechalert拍攝-這些都是“元”
本文提供一份清單式的指南,好讓讀者在這些新鮮好奇的知識行囊里進行瀏覽和挑選。
綜合指南(絕大部分與語言無關)
全局圖—:Aphinya Dechalert撰寫
1. 數組!因為一切都是數據
幾乎在每個教程中,都會遇到一個非常簡單的數組版本。比如熟知的扁平的一維數組,包含少許元素。但是在現實生活中,還有更多的種類,形狀和具有奇異性的數據可以以數組形式呈現。
當涉及到生產級數據集時,多維數組和交錯數組是經常使用的類型。如何優化這些數組的結構以供創建和使用,決定著開發人員是否能高效地執行任務。
2. 談談算法
每個人都在談論“算法”,仿佛它是一個被AI喚醒的神秘物體,會給所有人帶來厄運。 或許這只是廣大民眾的一種看法。
在開發人員踏入編程的潮流前,算法只是編程中一系列實現特定結果的可重復規則。
當涉及到算法時,了解排序算法的機制可以幫助開發人員在處理大量數據時保持清醒。
有些時候,面臨的是數據和數據處理問題。如果熟悉為特定類型的數據進行設計和測試的方法,那么就能減少對列表的sort()等方法的依賴。
這是因為sort()傾向于運行自己的算法,而該算法可能因繪制引擎而異。當編寫自己的算法時,就可以更好地控制通過代碼處理的數據的質量和速度。
3. SOLID設計原則
SOLID是編程中五項設計原則的集合。這五項原則是可以實現面向對象編程的模式。
SOLID原則的有用之處在于提升代碼靈活性、長期可維護性,以及加強對開發人員間工作完成方式的全面理解。
除了創立健壯的代碼之外,SOLID還形成了敏捷軟件開發的核心理念。
4. 測試
不要僅僅學習如何測試,更要學會研究測試背后的理論。當進行測試時,開發人員傾向于僅僅關注單元測試,而不去弄清楚整體意識形態的機制,以及它們為什么是代碼穩健的基礎。
測試分為基于功能的測試和非功能性測試,如性能、安全性、可用性和兼容性測試。這些測試通常具有較低優先級,或者根本未被考慮。
重要的是,測試還能讓開發人員運行假設的場景并預先確定數據的形態,以及在開始編碼之前預測潛在的問題。
5. 樹
有些時候會聽到關于“樹”的內容。這里的“樹”不是指通常生長在泥土中并提供氧氣的植物,而是基于關系基礎結構——通過節點、葉節點、子節點、父節點和兄弟節點訪問,從而構建數據。
如果使用過HTML,就會聽說過DOM樹。那是一種樹的類型。二叉樹是每個節點都有兩個子節點連接的樹,它創建了一個可以追溯到最頂端的金字塔樣式圖。
但是,樹的意義遠不止這些,它還與性能、處理數據以及如何快速檢索數據有關。
6. 動態編程
動態編程是一種通過遞歸方式,將復雜問題分解為可能的最小子問題,來解決復雜問題的方法。這是一種編程技術,可用于多個學科,而不僅限于代碼。
動態編程的關鍵點在于,它對遞歸的使用意味著一個問題只會被解決一次,并且可以優化工作負載,而不是根據特定的重復算法來組合事物。
最初,因為很像算法,動態編程的概念可能會讓人困惑。但是動態編程和算法有著顯著的不同,有著不同的機制原理,從長遠來看,學習動態編程可以幫助開發人員成為一個更好的程序員。
7. 散列表 (Hash Table)?(與土豆煎餅 (Hashbrowns) 無關)
程序以一種易于訪問和理解的方式組織大量數據。散列表是存儲和檢索數據的另一種方法。
當涉及大型數據集(有數百萬個的數據點)并且需要快速檢索數據時,散列表是常見的選擇。但同時散列表也能對本地應用程序存儲中較小的數據集進行設計,以提高效率并對特定集進行分類。
8. 二分搜索法
又回到了另一個與數據相關的話題。二分搜索是一個值得探索的重要話題,因為它與性能有關。
為了使二分搜索工作正常進行,必須要對需搜索的數據集進行預排序,以使算法能夠快速遍歷每個數據點并確定是否匹配。
關于二分搜索,有多種方法能夠實現它,通常是算法和遞歸的混合。二分搜索的思想可以應用于不同的語言,它更多的是一種基于數學推理的技巧,而不是實際的代碼。
9. 認真對待進程、線程和并發
當開始關注進程、線程和并發時,這意味著已經開始深入編程了。
然而,因為進程、線程和并發主要面向后端開發人員,但作為一個前端開發人員,可能從未遇到過這些問題,但對它們的工作原理有所了解仍然是一件好事。因為這有助于全面了解計算機的工作原理,以及代碼是如何作為人類、繪制引擎/解釋引擎和機器之間的通信橋梁進行工作的。
了解這些概念還能幫助你了解儲存系統的工作方式以及編寫的代碼對性能的影響。
10. 鏈表
除非使用C ++或Python,否則不太可能會運用到鏈表。雖然鏈表看起來與數組十分相似,但是鏈表有著不同于數組的特定優點和缺點。
如果開始深入研究數據是如何以鏈表的形式顯示的,就會發現它非常適用于大型數據集工作,因為它的容量是無限的。
如果數據過于龐大,最終需要調整數組的大小。而鏈表可以保持數據之間的“鏈接”。
11. 設計模式的藝術
一切都可以歸結為一個模式。后退一步,著眼全局,并確定以前是否遇到相同問題,然后設計模式就得以實現了。
如果可能的話,則推薦使用設計模式來節省時間,防止潛在的問題進一步發展,并為代碼編寫過程創建標準。
雖然設計模式看起來是一個需要學習的大領域,但它也會帶來良好的投資回報,因為實際上減少了將來由于結構缺乏或結構較弱而可能從代碼中出現的百搭碼文的數量。
在某種意義上,設計模式就好比一個預先設計的藍圖,有助于在不斷的實踐應用中保持代碼的可讀性和可理解性。
結語
編程不僅僅是學習一門語言的工作原理。語言、框架、庫背后還隱藏著機制和技巧。
希望這份元知識指南能讓大家對編碼有更為全面的了解,并且不局限于……嗯,代碼本身。
If else 語句會使很多剛入門的程序員感到困惑,但掌握if else 語句也是證明知識積累與應用達到新高度的標志。
不必完全理解所有的內容,但這些知識點可以有助于未來的程序編寫。
知道或至少了解上述主題如何發揮作用并融入全局,將有助于加快編碼過程,并提高所創建代碼的潛在健壯性,以防出現殘缺和衰退。
加油,各位機智的天才程序員們!