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

軟件是用編程軟件編的,編程軟件又怎麼來的?
10 個回答
数通畅联
2019-06-06

首先要明確幾個概念,計算機語言、軟件和開發平臺,計算機語言是軟件開發的基礎,通過計算機語言才能實現和計算機硬件的通訊,實現對硬件的操作,一般計算機語言分為低級語言和高級語言,低級語言如:機器語言、彙編語言,可以直接操作硬件,速度快,但是編寫和理解困難;高級語言如:C、C++、JAVA等,需要通過編譯轉換為機器語言實現對硬件操作,速度慢,但是更便於理解。

軟件是通過計算機語言開發的,通過對計算機硬件的操作而實現某些功能的計算機程序的集合體,如:手機APP、PC端的應用、網站,甚至操作系統等都是軟件。

一般所說的編程軟件都是指的開發平臺,也被稱為IDE(集成開發環境),它的主要作用是通過集成一些開發常用的環境或者工具來提升軟件開發的效率,如JAVA開發必須的JDK等。

所以說軟件的基礎是計算機語言,通過計算機語言結合一系列的算法從而實現對計算機硬件的操作,實現某些功能,而開發平臺只是將代碼的編輯過程進行了簡化,使其更符合開發人員的思維邏輯。開發平臺本身也是一個軟件,也是通過某種計算機語言來寫的,並且很多開發平臺都是支持多語言的,如eclipse平臺,除了支持JAVA開發,還支持C/C++、PHP、Python等,甚至可以開發eclipse自身的插件。

路飞写代码
2019-06-07

很高興回答這個問題,我是路飛寫代碼,前端工程師,歡迎關注我,帶你一起長知識。

從這個問題,我大致可以知道,可能你在電腦知識方面不是很精通,或者說平時的工作和這些都沒有關係。不過這個也是大多不接觸編程的人的困惑。

編程軟件也是編程語言進行編碼實現的

以我目前的前端來說,我的編程開發軟件是Visual Studio Code,我通過這個軟件寫我的前端代碼,那麼開發Visual Studio Code的是怎麼來的呢,當然也是編程軟件實現的。Visual Studio Code就是由Electron來進行開發出來的,那麼Electron是一個可以用JavaScript,HTML,CSS來構建跨平臺安裝的桌面應用。所以我用的編程軟件vscode是electron來進行編寫的,那麼electron這個編程軟件又是怎麼來的呢,當然也是通過另一個編程軟件來實現的。

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

不刨根問底,我們只追溯到C語言

那麼這些編程軟件層層開發實現,那麼最終的那款到底是什麼呢,答案就是C語言。我們這兒不討論彙編機器語言。C語言給我們提供了操控硬件的相關api接口,同時也有調用UI的接口,這樣我們就可以構建一個桌面應用通過C語言,那麼這就可以開發各種各樣的編程軟件來實現各個行業的編程。所以編程軟件當中又可以開發其他的編程軟件來簡化編程,這樣又極大的促進了另一個領域的發展。所以目前這麼多編程軟件都是由C派生出來的,才造就了科技這個大千世界。

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

總結一下就是編程軟件也是編程軟件編寫的,我們的所有的應用都是構建在一個基礎API之上,然後才有了豐富的應用層。

我是路飛寫代碼,前端工程師,歡迎關注我,帶你一起長知識。

犍为真人
2019-10-27

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

編程軟件有很多功能,包括編輯、編譯、調試、解釋、測試等等。為簡單起見,我們這裡只討論編譯功能。不嚴格地說,編譯可以理解為是將人類能看懂的程序代碼翻譯成機器能看懂能執行的機器語言。如果是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#的編譯器。

河北省比利
2019-06-06

把自舉吹得太神了吧。這個東西容易給你造成一個假象,好像是c創造了c。其實不論如何,最初的編譯規則必須用其他語言(或者極端的說連彙編都不用,直接寫機器碼)做載體才能造出編譯器。換句話說,c的編譯器最初就是利用其他語言寫成的編譯器來生成的,好繞。。。。。其實也不用想太複雜,任何語言都可以自舉,編譯器本質上都是一堆機器碼,能自舉則說明編譯器的機器碼特徵符合語言作者定義的編譯規則。java也能自舉啊,但是那樣的話jvm的機器碼特徵就必須要符合jvm自己的編譯規則,可想而知那樣的話jvm效率有多低。所以,如果一門語言適合自舉,則說明其編譯後的機器碼效率高,較為貼近底層,這不是“能或不能”自舉的問題。

圆播软硬
2019-10-28

