小岑的架構學習筆記-架構設計的歷史背景

最近在學習極客時間《從0到1學架構》,記一些筆記。

在上一篇《架構是什麼?》記錄了架構和一些常用名字的一些基礎概念。

這一章主要是學習架構設計的歷史背景。

軟件開發進化的歷史

軟件開發語言的進化歷史

機器語言

最早的軟化使用的是“機器語言”,使用單純的0和1來寫代碼,使用0和1的組合表示不同的指令,讓計算機去執行程序,類似於這種。

101100000000000000000011
000001010000000000110000
001011010000000000000101

而且寫這種程序的時候,不小心哪個地方寫錯了,估計眼睛都得看花了。

最早的時候都是將0,1的表示打在紙帶上,讓計算機去執行,一個不小心打錯了,整個估計得重來,程序員的心理陰影面積要多大得多大。

彙編語言

爲了解決機器語言編寫、閱讀、修改複雜的問題,彙編語言就出現了,有一些助記符代替機器指令的操作碼,用地址符號或者標號代替指令或操作數的地址。

例如,爲了完成“將寄存器 BX 的內容送到 AX 中”的簡單操作,彙編語言和機器語言分別如下。

機器語言:1000100111011000
彙編語言:mov ax,bx

相對而言,彙編語言比機器語言會更好懂一些,雖然仍需要了解計算機底層的知識,比如CPU指令、寄存器等,但相比機器語言,已經抽象了一個層次。

但由於彙編語言因爲不同CPU下的指令集不同,代碼不能夠複用,而且仍然需要關注計算機底層知識,因此,還需要進一步抽象。

高級語言

高級語言想必大家都很熟悉了,比如LISP,Python,Java,C,C++等,讓程序員可以不需要關注底層的細節,專注於自身的問題和實現即可,又相比彙編語言抽象了一個層次。

並且通過編譯程序,可以實現同樣的一份代碼,可以在不同的機器上編譯運行,不需要根據不同的機器指令,重寫程序。

小結

總體來看,軟件開發語言進化的歷史,是讓開發者更加少的關注和自身要做的事情不相關的細節。

軟件開發方式的進化歷史

作者在原文中提到的GOTO等,離我太過於遙遠,我最早接觸的就是結構化程序設計。

在結構化程序設計中,引入了模塊化的指導思想,將變化點進行隔離,將軟件的複雜度控制在一定的範圍內。

但隨着業務需求越來越複雜,軟件的擴展變得更加困難,因此面向對象的編程思想又開始流行起來,現在面向領域驅動變成,慢慢從紙上談兵,開始在國內的軟件開發中大行其道。

軟件架構的歷史背景

軟件架構的概念,根據《軟件架構介紹》(An Introduction to Software Architecture)的描述,指的是:

隨着軟件系統規模的增加,計算相關的算法和數據結構不再構成主要的設計問題;當系統由許多部分組成時,整個系統的組織,也就是所說的“軟件架構”,導致了一系列新的設計問題。

這段話解釋了爲什麼軟件架構往往現在大公司逐步流行起來,因爲只有大公司纔有較大的軟件規模,規模較大的軟件系統纔有可能遇到各種問題:

  1. 因爲規模大了,內部耦合隨着時間長,可能會比較嚴重,開發效率受到制衡。

  2. 因爲耦合重,改某個功能可能影響很多的模塊,擴展性不足

  3. 邏輯複雜,排查和修復難度增加。

結構化編程 -> 面向對象編程 -> 軟件架構,我理解都是對一定規模軟件的拆分,結構化重視在模塊層面,面向對象編程更注重在對象劃分,領域劃分層面,軟件架構更多在系統層面如何去規劃,拆分的粒度越來越粗,層次也越來越高。

總結

結構化編程,面向對象編程,架構設計 都是軟件領域開發的一種方法,不同規模的需求採用不同的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章