謝邀,我開(kāi)始學(xué)JAVA的時(shí)候也想過(guò)這個(gè)問(wèn)題,很遺憾,老師當(dāng)時(shí)并沒(méi)有解答我。
第一個(gè)編程軟件怎么來(lái)的?
你能有這種想法就很不錯(cuò),有些人活了一輩子,從來(lái)沒(méi)想過(guò)1+1為什么=2
我不太懂,隨手摘抄,稍微編輯下,希望對(duì)你有幫助,侵權(quán)聯(lián)系我。
首先,軟件和硬件在邏輯功能上是可以等價(jià)實(shí)現(xiàn)的,能夠用軟件實(shí)現(xiàn)的自然可以固化成為硬件。
那么最初的“夏娃”——原始軟件,它是固化成硬件,我們一般稱之為“固件”,這一固件必須通過(guò)“硬布線”,直接在電路板上操作刻錄。
有了這最基本的“軟件”,當(dāng)我們將一組指令電平信號(hào)輸入電路時(shí),根據(jù)電平的電壓,電路在這一“軟件”的控制下進(jìn)行不同的開(kāi)通閉合電路,整體形成一個(gè)有序的操作,宏觀上就表現(xiàn)出我們所見(jiàn)的軟件形式。
值得注意的是這個(gè)原始軟件它不一定就包含第一個(gè)編譯程序,因?yàn)槲覀兛梢愿鶕?jù)具體計(jì)算機(jī)的指令,預(yù)先將這些指令的電平表示先行刻制在光盤、軟盤、硬盤等等,只要計(jì)算機(jī)的能夠讀取這些指令,那么在原始軟件的控制下我們就能運(yùn)行上述媒介上的程序。
現(xiàn)在的計(jì)算機(jī)大部分是在啟動(dòng)時(shí)從硬盤讀取第一條操作系統(tǒng)指令,當(dāng)然這之前還有很多工作要做:必要的自檢等。
所以,第一個(gè)軟件準(zhǔn)確的來(lái)說(shuō)應(yīng)該叫“固件”更確切。因?yàn)橹蟮能浖\(yùn)行在計(jì)算機(jī)上必須通過(guò)這個(gè)“固件”,而除去這個(gè)固件來(lái)說(shuō)的第一個(gè)軟件,它們都不是真正意義上的第一個(gè)。
很久以前,在電子計(jì)算機(jī)誕生之前,計(jì)算機(jī)這個(gè)角色是由(女)人來(lái)扮演的。大多數(shù)計(jì)算都是由人類女性手工完成的
在之后是真空管。這些真空管有一個(gè)有趣的特性:用三個(gè)針腳可以控制真空管兩端節(jié)點(diǎn)的電流。這使得真空管在處理模擬信號(hào)方面是可行的,真空管可以控制機(jī)器和傳輸模擬信號(hào)。
人們使用這種理論構(gòu)建了一些機(jī)械式計(jì)算機(jī),但是由于機(jī)械計(jì)算機(jī)的速度太慢而且成本高昂,所以沒(méi)有真正的應(yīng)用。
在這之后,人們意識(shí)到,真空管可以當(dāng)做門,來(lái)執(zhí)行布爾運(yùn)算。電子計(jì)算機(jī)變得可行,而這樣就開(kāi)始了電腦的時(shí)代。
現(xiàn)在,電子門的工作方式是由開(kāi)關(guān)驅(qū)動(dòng)。假設(shè)你在一個(gè)電路中連接一堆門,你當(dāng)然也可以添加一些門,于是乎你得到一個(gè)加法器。每個(gè)加法器有一堆開(kāi)關(guān)代表著將要添加的第一個(gè)數(shù)字,另一對(duì)開(kāi)關(guān)代表著要添加第二個(gè)數(shù)字。打開(kāi)某些開(kāi)關(guān),并關(guān)閉其他開(kāi)關(guān)以輸入兩個(gè)數(shù)字,輸出將顯示兩個(gè)數(shù)字的總和[1]。
原始 CPU 就是許多這樣的電路的集合。
每個(gè)電路需要一些二進(jìn)制的輸入,通過(guò)二進(jìn)制指令代碼來(lái)選擇要激活的電路。在早期,人們通過(guò)切換開(kāi)關(guān)來(lái)操作。
因此,早期的計(jì)算機(jī)通過(guò)翻轉(zhuǎn)開(kāi)關(guān)進(jìn)行編程。
請(qǐng)注意,此時(shí)計(jì)算機(jī)已開(kāi)始編程,但沒(méi)有出現(xiàn)編程語(yǔ)言。
順便說(shuō)一下,在操作那些開(kāi)關(guān)的人都是被稱為「computer」的女人。所以,這些女人都是最最最最早的程序員。
接下來(lái)是固態(tài)晶體管,其提供與真空管相同的功能,但它們更小,更便宜并且持續(xù)更長(zhǎng)時(shí)間。所以電腦變得越來(lái)越便宜,越來(lái)越廣泛。
由于操作員(程序員)不得不坐在終端前,打開(kāi)閉合開(kāi)關(guān),非常不方便,所以后來(lái)又發(fā)明出了穿孔打卡的方式,能夠更簡(jiǎn)單方便地切換開(kāi)關(guān)。
所以,打孔的卡上面有很多排線,每條線都有可以打的孔。這些線和開(kāi)關(guān)相互匹配。
現(xiàn)在開(kāi)始,不在天天操作那些乏味的開(kāi)關(guān)了,改為程序員們?nèi)ゴ蚩琢恕?/p>
每一條線都代表著不同的指令。有個(gè)機(jī)器,可以連接到計(jì)算機(jī)讀取這些指令。
就這樣,我們可以在打孔卡上面寫程序啦。這減少了相當(dāng)多的工作,寫一個(gè)卡片能使用相當(dāng)久,也避免了重復(fù)造輪子。
因此,當(dāng)程序員開(kāi)始在卡片上寫這些程序時(shí),人們開(kāi)始構(gòu)建程序庫(kù)(libraries)。隨著時(shí)間的推移,大部分的程序漸漸的有了一些規(guī)則手冊(cè)來(lái)指導(dǎo)編寫。雖然比之前手動(dòng)開(kāi)關(guān)方便了太多,但還是很繁瑣。
這時(shí)候,天才格雷斯·霍珀(Grace Hopper)姐姐,想出了一個(gè)很棒的點(diǎn)子。
她的想法是革命性的飛躍。
她最大的貢獻(xiàn)是發(fā)明了世界上第一個(gè)編譯器 (Compiler),名字叫做 A-0。當(dāng)時(shí)是沒(méi)有任何組合語(yǔ)言及程序語(yǔ)言存在的,所有的程序設(shè)計(jì)人員都要把程序翻譯成機(jī)器碼,01101010110 這樣的形式,在紙上打孔,再送到機(jī)器里去讀。
Grace 產(chǎn)生了一種想法,她想設(shè)計(jì)一種程序,讓人可以用類似英文的語(yǔ)法,把想做的事寫下來(lái),然后用這個(gè)程序把英文翻譯成機(jī)器的語(yǔ)法,交給機(jī)器去執(zhí)行。這個(gè)想法就是今日的 Compiler (編譯器)。
A-0 的原理是:編譯程序把穿孔卡加載到計(jì)算機(jī)中。然后編寫的程序?qū)⒈凰腿胗?jì)算機(jī)。計(jì)算機(jī)會(huì)吐出另一組包含機(jī)器代碼的卡片。第二組卡片將被裝入計(jì)算機(jī),計(jì)算機(jī)就可以執(zhí)行這段新的程序了。
再說(shuō)個(gè)趣事,知道為什么叫做「編譯」么?正常來(lái)說(shuō),應(yīng)該叫做翻譯吧?正常來(lái)說(shuō),compiling 這個(gè)詞意味著有序的放置收藏,例如編譯音樂(lè)集。但是編譯和二進(jìn)制代碼有什么關(guān)系呢?
因?yàn)榘?,Grace 姐姐把它描述為收集子程序的機(jī)器代碼[2],邏輯上類似于你編譯音樂(lè)收藏。
編程語(yǔ)言因?yàn)榫幾g器而迎來(lái)了曙光。雖然只是科技史上的一小步,但是真的是革命性的,改變了人類對(duì)于編程的思考方式。它創(chuàng)造了抽象的思維方式。這意味著他們可以在更高的層次上思考。這改變了人們對(duì)如何編寫程序的想法。
A-0 編譯器是大量編程語(yǔ)言的開(kāi)始,大多數(shù)現(xiàn)代編程語(yǔ)言都可以追溯到 A-0。
這是編程語(yǔ)言的始祖。
聯(lián)系客服