良好程式碼的優點大同小異。
不好的程式碼的糙點卻各有巧妙之處。
看到這個標題,我想有疑問的人應該還是會存在,所以一開始我想先破題,解釋一下這個題目在說什麼好了。
「糙 code 」有兩個字,「糙」與「code」,以下我們分開來解釋
詳見萌典 [1]的解釋
可以看見,意思是「不細緻、草率、鹵莽(魯莽)」的意思。
在此要用糙的讀音 [1]來唸
在此,若直接查 code 就是「碼」,但是在此的原意是 source code 所以,查查看 source code[2] 的意思。
the form in which a computer program is originally written before it is changed into computer language
意思是程式語言,一種電腦程式的形式
這個詞合起來,就是草率、不細緻的程式碼。
泛指任何不用心學習或撰寫造成的程式成果。
如果要從英文找一個單字做為同義詞,「spaghetti code」會是很好的選擇。(pasta 裡的細麵,稱為 spaghetti)
spaghetti code: 是指一個原始碼的控制流程複雜、混亂而難以理解
這一系列會介紹一些我自己遇到、看到的各種讓人覺得可以再精進的程式碼寫法。
沒錯!這是「提高程式碼品質」的一個月!!
所以,下次聽到有人講「糙 code」,絕對不是罵髒話,而是在說他看到不用心撰寫的程式碼。
特別注意
先了解程式碼的生命週期。
誕生(撰寫)
→ 使用(執行、修改、閱讀...)
→ 死亡(刪除)
程式碼與工程師互動,就是「修改、閱讀」,試著猜想這個問題
「程式碼誕生(撰寫)之後,是常被改??還是常被讀?」
改一個 code 也許要先讀懂、理解原本的程式碼在寫什麼,才會改一個小地方。
所以,問題的答案是「被讀遠大於被改」
而且,程式碼被閱讀的特性足以拿來當作文件[4],好的程式碼可以傳達知識,在知名部落格「搞笑談軟工也多次提及這個觀念」,以下摘錄一小部份
幾年前Teddy還在學校念書的時候,曾經讀過Phillip G. Armour所寫的一篇文章,叫做《The Case for a New Business Model: Is software a product or a medium?》(該文章發表於CACM, pp. 19-22, August. 2000)。這篇文章提到世界上有五種儲存知識的媒介:
DNA
Brains
Hardware
Books
Software
引用自 BDD(1):詳盡的文件就是可用的軟體 - 搞笑談軟工
在全世界的潮流中,也是延續這個觀念,敏捷宣言[5]中提到
個人與互動 重於 流程與工具
可用的軟體 重於 詳盡的文件
與客戶合作 重於 合約協商
回應變化 重於 遵循計劃
我自己的理解是,與其叫工程師一直寫文件,不如叫工程師把程式碼寫得好讀,得像文件一樣好讀
叫工程師寫文件,工程師的心裡也是覺得一樣的事情要做兩次,但是工程師不是作家,所以文件寫得爛是正常的,程式碼寫得爛就不行了。程式碼是一種與書本等同效用的東西,但是說到「讀 code」卻讓人覺得像是讀魔法咒語一樣的怯步。叫工程師讀別的工程師的 code 也是一樣的道理。
沒有糙 code ,沒有 job。
有些工程師到軟體部門工作之後,一直在處理其連同事的糙 code。一直處理、一直處理...,然後因為沒有產值被 fire。(笑)
沒有糙 code ,沒有 value
有些工程師到軟體部門工作之後,要開發新專案,因為時程 (時間不夠所以...) 與薪水 (拿多少錢做多少事,所以...) 的關係所以一直產生糙 code
心中的核心理念大概是「老闆(業主)不想付出,所以只配能擁有這樣的品質」
所以,糙 code 是軟體產業的商業模式之一??(笑)
寫糙 code 會怎樣?
我自己的解讀,是工程師(心)自律、(體)程式架構、表達能力、(技)程式語言細節掌握度的綜合表現評比。
因為 A 工程師的產出低品質程式碼,必須造成其它工程師付出青春歲月還債 (技術債) ,就像是你買了別人漲停的股票一樣。
我沒有寫糙 code
當然每個工程師不管是有意還是無心的寫出了自己覺得適合收入的程式碼,都是自己決定的高品質產出。沒有人會特意的寫出低品質程式碼,我相信這件事,所以自己的 code 被說「糙」,會不開心是一定的。
看不懂別人的 code 不是你的錯,是別人的表達能力不好。
別人看不懂自己的 code 也不是別人的錯,是你的表達能力要再加油。
好的設計師,可以掌握使用者經驗 (UX)
好的工程師,也可以掌握開發者經驗 (DX[6])
加油,好嗎?
[1]: 糙 - 萌典
[2]: source code
[3]: 麵條式程式碼 - 維基百科,自由的百科全書
[4]: BDD(1):詳盡的文件就是可用的軟體
[5]: 敏捷軟體開發宣言
[6]: 工程師心中最軟的一塊:談前端開發者體驗(Developer Experience)
要看懂沒有註解的CODE
真的是地獄
code 能是地獄也是天堂。
糙 code 只是各有巧妙。
好 code 讓你無痛看懂。