寫代碼的這四個(gè)境界你達(dá)到了嗎?
作為一個(gè)軟件開發(fā)工程師,寫代碼必然是第一技能。寫代碼,不應(yīng)該只是一份工作,而是在為社會(huì)創(chuàng)作一件流芳百世的藝術(shù)品。藝術(shù)創(chuàng)作,就一定會(huì)有境界,那么一個(gè)人寫代碼的境界,這兒總結(jié)一個(gè)簡單的從低到高梯度。
“我的代碼寫完了”
接到任務(wù),便開始和一個(gè)生產(chǎn)線上的工人一樣,一行一行的寫,沒有計(jì)劃,想到哪寫到哪,什么代碼風(fēng)格,算法是不是最優(yōu),別人能不能看懂,都不管了。寫完了,編譯通過了,能運(yùn)行了,告訴老板,“我的代碼寫完了”,就匆匆交差。質(zhì)量怎么樣,那是測(cè)試的事情。大不了,有了bugs,再來fix??粗?,反反復(fù)復(fù),實(shí)際上是慢。這是最低層次的境界。
“我的代碼寫好了”
接到任務(wù),首先計(jì)劃一下,有幾個(gè)模塊,有幾個(gè)功能,然后按照規(guī)定的代碼風(fēng)格,一個(gè)一個(gè)模塊的完成,也會(huì)嘗試選擇好的優(yōu)化算法,會(huì)加上注釋以便自己和別人能夠讀懂和維護(hù),寫完后自己會(huì)多看幾遍有沒有什么問題。畢竟人很難一次把事情都搞對(duì),檢查是必不可少的一個(gè)環(huán)節(jié)。編譯的時(shí)候,會(huì)注意每一個(gè)warnings,fix它們。也會(huì)自己想幾個(gè)測(cè)試用例跑跑,感覺沒有問題,就提交,告訴老板,“我的代碼寫好了”。這個(gè)境界高了不少。
“我的代碼能用了”
接到任務(wù),除了按上面的方式來寫代碼。還會(huì)在寫代碼的過程,加入各種白盒測(cè)試,也就是說,每寫完一個(gè)函數(shù),一個(gè)功能,會(huì)寫一段單元測(cè)試,來驗(yàn)證自己的代碼在各種正常和邊緣情況,都能正確無誤的運(yùn)行。同時(shí)還會(huì)注意測(cè)試的代碼覆蓋率,也就是說,每一行代碼都會(huì)有測(cè)試場(chǎng)景跑過。如果是使用了別的服務(wù),會(huì)將別的服務(wù)mockup起來,讓自己的系統(tǒng)能正確的運(yùn)行。對(duì)于之上的模塊,系統(tǒng),有集成測(cè)試,有回歸測(cè)試。雖然在寫代碼的過程中,加大了工作量,但是這樣的代碼,出錯(cuò)的概率明顯減少,中間需要的來來回回修復(fù)的次數(shù)明顯減少,實(shí)際上是減少了總的工作量,節(jié)約了項(xiàng)目的時(shí)間。這是一種負(fù)責(zé)任的態(tài)度,也是一個(gè)工程師本應(yīng)具備的基本素質(zhì)。這個(gè)境界就很高級(jí)了。
“我的代碼還在用”
代碼就像藝術(shù)品,好的藝術(shù)品,流芳百世,好的代碼,也應(yīng)該如此。那么,工程師對(duì)代碼也應(yīng)該像創(chuàng)作一個(gè)藝術(shù)品,深思熟慮,精雕細(xì)刻,期望它們能夠在產(chǎn)品中永生下去。當(dāng)你老了的時(shí)候,還能驕傲的告訴人們,“我的代碼還在用”。這樣就要求代碼寫的好,寫的質(zhì)量高,考慮全面,運(yùn)行效率高,幾乎沒有bugs,而且容易讀懂,容易維護(hù),容易使用,千錘百煉。舉個(gè)例子,如果實(shí)現(xiàn)一個(gè)功能,有不同的算法,會(huì)寫代碼實(shí)驗(yàn)不同算法在此場(chǎng)景下的性能,對(duì)比優(yōu)缺點(diǎn),選擇一個(gè)合理高效的算法使用。這樣的工作,除了后人發(fā)明了更好的算法,否則是不容易被替換掉的。寫代碼是一門藝術(shù),寫出來的代碼就是一個(gè)藝術(shù)品。這樣的境界,是每個(gè)程序員應(yīng)該追求的最高目標(biāo)。
只有心底里有“對(duì)自己的代碼負(fù)責(zé)”的思維,才能達(dá)到最高的境界“我的代碼還在用”。而“對(duì)自己的代碼負(fù)責(zé)”應(yīng)該是每一個(gè)工程師的基本素質(zhì)。這樣,寫出的代碼,才有可能成為一件藝術(shù)品,流芳百世。
“What is your legacy?”,代碼,可能會(huì)是程序員給社會(huì)留下的一份資產(chǎn)。