在編寫代碼中有許多技巧,有的是程序語(yǔ)言實(shí)現(xiàn)層面的,有的是算法和數(shù)據(jù)結(jié)構(gòu)方面的,類似的文章在網(wǎng)上已經(jīng)有非常詳細(xì)的說(shuō)明了,本文打算從另一個(gè)比較抽象的角度來(lái)聊聊有哪些新手程序員不知道的小技巧,有了這些技巧會(huì)讓你在日常寫代碼的過(guò)程中如虎添翼,提升工作效率。
思維層面

假設(shè)我們要做一個(gè)課程設(shè)計(jì),對(duì)于稍微有一些編程基礎(chǔ)的同學(xué)來(lái)說(shuō)可能一上來(lái)就寫代碼,然后反復(fù)修改。而學(xué)習(xí)軟件工程的課程之后可能會(huì)考慮先做一個(gè)需求分析,新手可能會(huì)陷入比較混亂的思路中。所以在構(gòu)思一個(gè)問(wèn)題時(shí),可以考慮從最大的幾個(gè)方面出發(fā),等大確定之后并記錄下來(lái),再一個(gè)個(gè)慢慢展開(kāi)。比如一個(gè)常見(jiàn)的需求:寫一個(gè) xx 管理系統(tǒng),如果思路是:用戶管理 -> 用戶數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì) -> CRUD 邏輯 -> 界面 -> 功能分析 的話,很快就會(huì)陷入混亂,但是如果思路改變一下,如下:
- 用戶管理
- 用戶數(shù)據(jù)庫(kù)結(jié)構(gòu)
- 用戶相關(guān) CRUD 邏輯
- 功能設(shè)計(jì)
- xx 功能
- yy 功能
- 對(duì)應(yīng)功能的 CRUD 邏輯
- 功能相關(guān)的數(shù)據(jù)庫(kù)結(jié)構(gòu)
這樣對(duì)于問(wèn)題的分析就會(huì)清晰很多,實(shí)現(xiàn)起來(lái)也更加不容易遇到問(wèn)題。
看官方文檔

一些語(yǔ)言/工具的官方文檔可能是純英文的,對(duì)于英文不是非常好的程序員來(lái)說(shuō)第一眼看上去不是非常友好,但是作為相關(guān)工具的開(kāi)發(fā)者,其官方文檔的維護(hù)者勢(shì)必是最為了解對(duì)應(yīng)產(chǎn)品的人,加上一般我們能看到對(duì)應(yīng)文檔的工具都是開(kāi)源的,在有官方背景情況下的文檔一定相比一些 xx 知道,xx 博客等有更加好的入門能力,且能涉及到一些大家博客中難以涉及到的一些比較小的細(xì)節(jié)。
如果英語(yǔ)水平不好的話,一定要花功夫提升自己的英語(yǔ)水平,這樣可以非常有效地?cái)U(kuò)展自己的知識(shí)面。
學(xué)會(huì)調(diào)試

這里說(shuō)的調(diào)試不是在 "合適的位置" 寫一個(gè) print 語(yǔ)句判斷一下某個(gè)變量對(duì)不對(duì),而是對(duì)于代碼的調(diào)試。包括但不限于對(duì)性能不夠的地方進(jìn)行測(cè)試和調(diào)優(yōu),對(duì)于代碼性能的分析被稱為——profiling。
profiling 工具 vs 和 gcc 都有,gcc 下的叫 gprof ,功能都是通過(guò)檢測(cè)堆棧采樣每個(gè)函數(shù)的 cpu 時(shí)間,統(tǒng)計(jì)代碼熱點(diǎn),方便程序員有針對(duì)性的優(yōu)化代碼。
進(jìn)行代碼調(diào)試,如果自己的代碼具有模塊性能提升調(diào)試的效率,模塊間注意去掉循環(huán)依賴,這樣所有模塊會(huì)自然分層,遇到問(wèn)題的時(shí)候可以一層一層往下調(diào)試,對(duì)于調(diào)試而言,建議如下:
訓(xùn)練可以這樣。寫一個(gè)稍微有點(diǎn)規(guī)模的項(xiàng)目,大于 2000 行代碼的那種,然后嘗試把它分成小模塊,每個(gè)模塊一個(gè)文件,每個(gè)文件不超過(guò) 300 行(或者 500 行,有的語(yǔ)言可能本身更啰嗦一點(diǎn)),每行不超過(guò) 80 個(gè)字符。每個(gè)模塊盡量只做一件小事情。注意讓模塊之間沒(méi)有循環(huán)依賴。給每個(gè)模塊寫單元測(cè)試。然后,寫出來(lái)這個(gè) project 之后,把模塊之間的依賴關(guān)系畫個(gè)圖(像這個(gè):Go standard library DAG visualization),拿著這個(gè)圖給你的一個(gè)(同樣高數(shù)沒(méi)有問(wèn)題的)朋友看,讓他參照著這個(gè)圖去讀你的源代碼,看他能不能讀懂你的代碼要做什么,是怎么做的。如果他能讀懂,說(shuō)明你模塊分得非常好。如果他讀不懂,可以具體看他讀哪個(gè)模塊讀不懂了,研究一下有沒(méi)有更好的模塊化方式或者寫法。——如何高效地增強(qiáng)編程(特別是debug)能力? - h8liu