如何成為一個有代碼潔癖的程序員?
有潔癖的人都是在追求完美。
一個廚師如果不懂得品嘗美食,就永遠無法把菜做好。
一個畫家如果不懂得欣賞,就永遠無法畫好畫。一個程序員如果看不出來多一空行和少一空行有什麼區別,就永遠寫不好優美的代碼。要成為一個追求完美的程序員,最重要的是審美,審美的高度決定了你代碼能力的天花板。
如果你根本不懂什麼是好的代碼,怎麼知道自己寫得不好?如果你根本不懂什麼是好的代碼,即使看別人寫的好代碼也看不出好在哪裡。——只有你視代碼如詩,才能寫出詩一般的代碼。因此平時要多看美術作品和好的文章,提升審美。此為根本除了提升審美之外,還可以多看開源代碼,有三個好處:
1. 了解業內慣用的代碼格式規範2. 學習變數/方法等命名(國人硬傷)3. 增加代碼閱歷,閱代碼其實跟閱人一樣。閱得越多,寫代碼時就越有底氣,寫出來的代碼也就越大氣多讀開源代碼,以學習如何寫「優美的代碼」(前提是審美已經達到開源代碼的水平,不然看也白看)。此為工具
有了以上幾項,做到「潔」沒有問題,但要做到「癖」,則還需要做到:1. 讓自己成為一個驕傲的人(好面子也行),在寫代碼的時候就想著「我的代碼是寫完之後要拿給所有人review的」2. 寫完之後要帶著欣賞的目光重讀一遍自己的代碼——就像讀詩歌文章一樣3. 讓自己患上輕微強迫症:)低層次的潔癖,可以用工具幫助培養,比如C++隨手用clang-format格式化代碼,Python用PyCharm時不符合PEP8的代碼會提示,寫Haskell可以用hlint,等等。時間長了有助於寫出來的代碼至少別人第一眼不會扣印象分。。
高層次的潔癖,包括對語言、框架、設計模式什麼的taste,這個沒工具能幫。看個人修為了。
另外我覺得如果時間允許,多做點項目,踩踩坑,犯犯錯,肯定比一開始就去信奉xx patterns/xx style guide更好。。不是說這些pattern/style guide錯誤或者沒用,而是沒有親身經歷,看不穿別人為什麼要搞這些東西。當信條來盲目遵守,還說這是自己潔癖,多沒意思。
一句話結尾(出處忘了):Patterns mean "I"ve run out of language."有代碼潔癖的程序員內心很焦慮好嗎?
我一直在嘗試盡量的保持各種各樣的一致性,終極追求是用統一的設計理念,貫徹到項目的所有細節裡面,命名風格,換行風格,欄位名長度,介面設計,前後端責任劃分,部署結構等等。
幾年前的某一天,我突然意思到編程其實是思想的一種表達方式,跟語言文字,圖畫音樂等是一樣的。
初級階段練習的是技能的掌握,但是掌握技能不是目的,而是為更好的表達思想,所以不管是做程序還是做設計或者別的事情,做到最後都是在:從經驗和體驗中提煉思想,然後把思想通過所掌握的技能表達出來。
當你有清晰的理念,就必然形成鮮明的風格,當風格貫徹如一,一個程序從上到下,從裡到外都都會很漂亮。
而「思想」來源於總結,需要足夠的經驗和體驗素材來做總結歸納,所以不能局限於程序本身,而應該從生活、社會等更多的領域去攝取經驗和體驗,然後歸納總結,應用到程序設計上。
說得更大一點,其實每個人都是一個輸入輸出裝置,我們從外部接收信息,然後提煉、總結、整理,最後通過我們的行為輸出,進而再影響其他人。一個人的價值體現,就在於他的提煉、總結、整理和輸出對於其他人的影響。
所以一段優美的代碼應該不僅僅是工整而已,它還蘊含著編寫者的閱歷、思想、價值觀等諸多內容。
但是,知易行難,要做到知行合一是要窮盡一生去實踐的,沒有人有絕對理性的大腦和絕對不動搖的信念,你的價值觀會受到各種實踐上的考驗,你的理念會跟各種理念衝撞,實踐的的過程就是不斷的逼近目標,不斷的淘汰篩選,不斷的去繁存精。
所以要不斷的實踐,大量的實踐。
不好意思,扯得有點玄了。
總之多體驗,多總結、多練習,多思考,修身養性,自然會提升的。
我覺得首先要把握好心態,為什麼整潔可維護的代碼重要,為什麼很髒的代碼讓人反感,如果自己都不嫌臟,我覺得是潔癖不起來的。
這種潔癖是與生俱來的, 或者說在你還未意識到的時候,在人生成長過程慢慢就奍成了.
如果刻意地去練, 練成的要麼是矯枉過正, 吹毛求疵; 要麼就是標新立異, 東施效顰.
潔癖止在表象,為練潔癖而練潔癖一定走錯路.
對你要的目標有清晰的思考後, 不單形式上的污垢無所遁形,更還有代碼質量上美.我是看了這個Dijkstra訪談之後開始有潔癖的:https://www.youtube.com/watch?v=RCCigccBzIU
先去學 LISP 然後寫別的就都有潔癖了=,=
(1)語言。比如Python鼓勵簡潔有力的代碼。
(2)框架。比如雖然同是Java,Spring和Playframework簡直就是天淵之別。
(3)IDE。試試把一段好代碼粘貼到記事本看看。
(4)字體。個人喜歡Monospace(13)。(5)縮進。把tab擴展為4個空格。(6)遵守規範。比如Python有PEP8。
(7)遵守約定。比如所用的框架所用的命名規則是a_string,就不要再用aString。(8)多讀好代碼,熏陶熏陶。
(9)不僅代碼,注釋和Commit Log也應該保持乾淨。我理解為品味。對技術有品味的人一般都有潔癖。
我頭一次聽說有人要培養自己的潔癖的,潔癖難道不是天生的嗎?
如果說的潔癖是指代碼格式化的非常好,那麼就是排版好代碼就可以,:)
但是我相信這不是樓主的本意。所以,這個問題其實就沒有絕對的解決方案,至少在時間上如此。對潔癖來說,需要的是代碼非常清晰,自己也覺得沒有辦法再優化等等。但是問題在於,那都是基於你「現在」的經驗和喜好來講的。在其他人眼裡,你的代碼邏輯也許應該換一下,在性能上的考慮也許還欠周全;正如回答者黎敏說到的,他人也許覺得你這部分代碼只要能實現功能就行,其他都不需要考慮你卻在那裡糾結夠不夠完美。
所以,第一要素就是要知道你寫的代碼是為了什麼?取悅於自己,那麼就是按照自己最喜歡的方式,多重構,多排版;為了競賽,那麼就是得到想要的名次;為了項目,就是在時間點上趕緊做出「黑盒」層次上的功能,性能、資源消耗都符合要求。
沒有這些約束,也就沒有完美。
最後,如果你是做項目的,記著,任何事前的優化都是在浪費時間。潔癖不是愛乾淨,也不一定是自己乾淨,所謂「有潔癖」只是覺得別人臟。
代碼潔癖是一種內心的訴求,看到好代碼的愉悅和看到壞代碼時的噁心都是自發的。
這玩意刻意不得,就像是GAY沒法強迫自己去喜歡女人一樣。而且,每個人心中的「好」和「壞」不一樣,潔癖與潔癖之間的衝突往往不可調和。所以我覺得沒必要「培養」某種潔癖。與他人協作時,以一種入鄉隨俗的心態接受公眾的審美;自己寫代碼時遷就自己的審美,就OK了。
不能「成為」,只能成長。
一年前我自以為自己的代碼寫得挺好的,現在往回看就是垃圾一堆。
尤其是看完《代碼大全》之後,越發覺得在「代碼乾淨」這條路上,自己才剛起步。
在能力範圍內寫能寫的最乾淨的代碼 -》改進、學習 -》寫更乾淨的代碼。
另外看看《代碼大全》之類的好書,就能對乾淨代碼有更清晰的認識。推薦《編寫可讀代碼的藝術》
初學者只要做到一點就可以了 那就是 每個類保持在二十個成員變數和成員函數內 每個函數保持在兩屏幕以內 絕大部分保持在一屏幕以內 每個類的cpp保持在一千行以內 要找到某個類或者成員變數或者函數在十秒鐘之內
補充一些: 大括弧的嵌套不超過三層 絕大部分不能超過兩層
最外層大括弧的首尾必須在一屏內
點或者指針的指向 類似這樣的 不能連續超過三層 最好不要連續兩次
函數的參數不要超過五個 超過就封裝成結構體
命名規範什麼的不說了 必須要的代碼是一種藝術,有本書叫做《The arts of programming》,個人感覺還不錯。編程在初學的時候就應該注意把代碼寫整潔
代碼整潔之道 這本書應該能幫到你
愛上重構
推薦閱讀:
※判斷一個程序員的能力真的只能用代碼嗎?
※程序員如何高效讀代碼?
※GitHub上有哪些值得關注和學習的Qt項目?
※ubuntu下有沒有原生支持中文顯示和語法高亮的代碼編輯軟體?
※下面的代碼什麼意思?