Java咖啡館——大話面向?qū)ο螅?)
發(fā)表時間:2023-08-09 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
1946年2月15日,隨著第一臺現(xiàn)代電子計算機ENIAC轟鳴著來到這個世界,編寫程序也成為三百六十行之外的一個嶄新職業(yè)。我們稱編寫程序的工程師為程序員或者開發(fā)者。
ENIAC是一臺重達30噸的龐然大物,由19000多個晶體管、1500多個繼電器組成。為了給它下達指令,程序員必須通過不同的連接線組合進行編程。要編制運行新的程序,還必須拔掉連線重新來過。整天面對二進制編程的工作相當(dāng)枯燥乏味,而且是直接對程序地址讀寫,自然出錯頻繁。閱讀由連線表達的程序更不亞于揣摩天書,維護和改造程序的價格成本居高不下。更要命的是,早期的計算機制造價格相當(dāng)昂貴,而在程序編制調(diào)試完成之前,計算機不得不一直空轉(zhuǎn),導(dǎo)致軟件開發(fā)的費用竟然遠遠超過硬件的投入。
為了解決軟件開發(fā)的難題,計算機科學(xué)家發(fā)明了匯編語言,通過一些助記符來減輕二進制編碼的開發(fā)壓力。這的確是行之有效的方法,直到現(xiàn)在,程序員在開發(fā)中還常常使用嵌入式匯編來提高軟件運行速度,游戲引擎更是如此。然而,匯編語言太依賴程序員的素質(zhì),而且無法適應(yīng)大規(guī)模的開發(fā)。
黃糖故事 Grace Murray Hopper、Bug和Debug
由于一次傳奇般的投資,Mark I計算機把IBM從生產(chǎn)制表機、肉鋪磅秤、咖啡碾磨機等亂七八糟玩意的行業(yè),領(lǐng)入了計算機制造業(yè)的領(lǐng)地,最終成為如今的藍色巨人。本系列文章中曾介紹過Mark I三個程序員之一的數(shù)學(xué)家Grace Hopper是如何創(chuàng)造了“BUG”和“DEBUG”這兩個計算機史上著名的兩個名詞的。而這位Hopper女士,實在是一個不得了的人物。1952年,Hopper覺得用機器碼編程是不是比較原始,為什么不能用類自然語言編寫程序,然后再用一個工具把它轉(zhuǎn)換成機器碼呢?不久,她就開發(fā)出世界上第一套編譯器A-0,是現(xiàn)代編譯技術(shù)的原型。1956年她在第一臺儲存程序的商業(yè)電子計算機UNIVAC I、II上開發(fā)出B-0,之后叫做FLOW-MATIC,它導(dǎo)致了計算機商用語言COBOL(COmmon Business Oriented Language)的誕生。雖然Hopper有著“電腦之母”的美譽,但是傳說她辦公室有一個倒著走的鐘,以及一面秀著骷髏頭的海盜旗。
到了六十年代,F(xiàn)ORTRAN (FORmula TRANslating)、COBOL、LISP、ALGOL 60等現(xiàn)代高級語言的出現(xiàn)了。程序員可以用接近自然語言的程序語言編制軟件,然后通過編譯器轉(zhuǎn)換成機器可執(zhí)行的代碼。由于使用精確的形式語言來定義程序語言本身,并且通過對硬件的抽象使得程序與計算機平臺無關(guān),導(dǎo)致高級語言生產(chǎn)效率大大提高,維護費用自然降低不少,計算機軟件業(yè)終于得以蓬勃發(fā)展。
好景不長。隨著軟件大規(guī)模的應(yīng)用,程序的開發(fā)方法和管理手段逐漸無法跟上軟件規(guī)模的膨脹,從而導(dǎo)致了軟件危機的出現(xiàn)。就拿1963~1966年間的IBM 360系統(tǒng)來說,該系統(tǒng)有100萬行的代碼量,IBM每年動用5000人來維護該系統(tǒng),但是,每個版本都是從上一個版本找出1000以上個錯誤而修訂的結(jié)果,好像越改錯誤越多,根本沒有改善的跡象。有人把IBM 360系統(tǒng)形容為一只逃亡的野獸落到泥潭中做垂死的掙扎,越是掙扎,陷的越深,最后仍然無法逃脫滅頂?shù)臑?zāi)難。
人們不得不停下腳步思考,到底哪里出了問題;叵胱约,每個人做事情,都是列舉重點,然后細化并逐個完成。比如制造自行車,肯定是先把自行車按照功能分塊,先造車架,然后是兩個車輪,接著是踏板等傳動裝置,最后才是坐墊、車鈴等零件。而制造車輪,肯定是要分別制造鋼圈、鋼絲、輪胎,而輪胎有分內(nèi)外胎。如果軟件開發(fā)能夠遵循這種從大到小、逐步精確的思想,是不是能夠解決這個軟件危機呢?
沒錯,這種結(jié)構(gòu)化的抽象分析方法,導(dǎo)致了結(jié)構(gòu)化程序設(shè)計方法的誕生。
黃糖故事 Niklaus Wirth和PASCAL
凡是學(xué)過一點計算機知識的人大概都知道“數(shù)據(jù)結(jié)構(gòu)+算法二程序”這一著名公式。提出這一公式的瑞士計算機科學(xué)家Niklaus Wirth由于發(fā)明了多種影響深遠的程序設(shè)計語言,并提出結(jié)構(gòu)化程序設(shè)計這一革命性概念而獲得了1984年的圖靈獎。
Wirth開發(fā)的PASCAL在數(shù)據(jù)結(jié)構(gòu)和過程控制結(jié)構(gòu)方面都有很多創(chuàng)造,比如Java中字符型、引用型,以及if-then-else、while、for等多種控制結(jié)構(gòu),都是從PASCAL里面借鑒發(fā)展而來的?梢哉f,現(xiàn)代程序設(shè)計語言中常用的數(shù)據(jù)結(jié)構(gòu)和控制結(jié)構(gòu)絕大多數(shù)都是由PASCAL語言奠定基礎(chǔ)的,因此PASCAL在程序設(shè)計語言的發(fā)展史上具有承上啟下的重要里程碑意義,F(xiàn)在你知道為什么很多計算機專業(yè)的學(xué)生都要學(xué)PASCAL語言了吧。
1971年,Wirth基于其開發(fā)程序設(shè)計語言和編程的實踐經(jīng)驗,首次提出了“結(jié)構(gòu)化程序設(shè)計”(structured programming)的概念。這個概念的要點是:不要求一步就編制成可執(zhí)行的程序,而是分若干步進行,逐步求精。第一步編出的程序抽象度最高,第二步編出的程序抽象度有所降低……最后一步編出的程序即為可執(zhí)行的程序。用這種方法編程,似乎復(fù)雜,實際上優(yōu)點很多,可使程序易讀、易寫、易調(diào)試、易維護、易保證其正確性及驗證其正確性。結(jié)構(gòu)化程序設(shè)計方法又稱為“自頂向下”或“逐步求精”法,在程序設(shè)計領(lǐng)域引發(fā)了一場革命,成為程序開發(fā)的一個標(biāo)準(zhǔn)方法,尤其是在后來發(fā)展起來的軟件工程中獲得廣泛應(yīng)用。有人評價說沃思的結(jié)構(gòu)化程序設(shè)計概念“完全改變了人們對程序設(shè)計的思維方式”,這是一點也不夸張的。
黃糖故事 Philippe Kahn的Borland傳奇
Wirth開發(fā)PASCAL的初衷是為了有一個適合于教學(xué)的語言。但一經(jīng)推出,由于它的簡潔明了、提供豐富的數(shù)據(jù)結(jié)構(gòu)和控制結(jié)構(gòu),使得程序開發(fā)大為簡便,竟然大受歡迎。在C語言問世以前,PASCAL是風(fēng)靡全球、最受歡迎的語言之一,不但創(chuàng)下了發(fā)行拷貝數(shù)最多的世界記錄,而且成為大學(xué)數(shù)據(jù)結(jié)構(gòu)教學(xué)的“惟一官方指定”語言。
Phillipe Kahn是Niklaus Wirth的學(xué)生,畢業(yè)后到美國加利福尼亞州創(chuàng)立了Borland公司,憑借拳頭產(chǎn)品Turbo PASCAL,當(dāng)時就賣出了100多萬個拷貝,成為百萬富翁。而Borland公司是程序員津津樂道到程序開發(fā)工具供應(yīng)商,他們從最早的Turbo PASCAL、Turbo C、Turbo PROLOG等Turbo系列,到如今的Delphi、C++ Builder、JBuilder、C# Builder系列,無一不是舉足輕重的開發(fā)工具,從而在開發(fā)者心目中有著崇高的地位。