軟件是用編程軟件編的,編程軟件又怎麼來的?

軟件是用編程軟件編的,編程軟件又怎麼來的?
10 個回答
Hess1163173093
2017-10-27

我來回答吧!正好我硬件軟件水平都達到了專家水平。相信看完我解釋後大家都明白了。

軟件=(程序)=(算法+自動控制);編程軟件是編寫記錄生成軟件的工具。

如果把軟件當做一個產品比如刀這個產品,那麼編程軟件就是生產這把刀錘子和爐具,最開始生產刀的工具很原始,所以第一把刀是石頭的,人們用這把刀除了殺野獸,也可以挖土,從而讓人們有了第一個鍊鐵的土爐。從這個土爐人們生產出了第一把青銅鐵刀。。。。

軟件和編程軟件也是一樣,最開始人們生產音樂盒,天文觀測臺都是靠木匠師傅的工具來製作具有簡單程序的音樂盒及時鐘。。。。隨著科技的發展出現了半導體,人們開始用半導體搭建一些簡單功能程序的產品,比如打孔機,手搖計算器等,當然那個時代編程軟件還不是自動的還是要靠人們手工製作,程序過程記錄在紙上,保存這些程序需要大量的紙張和房間。

後來出現了集成電路,集成電路出現了有記憶功能的存儲器,這就代替了紙張把程序存在了半導體內,後來出現了硬盤,硬盤就更能存儲更多程序數據了。給予硬件的發展,編程工具慢慢就從圖紙手繪轉入了電腦繪製了,電腦裡也就開始出現了簡單的編譯器。

原始的軟件編程是,人們在text裡按規則寫好程序,然後通過一個asm編譯器將文本轉譯成機器碼,這個機器碼再通過下載工具下載到存儲器裡或者卡帶裡,然後CPU讀取卡帶開始自動運行程序,人們為了開發更高級的更自動的軟件,又開發出功能更多的編程軟件,在編程軟件裡可以寫代碼,編譯等而不需要像最初那樣在text裡寫,並且編程軟件有糾錯功能,text是沒有的.....

所以軟件可以促進編程軟件的升級,編程軟件又可以開發出更高級智能的軟件。編程軟件和軟件互相促進從而達到了今天的水平。後面所謂的AI就是讓擁有高度智能軟件的機器人擁有自我編程能力,一旦機器人擁有自我編程能力那麼機器人將能脫離人類自我發展。

如果還有不明白軟件和編程軟件的人可以私我。抬槓的請繞道,沒時間抬槓。

我刚刚分手
2017-10-26

謝邀,我開始學JAVA的時候也想過這個問題,很遺憾,老師當時並沒有解答我。

第一個編程軟件怎麼來的?

你能有這種想法就很不錯,有些人活了一輩子,從來沒想過1+1為什麼=2

我不太懂,隨手摘抄,稍微編輯下,希望對你有幫助,侵權聯繫我。

首先,軟件和硬件在邏輯功能上是可以等價實現的,能夠用軟件實現的自然可以固化成為硬件

那麼最初的“夏娃”——原始軟件,它是固化成硬件,我們一般稱之為“固件”,這一固件必須通過“硬佈線”,直接在電路板上操作刻錄。

軟件是用編程軟件編的,編程軟件又怎麼來的?

有了這最基本的“軟件”,當我們將一組指令電平信號輸入電路時,根據電平的電壓,電路在這一“軟件”的控制下進行不同的開通閉合電路,整體形成一個有序的操作,宏觀上就表現出我們所見的軟件形式。

軟件是用編程軟件編的,編程軟件又怎麼來的?

值得注意的是這個原始軟件它不一定就包含第一個編譯程序,因為我們可以根據具體計算機的指令,預先將這些指令的電平表示先行刻制在光盤、軟盤、硬盤等等,只要計算機的能夠讀取這些指令,那麼在原始軟件的控制下我們就能運行上述媒介上的程序。

現在的計算機大部分是在啟動時從硬盤讀取第一條操作系統指令,當然這之前還有很多工作要做:必要的自檢等。

