上一篇文章得到很多朋友的關(guān)注,無論是褒是貶,都由衷地開心,其中有好幾位朋友都提到了好的源碼難求,其實從我的觀點來說,閱讀程序并不分好壞,好的源碼確實讓人易讀易懂,甚至心曠神怡,而不好的源碼讓人百思不得其解,甚至心煩意亂,但作為學(xué)習(xí)者,應(yīng)保持冷靜的頭腦,善于從別人的錯誤或混亂之中得到樂趣,畢竟能看得出別人的錯誤也可以證明自已的水平要高,閱讀程序與發(fā)現(xiàn)錯誤本身也是一個學(xué)習(xí)的過程,
如何寫出優(yōu)秀的程序
。程序員是一個需要不斷學(xué)習(xí)不斷創(chuàng)新的職業(yè),局外人看出來這是一個苦差事,經(jīng)常思考,經(jīng)常OT(加班),有人曾這樣描述:如果深更半夜之時發(fā)現(xiàn)有人影在街上晃動,那么只有兩種可能:要么是風(fēng)塵女子要么是程序員。呵呵,這個比喻真不知是好是壞是對是錯?至少能說明我們是辛苦工作著的。其實我們之所以這些辛苦,一是為了讓自已不落伍,技術(shù)更新太快,我們稍作停留稍不小心就顯得OUT了,二是為了寫出更加優(yōu)秀更有價值的程序,讓公司賺更多的MONEY,BOSS開心了,我們也開心。
那么,如何才能寫出優(yōu)秀的程序呢?
在溫伯格的書里談到優(yōu)秀程序的要素,主要包括功能性、時間性、適應(yīng)性、高效性、經(jīng)濟性等五個方面,對于前面的四點,相信大家都耳熟能詳,我們就作一個簡單的描述。
任何一個項目或產(chǎn)品或一段程序,都會有一個比較明確的目標(biāo),即滿足一定的功能需求,程序員一定要理解透徹,切不可模棱兩可,否則辛辛苦苦下來,都等于白干了,即使程序?qū)懙迷倨猎俑咝,但并非客戶所需,毫無價值,可以這么說,如果一個程序沒有在一定的程度上滿足功能需求,那么對其適應(yīng)性、效率以及開發(fā)成本的評估都將毫無意義。
這里所說的時間性,是指程序的開發(fā)是否能按照開發(fā)計劃所預(yù)計的時間內(nèi)完成?這是我們經(jīng)常面臨的問題,程序的推遲完成所產(chǎn)生的損失是嚴重的,除了經(jīng)濟上的損失,還容易造成管理上的失控混亂,總之,令人煩惱的事情會接踵而至,或許讀到這里,你開始能明白為什么深更半夜街道上晃動的人影有50%的可能是程序員?盡管如此,我們依然很難看到能按時完成的程序,特別是在國內(nèi)的IT企業(yè)里,估計有80%以上的程序(項目或產(chǎn)品)是不能在計劃的時間內(nèi)完成的。因此,能稱得上優(yōu)秀的程序,按時完成是一個重要的決定因素,在程序開發(fā)時,程序員的腦海里除了CODE,還要有時間概念。
一個成熟穩(wěn)定的程序(項目或產(chǎn)品),大都通過多年的使用與不斷地修改完善,修改程序是很正常很經(jīng)常的事情,修改的難易與多少,也是衡量程序優(yōu)秀的因素之一。如果一個程序不需要任何修改,就可以在任何平臺任環(huán)境任何其它軟件系統(tǒng)中正常使用,這是很美妙的事情,事實上我們也一直在追求這種RESULT,我們在程序開發(fā)時要充分考慮代碼適應(yīng)性的問題,爭取讓自已編寫出來的程序(組件、類、模塊等)具有很強的適應(yīng)能力,以后使用時少修改,容易修改,
管理資料
《如何寫出優(yōu)秀的程序》(http://www.oriental01.com)。過分地強調(diào)程序的通用性和易于修改性,往往會造成程序的效率問題,運行起來可能又慢又耗資源,這真是矛盾,用溫伯格大師的話來形容就是:“要求程序同時具有高效率和適應(yīng)性,正如企盼找到一位美麗而謙恭的WIFE”,呵呵,這個DREAM顯然是很難實現(xiàn)的,盡管集美貌與謙遜于一身的美人也不是沒有,但作為一名普通的程序員,通常我們是需要在二者之間做一取舍的,或者能平衡一下也不錯,不是很美但很謙遜的MM也是一個不錯的選擇啊。
其實前面四點,不用多說,大家也會經(jīng)常遇到與思考,最后一點---經(jīng)濟性,是我比較感興趣而且需要強調(diào)的一點。寫這文章之前,我剛剛研究完最新發(fā)布的《福布斯中國名人榜》,在前100名里大都是演員、歌星、運動員、主持人、導(dǎo)演、模特等大腕們,遺憾的是沒發(fā)現(xiàn)有IT人士,不知道求伯君伯伯張朝陽叔叔李彥宏哥哥們都干啥去了,看看人家比哥(比爾蓋茨)都保持了十二年的世界首富了,我們不得不佩服,也期待有朝一天前100名中有幾個搞IT的,讓俺們沾沾自喜一下。
溫伯格認為,判斷代碼質(zhì)量最重要的新因素是經(jīng)濟。非程序員們大都認為比爾蓋茨是世界上最偉大最優(yōu)秀的程序員,因為他的或他公司的程序賺的MONEY最多,道理是如此地簡單易懂,有時甚至讓我懷疑自已干這一行的動機到底是為了興趣還是為了掙錢或者兩者都是但誰更得重要一些?在我剛剛開始工作的那幾年,我經(jīng)常冷嘲熱諷所在公司的那些軟件產(chǎn)品,在我看來簡直是一堆垃圾,但竟然能賺大把大把的鈔票,真是不可思議!但現(xiàn)實往往如此,MICROSOFT的東東是好的,但也總在不斷地打補丁與升級,我們甚至經(jīng)常性地發(fā)現(xiàn)WINDOWS或OFFICE或大或小的BUG,但這不影響MICROSOFT的銷售收入,是的,我們無法編寫一個完美無缺的程序,只要不影響到重要功能的正常使用,有一些東西我們必須首先舍棄,我們不能因為追求完美而失去市場的先機,程序?qū)懙迷俸,賺不了MONEY又有什么用呢?
以上主要從大的方面來泛泛而談,在結(jié)束本文之前,讓我們從細節(jié)之處來總結(jié)一下編寫出優(yōu)秀程序需要注意的一些地方:
(1)養(yǎng)成良好的注釋風(fēng)格:包括文件、函數(shù)、重要代碼等的注釋;
(2)代碼縮進:每一個嵌套的函數(shù)塊,使用一個TAB縮進(可以設(shè)定為3個空格),大括號應(yīng)放在條件語句的下一行,單獨成一行,便于匹對(主要針對C/C++,VC++);
(3)變量盡量采用匈牙利命名法,同時結(jié)合開發(fā)工具的原則;一般情況下,變量的取名方式為:
(4)養(yǎng)成書寫程序文檔的習(xí)慣;
(5)善于利用組件實現(xiàn)某一特定功能;
(6)數(shù)據(jù)層與業(yè)務(wù)邏輯層相互獨立;
(7)少用全局變量,少用指針;
(8)避免使用extern,禁止使用goto,Debug增加#ifdef..#endif
..............
來自:http://blog.csdn.net/harrymeng/archive/2006/03/22/631889.aspx