软件工程 1:软件危机
軟件工程第一課摘要
文章目錄
- 軟件工程第一課摘要
- 軟件工程
- 面向?qū)ο笈c面向過程
- 軟件危機(jī)
- 中間層抽象與具象化類比
?
軟件工程
編程是個(gè)非常適合自學(xué)成才的項(xiàng)目,我就是自學(xué)的。
很多人和我一樣不是科班出身,自學(xué)編程技術(shù),也容易找到一個(gè)程序員的職位,甚至還可以自己開發(fā)一個(gè)小軟件。
但僅限于 小 軟件,比如您可以自己寫一個(gè)電子郵件客戶端程序,或者寫一個(gè)視頻編輯工具。
可是如果要開發(fā)一個(gè)超大型軟件,其中涉及到的學(xué)問,可就不是自學(xué)所能達(dá)到的了,那是需要在重大項(xiàng)目的實(shí)踐中去領(lǐng)悟和提高的。
自學(xué)也許可以讓您成為一個(gè)優(yōu)秀的俠客,而偉大的將帥,則只能用千萬士兵的鮮血鑄就。
在計(jì)算機(jī)科學(xué)里,軟件工程這一部分,對(duì)計(jì)算機(jī)科學(xué)家來說太難了。
不了解軟件工程,您就不知道什么叫“大”,什么叫“復(fù)雜”。
中國有很多這樣的厲害人物,是手機(jī) APP 開發(fā)大國,有很多超大型企業(yè),有全世界最長(zhǎng)的跨海大橋,卻沒有沒有屬于自己的計(jì)算機(jī)操作系統(tǒng)、國產(chǎn)芯片…
因?yàn)檫@些事兒,跟現(xiàn)代軟件工程相比,還只能算是簡(jiǎn)單的事兒。
現(xiàn)代主流操作系統(tǒng),包括 Windows, Mac 和 Linux,各自都有接近一億行代碼,而且大致 確保了不出問題(其實(shí)有五個(gè)方面的要求,不過簡(jiǎn)單起見總結(jié)為一個(gè))。
代碼每多一個(gè)量級(jí),維護(hù)難度系數(shù)會(huì)不呈比例的指數(shù)上升。
漢朝的時(shí)候,是8000個(gè)人養(yǎng)一個(gè)公務(wù)員;唐朝,3000個(gè)人養(yǎng)一個(gè)公務(wù)員;明朝2000人養(yǎng)一個(gè);到了清朝是1000人養(yǎng)一個(gè)公務(wù)員 —— 而今天的中國,則是18個(gè)人養(yǎng)一個(gè)公務(wù)員!
大了、就是不一樣。
我研究了身邊一些很聰明的人,發(fā)現(xiàn)他們聰明是因?yàn)楣ぞ吆芏?#xff0c;一個(gè)工具不行就換一個(gè),所以解決問題會(huì)更多、會(huì)更好。
如果您只會(huì)兩個(gè)視角,那您就只有一對(duì)連接。而如果您會(huì)5個(gè)視角,理論上您一共可以有 5×4/2 = 10 個(gè)連接 —— 相當(dāng)于五個(gè)點(diǎn)兩兩之間都連一條線:
您要是有 10 個(gè)視角,就可以有 10×9/2=45 個(gè)連接。
因?yàn)橐暯堑倪@個(gè)超加性,多樣性的好處會(huì)不成比例的增加。
這個(gè)工具其實(shí)是思考工具,像哲學(xué)家、科學(xué)家這方面的工具特別的多。
那么我們?cè)倜鎸?duì)一個(gè)問題時(shí),我們能否也變得像TA們一樣的聰明???
當(dāng)然可以啦,思想可以學(xué)習(xí),方法可以模仿。
工具隨時(shí)可以獲取。比如,我喜歡讀一些神作,他們不僅讀的爽,還有一個(gè)行業(yè)的底層邏輯。
| 圖論 | 多對(duì)多的網(wǎng)絡(luò)關(guān)系 | 計(jì)算機(jī)課程 |
| 線代 | 一組數(shù)字研究世界 | 計(jì)算機(jī)課程 |
| 經(jīng)濟(jì)學(xué) | 國師問道 | 商科 |
| 金融 | 百姓之道 | 商科 |
| 絕命毒師 | 完整的毒品犯罪鏈 | 電影 |
| 億萬 | 對(duì)沖基金的運(yùn)作原理 | 電影 |
| 心理學(xué) | 自信+熱情 | 通識(shí)教育 |
| 親密關(guān)系 | 愛的能力 | 通識(shí)教育 |
長(zhǎng)期下來,越來越多樣化,視角、意趣都多了很多。積累到了一定程度,就發(fā)現(xiàn),多了就是不一樣。
而軟件工程的底層邏輯,可以說是工程管理和綜合治理手段的極限。
小軟件和大軟件的根本區(qū)別在于尺度,以前一個(gè)小軟件只有幾千行代碼,現(xiàn)在一個(gè)大軟件要有幾百萬行代碼。
以前的軟件是給一個(gè)人用,現(xiàn)在是多個(gè)用戶共同使用一個(gè)軟件;更重要的一點(diǎn)是,以前的軟件是一個(gè)人或者幾個(gè)人開發(fā)的,現(xiàn)在則是大型團(tuán)隊(duì)一起開發(fā)。
計(jì)算機(jī)思想家弗瑞德里克·布魯克斯(Fred Brooks),曾經(jīng)在上世紀(jì)六十年代末率領(lǐng) IBM 公司 300 人的團(tuán)隊(duì)開發(fā)操作系統(tǒng)。
他做完這件事之后很有感觸,為此專門寫了一本書,叫《人月神話》。
布魯克斯提出兩個(gè)感慨:
- 1 個(gè)人干 12 個(gè)月的活,絕對(duì)不是 12 個(gè)人在 1 個(gè)月內(nèi)能干完的。項(xiàng)目用的程序員越多,平均每個(gè)人出活的速度就越慢。所以您規(guī)劃項(xiàng)目的時(shí)候不要算什么“人月”。
- 您這個(gè)團(tuán)隊(duì)做出來的軟件的結(jié)構(gòu),往往和您這個(gè)團(tuán)隊(duì)的人員組織管理結(jié)構(gòu)高度相似。 所以軟件工程不但要管項(xiàng)目,還要管人。
布魯克斯這本書出來,人們才充分認(rèn)識(shí)到軟件工程的難度。
?
面向?qū)ο笈c面向過程
面向過程:OOP,分析問題的解決步驟,而后用 函數(shù) 把步驟按順序一一實(shí)現(xiàn)并調(diào)用即可。
面向?qū)ο?#xff1a;POP,把構(gòu)成問題的事務(wù)分解為各種對(duì)象,而建立對(duì)象的目的不是為了完成一個(gè)一個(gè)的步驟,而是描述某個(gè)事務(wù)在解決整個(gè)問題過程中發(fā)生的行為。
對(duì)于剛剛學(xué)完 C 的小白來說,面向?qū)ο蟮乃枷牒退枷肟芍^有點(diǎn)復(fù)雜。
如果把 倆個(gè)思想 “類比” 到一句話里面,異同就會(huì)十分明顯。
另外,我習(xí)慣英文縮寫,這樣傳遞的信息十分簡(jiǎn)短方便,全稱百度。
e.g. 下雨的時(shí)候,人們?yōu)榱朔乐贡挥炅軡翊蜷_了雨傘??。
面向過程解析:
-
過程是:下雨了,打開傘,擋雨。過程都是動(dòng)詞哦。
-
編碼實(shí)現(xiàn):fall(),open(),prevent(),這 3 個(gè)函數(shù)一一對(duì)應(yīng)上行的步驟如 fall() 代表下雨。
面向?qū)ο蠼馕?#xff1a;
- 對(duì)象:我 、傘、 雨,都是名詞。
- 編碼實(shí)現(xiàn):me,umbrella,rain。對(duì)象都是名詞呀。
對(duì)象有自己的行為:我可以打開傘、傘可以擋雨、雨可以蹦極。
再以實(shí)際情況安排對(duì)象行為的順序:雨下,我打開傘,傘擋雨。
- 編碼實(shí)現(xiàn):rain.fall(),me.open(),umbrella.prevent()
因此,面向過程是 把問題分解為若干個(gè)步驟,每個(gè)步驟實(shí)現(xiàn)為一個(gè)函數(shù),按照順序?qū)崿F(xiàn)并在調(diào)用時(shí)傳遞數(shù)據(jù)給函數(shù)解答問題。
面向?qū)ο笫?抽象出問題的各種對(duì)象,把數(shù)據(jù)和解決問題的方法封裝在對(duì)象中,而后各個(gè)對(duì)象之間通過行為實(shí)現(xiàn)解答問題。
練習(xí):試著用面向?qū)ο蟮乃枷胫貙懴聢D:
?
軟件危機(jī)
早期的編程語言,如 匯編語言、只有0和1的機(jī)器語言,本質(zhì)上是面向機(jī)器編程。
那個(gè)時(shí)代里,活著的年輕人們重新思考了軟件編程的認(rèn)知。
他們開始認(rèn)為編程的設(shè)計(jì)應(yīng)該以人為本,開發(fā)了許多比較符合人類習(xí)慣和邏輯思維的語句。
就是CPU的指令集,要想讓CPU工作,必須借助特定的指令。
- add 用于加法運(yùn)算
- sub 用于除法運(yùn)算
- cmp 用于比較兩個(gè)數(shù)的大小
但CPU指令集(匯編語言)還是比較抽象,人們有了一個(gè)自然的需求,能不能按照人容易理解的思維寫程序后把寫出來的程序自動(dòng)翻譯成機(jī)器語言呢 ?
后來,計(jì)算機(jī)科學(xué)家們發(fā)現(xiàn)所有程序可以化為三種結(jié)構(gòu)構(gòu)成:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
- 如果…就… if…else
- 循環(huán) while
- 去哪里 goto
這就是所謂高級(jí)編程語言,正是這使他們擺脫了對(duì)計(jì)算指令的束縛,使用人類語言代替了機(jī)器語言。
這樣的語言關(guān)注邏輯處理過程,所以也被稱為面向過程、面向人的、面向程序員的編程語言,比如 Fortran、C。
高級(jí)編程語言的普及極大地釋放了程序員的自主性,軟件開發(fā)迎來黃金時(shí)期,程序員的第一個(gè)極客時(shí)代到來,比爾·蓋茨、喬布斯都是在那個(gè)時(shí)代成長(zhǎng)起來的。
他們將常用、好用的代碼 封裝 起來,重復(fù)使用。編程語言的庫函數(shù)具有標(biāo)準(zhǔn)化的輸入和輸出,程序員下次再用的時(shí)候只需要照顧好輸入輸出,而不必關(guān)心函數(shù)內(nèi)部是什么情形 —— 這就能大大降低出錯(cuò)的概率和提高編程的效率。
1957 年,Fortran 語言被發(fā)明了,這是一個(gè)科學(xué)計(jì)算語言,特點(diǎn)是特別容易寫公式。
1958 年,LISP 語言出現(xiàn),這是一個(gè)極其強(qiáng)大的符號(hào)處理和邏輯運(yùn)算語言,甚至可以用于人工智能設(shè)計(jì)。
1959 年,人們又發(fā)明了 COBOL 語言,用于商用數(shù)據(jù)庫編程。
要方便人們?cè)谝慌_(tái)計(jì)算機(jī)上操作,您就得有賬號(hào)管理,得安排不同的程序同時(shí)運(yùn)行,那么就得有操作系統(tǒng),程序員就得有系統(tǒng)思維。
要想開發(fā)出來的軟件好用、可靠、容易維護(hù),程序員就得有工程思維。
接下來還有了互聯(lián)網(wǎng),程序員就需要網(wǎng)絡(luò)思維和安全思維。
再進(jìn)一步,編程思想也在演化。
傳統(tǒng)編程語言是線程式的,程序員思維模式是操控計(jì)算機(jī)。
但是人的欲望是沒有止境的,人能做到的越多,想得到的也就越多,越來越龐大的軟件開發(fā)計(jì)劃被不斷地提了出來。
可面向過程的復(fù)雜性隨著軟件規(guī)模的膨脹以更快的速度膨脹(超加性)。
面向過程的軟件關(guān)注邏輯流程,更容易被設(shè)計(jì)成面條式程序,長(zhǎng)長(zhǎng)的過程調(diào)用執(zhí)行,像一根面條。
而大型項(xiàng)目最后由這樣一根一根面條組成,就成了一個(gè)毛線團(tuán),最后誰也理不清了。
于是很多大型軟件的開發(fā)過程開始失控,最終以失敗告終,人們遇到了軟件危機(jī)。
軟件工程的問題不是每年能培養(yǎng)多少高水平程序員的問題,而是復(fù)雜性問題。
軟件危機(jī)使人們開始重新審視軟件編程這件事情的本質(zhì),除了一部分科學(xué)計(jì)算或者其他特定目的的軟件,大部分的軟件是為了解決現(xiàn)實(shí)世界的問題,企業(yè)的庫存管理、銀行的賬務(wù)處理等等。
所以,軟件編程的本質(zhì)是程序員用代碼的方式使現(xiàn)實(shí)世界的事務(wù)運(yùn)行在計(jì)算機(jī)上,計(jì)算機(jī)軟件是為了解決現(xiàn)實(shí)世界的問題而開發(fā)出來的,那么軟件編程這件事情應(yīng)該關(guān)注的重點(diǎn)是客觀世界的事物本身,而不是程序員的思維方式或者計(jì)算機(jī)的指令。
如果軟件編程的重點(diǎn)是客觀世界的事物本身,那么編程語言如何才能更好地滿足這一需求?
于是,面向?qū)ο蟮木幊陶Z言應(yīng)運(yùn)而生。
面向?qū)ο缶幊桃詫?duì)象作為軟件編程的基本單位,提出一切皆對(duì)象,客觀世界的用戶、賬號(hào)、商品是對(duì)象;創(chuàng)建、組合、關(guān)聯(lián)這些對(duì)象的工廠、適配器、觀察者也是對(duì)象;將所有這些對(duì)象分析、設(shè)計(jì)、開發(fā)出來,一個(gè)軟件系統(tǒng)就完成了,這個(gè)軟件系統(tǒng)靈活、強(qiáng)大,最重要的是可以根據(jù)需求變化快速更新維護(hù)。
面向?qū)ο缶幊趟坪跻呀?jīng)進(jìn)化到編程這件事情哲學(xué)意義上的終點(diǎn),是編程語言的終極形態(tài)。
現(xiàn)實(shí)看起來也確實(shí)如此,最近三十年誕生的編程語言幾乎全部都是面向?qū)ο蟮木幊陶Z言,面向?qū)ο笠唤y(tǒng)天下。
但事實(shí)真的如此嗎?
回望歷史我們站在上帝視角,一切都是如此清晰充滿條理,凝望未來,我們還能如此篤定嗎?
情況也許并非如此。
事實(shí)上,現(xiàn)實(shí)中的面向?qū)ο缶幊處缀鯊奈磳?shí)現(xiàn)人們期望中的面向?qū)ο缶幊獭?/p>
這有人的原因,也有編程語言的原因…
而隨著科技的不斷發(fā)展,特別是大數(shù)據(jù),人工智能以及移動(dòng)互聯(lián)網(wǎng)的發(fā)展,面向數(shù)據(jù)的編程需求越來越多,能夠更好迎合這一需求的編程模型開始得到青睞,比如函數(shù)式編程。
而極客型的程序員對(duì)強(qiáng)類型的面向?qū)ο缶幊淘絹碓讲桓忻?#xff0c;他們希望在編程的時(shí)候能夠得到更多的自由,編程語言的重心似乎重新出現(xiàn)面向程序員的趨勢(shì)。
隨著計(jì)算機(jī)性能的不斷增強(qiáng),以及互聯(lián)網(wǎng)應(yīng)用對(duì)計(jì)算資源需求的不斷增加,如何更好地利用 CPU 的多核以及分布式集群的多服務(wù)器特性,必須是軟件編程以及架構(gòu)設(shè)計(jì)時(shí)需要考慮的重要問題,軟件編程越來越多需要考慮機(jī)器本身,相對(duì)應(yīng)的,反應(yīng)式編程得到越來越多的關(guān)注。
我們都在時(shí)代里,而時(shí)代是在螺旋式的上升…
P.S. 其實(shí)不止 C++、Python、java 等編程語言可以實(shí)現(xiàn)面向?qū)ο蟮臋C(jī)制,C 語言一樣可以,在 Linux 內(nèi)核源代碼里應(yīng)用廣泛啊。如果有想法,可以看看《Object-Oriented Programming With ANSI-C》(用C實(shí)現(xiàn)面向?qū)ο蟮母鞣N機(jī)制)。
?
中間層抽象與具象化類比
在計(jì)算機(jī)中,為了讓操作更加直觀、易于理解、增強(qiáng)用戶體驗(yàn),開發(fā)者經(jīng)常會(huì)使用一件法寶——增加中間層,即使用一種間接的方式來屏蔽復(fù)雜的底層細(xì)節(jié),只給用戶提供簡(jiǎn)單的接口。
實(shí)際上,計(jì)算機(jī)的整個(gè)發(fā)展過程就是不斷引入新的中間層:
-
計(jì)算機(jī)的早期,程序都是直接運(yùn)行在硬件之上,自己負(fù)責(zé)硬件的管理工作;程序員也使用二進(jìn)制進(jìn)行編程,需要處理各種邊界條件和安全問題。
-
后來人們不能忍受了,于是開發(fā)出了操作系統(tǒng),讓它來管理各種硬件,同時(shí)發(fā)明了匯編語言,減輕程序員的負(fù)擔(dān)。
-
隨著軟件規(guī)模的不斷增大,使用匯編語言編程開始變得捉襟見肘,不僅學(xué)習(xí)成本高,開發(fā)效率也很低,于是C語言誕生了。C語言編譯器先將C代碼翻譯為匯編代碼,再由匯編器將匯編代碼翻譯成機(jī)器指令。
-
隨著計(jì)算機(jī)的發(fā)展,硬件越來越強(qiáng)大,軟件越來越復(fù)雜,人們又不滿足于使用C語言了,于是 C++、Java、C#、PHP 等現(xiàn)代化的編程語言誕生了。
從具象到抽象化并傳承這些抽象的知識(shí)、經(jīng)驗(yàn),是人與其他動(dòng)物最大的區(qū)別。
一個(gè)領(lǐng)域的知識(shí)如果不斷地深入發(fā)展,都有同一個(gè)趨勢(shì),那就是從具象化到抽象化。
作為程序里,我們經(jīng)常要使用:類、抽象類、接口 這些抽象概念。
進(jìn)步想,程序本身也是對(duì)現(xiàn)實(shí)世界的抽象。
程序可以實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的高度模擬,制造出許多的“世界”。
再進(jìn)一步,我們所在的現(xiàn)實(shí)世界也無法被自然語言精確描述。
作為普通人,想要更精確的理解世界,抽象思維是不可或缺的。
首先,抽象思維能讓您認(rèn)識(shí)到事物的本質(zhì)。
高手,要善于發(fā)現(xiàn)各種看似不一樣的事物背后的共同點(diǎn)。
而后使用類比,對(duì)現(xiàn)實(shí)的抽象,抽象的好,就形成了事物的模型。然后,匹配模型。
從前醫(yī)生們面對(duì)一個(gè)問題,束手無策。
有一種射線,只要以一定的強(qiáng)度照射在腫瘤上,就能把腫瘤給殺死,等于是可以用來治療癌癥。 現(xiàn)在問題在于,射線到達(dá)腫瘤之前肯定會(huì)先接觸到患者身體的其他組織,那就會(huì)把好的組織也給殺死。 可是如果把射線強(qiáng)度調(diào)低一點(diǎn),好的組織能不被傷害,可是對(duì)腫瘤就也沒用了。 那有沒有一個(gè)什么辦法,不用做手術(shù)開刀,既能讓射線殺死腫瘤,又不會(huì)傷害其他組織呢?
就設(shè)計(jì)而言,這個(gè)答案本身并不重要,我們關(guān)心的是尋找答案過程中使用的思維方式。
這個(gè)方法就是 “類比”,用類比解決問題,是把一個(gè)領(lǐng)域的思想,運(yùn)用到另一個(gè)領(lǐng)域中去。
分享一個(gè)故事:
從前有一個(gè)將軍,要攻打一座城。 攻城需要很多士兵同時(shí)發(fā)動(dòng)進(jìn)攻才好。 可是這座城周圍的道路都很窄小,并不適合大軍通過。 這怎么辦呢? 將軍知道通往這座城的道路有很多條,于是他把士兵分散開,以小隊(duì)的形式從不同的道路出發(fā),按照約定時(shí)間一起到達(dá)。 結(jié)果就把城給攻下來了。
類比解決問題,是把一個(gè)領(lǐng)域的思想,運(yùn)用到另一個(gè)領(lǐng)域中去。
上面答案是用若干束低強(qiáng)度的射線從不同的方向照射腫瘤。
因?yàn)樯渚€強(qiáng)度不高,所以不會(huì)殺死途中路過的身體組織;而因?yàn)樵谀[瘤上匯聚的多個(gè)射線加起來的強(qiáng)度夠高,所以能殺死腫瘤。
這個(gè)原理就好像用放大鏡匯聚太陽光一樣……
其實(shí)這就是現(xiàn)在有不少醫(yī)院使用的“伽馬刀”。
那么,如何類比?
一般人看東西是關(guān)注不同點(diǎn),而高手則善于發(fā)現(xiàn)兩個(gè)很不一樣的事物之間的相同點(diǎn)。
比如,下面這六件事情,您能不能把它們給分個(gè)類 ——
- 經(jīng)濟(jì)泡沫
- 北極冰川融化
- 美聯(lián)儲(chǔ)調(diào)節(jié)利率
- 人的身體出汗
- 不同的商品相繼漲價(jià)
- 大腦指揮身體做動(dòng)作
對(duì)美國西北大學(xué)的學(xué)生測(cè)試表明,如果是按照學(xué)科分,所有學(xué)生都能分的很好。
1、3、5 是經(jīng)濟(jì)學(xué)問題,4、6 是生理問題,2 是自然環(huán)境問題。
但要是按照這些事情的內(nèi)部機(jī)制分類,就只有少數(shù)有跨界學(xué)習(xí)經(jīng)歷的學(xué)生能分好。
- 事實(shí)上 1 和 2 都是正反饋現(xiàn)象(買東西的人越多經(jīng)濟(jì)越好,經(jīng)濟(jì)越好買東西的人越多;
- 冰川越融化吸收陽光越多,吸收陽光越多冰川越融化),
- 3 和 4 都是負(fù)反饋現(xiàn)象(美聯(lián)儲(chǔ)加息防止經(jīng)濟(jì)過熱;皮膚出汗防止身體過熱),
- 5 和 6 都是連鎖信號(hào)傳遞(石油漲價(jià)導(dǎo)致日用品漲價(jià);大腦神經(jīng)信號(hào)傳遞到四肢)。
能看出這種深層思維結(jié)構(gòu),才談得上舉一反三。
類比的就一定對(duì)嗎?
類比有可能犯錯(cuò)誤,引起爭(zhēng)議 —— 用諸葛亮教育劉禪的話說,就是“引喻失義”。
類比思維的規(guī)律是,您能想到的類比越多,您的判斷就會(huì)越準(zhǔn)確;您能想到的類比越遙遠(yuǎn),您出的主意就會(huì)越有創(chuàng)造性。
高手聽人講什么東西的時(shí)候,會(huì)在頭腦中畫一個(gè)東西:您一說四根柱子,他就畫了一座大樓。您繼續(xù)講更多的內(nèi)容,他就不斷調(diào)整和補(bǔ)充頭腦里這個(gè)東西。您講完了,他就會(huì)發(fā)現(xiàn)這個(gè)東西哪里似乎不怎么平,哪里似乎還沒完成,哪里似乎還可以往外延伸,哪里似乎可以跟他熟悉的什么東西連接起來,他還可能發(fā)現(xiàn)整個(gè)這個(gè)東西跟另一個(gè)東西很像。他眼中簡(jiǎn)直到處都是問題。
說白了,這也是類比和聯(lián)想。
總之,類比是一個(gè)非常有用的思維方式。
在思維方法層面,具體分為:
- 具體類比:以事件之間具體特征相比,尋找新理解;
- 情感類比:將事物人格化,在感性層突破習(xí)慣認(rèn)知,提煉新方法;
- 抽象類比:在詞語和概念維度相比,極易出錯(cuò),以高層原則維護(hù);
- 非現(xiàn)實(shí)類比:借幻想和超現(xiàn)實(shí)概念與現(xiàn)實(shí)問題相融,升級(jí)認(rèn)知;如三體衍生術(shù)語。
類比可以讓我們舉一反三,類比可以啟發(fā)我們創(chuàng)造新事物,類比可以讓我們審視自己和別人的原則,類比可以幫助我們發(fā)現(xiàn)各方的分歧所在,類比可以幫助交流思想……類比的背后,是高級(jí)的抽象思維。
?
復(fù)盤:
文章目錄
- 軟件工程第一課摘要
- 軟件工程
- 面向?qū)ο笈c面向過程
- 軟件危機(jī)
- 中間層抽象與具象化類比
總結(jié)
以上是生活随笔為你收集整理的软件工程 1:软件危机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于openGL加载贴图纹理映射中Unk
- 下一篇: sping 注解