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