回答這個問題,先看一下第一個編譯器是怎麼回事吧。早期的電腦,採用的是真空管組成門電路,輸入是靠人手去打開和閉合開關,做不了稍複雜的邏輯,又慢又累,這時候程序員的工作是控制開關。後來發明出了穿孔打卡的方式,對人手是一個解放。程序員們的工作是打孔。這減少了相當多的工作,寫一個卡片能使用相當久,也避免了重複造輪子。當程序員開始在卡片上寫這些程序時,人們開始構建程序庫(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程序引導下去運行操作系統,程序員的程序是在操作系統基礎上運行的。

花谢风尘3
2019-10-28

作為一個程序員,我來回答一下。軟件由編程軟件來寫的,那麼編程軟件呢?編程軟件也是由軟件寫的。只是,第一個軟件是怎麼出來的的?這樣給你解釋,為什麼有軟件?其實是計算機構造出來的,計算機通過電信號高低,也就是010101這樣的電信號,然後有了最初的軟件,簡單點說就是:程序是建立在硬件的基礎上產生的,現在的編程軟件,其實也是告訴計算機01010101001這樣的信號,然後計算機硬件將它們拼裝成文字,圖片,程序等,所以總結一下,編程軟件通過硬件的支持,創造了我們使用的程序和其他的編程軟件。

不知道這樣解釋大家有沒有明白。

虎虎虎00000
2019-10-28

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

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

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

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

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

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

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

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

影魔很黑
2019-10-28

為了簡化問題咱們可以這麼理解:軟件是用編程軟件編的,編程軟件是用別的更低級的編程軟件編的,那麼這樣追溯下去,最源頭最低級的編程軟件,就是由01組成的二進制機器語言,這是實際上計算機硬件真正認識的語言。

我們可以做個類比:汽車是車床生產的,那車床是什麼生產的?對了,車床是由比他更低級的車床生產的,追溯下去,最早最源頭的車床怎麼產生的呢?是由打鐵匠一錘子一錘子砸出來的。這個時候完了嗎?沒有,還得繼續問第一個鐵錘子是怎麼來的……

就是這個道理。簡單工具創造複雜工具,簡單語言(程序)創造複雜語言(程序)。

三万公尺
2019-11-03

看了一下“專家”們寫的答案,看得暈頭巴腦,搞不清楚。還是我這個小白稍微解釋一下,可能眾小白更容易理解一些吧。

硬件,操作系統,編程程序,應用程序,他們從低到高,一層是上一層的基礎,雖然不夠嚴謹,但對於小白這麼理解ok了。

硬件就是啥cpu,總線,硬盤,輸入輸出設備,他們是真正幹活的苦力。操作系統是大管家管理所有資源,對下控制硬件,對上承接軟件;把軟件想幹的事情控制硬件來完成,也可以說給軟件提供相應的硬件資源(內存,cpu運算力等等)。而編程的程序說白了也只是一種應用程序,每個應用程序其實有其作用;例如word程序是編word文檔的,有的程序是可以打遊戲的,而編程的程序是專門把輸入的文本信息(按照各自的編程規範)轉化為操作系統可以識別執行的程序(例如在windows下就是exe或者com程序)。那麼編程序的語言有什麼呢?其實只是編程的一套規範,操作系統能認識並可以轉換為可執行的程序就好。


不知道我說清楚沒,我是小白,這是我自己的理解。不對勿噴!

小周72052558
2019-10-31

這個問題問的有意思,這個可以這樣類比,人是人他媽生的,而人他媽又是怎麼來的?好吧,其實這也是個不那麼理工科的回答,換種回答應該是,誰說軟件就一定是編程軟件編的,就像誰說人一定是人他媽生的,不還可以試管培育嘛!看問題如果看到事物的根本可能就不會有這種疑問了,軟件是由代碼組成的,代碼是一種在計算機環境下約定的一種語言,即交流方式,類比於人類的語言,在人類這個大環境就能表達事物,而各種代碼語言,什麼c,java,python你可以簡單的認為類似各個國家不同的語言,目的都是表達事物,這裡問題中的編程軟件其實是用來記錄和編輯代碼語言的工具,可以簡單類比筆記本,用這樣的工具可以更好地編輯,記錄編程語言,當然很多編程軟件還具備與操作系統交互編譯的功能,這個往淺了說就是翻譯,類比於計算機本身也是個國家,有自己的語言,也需要中間翻譯一下。回到問題本身,編程軟件也是代碼組成的,也可以用另外一個編程軟件(編輯工具)編輯,然後翻譯成計算機能認識的語言運行,所以這個問題本身立題概念就有點問題(當然也是看問題的角度不一樣造成),希望我的回答能給大家帶來點直觀的感悟😃

相關推薦

推薦中...