軟開心法十五 軟體內功

2022-03-05 16:35:30 字數 1837 閱讀 1492

什麼是內功?內功和招式有什麼區別?我覺得這個區別我不用多說了,估計沒有人不知道武功的內功和具體招式之間的差距,哪個是需要終極修煉的一目了然。

軟體的內功又是什麼東西呢?那麼招式又是什麼東西呢?一句話:具體的實現技術是招式,心中的實現思想是內功。最明顯的招式屬於各種語言,內功屬於使用語言實現的想法和步驟。

那麼在軟體開發行業,到底都有些什麼內功呢?經過這麼多年前輩的總結和發展,並沒有固定的方法,但是有一條宗旨就是「高質量」,高質量表現為健壯性好,擴充套件性好。而軟體工程中所有的東西都是為這兩個服務的,包括什麼設計原則,什麼設計模型等等。業界已經被廣泛認可的有軟體思想(物件導向,面向過程等),軟體設計模式,**模式,重構方法,架構模式,資料模式。我之所以列這些的原因就是這些方法都屬於語言不相關的,任何一種計算機語言中,這些思想和方法都可以應用並且能夠提供高質量的軟體。

軟體設計方法學中,對於健壯性很容易理解,很多任務程師也都多少會重視,因為這個指標容易量化,測試就可以量化。但是表現軟體質量的另一方面——擴充套件性——往往被忽視。在軟體開發中,不論是設計還是**粒度,做了擴充套件性良好工作的工程師並不能得到好的回報,而領導或者其他人都反而都覺得他們多此一舉,浪費時間。是的,好的擴充套件性的程式是要浪費時間去思考、去實現的,但是擴充套件性好的程式在響應變更和程式維護中節省下來的成本卻常常被忽視。也就是,說程式不好、難以修改擴充套件,會被認為是開發人員的能力不行或者使用者太刁鑽;程式好了,能夠快速響應變更,容易擴充套件的時候,開發人員又沒有得認可,反而領導可能覺得是使用者對變化的要求少,或者修改維護的人員水平高。正如諾曼在《設計心理學》中所說的,人們往往把錯誤歸咎於環境而把成功歸與自己優良的品質。都屬於沒有看清問題的本質。

我對於軟體內容特別強調的地方在於,在開發中,一定要有易擴充套件修改的思想,因為程式是用來修改的(不要覺得你寫的程式是用來執行的)

。在這樣乙個思想的指導下,在寫任何一行**的時候,都要對變化考慮清楚,而對於變化的考慮我總結了如下兩條:

1、對內設計的時候盡可能考慮變化

2、對外提供的時候盡可能限制變化

我使用乙個開發的

api來說明這兩點,當你要做乙個

api的時候,你就是開發者,而使用

api的開發人員就是使用者(參見前面

1.1節對於使用者的論述)。「對內設計的時候盡可能考慮變化」意味著你在寫這個

api的時候,盡可能的考慮所有的可能性,這樣才會使得你的

api更加通用,維護更容易。但是你在對外提供的時候,你的

api的引數盡可能的限制,這就是第二點「對外提供的時候盡可能的限制變化」。這是什麼意思,比如你提供了乙個函式作為

api讓其他人呼叫,這時候函式有乙個引數作為型別傳入,你的函式會根據傳入的型別來做一些操作。在你的函式處理中,你就需要考慮更多的情況,存在的型別和不存在的型別都需要考慮到。但是在你提供的時候,盡可能限制引數,比如方法的引數使用列舉型別來限制

api呼叫者的引數傳入。方面內的各種情況的處理屬於「對內盡可能考慮變化」,方法的提供時候的列舉引數型別屬於「對外提供的時候盡可能限制」。這樣做的好處就在於內部能優雅的處理,外部呼叫能夠正確且容易的呼叫。也許你覺得這樣做限制的太死了,不靈活,我要借用《編寫全的**》(參考文獻

[20]

)中的乙個思想:能確定的是正確的(放在

if裡面),其他的都是不正確的(放在

else

裡面),這屬於一種悲觀的處理方式(白名單方式,即名單上的合法,其他都非法,與黑名單方式相反,黑名單方式時名單上的非法,其他都合法)。但是這樣帶來的好處是非常多的。

這裡所提出來的只不過是軟體設計內功中的冰山一角,內功方法很多,並且不斷的被總結和開發出來。但是所有的方法都有乙個宗旨,那就是能夠更輕鬆,更方便,更快速,更低成本,更高質量的實現目的。

軟開心法十四 軟體改進

之所以存在軟體噩夢,是因為軟體需要改進和維護,這是軟體生命週期的一部分,正如人類的生老病死一樣,即使你不喜歡,但是他依然會來臨,它不會因為你不喜歡或者抗拒而不來。你所能做的,正如當下流行的一種說法,如果你無法反抗,就學會享受。這正如我在團隊中所倡導的一樣,很多問題,之所以不能解決或者是不能很好的解決...

東軟實訓(二十五)

今天的主要任務是測試。但這次的測試明顯比之前做過的實驗什麼的麻煩許多,不僅專案本身比較大只,更是因為企業級的專案是要投入使用的,有真正的客戶,如果不堪一擊的話是沒有人會買賬的。這麼一說測試還真是要佔到開發時間的很大比重。老師給我們發了測試文件,從4.1到4.5,簡直到了目不忍視的級別!我就列出乙個有...

軟考又見軟考

我這地兒 報名截止時間都快到了,3月4日,我才知道開始報名了。大三了,課程少了些。一直想考這個證來著,無奈時間太緊要不就是專業課還沒學。現在已經定下要考本專業研了,方向嘛 唉也說不准,大家都知道這個證是其次的搞技術的話還是能力問題,我的想法考這個是為了梳理專業知識,以備研究生專業課的考試 以後很可能...