那麼我想知道那些計算機語言的創始人是如何創造這門語言的?

重點在後面一句好嗎?同學們????????????????

/*好吧我把前一句刪掉了*/


聞道有先後,術業有專攻。有那麼一些人就是覺得學會一個語言是一件很容易的事情,就像有的人隨便練個幾萬盤星際就能當江南狗王一樣。所以題主不要顛倒因果關係,不是人要怎樣才能去發明語言,而是什麼樣的人才去發明語言。


發明C語言的人拿了圖靈獎,他還和他的搭檔一起發明了unix。有些人天生是為人類文明的未來而生的,請不要因為大家長得很像就覺得自己跟他們是同類。


創始人也未必把所有特性一下子都設計好,之所以C/C++標準那麼厚,都是一點一點積累成的


瀉藥,我猜發明C語言的人肯定是覺得機器語言天天寫寫煩了,而且當代碼量上去了很難看,出了bug很難找,於是一狠心一咬牙,鑽到家裡不吃不喝,經過幾天幾夜,C語言這種接近人類語言的東西就被發明出來了


題主你記錯了,只討論語言本身,難以精通的應該只有C++,其他語言本身都不是很複雜,並且C++的前身C front,也就是一個C with classes,現在這麼複雜是逐漸發展過來的

所以單純發明語法這個東西,不是很複雜


你去讀一下KR就知道了,最初的C自身挺單薄的


人家題主都說了重點是這語言怎麼被發明出來?並沒有瞧不起程序員的意思你們別批判題主了!

分割線

~~~~~~~~&


我講講我的理解,開始都是紙帶打孔表示信息,後來有了晶體管,就用高低電位表示信息與邏輯運算算數運算,把高低電位用1 0表示就是我們通常說的二進位,這就是機器語言。 但是操作計算機的人總不能一直用0 1輸進去編寫程序完成任務,那樣工作量太大了,幸好後來的中央處理器封裝了很多簡單英語單詞表示一些常用操作。比如pop 從棧彈出數據。把這些英文字元映射為二進位就是我們常說的各種編碼了,比如utf-8 ascii。不過這是後話了,和本文關係不大暫且不表。這種簡單的英語字元就構成了彙編語言。

可是到了後來,人們發現彙編語言也比較繁瑣複雜,不能夠貼近人類對現實世界的認識,急需另外一種更符合人類語言的程序語言。

先驅們首先創造了各種類型的變數,來表示各種各樣的數據,比如 float double int long char 因為他們的佔用位寬不一樣,不同數據類型運算可能產生意外的結果。

然後用各種關鍵字表示邏輯控制數學運算。比如for break continue / % ~= new delete 等等。

一種貼近人類表達的語言c誕生了!

但是在運用過程中,發現很多難以處理的問題,然後不斷修改優化,比如模板的發明,迭代器,……然後很多常用的功能,例如cout strncopy insert 等等封裝成庫函數讓你可以直接調用。不用自己寫函數。這就相當於程序語言提供的擴展功能。你需要的時候只需要#include&<&>就可以了。

偉大的先驅們發現,對事物的模擬其實可以用對象來表示。用屬性表示一個事物的特徵值,比如人的年齡,性別,姓名。用方法來表示關於它的操作。這樣方便解決問題,更有利於代碼重用。在程序中把需要處理的事物封裝成類,把某個具體事物實例化為對象。她的子集可以繼承她的父類屬性方法,比如學生也是人,學生就可以繼承人作為他的父類。避免代碼重寫。用{}把類裡面的東西封裝起來,避免數據意外更改,只讓自己的方法訪問,維護數據安全性。於是面向對象的程序語言誕生了!

基本上一門語言的誕生過程就是如此,先製造出來比較簡單簡陋,然後在使用中不斷修改擴展。並不是一開始就這麼複雜。其他語言也大同小異吧。編譯器把他們的代碼檢查語法錯誤後鏈接上需要的庫文件轉換成二進位,通過載入器載入到內存中,然後就可以通過控制中央處理器上數以億萬計的電路電位高低來完成相應的處理功能了。


因為他們使用比C語言更難懂的語言寫的C語言,對他們來講發明C語言就是為了更簡單。


松本行弘在訪談中說,他花了六個月才弄好了Ruby的Hello World.


強烈推薦一本書,Masterminds of Programming,是不少語言創造者的訪談錄,相信可以滿足題主。


各種語言當中,C 並不算是難以精通的。任何一門主流語言,都不會是難以精通的,否則就不會成為主流。

計算機領域難以精通東西並不少,比如大型軟體架構、比如低功耗晶元設計、比如機器人視覺、比如虛擬現實、比如自然語言理解……但無論如何不會是一門計算機語言。Knuth的演算法書,自創了一種彙編,所有的演算法都用這個虛擬的彙編實現。他在書里一開頭就說了,掌握一門彙編對計算機學生應該沒有難度。我認為理想的CS本科課程培養計劃,主流編程語言作為任選課,開卷考就行。覺得沒有必要的同學,可以不用浪費時間上課學,課餘自己看看就好。有任選課的時間,學點兒經濟學原理、組織行為學、現代文學之類的開拓下眼界更好。

設計一門能用語言並不怎麼難,設計一門好用的語言,則相對難點兒,設計完了之後獲得大量第三方資源支持,太難了。


創造一門(編程)語言的大致感受……

可以參考一門課叫編譯原理。

其實自從我知道世界上還有萊布尼茨或牛頓這樣的人之後,已經不再對這種問題感興趣了……


因為需要才去創造,一門語言的創造只是以前使用過程的一個規範,總結,並不會憑空產生,毫無緣由的出現


會創造的是一點一點積累 ,語言的創造離不開時間和技術


需要和期望,導致創造,改進,重構~~~


他們喜歡造輪子


可以類比一下圍棋,圍棋的規則相當簡單,但是要精通圍棋也不是一件簡單的事情.

反而複雜性源於簡單的規則的組合.


語言的語法本身並不難,難的都是演算法和數據結構,還有編譯器的實現。


發明圍棋的不一定精通圍棋,但精通圍棋的alpha狗一定發明不了圍棋。


我的世界設計者和搭宮殿的都是人啊。


推薦閱讀:

如何看待某託管在 GitHub 的前端開源項目關閉 Issue 欄目的行為?
為什麼機械硬碟隨機讀取性能和連續讀寫性能差那麼多?
C 語言之美(一)
計算機病毒能夠以毒攻毒嗎?

TAG:計算機 | 計算機技術 | 計算機語言 | 計算機歷史 |