1. 程式人生 > >讀《Clean Code 程式碼整潔之道》之感悟

讀《Clean Code 程式碼整潔之道》之感悟

盲目自信,自認為已經敲了幾年程式碼,還看什麼整潔之道啊。我那可愛的書架讀懂了我的心思,很明事理的保護起來這本小可愛,未曾讓它與我牽手

最近專案中的 bug 有點多,改動程式碼十分吃力,每看一行程式碼都帶一句“這是什麼XX程式碼啊,真XX難改”,這樣持續了好幾天,有天晚上坐在書房回想這幾天發生的一切,仰頭定睛思考,我終於和它重新確認了眼神

股票見漲你知道買了, 汽車撞牆知道拐了, 孩子死了你來奶了, 大鼻涕到嘴你知道甩了, bug難改知道憤慨了

馬上翻開書,前言章節,映入眼簾的就是下面這一張圖

程式碼質量的唯一有效度量是:WTFs(what the fuck)/minute

真的太精闢了,這不就是這幾天我白天經歷的嗎?程式碼已然是 bad code 了,我們應該怎麼面對這種情況呢?

每個公司的規範還不一樣,本文是讀書筆記,不會說明太多的程式碼規範,只是闡明我們應該怎樣做或者抱著什麼樣的心態來寫程式碼吧

如果你看到這裡,我要引用書中的一句話:

第一,你是個程式設計師;第二;你想成為更好的程式設計師。我們需要更好的程式設計師

專業的態度

做國內專案/產品,通常都是指明deadline的,但是截止到deadline之前,需求量的多少是不固定的,說白了是“以deadline不變應需求萬變”,美其名曰「敏捷」

我們經常要面對短期內開發出大量需求的請求,很可能為了快速完成這些需求,胡亂的堆疊程式碼,上線之後一聲長嘆慶幸這個功能開發的結束。過了好久,有關這個功能的需求有所變化,重新檢視程式碼時,直接就 WTF 了......,再一看是自己寫的,你說尷尬不?

如果是因為任務多胡亂疊加程式碼,我們就應該在接受需求的時候提出我們的看法:

過多的需求在短期內上線的程式碼質量不能得到保證

假如你是醫生,病人要求你不用洗手就可以給他做手術,因為洗手浪費時間,你會答應嗎?醫生絕對會拒絕,因為你比病人更瞭解疾病和感染的風險。如果醫生照做,那是絕對不專業的做法

作為程式設計師,如果遵從了不瞭解混亂風險經理的意願,也是不專業的做法

“你以為可以不聽經理的?不聽經理的,是會被炒魷魚的”,經理能否聽的進去,我們都要提出我們的看法。提出多次還被無視,也不要灰心喪氣,繼續提出我們專業的看法... untile die, 為了部落

如果你有底線,守住就好;如果沒有,適應就好。只為很久之後看到程式碼說 WTF 時,避免主角是自己的尷尬

我們是作者

Javadoc 中的@author欄位告訴我們自己是什麼身份,我們是作者。如果類上沒有標註日期和作者,alibaba程式碼檢查工具會給出提示,就像這樣:

這裡建議大家在 IDE 中安裝該外掛,如果你不知道作為作者應有的規範,那就讓這個外掛輔助你吧

據統計,讀程式碼與寫程式碼花費的時間比例超過 10:1, 因為我們在寫新程式碼時會一直在讀舊程式碼,專案越到後期這個比例越明顯

我們是作者,就有責任和讀者做好溝通。每次寫程式碼的時候,記得自己是作者,要為評判你工作的讀者寫程式碼.

這些讀者可能是你現在組內的夥伴,也可能是將來要接管你的任務的新夥伴,避免別人嘴裡 WTF 的主角是你,定期 Review 自己的程式碼,你定會發現可以改善的地方,比如用策略模式更改過多的 if else等,程式碼整潔了,又學會了設計模式,豈不是兩全其美

心有餘,力要足

很多朋友說,我也想寫出整潔的程式碼,但是目前實力不允許啊。

寫出整潔的程式碼的功力不是一蹴而就的,需要持續不斷的學習和修正

學會設計模式,瞭解 RESTful 介面規範,瞭解命名規範,註釋,函式大小等等太多的東西都是書寫出整潔程式碼必不可少的知識,我們該怎麼辦?

還記得小時候寫作文的詞藻不夠用,老師讓摘抄好文好句。如果程式寫的不夠整潔,我們可以慢慢學習和模仿好的寫法與設計,慢慢改善和積累,有朝一日肯定能寫出高分作文的