所以,第一個軟件準確的來說應該叫“固件”更確切。因為之後的軟件要運行在計算機上必須通過這個“固件”,而除去這個固件來說的第一個軟件,它們都不是真正意義上的第一個。

很久以前,在電子計算機誕生之前,計算機這個角色是由(女)人來扮演的。大多數計算都是由人類女性手工完成的

軟件是用編程軟件編的,編程軟件又怎麼來的?

在之後是真空管。這些真空管有一個有趣的特性:用三個針腳可以控制真空管兩端節點的電流。這使得真空管在處理模擬信號方面是可行的,真空管可以控制機器和傳輸模擬信號。

人們使用這種理論構建了一些機械式計算機,但是由於機械計算機的速度太慢而且成本高昂,所以沒有真正的應用。

在這之後,人們意識到,真空管可以當做門,來執行布爾運算。電子計算機變得可行,而這樣就開始了電腦的時代。

現在,電子門的工作方式是由開關驅動。假設你在一個電路中連接一堆門,你當然也可以添加一些門,於是乎你得到一個加法器。每個加法器有一堆開關代表著將要添加的第一個數字,另一對開關代表著要添加第二個數字。打開某些開關,並關閉其他開關以輸入兩個數字,輸出將顯示兩個數字的總和[1]。

原始 CPU 就是許多這樣的電路的集合。

每個電路需要一些二進制的輸入,通過二進制指令代碼來選擇要激活的電路。在早期,人們通過切換開關來操作。

因此,早期的計算機通過翻轉開關進行編程。

請注意,此時計算機已開始編程,但沒有出現編程語言。

順便說一下,在操作那些開關的人都是被稱為「computer」的女人。所以,這些女人都是最最最最早的程序員。

接下來是固態晶體管,其提供與真空管相同的功能,但它們更小,更便宜並且持續更長時間。所以電腦變得越來越便宜,越來越廣泛。

由於操作員(程序員)不得不坐在終端前,打開閉合開關,非常不方便,所以後來又發明出了穿孔打卡的方式,能夠更簡單方便地切換開關。

軟件是用編程軟件編的,編程軟件又怎麼來的?

所以,打孔的卡上面有很多排線,每條線都有可以打的孔。這些線和開關相互匹配。

現在開始,不在天天操作那些乏味的開關了,改為程序員們去打孔了。

每一條線都代表著不同的指令。有個機器,可以連接到計算機讀取這些指令。

就這樣,我們可以在打孔卡上面寫程序啦。這減少了相當多的工作,寫一個卡片能使用相當久,也避免了重複造輪子。

因此,當程序員開始在卡片上寫這些程序時,人們開始構建程序庫(libraries)。隨著時間的推移,大部分的程序漸漸的有了一些規則手冊來指導編寫。雖然比之前手動開關方便了太多,但還是很繁瑣。

這時候,天才格雷斯·霍珀(Grace Hopper)姐姐,想出了一個很棒的點子。

軟件是用編程軟件編的,編程軟件又怎麼來的?

她的想法是革命性的飛躍。

她最大的貢獻是發明了世界上第一個編譯器 (Compiler),名字叫做 A-0。當時是沒有任何組合語言及程序語言存在的,所有的程序設計人員都要把程序翻譯成機器碼,01101010110 這樣的形式,在紙上打孔,再送到機器裡去讀。

Grace 產生了一種想法,她想設計一種程序,讓人可以用類似英文的語法,把想做的事寫下來,然後用這個程序把英文翻譯成機器的語法,交給機器去執行。這個想法就是今日的 Compiler (編譯器)。

A-0 的原理是:編譯程序把穿孔卡加載到計算機中。然後編寫的程序將被送入計算機。計算機會吐出另一組包含機器代碼的卡片。第二組卡片將被裝入計算機,計算機就可以執行這段新的程序了。

再說個趣事,知道為什麼叫做「編譯」麼?正常來說,應該叫做翻譯吧?正常來說,compiling 這個詞意味著有序的放置收藏,例如編譯音樂集。但是編譯和二進制代碼有什麼關係呢?

因為啊,Grace 姐姐把它描述為收集子程序的機器代碼[2],邏輯上類似於你編譯音樂收藏。

編程語言因為編譯器而迎來了曙光。雖然只是科技史上的一小步,但是真的是革命性的,改變了人類對於編程的思考方式。它創造了抽象的思維方式。這意味著他們可以在更高的層次上思考。這改變了人們對如何編寫程序的想法。

軟件是用編程軟件編的,編程軟件又怎麼來的?

A-0 編譯器是大量編程語言的開始,大多數現代編程語言都可以追溯到 A-0。

這是編程語言的始祖。

犍为真人
2017-10-26

用一句話回答就是:軟件是用編程軟件編的,那麼編程軟件同樣是用編程軟件編的。

編程軟件有很多功能,包括編輯、編譯、調試、解釋、測試等等。為簡單起見,我們這裡只討論編譯功能。不嚴格地說,編譯可以理解為是將人類能看懂的程序代碼翻譯成機器能看懂能執行的機器語言。如果是Windows上寫C程序,那編譯器的作用就是將C程序翻譯成exe後綴的二進制文件(也可能是dll,這裡不去深究)。

那麼編譯器本身也是exe,也是機器語言,它又是誰編譯出來的呢?不失一般性,我們假設有一個編寫C語言的編程軟件,或者就直接叫編譯器,它的名字是cl。有一個很好玩的事實,編譯器可以自己編譯自己。說的具體點,cl3.0版本可以用cl2.0版本編譯生成出來,cl2.0用cl1.0編譯出來。當然前提是假設這個cl2.0以上都是用C語言寫的源程序。所以說有了第一個cl版本,1.0版本,後面的都不是事。

現在問題來了,第一個cl.exe怎麼來的呢?有很多可能。說不定當時市面上已經有了另一款C語言編譯器,而第一個cl如果是用C語言開發的,它當然就可以用那款C編譯器編譯出來。

而如果假設cl本身就是世界上第一個C語言編譯器,怎麼破?那麼它肯定不可能也是用C語言寫的,因為第一個嘛,還沒有誰能編譯C語言程序。第一個C語言編譯器可以用匯編,或者B語言,或者其他的某種已經有編譯器的語言編譯出來。至少用匯編是絕對沒有問題的。

接著思考,第一個彙編程序怎麼來的?那就沒有辦法了,靠手寫了,人工寫機器語言。而在那個時候,程序是非常短小的,用人工寫也不會是太複雜。彙編程序就是把彙編語言翻譯成機器語言的程序。比方說一句彙編指令,叫做mov ax,bx,翻譯成機器語言就是1000100111011000。簡單吧。基本上接近一一對應,至於如何對應,就要查CPU廠商的硬件手冊。比如因特爾386,比如酷睿i7。只要手工寫出一段用二進制形式的機器語言,能實現將彙編語言翻譯成等價的機器語言,就搞定了。當然這不是一兩天能搞定的,但是一旦寫好,後面的事就簡單了。有了第一個彙編程序,就能彙編出第一個C語言編譯器,有了第一個C語言編譯器,就能編譯出第二個第三個其他的C語言編譯器。有了C語言編譯器,還可以編譯出其他語言,比如JAVA、C#的編譯器。

圆播软硬
2017-10-27

回答這個問題,先看一下第一個編譯器是怎麼回事吧。早期的電腦,採用的是真空管組成門電路,輸入是靠人手去打開和閉合開關,做不了稍複雜的邏輯,又慢又累,這時候程序員的工作是控制開關。後來發明出了穿孔打卡的方式,對人手是一個解放。程序員們的工作是打孔。這減少了相當多的工作,寫一個卡片能使用相當久,也避免了重複造輪子。當程序員開始在卡片上寫這些程序時,人們開始構建程序庫(libraries)。隨著時間的推移,大部分的程序漸漸的有了一些規則手冊來指導編寫。雖然比之前手動開關方便了太多,但還是很繁瑣。這時候出現了世界上第一個編譯器 (Compiler),名字叫做 A-0。由格雷斯·霍珀(Grace Hopper)發明。原先打孔的方式,紙帶上要打的內容為機器碼,程序員要對每一個碼的意思非常瞭解,才能編寫或看懂這段代碼的意思,而這些碼是指導電腦運行的,並不符合人的思想邏輯。如果讓程序員寫一段人類看得懂的語句,這段語句做成紙帶卡片,在電腦上運行,電腦運行後會輸出另一組包含機器代碼的卡片,輸出的這個卡片,是電腦真正需要輸入的打孔的卡片。編程語言因為編譯器而迎來了曙光。雖然只是科技史上的一小步,但是真的是革命性的,改變了人類對於編程的思考方式。它創造了抽象的思維方式。這意味著他們可以在更高的層次上思考。這改變了人們對如何編寫程序的想法。

