自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何提升代碼質(zhì)量

原創(chuàng) 精選
開發(fā)
工作幾年的人還寫出那么難看的代碼,說出去會(huì)很丟人的,所以提升自己的編碼水平顯得尤為迫切。那么可以從哪些方面著手去提升自己的能力呢?

作者 | 郝安康

有這么一句名言“Talk is cheap, Show me the code.” 不管是新人還是老手,都特別想提高自己的代碼質(zhì)量,至少讓別人看著舒服。我在以往的工作經(jīng)歷中,并沒有太重視個(gè)人編碼的能力,包括正確性、美觀性還有效率。工作幾年的人還寫出那么難看的代碼,說出去會(huì)很丟人的,所以提升自己的編碼水平顯得尤為迫切。

那么可以從哪些方面著手去提升自己的能力呢?

書籍推薦

《重構(gòu)》

世界頂級(jí)、國寶級(jí)別的 Martin Fowler 的書籍,可以說是軟件開發(fā)領(lǐng)域最經(jīng)典的幾本書之一。目前已經(jīng)出了第二版。

這是一本值得反復(fù)閱讀的書籍,配合工作上的實(shí)踐進(jìn)行學(xué)習(xí)。

《重構(gòu)》一書已經(jīng)有明確的定義,分名詞和動(dòng)詞兩種形式。

  • 重構(gòu)(名詞):對(duì)軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。
  • 重構(gòu)(動(dòng)詞):使用一系列重構(gòu)手法,在不改變軟件可觀察行為的前提下,調(diào)整其結(jié)構(gòu)。

《Clean Code》

《Clean Code》是 Bob 大叔的一本經(jīng)典著作,強(qiáng)烈建議小伙伴們一定要看看。

Bob 大叔將自己對(duì)整潔代碼的理解濃縮在了這本書中,真可謂是對(duì)后生的一大饋贈(zèng)。

《Head First 設(shè)計(jì)模式》

《大話設(shè)計(jì)模式》

設(shè)計(jì)模式用于承載復(fù)雜的業(yè)務(wù)邏輯,使寫出的代碼簡(jiǎn)潔、易擴(kuò)展。簡(jiǎn)單地說,你需要去了解業(yè)務(wù)中哪些是變化的,哪些是不變的。這些變化的東西就是復(fù)雜的業(yè)務(wù)邏輯,你需要思考如何用一種合適的設(shè)計(jì)模式去承載它,使得當(dāng)它發(fā)生變化的時(shí)候,能具有很好的擴(kuò)展性。這時(shí)候如果你學(xué)過設(shè)計(jì)模式,對(duì)每種設(shè)計(jì)模式的使用場(chǎng)景都諳熟于心,那你做起來會(huì)更加得心應(yīng)手。

《Effective java 》

《Effective Java》是 Java 領(lǐng)域的經(jīng)典著作,其影響力不亞于《Java 編程思想》。

對(duì)于一個(gè) Java 工程師而言,在新技術(shù)不斷涌現(xiàn)和迭代的情況下,學(xué)習(xí)的能力以及如何快速學(xué)習(xí)的能力是成長(zhǎng)的關(guān)鍵。學(xué)習(xí)的方法、思維和能力給一個(gè)人成長(zhǎng)的助推是巨大的。

其他

  • 阿里巴巴 Java 開發(fā)手冊(cè) :https://github.com/alibaba/p3c
  • Google Java 編程風(fēng)格指南:http://www.hawstein.com/posts

優(yōu)秀源碼推薦

因個(gè)人作為后臺(tái)開發(fā)者,主要學(xué)習(xí)使用 Java 語言,所以此處推薦的也是 Java 相關(guān)的源碼學(xué)習(xí),不過大道至簡(jiǎn),語言千千種,核心不會(huì)變。

Github 上有不少 star 數(shù)極高的項(xiàng)目,大部分功能性比較強(qiáng),涉及到的技術(shù)點(diǎn)也比較先進(jìn),用來學(xué)習(xí)技術(shù)確實(shí)不錯(cuò),但并不是所有的代碼風(fēng)格都值得學(xué)習(xí),為了避免踩坑,這里就不列舉這類項(xiàng)目。這里推薦的源碼都是 Java 生態(tài)的框架源碼。

JDK

為什么要看 JDK 源碼?

  • JDK源碼是其它所有源碼的基礎(chǔ),看懂了JDK源碼再看其它的源碼會(huì)達(dá)到事半功倍的效果。
  • JDK源碼中包含大量的數(shù)據(jù)結(jié)構(gòu)知識(shí),是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)很好的資料,比如,鏈表、隊(duì)列、散列表、紅黑樹、跳表、桶、堆、雙端隊(duì)列等。
  • JDK源碼中包含大量的設(shè)計(jì)模式,是學(xué)習(xí)設(shè)計(jì)模式很好的資料,比如,適配器模式、模板方法模式、裝飾器模式、迭代器模式、代理模式、工廠模式、命令模式、狀態(tài)模式等。
  • JDK源碼中包含大量Java的高階知識(shí),比如弱引用、Unsafe、CAS、鎖原理、偽共享等,不看源碼是很難學(xué)會(huì)這些知識(shí)的。

