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

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

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

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

軟件開發進化的歷史

軟件開發語言的進化歷史

機器語言

最先的軟化使用的是「機器語言」,使用單純的0和1來寫代碼,使用0和1的組合表示不一樣的指令,讓計算機去執行程序,相似於這種。數據結構

101100000000000000000011
000001010000000000110000
001011010000000000000101

並且寫這種程序的時候,不當心哪一個地方寫錯了,估計眼睛都得看花了。架構

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

彙編語言

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

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

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

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

但因爲彙編語言由於不一樣CPU下的指令集不一樣,代碼不可以複用,並且仍然須要關注計算機底層知識,所以,還須要進一步抽象。設計

高級語言

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

而且經過編譯程序,能夠實現一樣的一份代碼,能夠在不一樣的機器上編譯運行,不須要根據不一樣的機器指令,重寫程序。

小結

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

軟件開發方式的進化歷史

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

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

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

軟件架構的歷史背景

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

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

這段話解釋了爲何軟件架構每每如今大公司逐步流行起來,由於只有大公司纔有較大的軟件規模,規模較大的軟件系統纔有可能遇到各類問題:

  1. 由於規模大了,內部耦合隨着時間長,可能會比較嚴重,開發效率受到制衡。
  2. 由於耦合重,改某個功能可能影響不少的模塊,擴展性不足
  3. 邏輯複雜,排查和修復難度增長。

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

總結

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

相關文章
相關標籤/搜索