不做破窗效應第一人

不要說現在的程式碼很爛了,沒必要再改善了,如果你是這樣的心態,即便一個全新的專案開始讓你去做,你也很可能會成為第一個打碎玻璃,帶來破窗效應的人。

如果嚴重一點說,大家都知道你寫的程式碼帶給別人的是一種負擔,你可能很難有開始一個全新專案的機會了

如果同事因改善你的程式碼帶來了一些意外的影響,請你不要抱怨甩鍋,這些改善就是修復玻璃的開始,終將會給團隊帶來極大的好處

總結

編寫整潔程式碼的路途漫漫,我們一起求索,推薦大家看下面這兩本書,你一定有有自己的發現,讓我們悉心照料我們寫的每一行程式碼

  • 《程式碼整潔之道》
  • 《阿里巴巴Java開發手冊》

靈魂追問

  1. 工作上你接到過什麼奇葩要求?
  2. 工作中遇到了哪些無奈或者你覺得XX的事?
  3. 你是怎麼應對那些不好的問題的?

歡迎在留言區討論,你們專案中的情況,你是怎麼看待程式碼整潔這個問題的


相關推薦

Clean Code 程式碼整潔感悟

盲目自信,自認為已經敲了幾年程式碼,還看什麼整潔之道啊。我那可愛的書架讀懂了我的心思,很明事理的保護起來這本小可愛,未曾讓它與我牽手 最近專案中的 bug 有點多,改動程式碼十分吃力,每看一行程式碼都帶一句“這是什麼XX程式碼啊,真XX難改”,這樣持續了好幾天,有天晚上坐在書房回想這幾天發生的一切,仰頭定睛思

Clean Code 程式碼整潔 格式

程式碼整潔之道 第5章 格式 筆記   5.1 格式的目的 程式碼格式關乎溝通   5.2 垂直格式 5.2.1 像報紙學習 原始檔最頂部應該給出高層次概念和演算法,細節應該往下漸次展開。 5.2.2 概念間垂直方向上的分隔 不同的東西用空白隔

售前 方案型售前

售前之道 之方案型售前售前之道 之方案型售前 前 言所謂方案型售前,是指以解決方案和投標文件寫作為主的售前。該類售前的特點是寫作量巨大,需要較強的資料收集能力和寫作能力作為支撐才能完成好的工作。下面就如何收集資料以及寫作和如何寫好方案和商務投標做一個闡述。如何收集資料收集資料是售前的基本功,因為售前在寫作能力

Linux運維網絡基礎學習筆記1.1

達內 linux雲計算運維 網絡基礎1.1TCP/IP詳細解讀:TCP/IP協議簡介:TCP/IP是最廣泛支持的通信協議集合---包括大量internet應用中的標準協議;---支持跨網絡架構,跨操作系統平臺的通信;主機與主機之間通信的三個要素:---IP地址;---子網掩碼;---IP路由;IP地址

Linux運維admin筆記1.0

linux 達內 雲計算 admin 1.0什麽是Linux?Linux是一種操作系統!----曾經被微軟視為最大的威脅;----而今是互聯網領域的幕後老大;Linux/Unix發展史:Unix系統發展:----1969年底,Ken Thompson,Dennis Ritchie,根據MULTI

Linux運維網絡基礎學習1.2

linux 達內 雲計算 網絡基礎1.2物理層解析-----------------------------------------------------------------------------------------------物理層--網絡的基礎------物理層是TCP/IP模型的

Linux運維RHEL7系統安裝及基本命令

達內linux雲計算運維admin安裝RHEL7系統1.準備系統光盤: ---插入RHEL7光盤,引導安裝程序; ---設置主機,將光盤設為第一引導設備 ----從RHEL7光盤啟動主機 ---檢測光盤的完整性 ---從ISO鏡像啟動時,建議跳過檢測;2.安裝過程: ----配置安裝程

Linux運維admin命令羅列(由淺入深)

達內 linux雲計算運維admin admin基本命令羅列完整的命令格式:命令字 -選項 參數#pwd #查看當前工作目錄#cd #切換進去#ls #查看所有文件(當前目錄下)#cat #查看文本文件#uname -r #列出內核版本#cat /pr

Linux運維admin選項概覽及顏色的代表

