首先,先汗一下自己的這個主題。作為一個畢業(yè)不過5年的軟件工程師,寫這個題目,似乎有點自不量力,因為一般都是大師才寫這樣的經(jīng)驗之談。沒關(guān)系,我已經(jīng)準(zhǔn)備挨磚了,就當(dāng)拋磚引玉。
對于這個主題,我正在公司做一個簡單的training,從基礎(chǔ)一點點的講起。也是自己的一點經(jīng)驗總結(jié)吧。說的不好之處,大家敬請批評指教。有機(jī)會的話,我也會把一些training的東西,分享給大家——是我自己的東西,不涉及公司機(jī)密呵。其中就有我博客中“編寫安全代碼”下面的內(nèi)容。
1. 我認(rèn)為最重要的因素是自己的主觀思想,作為開發(fā)人員,他必須真正的熱愛程序員這一行業(yè),熱愛coding,熱愛自己的工作,熱愛技術(shù),對于寫出優(yōu)質(zhì)健壯的代碼有著強(qiáng)烈的愿望。只有這樣,他才會自覺地提高自己,把代碼寫好,寫漂亮。當(dāng)興趣與工作結(jié)合之后,才能做到事半功倍,享受coding的快樂。
2. 要注重細(xì)節(jié),注重基本概念。這個觀點看似簡單,但是很多人卻不重視。對于最基本的概念,只是知其然不知其所以然,甚至根本糊里糊涂。我面過一些工作5年的人,連對指針的理解還不透徹,仍然不明白“指針亦變量”這一簡單的概念。當(dāng)然,也許他們了解或者熟悉其它更高深的技術(shù),但是以我看來,如果連最基本的東西都搞不明白,盲目的去追求熱門或者新潮的技術(shù),反而不夠踏實。沒有良好的基礎(chǔ),就去拔高,豈不在是建空中樓閣?
3. 在寫每一行代碼的時候,要明白這一行代碼的真正意思和真正作用,要清楚對于這行代碼背后,CPU到底會做什么操作或者什么運算。不記得是哪位大師說過,“如果你能理解程序每一個字節(jié),那么該程序才會真正的無錯”——大概意思是這樣,我記不得原文了。做到這點太難了,我們只能盡力而為。
上面三點都比較泛泛,下面的幾條就比較具體,不過也是相對具體呵:)
4. 要有良好的代碼風(fēng)格。記住真正的代碼不是給計算機(jī)讀的,而是給人讀的,既包括你的同事,也包括你自己。當(dāng)過段時間,你重讀自己的代碼時,都要感到費勁,更何況別人呢。這樣的代碼,誰來維護(hù)?當(dāng)每個人的代碼都有很好的可讀性和可維護(hù)性,那么就容易理解整個兒系統(tǒng)了。系統(tǒng)的可靠性也就隨之提高。
5. 要有良好的軟件設(shè)計。我最喜歡的一個設(shè)計原則就是“Keep it simple”。這句話真是看似簡單,做起來卻很難。可以想想Unix的設(shè)計文化,我覺得就體現(xiàn)了這一觀點。每一個命令功能都比較簡單,但是將幾個命令組合起來,就形成了強(qiáng)大和復(fù)雜的功能。當(dāng)然,除了這一設(shè)計原則外,還有很多重要的原則,如減少耦合等。
6. 良好的軟件開發(fā)流程。我是一名開發(fā)人員,對于整個兒的軟件開發(fā)流程只是泛泛的了解,我更關(guān)心coding階段的流程。Code Review是我認(rèn)為可以減少bug的一個重要流程。當(dāng)開發(fā)人員知道自己的代碼需要別人review時,不自然的就會將代碼寫好,以避免別人對自己的不良評價和印象。另外,每個人思考的方式和角度都不同,換一個人或許就可以看出代碼編寫者忽視的問題。而且在代碼的review過程中,參加review的人可以了解到不同模塊的代碼,對于熟悉整個兒產(chǎn)品都有所幫助,并且每一個人都可以在review發(fā)現(xiàn)的問題中,學(xué)到新的東西。
7. 提高自己的開發(fā)能力。擴(kuò)大自己的知識面,熟悉自己的開發(fā)平臺,系統(tǒng),以及開發(fā)工具。以我個人而言,盡管我是一個Linux的程序員,但是對于windows的開發(fā)也有一些了解;盡管做上層應(yīng)用居多,但是對于Linux內(nèi)核也有一些了解;盡管是工作語言為C,但是對于C++也比較熟悉,至于linux上的各種腳本也是都有涉獵。盡管是軟件工程師,但是對于硬件底層如CPU等也有一些了解。等等。至于有了比較寬廣的知識面以后,才能在大腦中將各個知識點連接起來,真正形成一個體系。這樣寫出的代碼,才有保證。
今天一共從七個方面說了說如何寫出健壯的代碼。其實這個主題太龐大了,可以找出更多的方面。另外就上面的七個方面來說,無論是哪一點,都可以繼續(xù)展開。每個都是一個龐大的話題。這里只是泛泛而談。
其實,最最重要的就是第一條:“熱愛coding”。只要有了這一點,那么你就會很自覺地去努力,找到自己最適合的方法,寫出優(yōu)質(zhì)無錯的代碼。
最后,用以前說過的一句話“我編程,我快樂”。然后一句話與大家共勉,成為一名top的程序員,天賦,機(jī)遇和努力,三者必不可少。但是成為一個good的程序員,我相信只要我們能力,都能做到。