計算機是進行數據處理、運算的機器(有點兒像機電系統中的電動機)。當我們回顧數據管理簡史并較深入理解計算機原理后會發現,有兩個基本問題就包含在其中, 一是處理的數據在在什么地方,二是要處理的數據有多大 。如果我們能夠深刻理解這兩點,那么無論從CPU微觀世界里還是大數據宏觀視角,當前許多熱門詞的“神秘”面紗很輕松地被我們撕下來。
從數據中心角度看,有個客戶想租用IDC的機柜,那么我們也繞不開這兩個基本問題,一是放到哪個機房的哪個機柜,二是占用多少個機柜空間。計算機通信也遵循這兩條基本問題,當我們讀取服務端的數據,需要告訴服務端要讀取的值的起始地址和要讀取數據的數量,如圖1所示。
圖1 數據存放示意
1、怎樣更好理解軟件工程
軟件工程是指導計算機軟件開發與維護的工程學科。為了讓我們能掌握現代化的軟件開發方法,需要系統地學習軟件工程相關知識(包括:軟件工程的概念、原理、技術,經時間考驗而證明正確的管理技術、當前的技術方法等等)。但這樣學起來,如果沒有一定的計算機基礎和實踐經驗,那么這些概念好比教我們如何游泳,但從來不把我們帶到游泳池旁下水一樣,體會不到軟件開發所具有的創新性和靈活性(這也是軟件工程與建設工程主要不同之處之一)。關于軟件工程主要內容大學教科書目錄結構如下圖2所示。
圖2 軟件工程教科書目錄
從圖2可見,軟件工程也跟建設工程一樣,以需求為導向,圍繞可行性研究、總體設計(土建工程設計圖)、詳細設計(深化過的施工圖)等進行開發(或建設)。同時,通過接口設計來對接其他模塊(就像數據中心中電氣、暖通、裝飾裝修銜接一樣),開發過程中也有應遵循的相關的流程、準則、標準和規范等。但是從玉工接觸數據中心領域后的體會來看,只有多到現場看實物并在腦海里建立基本設備材料和工具的三維模型才能將那些看似“死板無聊”的國家標準規范變成施工過程必須遵循的“法寶”。
總結起來就是軟件工程也跟建設工程一樣,須到施工現場多看施工工程師們(平時所謂的工人或農民工,但我看來他們只是從事著不同工作而已,也是自己領域的專家)施工過程一樣需要自己配備一臺電腦,搭建軟件集成開發環境(IDE)并多敲代碼練習才會領會軟件工程真正含義。
自從開辟“軟件工程”話題后發現,自己做了一個不自量力開端。雖然工作原因親歷BSS、OSS、Callcenter等不少中大型軟件集成項目,但覺得只講概念和框架還不夠。最近這幾個月的自學嘗試和體驗開發過程發現編程也很像學樂器(比如六弦琴)。學音樂天天看樂譜及理論和別人演示還不夠,必須自己拿起吉他動手練習才能學會并培養音樂細胞。編程也是,除了看書和理解別人代碼,還需要自己動手敲代碼,逐步熟悉那些常用的代碼并多動手練習通過編程語言語句表達算法才能寫出一個程序,借助調試才能逐步明白程序執行過程并與計算機建立連接,讓計算機“聽懂”我們的“話”,也讓自己逐步形成編程思維。
2、編程中的分層思想
實際上,計算機的整個發展過程就是不斷引入新的中間層,即所謂的分層思想,舉例如下:
(1)計算機的早期,程序都是直接運行在硬件之上,自己負責硬件的管理工作;程序員也使用二進制進行編程,需要處理各種邊界條件和安全問題。
(2)后來人們不能忍受了,于是開發出了操作系統,讓它來管理各種硬件,同時發明了匯編語言,減輕程序員的負擔。
(3)隨著軟件規模的不斷增大,使用匯編語言編程開始變得捉襟見肘,不僅學習成本高,開發效率也很低,于是C語言誕生了。C語言編譯器先將C代碼翻譯為匯編代碼,再由匯編器將匯編代碼翻譯成機器指令。
(4)隨著計算機的發展,硬件越來越強大,軟件越來越復雜,人們又不滿足于使用C語言了,于是 C++、Java、C#、Scala、Python、PHP、Javascript、Go、Rust、Dart... 等現代化的編程語言誕生了。
可以看出,計算機的世界離不開C/C++,他們倆構建了計算機虛擬世界賴以生存的最底層。由于運行效率高,C/C++更適合去寫那些要求高性能和服務器端運行的系統級軟件,如圖3所示。
圖3 C/C++構建了計算機世界“根”技術生態
同時,圖形圖像也是這兩個語言強項,桌面開發時期的絕對霸主?;ヂ摼W時代,以B/S架構的Web框架為主,引來的Java的崛起。同時,大數據開發領域Java家族更是傲視群雄,如圖4所示。
圖4 大數據生態
面對大數據和云計算時代的紅利,Python也不甘示弱,通過自己易用、豐富開放的工具包,占領了數據挖掘和大數據分析及云計算基礎設施的領域,例如Openstack就是其中的典型案例之一。
3、層次不窮的軟件框架和模型
最近幾十年,圍繞云計算、大數據、人工智能技術不斷出現了多種軟件框架及模式。同時,作為錯過互聯網和云計算時代的C/C++語言替代品,為了適應移動互聯網和云計算需求,基礎底層方面也出現了Go、Rust、Carbon等語言等。面對多種終端生態,也許我們覺得C/C++沒有什么用處,但谷歌和微軟等巨頭也為了程序員高效開發并避免重復工作(編程思想根本之一),也出現了Flutter和 Multi-platform App UI (MAUI)等跨平臺UI框架。讓我們看到Flutter架構圖,如圖5所示。谷歌公司搞出來的Dart語言的未來生態我們也不敢做結論,但圖中看起來Dart語言也算是C/C++的子孫后代的樣子,當然這只是假想,實際是不是也需要進一步了解,沒有學我也不能胡說。
圖5 移動互聯網跨平臺UI框架Flutter架構
4、兩個基本問題顯得越來越重要
隨著移動互聯網和云計算的時代的發展,我們感受到熱門詞和概念越來越多,多到搜百度...這對數據處理(或管理)從業者帶來了一種“學不完”的感覺,甚至懷疑自己是不是被時代淘汰了的錯覺和壓力。
圖6 “啃不完”的新技術...
同時,我們開始提倡“讓運維自動化和智能化,從業人員干更有價值的事情”的建議。我們也可以反思一下什么是有價值的、不容易過時并經得起實踐考驗的知識呢?我想這還離不開數據處理的 數據放在什么地方(地址)和處理的數據有多大(類型) 的兩個基本點。要學計算機基本理論,那么也離不開C語言(其他編程語言也是可以的)及數據結構等基礎知識學習。如果我們真正明白了數據處理基本問題和基礎理論,那么其他任何一個語言學起來會更加順利。
5、結束語
為了講清楚軟件工程這個話題,接下來的文章里我們將從集成開發環境的搭建、將身邊的小需求改為程序并對其進行調試、測試并形成發行版可執行程序等幾個過程跟大家一起體驗軟件工程的開發(施工建設)過程。雖然這個過程對帶來了一些挑戰,但是理解軟件工程的本質和培養編程思維還是價值的。
-
計算機
+關注
關注
19文章
7175瀏覽量
87175 -
計算機原理
+關注
關注
0文章
24瀏覽量
8000 -
數據處理
+關注
關注
0文章
549瀏覽量
28453
發布評論請先 登錄
相關推薦
評論