爲何結構化編程、面向對象編程、軟件工程、架構設計最後沒有成爲軟件領域的銀彈?java
從計算機語言開始講,一步一步的概述和講解,最終會有一個結論,你們日後看,便可明白。程序員
1.機器語言(1940年以前)算法
機器語言,直接使用二進制碼0和1來表示機器能夠識別的指令和數據。數據庫
好比0100011111000010101,請問你知道是什麼意思嗎?反正我是不知道。編程
固然了,不能否認的是機器語言是最底層與CPU直接交互。安全
機器語言之因此沒有流行下來,緣由三個方面:網絡
(1)太難讀了;架構
(2)太難寫了;框架
(3)太難改了(萬一由於0和1之間位置誤差致使程序出錯,那真的會讓人哭死);數據庫設計
固然了,機器語言並不是沒有優勢,它的優勢就是快,天下武功惟快不破。
2.彙編語言(20世紀40年代)
爲了解決機器語言太難寫了、太難讀了、太難改了等三個缺點,因而,彙編語言應運而生。
例如:
機器語言:1000001001000111111
彙編語言:mov ax,bx
相比機器語言來講,彙編語言要清晰的多。好比mov是移動(move),ax和bx是寄存器的代號。
彙編語言解決了機器語言難讀難寫難改的缺點,固然了,它也有它的不足,好比咱們必須精確地瞭解和熟悉計算機底層知識。
關於計算機知識的書,有一本比較通俗的讀物,可是也不算是通俗,那本書的名字叫作《計算機文化》
對於計算機的基礎知識描繪十分系統和詳細,建議大學生或者是開發經驗比較穩固可是計算機基礎知識欠缺的朋友能夠看看,我就時不時翻閱一下,這本書,我對此的閱讀方法是:
(1)有選擇的閱讀,不要從頭開始翻(我第一次讀的時候,差點讀着就睡着了,由於以爲太過乏味,後來有選擇的看看,基本翻完了70%);
(2)你能夠嘗試快速從頭開始翻,感興趣的能夠花點時間仔細看看,不感興趣的,直接跳過;
總而言之,每一個人都有每一個人獨特的閱讀方式。
關於這本書的章節大概,我列出一下,你們能夠作個參考。
一共十二章:
第一章 計算機和數字基礎知識
A部分:一切數字事物
B部分:數字設備
C部分:數字數據顯示
D部分:數字化處理
E部分:密碼安全
第二章 計算機硬件
A部分:我的計算機基礎知識
B部分:微處理和內存
C部分:存儲設備
D部分:輸入和輸出設備
E部分:硬件安全
第三章 計算機軟件
A部分:軟件基礎知識
B部分:辦公套件
C部分:軟件安裝和升級
D部分:購買軟件
E部分:安全軟件
第四章 操做系統和文件管理
A部分:操做系統基礎知識
B部分:現代操做系統
C部分:文件基礎知識
D部分:文件管理
E部分:備份安全
第五章 局域網
A部分:網絡構建基礎
B部分:有線和無線技術
C部分:網絡安裝
D部分:文件共享
E部分:無線安全
第六章 因特網
A部分:因特網技術
B部分:固定因特網接入
C部分:便攜式和移動因特網接入
D部分:因特網服務
E部分:因特網安全
第七章 Web和電子郵件
A部分:Web技術
B部分:搜索引擎
C部分:電子商務
D部分:電子郵件
E部分:Web和電子郵件安全
第八章 數字媒體
A部分:數字聲音
B部分:位圖圖形
C部分:矢量圖形和三維圖形
D部分:數字視頻
E部分:數字版權管理
第九章 計算機產業:歷史、職業和道德
A部分:計算機歷史
B部分:計算機產業和IT產業
C部分:計算機專業人員的職業
D部分:職業道德
E部分:工做區安全和人體工程學
第十章信息系統的分析與設計
A部分:信息系統
B部分:系統分析
C部分:系統設計
D部分:實現和可維護
E部分:企業數據安全
第十一章數據庫
A部分:文件和數據庫概念
B部分:數據管理工具
C部分:數據庫設計
D部分:SQL
E部分:數據庫安全
第十二章計算機編程
A部分:編程基礎知識
B部分:過程化編程
C部分:面向對象編程
D部分:說明性編程
E部分:安全編程
A、B、C、D、E部分還會再細分,至少四個小節,這本書按照個人那種讀法,兩週就能夠讀完,不過天天平都可能至少要保持一個小時的閱讀。
彙編語言的優缺點:
優勢:佔用內存少、執行速度快、易讀懂。
缺點:可移植性差。
3.高級語言(20世紀50年代)
高級語言,它是在低級語言的基礎上,採用接近於人類天然語言的單詞和符號來表示一組低級語言程序,使編程變得更加簡單,易學,且寫出的程序可讀性強。
高級語言的優缺點:
優勢:
(1)高級語言接近算法語言,易學、易掌握,通常工程技術人員只要幾周時間的培訓就能夠勝任程序員的工做;
(2)高級語言爲程序員提供告終構化程序設計的環境和工具,使得設計出來的程序可讀性好,可維護性強,可靠性高;
(3)高級語言遠離機器語言,與具體的計算機硬件關係不大,於是所寫出來的程序可移植性好,重用率高;
缺點:有些高級語言寫出的程序執行效率並不高。
4.第一次軟件危機與結構化程序設計(20世紀60年代~20世紀70年代)
高級語言的出現,解放了程序員,但好景不長,隨着軟件的規模和複雜性的增長,20世紀60年代中期開始爆發了第一次軟件危機,典型的表現:
軟件質量低下、項目沒法如期完成、項目嚴重超出預計支出等。
結構化程序設計概念,參考百度百科:
其概念最先由E.W.Dijikstra在1965年提出的,是軟件發展的一個重要的里程碑。它的主要觀點是採用自頂向下、逐步求精及模塊化的程序設計方法;使用三種基本控制結構構造程序,任何程序均可由順序、選擇、循環三種基本控制結構構造。結構化程序設計主要強調的是程序的易讀性。
結構化程序設計的主要特色是拋棄goto語句,採起自頂向下、逐步細化、模塊化的指導思想。結構化程序設計本質上仍是一種面向過程的設計思想。
經過結構化程序設計,將軟件的複雜度控制在必定範圍內,從而從總體上下降軟件開發的複雜度。結構化程序設計是20世紀70年代的軟件開發潮流。
5.第二次軟件危機與面向對象(20世紀80年代)
結構化編程的流行在必定程度上緩解了軟件危機,然而隨着硬件的快速發展,業務需求愈來愈複雜,以及編程應用領域愈來愈廣,第二次軟件危機開始到來。
第二次軟件危機的根本緣由仍是在於軟件生產力遠遠跟不上硬件和業務的發展。第一次軟件危機的根源在於軟件的邏輯變的很是複雜,而第二次軟件危機主要體如今軟件的「擴展」變得很是複雜。結構化程序設計雖然可以緩解軟件邏輯的複雜性,可是對於業務變化帶來的軟件擴展卻無能爲力,軟件領域迫切但願找到新的銀彈來解決軟件危機,在這個背景下,面向對象思想開始流行起來。
對於面向對象程序設計定義,引用百度百科:
面向對象程序設計(Object Oriented Programming)做爲一種新方法,其本質是以創建模型體現出來的抽象思惟過程和麪向對象的方法。模型是用來反映現實世界中事物特徵的。任何一個模型都不可能反映客觀事物的一切具體特徵,只能對事物特徵和變化規律的一種抽象,且在它所涉及的範圍內更廣泛、更集中、更深入地描述客體的特徵。經過創建模型而達到的抽象是人們對客體認識的深化
面向對象程序設計思想,如今仍然也很流行,不過聽說目前領域驅動設計在很多公司正在實施中,我對這個領域驅動設計不是特別明白,目前用的比較多仍是面向對象程序設計,由於我使用的編程語言是Java,Java是一個面向對象的編程語言。
6.軟件架構
早在20世紀60年代,戴克斯特拉就涉及軟件架構這個概念,可是軟件架構真正的流行倒是在20世紀90年代開始的,因爲在Rational和Microsoft內部的相關活動,軟件架構的概念開始愈來愈流行。
軟件架構的定義,引用百度百科: