成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何提升代碼質量

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

作者 | 郝安康

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

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

書籍推薦

《重構》

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

這是一本值得反復閱讀的書籍,配合工作上的實踐進行學習。

《重構》一書已經有明確的定義,分名詞和動詞兩種形式。

  • 重構(名詞):對軟件內部結構的一種調整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。
  • 重構(動詞):使用一系列重構手法,在不改變軟件可觀察行為的前提下,調整其結構。

《Clean Code》

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

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

《Head First 設計模式》

《大話設計模式》

設計模式用于承載復雜的業務邏輯,使寫出的代碼簡潔、易擴展。簡單地說,你需要去了解業務中哪些是變化的,哪些是不變的。這些變化的東西就是復雜的業務邏輯,你需要思考如何用一種合適的設計模式去承載它,使得當它發生變化的時候,能具有很好的擴展性。這時候如果你學過設計模式,對每種設計模式的使用場景都諳熟于心,那你做起來會更加得心應手。

《Effective java 》

《Effective Java》是 Java 領域的經典著作,其影響力不亞于《Java 編程思想》。

對于一個 Java 工程師而言,在新技術不斷涌現和迭代的情況下,學習的能力以及如何快速學習的能力是成長的關鍵。學習的方法、思維和能力給一個人成長的助推是巨大的。

其他

  • 阿里巴巴 Java 開發手冊 :https://github.com/alibaba/p3c
  • Google Java 編程風格指南:http://www.hawstein.com/posts

優秀源碼推薦

因個人作為后臺開發者,主要學習使用 Java 語言,所以此處推薦的也是 Java 相關的源碼學習,不過大道至簡,語言千千種,核心不會變。

Github 上有不少 star 數極高的項目,大部分功能性比較強,涉及到的技術點也比較先進,用來學習技術確實不錯,但并不是所有的代碼風格都值得學習,為了避免踩坑,這里就不列舉這類項目。這里推薦的源碼都是 Java 生態的框架源碼。

JDK

為什么要看 JDK 源碼?

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

JDK 源碼閱讀順序:

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

源碼量那么大,不要妄想一口氣都看完。最好符合你當前的目的,比如你想搞懂多線程,你就主要看 JUC,想搞懂IO 就多去看 NIO,想看常量池就去看 ClassFileParser。看模塊的時候,要注意接口大于一切,或者說函數大于一切。先不要妄想搞懂所有細節,先找幾個比較關鍵的函數,搞懂函數的作用(比如應該仔細分析一下函數名稱和參數名稱)然后再往下進行。

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

JDK 源碼一定要看 Java 并發相關的源碼, Doug Lea 的并發源碼比較漂亮,一行行都是精華,非常值得閱讀學習。

工具

看類庫首推IDEA,多用 Structure,多自動生成 UML 圖。先搞清楚接口和類之間的關系,再去分析函數。

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

Spring-Framework

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

圖片出處:Spring官方文檔

Spring 是一個開源的設計層面框架,它解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。包括在此基礎上衍生的 Spring MVC、 Spring Boot 、Spring Cloud 等,在現在企業中的應用越來越廣泛。無論是設計思想,代碼規范,還是設計模式,接口設計,類加載,都是非常優秀的源碼。

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

Google Guava

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

實踐

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

這里需要著重強調 Code Review 的好處,簡單整理有如下三點好處:

1. 互相學習,共同成長

無論身處什么團隊,團隊成員的技術能力、經驗都是有差異的。

通過 Code Review,對于同樣的功能實現,有經驗的工程師可以給經驗尚淺的工程師提供合理的優化建議。經驗尚淺的工程師可以通過閱讀優質代碼,快速學習相關技術運用的最佳實踐。如果大家技術實力相當,可能就是互相刷新思想了。

2. 知識共享

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

通過 Review,讓團隊成員不再局限于項目的某一塊業務,避免項目只有一個人了解項目的尷尬情況。特殊情況下,也可以及時代替別人來維護相關代碼,尤其是在沒有相關業務功能說明文檔的情況下。

3. 統一編碼風格,提升質量

代碼質量大概分為以下層級:

可以正常運行——可以測試通過——容易閱讀——容易維護。

Code Review 至少要讓代碼達到易閱讀的級別。

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

總結

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

練字多了就會成為習慣,再往后寫字就變成下意識的習慣。而寫代碼可沒有那么簡單,寫之前需要用大腦思考,選用什么模式,如何設計,寫完后要想著如何優化。

按照上文的學習方法,慢慢改善自己的編碼習慣,最終達到下筆如有神的境界。

責任編輯:趙寧寧 來源: Thoughtworks洞見
相關推薦

2017-01-20 09:45:20

JavaScript代碼質量

2024-08-06 12:35:42

C#代碼重構

2024-10-30 08:08:45

2025-03-04 00:00:33

2024-05-14 15:28:09

Python類型提示開發

2013-09-22 10:38:46

代碼優化經驗

2009-03-05 13:47:59

2016-02-23 11:03:03

代碼質量編寫函數

2023-01-06 18:31:46

準確命名

2019-09-16 09:05:05

前端開發技術

2016-02-24 16:03:34

代碼質量編寫函數

2022-08-04 09:01:45

TypeScriptMicrosoft

2012-11-07 09:48:26

2021-08-19 15:19:16

代碼開發模型

2014-02-04 19:48:07

重構代碼質量

2022-10-11 08:00:00

人工智能機器學習數據

2023-08-15 08:32:09

yaraQA語法規則

2009-05-07 08:48:16

iPhone蘋果移動OS

2023-10-10 14:57:49

2011-03-04 10:11:09

JavascriptAPI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久一起草 | 欧美日本高清 | 国产成人精品综合 | 中文字幕第二十页 | 国产专区免费 | 久久99精品久久久久久 | 欧美视频免费在线观看 | 国产无人区一区二区三区 | 午夜精品一区二区三区三上悠亚 | 天天干天天操天天看 | 日韩欧美国产一区二区 | 久久久免费精品 | 日韩伦理一区二区 | 国产精品美女www | 天天弄| 亚洲精品久久久久国产 | 欧美日韩不卡合集视频 | 精品久久成人 | 亚洲国产成人精品久久 | 美女激情av | 日日干日日操 | а_天堂中文最新版地址 | 成人深夜福利网站 | 免费久久99精品国产婷婷六月 | 日本亚洲一区 | 久国久产久精永久网页 | 在线观看中文字幕视频 | 精品一区二区三区视频在线观看 | 国产一区欧美 | 久久精品亚洲一区 | 国产高清精品一区二区三区 | 亚洲视频中文字幕 | 黄色欧美 | 网站黄色在线 | 欧美v日韩v | 久久精品视频免费观看 | 波多野结衣精品 | 黄色91在线| 欧美日韩精品免费 | 亚洲精品99 | 国产a区|