大家好,我是若川。之前送了很多書,現在又和異步圖書合作再次爭取了幾本書,具體送書規則看文末。
所謂練武不練功,到老一場空,以技術為驅動的程序員同樣如此。面向對象編程范式、設計原則、代碼規范、重構技巧和設計模式這些程序員基本功在根本上決定了這個職業的發展高度。把這些基本功練好,可以讓你成為一個合格且優秀的程序員、擺脫“碼農”身份成為真正的技術專家。
今天推薦一本前谷歌工程師王爭重磅新書《設計模式之美》,這本書來源于極客時間高口碑專欄,那么這本書所講的基本功到底是什么?是如何影響程序員的,又該如何修煉以幫助我們在程序員這條賽道上跑得更快、獲得更高回報。我們一起來了解吧。
▲ 點擊圖片,開始你的程序員基本功修煉之路
現在應該是五折,約50~
決定程序員發展的5個基本功
小異了解到不少程序員在學習和實際編程過程中看重技巧類的東西,而忽視基本功,到頭來發現自己的代碼結構混亂、難以維護、拖累整個項目,源碼看得似懂非懂。整體情況非常糟糕,這一切都限制著自己的職業發展。
想要改善這些情況,寫出一手高質量的代碼,獲得更為優渥的回報,需要從以下5個基本功方面入手,認認真真,潛心鍛煉。
面向對象編程
面向對象編程(Object Oriented Programming,OOP)是一個主流的編程范式,包含封裝、抽象、繼承和多態四大特性。按照小爭哥在書中的非嚴格限定下的定義,可以這樣說:
面向對象編程就是一種將對象或類作為代碼組織的基本單元來進行編程的編程范式或編程風格。
學習和使用這種編程風格,主要是因為它有著非常豐富的特性,能夠解決系統的可維護性、可擴展性等問題。并且可以用來實現更多復雜的設計思路,從而成為許多設計原則、設計模式編碼實現的基礎。
相對于其他的編程風格,面向對象編程的代碼更符合人們觀察和解決問題的思維方式,從邏輯上讓代碼的可讀性變強——更容易被人理解,也就更容易擴展和維護。在很多情況下,評判代碼質量好壞的標準,就有可讀性與可維護性,所以學會和掌握面向對象編程這個基本功,可以初步解決這兩個方面的問題,從而寫出高質量的代碼。
設計原則
所謂的設計原則就是許多先驅們在做代碼設計時總結的一些寶貴經驗,相比單純看它們的定義,知道它們的應用場景和能夠解決什么問題更重要。
因為開發的時候會面對各種各樣不同的需求,如果我們不了解設計原則,對于每次的項目需求都毫無準備,那么在前期的代碼設計工作上將要花費大量的時間與精力,得不償失。有了世界上無數大師們的經驗總結,我們就可以通過分析需求從而選擇合適的設計原則,大大減少初期開發成本。
小爭哥在他的書中主要講了6大類9個設計原則,分別是:1)單一職責原則(SRP);2)開閉原則(OCP);3)里氏替換原則(LSP);4)接口隔離原則(ISP);5)依賴反轉原則(DIP);6)KISS 原則、YAGNI 原則、DRY 原則和 LoD 法則。
通過認識和了解這些設計原則,我們能夠清楚地知道為什么使用這種設計模式,并且知道何時如何恰當地使用設計模式——基本功之間也是相互關聯的。
設計模式
設計模式同樣也是程序員基本功,是為了解決代碼的解耦、可擴展性問題:它是指針對軟件開發中經常遇到的一些設計問題而總結的一套解決方案和設計思路。這些設計模式隨著編程語言的發展與演變,在不同時代有著不同的表現。
而當下比較常用的設計模式并不多,小爭哥在他的書里介紹了22種設計模式,主要分為創建型、結構型和行為型三個大類。學習設計模式同樣需要關注它們的典型應用場景與能夠解決的問題,還需要注意不能過度使用!
這些設計模式代表了最佳的實踐,是無數開發人員經過漫長的時間試驗和錯誤總結出來的。作為新手學習設計模式有助于他們通過這種快捷簡單的方式來學習軟件設計,作為有編程經驗的程序員學習設計模式則能夠幫助他們在開發過程中更快選擇最佳解決方案。
代碼規范
當初期工作做好,開始寫代碼的時候,就需要注重代碼規范這一基本功了。相比設計原則與設計模式,代碼規范更為簡潔與直接,注重的是代碼細節。它是為了解決代碼的可讀性問題,讓代碼的維護變得可行并且更簡單。
小爭哥在書中總結了包括變量、類和函數的命名規范、代碼注釋規范等17條能夠有效改善代碼質量的代碼規范。一般來說我們并不需對這些規范有太多的思考,只要遵循這些規范即可讓自己的代碼可讀性提升一個很大的檔次。
同時他還在書中介紹了一些代碼的“壞味道”,幫助我們認識和了解什么代碼是不規范的,如何避免與優化,從正反兩面同時入手提高代碼質量。
重構技巧
只要項目還在運轉,重構就是不可避免的。重構技巧作為程序員的基本功,在軟件開發中是不可或缺的能力,它能夠保證項目代碼質量穩定,讓代碼不至于變得“腐朽”而拖垮整個項目。
如前文所說,這些程序員基本功都是相互聯系的,也就是說面向對象編程、設計原則、設計模式、代碼規范都是重構的工具。設計原則與設計模式很大的一個應用場景就是重構;重構分為大重構(大規模,高層次)和小重構(小規模,低層次),代碼規范就是小重構的主要依賴。
無論使用何種方式去重構代碼,需要謹記的是重構的目的——讓代碼質量提升,不應該過度使用代碼設計,“為了設計而設計”,導致代碼的復雜度過高,從而降低代碼質量。
礙于篇幅,小異只是簡單介紹了這5個程序員的基本功表現與功效,及其之間的相互關系。想要寫出高質量的代碼,除了積累這些理論知識之外,實踐是必不可少的過程,只有經過了實踐才能把理論落實,遇到問題的時候可以快速定位知識點從而思考出思考出解決方法。
小爭哥是如何教程序員鍛煉基本功的
小爭哥深諳此道,從實踐出發,使用大量真實代碼案例來幫助程序員修煉這些基本功。
實踐是檢驗理論的唯一標準
理論落地才有意義,不然只會空口談論一遇到實際問題就無從下手則一點用處都沒有,就白學了。
所以小爭哥在使用通俗的語言解釋理論的同時,搭配全書2w多行代碼、200多個實戰項目案例來形象地說明和展示什么是面向對象編程、設計原則與設計模式實際效果是怎么樣的、“爛代碼”是如何影響項目進度,以及如何進行重構。
這些代碼與案例是他過去十幾年工作中積累的豐富經驗,源自真實的項目,針對每一個知識點重新設計的,實踐性極高。對于初學者,或者開發經驗不足的程序員來說,這些寶貴而豐富的示例能夠幫助他們快速理解這些基本功與技巧的抽象概念,和在實際問題中的應用。
實踐是檢驗理論的唯一標準,只有在實戰中去親身感受、體會這些理論該如何使用,才能夠從根本上理解和掌握這些基本功。通過跟隨書中大量的代碼實戰,我們能夠很快地掌握一套提高自己代碼質量的方法與技巧,從而告別“爛代碼”。
主動學習,獨立思考,深度理解基本功
在實戰的同時,也不能忽視獨立思考的力量。
就像在設計模式部分所說,設計模式也是會隨著編程語言的發展而發生變化,它們并不是始終如一。在不同的情況下它們可能會有不一樣的表現,現在它是大家遵守的規范,也許再過幾年就會被棄用——設計沒有標準答案。
小爭哥只是教會我們這些基本功,但是沒有讓我們專信、迷信本書中所有的內容。大師的方法與思想也是一樣,如果它能夠指導我們改善自己的代碼,那么就采用;如果它不能改善代碼,并且在一定程度上讓代碼質量下降了,那么就需要思考這其中的原因,從而找到更有效的方法。
在書中每一個章節最后,他都設計了1~2道思考題,這些題目有些是代碼設計相關的開放性問題,有些是具體的代碼優化問題。我們在看完本章節內容的時候,對后面的問題花上一點點時間進行思考嘗試解決,對于本章節知識掌握有著極大的幫助。
全方位夯實基礎,無死角,無漏洞
雖然小爭哥書名字叫《設計模式之美》,但其實有一點“以偏概全”,因為本書是以編寫高質量代碼為主旨,全面講解了面向對象編程、設計原則、代碼規范、重構技巧和設計模式這5個程序員基本功的概念與修煉方法。
第1章對這5個基本功做了一個基本的概述,厘清了它們之間的關系,幫助我們建立程序員基本功的概念體系。
第2~5總共4章,分別介紹面向對象編程、設計原則、代碼規范、重構技巧這4個編程基本功,講解它們是如何在實際應用中發揮作用的,使用大量的實踐代碼幫助我們理解和運用。
第6~8章都是講設計模式,分別是其三個分類:創建型、結構型和行為型設計模式。對包含的22種具體的設計模式做了非常細致的分析與實際應用展示,讓我們對于常用的設計模式有切實的了解,對于不常見的設計模式也有著大概的認識。
在這樣的內容安排下,我們能夠全方位地夯實自己編程基礎,修煉好自己的程序員基本功,從而避免練武不練功,到老一場空的尷尬境地。
和小爭哥聊程序員的基本功
不論是編程初學者,還是有經驗的程序員,都不應該忽視基本功的修煉。只有把自己的基礎打好,把程序員基本功掌握好,才能夠支撐起自己日后在職業上的更高發展。
在6月23日晚上8點,小爭哥會準時作客異步直播間,和大家聊一聊基本功對于程序員的重要性。同時向大家介紹更為詳細有效的鍛煉基本功的方法與技巧,手把手教大家寫出高質量代碼,使項目更好維護、通過心儀面試、推動升職加薪等變得手到擒來。
現在應該是五折,約50~
文章編輯:沙魚 審校:桐希 張濤
參考來源:
[1]?王爭.《設計模式之美》.[M].北京:人民郵電出版社:2022.
[2] 王爭,? 設計模式之美.專欄
文末福利
小伙伴們,可以在本文留言區留言為什么想要這本書~
抽獎規則:在我的公眾號結合留言內容隨機抽1位,獲得新書包郵送。
截止時間:9月26日(周一)晚8點,可能延后,以置頂留言為準。
其他幾本其他方式送出。
中獎小伙伴,我會聯系兌獎。也可以提前掃碼加我微信 ruochuan12 以防失聯。或者發送源碼兩字參與源碼共讀。