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