如何进行良好的程序设计(1)
?關于程序設計,掐指算來也寫了快有十年的程序了,之前很長的一段時間都是以算法類的競賽為主,對于程序結構的設計,總是胡亂寫寫,能跑通就算ok了。來公司后, 接觸了一些大一點的項目的設計,設計的重要性就凸現出來了。
??? 為了更好的設計(不能說到完美,但是至少不要把自己和用戶弄暈),我寫點自己的一些感悟(有自己思考的,也有和公司的前輩討論得到的),不能說本系列是一篇指導性的文章,權當是拋磚引玉,希望能夠大家不吝賜教,多多討論。
????對于程序設計,常常是有下面的一個過程:
??? 1)給出了需求,對需求進行思考,考慮用某種結構去實現
??? 2)對于結構的思考覺得可以滿足了需求,開始程序設計
??? 3)設計的過程中發現某些地方有效率問題、可行性問題、或者某些不能滿足需求的問題 -?在當前的基礎上進行修修補補
??? 4)設計的過程中用戶提出了一些新的需求 -?在當前的基礎上進行修修補補
??? 5)為了調試、測試的方便,在程序中的一些臨時代碼也忘了清除,使得程序看起來亂七八糟
??? 6)重復2)3)4)的過程,直到看起來滿目蒼夷的程序完成需求,交付項目
??? 7)過了半年一年,用戶有了一些新的需求,或者發現了一些bug,當重拾代碼時,發現代碼已經不忍卒讀了
??? 每次經歷這樣的一次情況,內心中都有一種煎熬的感覺,覺得程序越寫越背離了當初設計的初衷,代碼連自己都不想去看,哪里能算優秀的程序呢。有時候覺得很懶,喜歡給自己找一些借口,比如項目做完了的時間可以學習一下其他的東西,看看論文什么的,或者說省一點時間去陪陪家人。其實設計和算法一樣,都是非常有價值的東西,就像IPad和筆記本的比較一樣,IPad就因為設計的新穎,和各處的精益求精,讓全世界的人為之瘋狂。
????最近和同事進行討論,自己也想了想,可以從下面的一些方面來學會如何進行良好的設計:
??? 想要設計應該先去多看看別人優秀的代碼,從代碼中體會大師的設計。設計模式只是設計的一小方面,我覺得更重要的是類、函數的功能設計,讓這些函數不管從接口上還是從內部的實現上,都是去做一些比較干凈的功能。這樣不管自己去寫,別人去讀,或者加入新的函數和類等,都更加方便。
??? 對于一些書(比如Effective C++等)中間講的知識不一定要生搬硬套的去使用,而可以從別人的代碼中看看大師們是怎樣用這些技巧的,比如imp指針這種技巧,我覺得就不適合在普通的接口中使用,這種技巧不同于人的直接思維,在原本簡潔的借口后面包裝了一個不太漂亮的“影子”。也不利于編碼和理解、調試。
??? 對設計,應該是跨越語言的范圍的,對于不同的語言,也同樣可以看到很多美好的設計,比如Java中非常多的開源項目就可以有很多可以去參考學習。比如我們目前正在做的分布式機器學習庫就可以去參考一下Apache的Mahout,里面對問題的處理方式應該是一致的。對于同一種語言開發出來的程序,可以去看看語言的技巧如何正確的使用。
??? 對測試,我個人習慣不太好,總喜歡在測試的時候加入一些cerr等代碼,有時又會忘記了刪除,讓代碼看起來會不太好看,對于單元測試,也不太清楚怎樣去寫良好的單元測試,這也是后面得去慢慢學習的內容。
??? 對設計,應該是一個精心去雕琢的過程,盡量能夠保持在自己能力內的完美,然后這也是日積月累的工作,沒有捷徑可走,只有多看多學才行。
總結
以上是生活随笔為你收集整理的如何进行良好的程序设计(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习中的算法(2)-支持向量机(SV
- 下一篇: 全概公式和贝叶斯公式的理解