JDK 源碼閱讀順序:

  • java.lang 包下的基本包裝類(Integer、Long、Double、Float等),還有字符串相關(guān)類(String、StringBuffer、StringBuilder等)、常用類(Object、Exception、Thread、ThreadLocal等)。
  • java.lang.ref 包下的引用類(WeakReference、SoftReference等)
  • java.lang.annotation 包下的注解的相關(guān)類
  • java.lang.reflect 包下的反射的相關(guān)類
  • java.util 包下為一些工具類,主要由各種容器和集合類(Map、Set、List等)
  • java.util.concurrent 為并發(fā)包,主要是原子類、鎖以及并發(fā)工具類
  • java.io和 java.nio 可以結(jié)合著看
  • java.time 主要包含時(shí)間相關(guān)的類,可以學(xué)習(xí)下 Java 8 新增的幾個(gè)
  • java.net包下為網(wǎng)絡(luò)通信相關(guān)的類,可以閱讀下 Socket 和 HTTPClient 相關(guān)代碼

源碼量那么大,不要妄想一口氣都看完。最好符合你當(dāng)前的目的,比如你想搞懂多線程,你就主要看 JUC,想搞懂IO 就多去看 NIO,想看常量池就去看 ClassFileParser。看模塊的時(shí)候,要注意接口大于一切,或者說函數(shù)大于一切。先不要妄想搞懂所有細(xì)節(jié),先找?guī)讉€(gè)比較關(guān)鍵的函數(shù),搞懂函數(shù)的作用(比如應(yīng)該仔細(xì)分析一下函數(shù)名稱和參數(shù)名稱)然后再往下進(jìn)行。

在看 Java 類庫的時(shí)候要多注意類是不是 abstract 的,是不是用的模板方法,多關(guān)注函數(shù)前的修飾詞,這一般說明這個(gè)函數(shù)是給誰用的。多注意這些細(xì)節(jié)而不是傻傻過一遍邏輯,能從里面學(xué)到不少關(guān)于設(shè)計(jì)的東西。還可以注意什么地方是為了之前的設(shè)計(jì)而委曲求全的做法,畢竟一個(gè)這么多年的類庫,肯定不是什么地方都是完美的。

JDK 源碼一定要看 Java 并發(fā)相關(guān)的源碼, Doug Lea 的并發(fā)源碼比較漂亮,一行行都是精華,非常值得閱讀學(xué)習(xí)。

工具

看類庫首推IDEA,多用 Structure,多自動(dòng)生成 UML 圖。先搞清楚接口和類之間的關(guān)系,再去分析函數(shù)。

最后在學(xué)習(xí)源碼的過程中,不要介意看別人的博客,不要介意手抄筆記。

Spring-Framework

Spring Framework 是一個(gè)開源的 Java/Java EE 全棧(full-stack)應(yīng)用程序框架,以 Apache 許可證形式發(fā)布,也有 .NET 平臺(tái)上的移植版本。該框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的代碼,最初由 Rod Johnson 和 Juergen Hoeller 等開發(fā)。Spring Framework 提供了一個(gè)簡(jiǎn)易的開發(fā)方式,這種開發(fā)方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。

圖片出處:Spring官方文檔

Spring 是一個(gè)開源的設(shè)計(jì)層面框架,它解決的是業(yè)務(wù)邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個(gè)系統(tǒng)應(yīng)用。包括在此基礎(chǔ)上衍生的 Spring MVC、 Spring Boot 、Spring Cloud 等,在現(xiàn)在企業(yè)中的應(yīng)用越來越廣泛。無論是設(shè)計(jì)思想,代碼規(guī)范,還是設(shè)計(jì)模式,接口設(shè)計(jì),類加載,都是非常優(yōu)秀的源碼。

個(gè)人學(xué)習(xí)心得如下:先去看視頻,大概熟悉一下 Spring 的使用情況,然后再去學(xué)習(xí)源碼,此處可以閱讀《Spring源碼深度解析》,除了看書之外,記得打開 IDEA 查看對(duì)應(yīng)的源碼,如果能調(diào)試看看具體調(diào)用邏輯那就更好了。

Google Guava

Google Guava 是 Google 公司內(nèi)部 Java 開發(fā)工具庫的開源版本。Google 內(nèi)部的很多 Java 項(xiàng)目都在使用它。它提供了一些 JDK 沒有提供的功能,以及對(duì) JDK 已有功能的增強(qiáng)功能。其中就包括:集合(Collections)、緩存(Caching)、原生類型支持(Primitives Support)、并發(fā)庫(Concurrency Libraries)、通用注解(Common Annotation)、字符串處理(Strings Processing)、數(shù)學(xué)計(jì)算(Math)、I/O、事件總線(EventBus)等等。