軟件是用編程軟件編的,編程軟件又怎麼來的?

再看看現在的編譯器是怎麼做的。例如Java編譯器,最早是James Gosling用C寫的一個Oak編譯器,後來Arthur van Hoff用Oak自身重寫了一個Oak的編譯器”。用C寫的版本編譯用Oak寫的版本就得到了一個可以運行的用Oak寫的版本的編譯器,這樣就完成了自舉(bootstrap)。這句話不好理解,請仔細體會。現在在build OpenJDK的時候需要事先有一個可以運行的JDK,就是因為javac是用Java寫的,至少要用已有的JDK去把新的javac編譯了之後才可以用新的javac去編譯JDK的其餘部分。

所以回答題主的問題,編程軟件也是一種軟件,他是由另一種或另一個版本的編程軟件編譯出來的。

有朋友問我軟件和硬件之間的底層是如何聯繫起來的。這個問題我想用簡單的單片機來回答,因為可以省略很多東東,嘿嘿。首先,CPU運行的是機器碼,加入單片機上電覆位之後,指針會指向特定的地址,就是程序開始運行的地址,在這個地址內,CPU會獲取這裡放的機器碼,假如這個機器碼是10101010B,CPU解析這個是跳轉,他會控制指針順序下移,再繼續獲取下2個地址的數據,如果發現是00100000B,00010000B,那麼它會控制指針繼續跳轉到2010H這個地址,讀取這個地址的機器碼,繼續運行。代碼中的運算、跳轉、條件判斷,對CPU來說只是獲取到不同的機器碼之後進行不同的處理而已。當然就算是單片機這個過程還是有很多特殊的,例如中斷產生的處理,CPU睡眠的處理,控制IO讀取IO等。在單片機內的機器碼一般是需要程序員灌進去或者演模生產時批量灌進去,機器碼是彙編代碼或者C語言通過編譯程序產生的。如果是以單片機來說,硬件的底層在設計之後就按固定的規則去執行,軟件是在硬件執行過程中引導硬件執行過程。如果是電腦的軟件和硬件之間,大道理是相同的,但是電腦啟動之後,由boot程序引導下去運行操作系統,程序員的程序是在操作系統基礎上運行的。

胡同老王
2017-10-27

首先樓主想要明白這個問題的答案,那麼就要先糾正一下不能叫編程軟件編的。程序是由語言所編寫的,語言是由編譯器編譯或解釋器解釋的。何為編譯或解釋?我們先要了解程序我們在這裡可以粗俗的理解成數據交換和傳遞的容器。最早程序裡的數據傳遞就是1010二進制的(具體可補充計算機原理知識和ASCII碼相關知識),但1010實在不方便人類可讀可知,後來各個芯片廠商就推出一個接口語言可以操作芯片裡的寄存器進行數據的交換和計算,我們統稱操作這類CPU芯片接口語言叫做彙編語言。他們是除了二進制最貼近底層的人類可讀的語言。再後來由於芯片廠商不斷增加芯片種類不斷增加,為了方便,就有人寫了一個語言,並可以將這個語言中表示的內容轉換成當前芯片上的彙編語言。這個轉換的動作就叫做“編譯” 而這個語言就叫做“C”。再後來就是基於C系列的派生語言(這裡只說C系的),這類語言會有“對象”這類的高級概念,它們會自身先編譯或解釋成C語言由C語言再轉換成彙編去執行。這類語言統稱為“高級語言”也就是大家接觸最多的。如Python Go Java等。目前世面的程序都是由高級語言或C這類的語言寫出來的。over

AdolfHitler27695485
2017-10-26

這你得看一下計算機發展史,首先是出現了機械計算機,齒輪的,十進一再回彈那種,但是不夠用啊,只有加減,於是一幫小二缺想法把乘除也做裡面,這傢伙,做出來一個計算機跟公交車那麼大,但是還不夠,算不了公式,這時候,紙帶卡出現了。有人就通過紙帶卡卡住一些齒輪啊什麼的,能使機器做想要的運算法則。

這時候,有個哥們發現了二極管,臥槽,好使,用高端的機械計算機原理用二極管造了個電子計算機,但是怎麼控制運算,就是沒紙帶卡了咋辦....這時候01出現了(主要是二極管只能是開或者關,就倆方向。說01也好,說57也好,找倆代表)用基礎的01做紙帶卡,給它個複雜的公式,算得更高端一些。

其實就是在控制二極管,信號輸入後哪些二極管開,哪些二極管關,電流到最後給了個結果。但是公式越來越多....不好辦吶,全是卡,這換卡我得累死。於是CPU出來了,寫死的,也可理解為硬件電路就只能這樣,然後配合硬件電路有一個指令集,每個CPU指令集肯定不一樣,和硬件二極管開關有直接關係。也就是你見過的dir什麼的,當電路碰到比如說look這個詞其實碰到了代表look的一堆010100101010,但是電流通過硬件讀出的010010100101001這些得到的結果就是look,當然多數你沒見過,因為軟件都在指令集上層,一般也看不到。

你說的編程軟件,就是寫一些字母以及背後的01010010100讓二極管電子計算機去計算得到一個結果,基本都能直接調用到指令集,也就是公式,固定了。你就在這麼一個框架內用它給你的不多的公式來編纂出你想要的結果的公式。

偶這麼講不知道你聽懂沒聽懂...

Migod
2017-10-26

晶體管,開關——>機器碼(二進制指令,用打孔控制開關)——>彙編語言(已經有了彙編編譯器,將其轉換成二進制機器碼)——>中級語言(C語言等,經編譯器編譯成可執行代碼)——>高級語言(高級語言編譯器或解釋器出現,直接將需要翻譯成可執行的二進制代碼)大概就這樣。各種編譯器配合運行庫都是由更原始的語言或代碼來開發的程序,後期升級之後,可能把編譯器,翻譯器改由更高級的語言重新編寫過,並實現更多功能。於是有了各種版本的編程軟件。甚至很多編程軟件可以同時使用多種語言來編寫軟件。比如操作系統需要同時使用匯編語言和C語言。

吃烧烤的企鹅
2017-10-27

軟件是用編程軟件編的,編程軟件又怎麼來的?

寫軟件的軟件是用編譯器做開發出來的。編譯器也是一種軟件,當時它與硬件聯繫的非常緊密,可以說不懂cpu的構造,是做出不編譯器的。編譯器這個軟件較特殊,不要看他簡陋粗糙,它是把晶體管二進制數碼翻譯為軟件的重要橋樑。編譯器再向底層走,那就是各種邏輯譯碼器了,比如最常見的3-8譯碼器啦、8421BCD譯碼器啦、格雷碼譯碼器啦,這些譯碼器再往底層走,那就要用到鍵盤這個關鍵的IO交互設備了。需要提及的是,這個鍵盤可不是你現在電腦上用的鍵盤,是一種廣義的IO交互設備,最初的鍵盤只有計算器那麼簡單。最後,通過特定的數學編碼,那麼在鍵盤上按相應的操作就可以實現所需功能,這個所需功能複雜化那麼就是軟件了。可能我說的有點亂。最後再說兩點輔助理解,1)數碼管和撥碼開關本身是不具備任何顯示信息功能的,但是通過特定的線路排列,加電後,撥通某個對應開關就能顯示0-9數字,那麼此時撥碼開關就相當於鍵盤,線路排列過程就相當於編譯過程,0-9數字就相當於一個最簡單的軟件了;2)想用一個俗語來形容一下0-1二進制數是怎麼變革為複雜軟件的,這個俗語就是“羅馬不是一天建成的”“冰凍三尺非一日之寒”,因為我們沒有出生在60年代,所以對計算機的發展沒有那麼清楚。最初的軟件、硬件非常簡單,正是由於這些簡單的東西,相互不斷地發展促進了對方的複雜化,才有了今天豐富的互聯網計算機世界。


軟件是用編程軟件編的,編程軟件又怎麼來的?

軟件是用編程軟件編的,編程軟件又怎麼來的?

海底核电站
2017-10-27

假如你經歷過紙帶時代,z80等計算機原理必用的單板機,就應該搞得明白編程軟件怎麼來的。

簡單地說是從撥開關開始一步一步發展來的。

首先,計算機硬件只認機器碼,就是一個體系的計算機只認它硬編好的機器碼——指令,例如定義:01011001=寄存器相加,後面跟兩個表示寄存器的數就行……;一堆不同的指令組成指令集,例如x86,arm什麼的。硬件廠商為了寫程序的方便,把這樣機器碼用人好理解的簡寫詞來表示它,叫助記符,例如上面這個可以用add表示,例如:add r5, r6 對應的機器碼可能是:01011001 00010101 00010110,你都記住指令集了,原理上通過幾個開關就可以把指令輸入給計算機,但……人總是很懶的,不停開關總是很麻煩很枯燥很容易出錯,而且計算機運行再慢也比你按開關快,開始時硬件還巨貴,所以人們想到輸指令和錄入分離,便宜簡單的方法就是紙帶機,“編程序”的可以通過打孔機在紙帶上打洞洞表示一串串指令及數據,打好後通過紙帶機讀入到計算機執行,計算結果再通過打孔機打到紙帶上,程序猿判讀結果……。

初期的計算機基本就是這樣工作的,會編這些機器碼的自然就是“編碼”了,就是現在說的程序員。

漸漸地,人們在實際工作中不斷開發出各種外圍設備,例如鍵盤,顯示器,磁帶機,磁盤機,打印機等。工具的進步又帶動編碼方式的進步,編的碼越來越複雜,這樣就不能讓人一個機器碼一個機器碼地往裡敲,計算機做重複的事情畢竟快嘛,固定的東西不犯錯,所以就有人用紙帶機什麼的編出一些可以把助記符序列轉成機器碼的程序,可以理解成彙編語言編譯程序,有了這個東西就可以用匯編寫程序,再由編譯程序翻譯成機器碼,編程語言就從簡單到複雜不斷迭代發展,例如蓋茨在最早時就是用紙帶機寫出個人機的basic解釋器的。

現在不少人總認為彙編語言是由機器語言寫的,所謂“中級”語言是由彙編寫的,“高級”語言又是由“中級”語言寫的……其實這是烏有的事,用任何一種語言都可以寫出其它語言的翻譯器,沒錯,任何語言都行,只要你夠牛,用解釋型basic寫一個c編譯器沒任何問題,同樣,你腦子有夠用的話用機器碼也可以寫一個。

現在的巨無霸級“開發系統”,沒十G八G都不好意思出門,無他,這都是幾十年積累來的。

范帅专一
2017-10-27

你說的編程軟件一般指IDE,例如vs2010,eclipse等。IDE只是編程軟件的外殼,外殼的實現沒有太大的難度。什麼編程語言都可以實現。核心部分是編譯器,不的的編程語言有不同的編譯器或解釋器,例如java虛擬機,gcc等。編譯器一般是c語言實現的,c語言是底層編程語言,同樣是最古老的編程語言之一。世界上第一個c需要編譯器可能是彙編語言實現的,彙編語言是機器指令的符號描述。機器指令是cpu的核心,也是硬件和軟件聯繫的橋樑,不同的cpu支持不同的指令集,以至於形成不同的指令架構,如x86架構,arm架構等。機器指令用二進制描述,所以彙編語言出現之前,程序運行都是直接輸入機器指令,就是一系列的0和1,這個設備叫紙帶機,上面有一系列小孔,有孔代表0,沒孔代表1,完成機器指令輸入。

相關推薦

推薦中...