程序中的得与失
俗話說,舍得,有舍便有得,程序或許和世間萬物一個樣,講究陰陽平衡。或許您寫程序過程中,得到一顆歪脖樹,卻放棄了一大片大森林,能正確的取舍矛盾體雙方的關(guān)系,或許是您扎實功底的體現(xiàn),當(dāng)然這必須需要一種日積月累的過程。下面我就說一些程序的矛盾體,起一個拋磚引玉的作用。
一、時間與空間
程序中存儲空間與時間,自古就是天敵一枚,自古就是有我沒他,有他沒我的局面。這對天敵關(guān)系處理,令無數(shù)英雄競折腰。
弄清楚他們之間關(guān)系,讓我們從空間與時間觀點,從辯證唯物主義思想來分析程序。
我們知道一個程序分為幾個層次,每個層次分為幾個部分,部分之間有什么關(guān)系,每個部分都有什么特點。這是從空間的角度來劃分程序;一個程序的表現(xiàn)在不斷變化,結(jié)構(gòu)在不斷演變,有生老病死,這是從時間角度來考察程序。
從空間來考慮程序,需要做好其架構(gòu),規(guī)劃好其交互接口,要想好究竟是模塊插拔還是總線組裝,搞清楚用配置文件還是數(shù)據(jù)庫。所謂用空間換時間,一個合理的空間結(jié)構(gòu),需要盡量降低時間點上的熱度,包括開發(fā)上的時間熱點和程序運行時的時間熱點。
從時間角度考慮,就要想好程序的生命周期,程序各個部分給誰來開發(fā),用什么開發(fā),在什么時間點交付;程序如何部署,如何啟動,如何更新,如何銷毀,如何停止,如何刪除;歷史版本如何處理,未來的版本如何處理。一個合理的時間結(jié)構(gòu),需要仔細提供整體的開發(fā)和運行效率。
程序,正與上文提到的一樣,我都習(xí)慣先從空間上劃分一下,再從時間上觀察一下。我想知道一個事物的組成結(jié)構(gòu),我想了解一個事物的歷史淵源,現(xiàn)在以及將來。可惜,時而迷霧漫天,時而一葉障目,時而迷走方向,時而回環(huán)往復(fù)。
? ?程序中,我們經(jīng)常看到了降低一個程序時間復(fù)雜度,往往是犧牲存儲空間為代價,反之亦然,降低相應(yīng)存儲,往往就提升時間復(fù)雜度。
說了這么多,總而言之一句話,往往是程序換空間,還是空間換時間。
二、(開發(fā))效率與(開發(fā))規(guī)范
? 如上面一樣,在加強開發(fā)規(guī)范的前提下,往往做出的犧牲是什么啊,是以降低開發(fā)效率做出犧牲。
? 例如你加代碼注釋工程中,自己完成代碼速度大大降低。但是,隨著工作年份增加,我發(fā)現(xiàn)這是都么膚淺的認識,由于你沒有好的代碼規(guī)范,你的代碼維護時間往往比當(dāng)初開發(fā)時間 ?多上了好幾倍了。由此可見,令人可喜,這對所謂的天敵,更多的是走向合作的步伐。 良好的開發(fā)規(guī)范反而能夠促進開發(fā)效率的提高。
例如,?
?1. ? ?寫程序前打個草稿可以在心里,最好在紙上:目的要從整體上考慮程序的實現(xiàn)。 如果公司采用建模的方式,有建模工具(rose ,visio )那是最好不過的了。
2. ? 注意休息,不要浪費自已的休息時間,用去了自已的時間不但會寫出的代碼因為注意力不集中而會常常出現(xiàn)代碼的質(zhì)量有問題,邏輯常出錯
3. ? 要善于收集相關(guān)的專業(yè)開發(fā)上的資料,以便以后能更快更好的解決問題目。提倡公司能提供內(nèi)部知識勾通的工具(如知識論壇,內(nèi)部即時聊天器);提倡公司內(nèi)部有技術(shù)資料的共享庫,提高解決問題的能力. ? ?
4. ? 提高對所寫的模塊的相關(guān)全局把握能力,在寫程序中要最好先詳細設(shè)計后再發(fā)布. ?
5. ? ?要學(xué)會與他人溝通如非工程師,學(xué)會溝通的不同方式,提高溝通的效率。
貌似這些支離破碎,婆婆媽媽的繁枝縟節(jié)行為會降低開發(fā)效率,實際上,這些動作是提高你工作效率有力保證。
三、功能與效率
功能與效率更像印證了第一點了,功能越多,你程序效率貌似越低。不是嗎,你寫了一個簡單計算器與一個復(fù)雜的計算器,運算復(fù)雜度是幾何倍數(shù)增加的。
由于我是android開發(fā)的,往往看到高手喜歡挑戰(zhàn),尤其在手機上實現(xiàn)精巧的算法,這樣能帶來更強的征服感。例如,有人曾在手機上實現(xiàn)了布隆過濾器(一個龐大精巧的類哈希表,多用于在服務(wù)器端如垃圾郵件查找),其內(nèi)存消耗和計算復(fù)雜度都遠遠高于普通的HashMap,且實現(xiàn)并不容易。結(jié)果App發(fā)布之后,效率大大降低,cpu計算增多,耗能從而提高了。出現(xiàn)用戶抱怨耗電量大,并且經(jīng)常出現(xiàn)Bug,最后還是老老實實換成了HashMap。
這正如一句古話:魚,我所欲也,熊掌,亦我所欲也,二者不可得兼,舍魚而取熊掌者也。
以上的一些矛盾體,既能對立,也能合作。歸根結(jié)底,就是為了做好好的程序服務(wù)的,只能真正做好的程序中的取舍,這樣才能做好好的程序
轉(zhuǎn)載于:https://www.cnblogs.com/manuosex/p/3627521.html
總結(jié)
- 上一篇: C#String详解
- 下一篇: Public DNS (公共域名解析服务