實(shí)踐

通過上述兩大途徑的學(xué)習(xí),我們必須要將吸收的東西加以實(shí)踐,有輸入就要有輸出,不然輸入也就毫無意義。

這里需要著重強(qiáng)調(diào) Code Review 的好處,簡(jiǎn)單整理有如下三點(diǎn)好處:

1. 互相學(xué)習(xí),共同成長(zhǎng)

無論身處什么團(tuán)隊(duì),團(tuán)隊(duì)成員的技術(shù)能力、經(jīng)驗(yàn)都是有差異的。

通過 Code Review,對(duì)于同樣的功能實(shí)現(xiàn),有經(jīng)驗(yàn)的工程師可以給經(jīng)驗(yàn)尚淺的工程師提供合理的優(yōu)化建議。經(jīng)驗(yàn)尚淺的工程師可以通過閱讀優(yōu)質(zhì)代碼,快速學(xué)習(xí)相關(guān)技術(shù)運(yùn)用的最佳實(shí)踐。如果大家技術(shù)實(shí)力相當(dāng),可能就是互相刷新思想了。

2. 知識(shí)共享

進(jìn)行 Code Review 不僅僅是為了講述代碼如何編寫,還要介紹其背后涉及的業(yè)務(wù)知識(shí),在此過程中,根據(jù)提交者的描述閱讀代碼的邏輯,看代碼實(shí)現(xiàn)是否跟描述一致。

通過 Review,讓團(tuán)隊(duì)成員不再局限于項(xiàng)目的某一塊業(yè)務(wù),避免項(xiàng)目只有一個(gè)人了解項(xiàng)目的尷尬情況。特殊情況下,也可以及時(shí)代替別人來維護(hù)相關(guān)代碼,尤其是在沒有相關(guān)業(yè)務(wù)功能說明文檔的情況下。

3. 統(tǒng)一編碼風(fēng)格,提升質(zhì)量

代碼質(zhì)量大概分為以下層級(jí):

可以正常運(yùn)行——可以測(cè)試通過——容易閱讀——容易維護(hù)。

Code Review 至少要讓代碼達(dá)到易閱讀的級(jí)別。

要想做到易閱讀,可不是光靠 Code Review 就夠了,首先需要觀察整個(gè)項(xiàng)目的風(fēng)格,按照已有的規(guī)范編寫相同風(fēng)格的代碼,當(dāng)然每個(gè)人的風(fēng)格不可能完全相同,但是要保證整體風(fēng)格相似,這樣維護(hù)起來不至于難受。

總結(jié)

如今寫代碼就像以前上學(xué)時(shí)寫字一樣,能寫得好代碼就相當(dāng)于寫了一手好字。如果你隔段時(shí)間回頭看自己的字都不忍直視,那么可以通過臨摹練字來提升自己,最終習(xí)得一手好字。

練字多了就會(huì)成為習(xí)慣,再往后寫字就變成下意識(shí)的習(xí)慣。而寫代碼可沒有那么簡(jiǎn)單,寫之前需要用大腦思考,選用什么模式,如何設(shè)計(jì),寫完后要想著如何優(yōu)化。

按照上文的學(xué)習(xí)方法,慢慢改善自己的編碼習(xí)慣,最終達(dá)到下筆如有神的境界。

責(zé)任編輯:趙寧寧 來源: Thoughtworks洞見
相關(guān)推薦

2017-01-20 09:45:20

JavaScript代碼質(zhì)量

2024-08-06 12:35:42

C#代碼重構(gòu)

2024-10-30 08:08:45

2025-03-04 00:00:33

2013-09-22 10:38:46

代碼優(yōu)化經(jīng)驗(yàn)

2024-05-14 15:28:09

Python類型提示開發(fā)

2016-02-23 11:03:03

代碼質(zhì)量編寫函數(shù)

2023-01-06 18:31:46

準(zhǔn)確命名

2012-11-07 09:48:26

2016-02-24 16:03:34

代碼質(zhì)量編寫函數(shù)

2022-08-04 09:01:45

TypeScriptMicrosoft

2019-09-16 09:05:05

前端開發(fā)技術(shù)

2009-03-05 13:47:59

2021-08-19 15:19:16

代碼開發(fā)模型

2014-02-04 19:48:07

重構(gòu)代碼質(zhì)量

2022-10-11 08:00:00

人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)

2023-08-15 08:32:09

yaraQA語法規(guī)則

2023-10-10 14:57:49

2009-05-07 08:48:16

iPhone蘋果移動(dòng)OS

2011-03-04 10:11:09

JavascriptAPI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)