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