達內linux運維adminadmin選項及顏色的代表命令行的基本格式:命令字 【選項】 【參數1】【參數2】...ls:查看所有文件(當前目錄下);-l :以長格式顯示;-A :顯示所有,包含以.開頭的隱藏文件;-d :顯示目錄本身屬性(無法單獨使用,與l連用);-h :提供易讀的容量單位(

Linux運維admin1.4(權限和歸屬,LADP認證)

達內 linux 運維admin admin1.4權限和歸屬:基本權限:基本權限的類別:訪問方式(權限):---讀取:允許查看內容--read (r權限:能夠ls瀏覽此目錄內容)---寫入:允許修改內容--write (w權限:能夠執行rm/mv/cp/mkdir/touch等更

Linux運維admin1.5(分區規劃及使用,lvm邏輯卷,交換空間)

linux 達內 雲計算 admin1.5分區規劃及使用:硬盤分區管理:使用fdisk分區工具:查看分區列表:--fdisk -l /dev/sda修改硬盤的分區表:--fdisk /dev/vdb常用交互命令:-m:列出指令幫助;-p:查看現有分區表;-n:新建分區;-d:刪除分區;-q:放

Linux運維ENGINEER1.2(HTTP服務基礎,網頁內容訪問,安全web)

達內 linux運維engineer ENGINEER1.2HTTP服務基礎基於B/S架構的網頁服務----服務端提供頁面;----瀏覽器下載並顯示頁面;--------------------------------------------------------------------------

20160309 Clean Code 程式碼強迫症

我寫程式碼一直有種強迫症的感覺。比如給自己寫的Yami程式,明明就是很簡單的檔案讀寫,明明沒有那麼多邊界可能。缺樂此不疲的判斷,封裝,抽象。成倍的消耗時間。 我覺得這是一種病,但卻無藥可救,因為不這麼做,就覺得寫出來的東西自己不滿意。 最近在

Android下的配置管理repo的使用

谷歌對android的原始碼管理使用的是git。但是在git的基礎上,谷歌開發出來了一套新的工具,python寫的一套指令碼,名字是repo。 Android原始碼工程(AOSP)是非常多的git倉庫組成的。目前估計有上百個獨立的git倉庫。 怎麼管理這些倉

屌絲程式設計師賺錢 APP

如果你已經通過APP賺到了錢,那麼本文對你而言沒有意義,倒是希望你能夠給我們諸多建議。通過製作APP或者說手機應用賺錢,相信是很多程式設計師希望做的事情,也確實有一些人通過APP賺到了錢。 對於程式設計師來說,能夠通過編寫程式的手段賺錢,當然是最好的事情了,編寫程式本來就是程式設計師的本職工作,就算你不是

屌絲程式設計師賺錢taobao 2

續上篇,之前寫的案例,都是比較初級的。案例4: 代寫情書,軟文,論文等等。這是我一個同學的真實故事。    我隔壁寢室的小王平時沒事就愛謝謝部落格,逛逛論壇。大二的時候接觸了威客網,開始在網上幫別人寫一些推廣軟文,演講稿之類的東西。但是因為沒有經驗,基本上很少被採納的。但是

屌絲程式設計師賺錢 投資續

近期由於出差等原因,更新較慢。本來想發一篇關於淘寶的文章,不過感覺前篇投資講得不是很透徹,所以想寫一個續篇。前篇發出來後,收到了不少人的反饋,其中褒揚者有之,不屑者有之,貶踩者有之。 有的人覺得我寫的比較初級,這個我也承認,如果大家有更好的投資渠道和建議,也希望能夠留言交流

屌絲程式設計師賺錢 投資

投資有很多的渠道,比如股票,基金,還有房產等,不過從目前的形式看,房地產已經不是一個很好的投資方向了,估計房產投資的行情會逐漸走低; 除此之外,還有去年比較火的網際網路基金專案,比如某寶相關類產品,如果你不知道某寶的話,我也不想解釋了,自己回火星吧,地球還是不適合你的,當然

海量SET模型

一 提供海量服務時面對的場景 場景1:如何令黃村機房的TWS機器訪問黃村機房的APP服務,避免TWS跨機房呼叫永豐機房的APP機器? 場景2:DB和Redis如何實現快慢分離,讀寫分離,加速讀取速度,改善使用者體驗? 場景3:如何實現單節點錯誤不影響全域

Android下的配置管理使用curl命令訪問gerrit的REST API

簡單的測試 reset api 可以像下面這樣 curl http://localhost:8080/path/to/api/ curl命令預設是傳送GET請求的,可以通過選項 -X來設定 cu