我認(rèn)為好的程序員應(yīng)該有以下幾方面的素質(zhì):1、有專研精神,勤學(xué)善問、舉一反三。2、積極向上的態(tài)度,有創(chuàng)造性思維。3、與人積極交流溝通的能力,有團隊精神。4、謙虛謹(jǐn)慎,戒驕戒燥。5、寫出的代碼質(zhì)量高。包括:代碼的穩(wěn)定、易讀、規(guī)范、易維護、專業(yè)。
這些都是程序員的修養(yǎng),這里我想談?wù)劇熬幊绦摒B(yǎng)”,也就是上述中的第5點。我覺得,如果我要了解一個作者,我會看他所寫的小說,如果我要了解一個畫家,我會看他所畫的圖畫,如果我要了解一個工人,我會看他所做出來的產(chǎn)品,同樣,如果我要了解一個程序員,我想首先我最想看的就是他的程序代碼,程序代碼可以看出一個程序員的素質(zhì)和修養(yǎng),程序就像一個作品,有素質(zhì)有修養(yǎng)的程序員的作品必然是一圖精美的圖畫,一首美妙的歌曲,一本賞心悅目的小說。
我看過許多程序,沒有注釋,沒有縮進,胡亂命名的變量名,等等,等等,我把這種人統(tǒng)稱為沒有修養(yǎng)的程序,這種程序員,是在做創(chuàng)造性的工作嗎?不,完全就是在搞破壞,他們與其說是在編程,還不如說是在對源程序進行“加密”,這種程序員,見一個就應(yīng)該開除一個,因為他編的程序所創(chuàng)造的價值,遠(yuǎn)遠(yuǎn)小于需要在上面進行維護的價值。程序員應(yīng)該有程序員的修養(yǎng),那怕再累,再沒時間,也要對自己的程序負(fù)責(zé)。我寧可要那種動作慢,技術(shù)一般,但有良好的寫程序風(fēng)格的程序員,也不要那種技術(shù)強、動作快的“搞破壞”的程序員。有句話叫“字如其人”,我想從程序上也能看出一個程序員的優(yōu)劣。因為,程序是程序員的作品,作品的好壞直接關(guān)系到程序員的聲譽和素質(zhì)。而“修養(yǎng)”好的程序員一定能做出好的程序和軟件。有個成語叫“獨具匠心”,意思是做什么都要做得很專業(yè),很用心,如果你要做一個“匠”,也就是造詣高深的人,那么,從一件很簡單的作品上就能看出你有沒有“匠”的特性,我覺得做一個程序員不難,但要做一個“程序匠”就不簡單了。編程序很簡單,但編出有質(zhì)量的程序就難了。我在這里不討論過深的技術(shù),我只想在一些容易讓人忽略的東西上說一說,雖然這些東西可能很細(xì)微,但如果你不注意這些細(xì)微之處的話,那么他將會極大的影響你的整個軟件質(zhì)量,以及整個軟件程的實施,所謂“千里之堤,毀于蟻穴”。“細(xì)微之處見真功”,真正能體現(xiàn)一個程序的功底恰恰在這些細(xì)微之處。這就是程序員的——編程修養(yǎng)。我總結(jié)了在用C/C 語言(主要是C語言)進行程序?qū)懽魃系娜€“修養(yǎng)”,通過這些,你可以寫出質(zhì)量高的程序,同時也會讓看你程序的人漬漬稱道,那些看過你程序的人一定會說:“這個人的編程修養(yǎng)不錯”。
1、版權(quán)和版本
好的程序員會給自己的每個函數(shù),每個文件,都注上版權(quán)和版本。對于C/C 的文件,文件頭應(yīng)該有類似這樣的注釋:/************************************************************************
*
* 文件名:network.c
*
* 文件描述:網(wǎng)絡(luò)通訊函數(shù)集
*
* 創(chuàng)建人:Hao Chen, 2003年2月3日
*
* 版本號:1.0
*
* 修改記錄:
*
************************************************************************/
而對于函數(shù)來說,應(yīng)該也有類似于這樣的注釋:
/*================================================================
*
* 函 數(shù) 名:XXX
*
* 參 數(shù):
*
* type name [IN] : descripts
*
* 功能描述:
*
* ..............
*
* 返 回 值:成功TRUE,失敗FALSE
*
* 拋出異常:
*
* 作 者:ChenHao 2003/4/2
*
================================================================*/
這樣的描述可以讓人對一個函數(shù),一個文件有一個總體的認(rèn)識,對代碼的易讀性和易維護性有很大的好處。這是好的作品產(chǎn)生的開始。2、縮進、空格、換行、空行、對齊
i) 縮進應(yīng)該是每個程序都會做的,只要學(xué)程序過程序就應(yīng)該知道這個,但是我仍然看過不縮進的程序,或是亂縮進的程序,如果你的公司還有寫程序不縮進的程序員,請毫不猶豫的開除他吧,并以破壞源碼罪起訴他,還要他賠償讀過他程序的人的精神損失費??s進,這是不成文規(guī)矩,我再重提一下吧,一個縮進一般是一個TAB鍵或是4個空格。(最好用TAB鍵)ii) 空格??崭衲芙o程序帶來什么損失嗎?沒有,有效的利用空格可以讓你的程序讀進來更加賞心悅目。而不一堆表達式擠在一起??纯聪旅娴拇a:ha=(ha*128 *key )%tabPtr->size;
ha = ( ha * 128 *key ) % tabPtr->size;
有空格和沒有空格的感覺不一樣吧。一般來說,語句中要在各個操作符間加空格,函數(shù)調(diào)用時,要以各個參數(shù)間加空格。如下面這種加空格的和不加的:if ((hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid))==NULL){
}
if ( ( hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid) ) == NULL ){
}
iii) 換行。不要把語句都寫在一行上,這樣很不好。如:for(i=0;i'9')