第一個編程語言比現代的計算機還早誕生。首先,這種語言是種編碼(en:code)。php
於1801年發明的提花織布機(或稱甲卡提花織布機,英文:en:Jacquard loom),運用打孔卡上的坑洞來表明縫紉織布機的手臂動做,以便自動化產生裝飾的圖案。html
Ada Lovelace在1842年至1843年間花費了九個月,將意大利數學家Luigi Menabrea關於查爾斯·巴貝奇新發表機器分析機的回憶錄翻譯完成。她於那篇文章後面附加了一個用分析機計算伯努利數方法的細節,被部分歷史學家認爲是世界上第一個電腦程序。 [1]程序員
Herman Hollerith在觀察列車長對乘客票根在特定位置打洞的方式後,意識到他能夠把資訊編碼記載到打孔卡上,隨後根據這項發現使用打孔卡來編碼並紀錄1890年的人口統計資料。算法
第一個計算機程式碼是針對他們的應用面設計的。在20世紀的前十年主要是用十進制來算數,後來人們發現不僅是用文字,也能夠用數字來表現邏輯。舉例來講,阿隆佐·邱奇曾以公式化(formulaic)的方式表達λ演算。圖靈機是一種紙帶標記(tape-marking)機器(就像電話公司用的那種)操做方法抽象化後的集合。圖靈機這種透過有限數字(finite number)呈現機器的方式,奠基了程式如同馮·諾伊曼結構計算機中的資料同樣地儲存的基礎。但不一樣於λ演算,圖靈機的程式碼並無辦法成爲高階編程語言的基石,這是是由於它主要的用途是分析算法的複雜度。數據庫
就像許多歷史上的"第一次"同樣,第一個現代編程語言也很難界定。最一開始是由於硬件限制而限定了語言,打孔卡容許80行(column)的長度,但某幾行必須用來記錄卡片的順序。FORTRAN則歸入了一些與英文字詞相同的關鍵字,像是"IF"、"GOTO"(原字詞爲go to),以及"CONTINUE"。以後採用磁鼓(magnetic drum)做爲內存使用,也表明計算機程式也必須插入(interleave)到磁鼓的轉動(rotation)中。和現今比較起來,這也讓編程語言必須更加依賴硬件(hardware-dependent)。編程
對部分的人認爲必須在"編程語言"的狀態確立以前,根據能力(power)以及可讀性(human-readability)的程度來決定歷史上第一個編程語言是什麼語言。提花織布機和查爾斯·巴貝奇所製做的差分機(en:Difference Engine)都具有在大量限制下,簡單描述機器應執行行爲的語言。也有種並不是設計給人類運用的受限特定領域語言(en:domain-specific language),是將打孔卡運用到自動演奏鋼琴(en:player piano)上。安全
最先被確認的現代化、電力啓動(electrically powered)的計算機約在1940年代被創造出來。程序員在有限的速度及內存容量限制之下,撰寫人工調整(hand tuned)過的組合語言程式。並且很快就發現到使用組合語言的這種撰寫方式須要花費大量的腦力(intellectual effort)並且很容易出錯(error-prone)。網絡
Konrad Zuse於1948年發表了他所設計的Plankalkül編程語言的論文[1]。可是在他有生之年卻未能將該語言實做,而他本來的貢獻也被其餘的發展所孤立。框架
在這段期間被開發出來的重要語言包括有:dom
有三個現代編程語言於1950年代被設計出來,這三者所衍生的語言直到今日仍舊普遍地被採用:
另外一個1950年代晚期的里程碑是由美國與歐洲計算機學者針對"算法的新語言"所組成的委員會出版的ALGOL 60報告(名稱取自"ALGOrithmic Language"(算法語言))。這份報告強化了當時許多關於計算的想法,並提出了兩個語言上的創新功能:
另外一個創新則是關於語言的描述方式:
Algol 60對以後語言的設計上帶來了特殊的影響,部分的語言很快的就被普遍採用。後續爲了開發Algol的擴充子集合,設計了一個名爲Burroughs(en:Burroughs large systems)的大型系統。
延續Algol的關鍵構想所產生的成果就是ALGOL 68:
Algol 68一些較少被使用到的語言功能(如同步與並列區塊)、語法捷徑的複雜系統,以及型態自動強制轉換(coercions),使得實做者興趣缺缺,也讓Algol 68得到了很難用(diffcult)的名聲。尼克勞斯·維爾特就乾脆離開該設計委員會,另外在開發出更簡單的Pascal語言。
在這段期間被開發出來的重要語言包括有:
1960年代晚期至1970年代晚期的期間中,編程語言的發展也有了重大的成果。大多數如今所使用的主要語言範式都是在這段期間中發明的:
這些語言都各自演展出本身的家族分支,現今多數現代編程語言的祖先均可以追朔他們其中至少一個以上。
在1960年代以及1970年代中結構化程式設計的優勢也帶來許多的爭議,特別是在程式開發的過程當中徹底不使用GOTO。這項爭議跟語言自己的設計很是有關係:某些語言並無包含GOTO,這也強迫程序員必須結構化地編寫程式。儘管這個爭議在當時吵翻了天,但幾乎全部的程序員都贊成就算語言自己有提供GOTO的功能,在除了少數罕見的狀況下去使用GOTO是種不良的程序風格。結果是以後世代的編程語言設計者發覺到結構化編程語言的爭議實在既乏味又使人眼花撩亂。
在這段期間被開發出來的重要語言包括有:
1980年代的編程語言與以前相較顯得更爲強大。C++合併了面向對象以及系統程式設計。美國政府標準化一種名爲Ada的系統編程語言並提供給國防承包商使用。日本以及其餘地方運用了大量的資金對採用邏輯編程語言結構的第五代語言進行研究。函數編程語言社羣則把焦點轉移到標準化ML及Lisp身上。這些活動都不是在開發新的範式,而是在將上個世代發明的構想進一步發揚光大。
然而,在語言設計上有個重大的新趨勢,就是研究運用模組或大型組織化的程式單元來進行大型系統的開發。Modula、Ada,以及ML都在1980年代發展出值得注意的模組化系統。模組化系統常拘泥於採用泛型程式設計結構:泛型存在(generics being)、本質(essence),參數化模組(parameterized modules)。(參閱多型)
儘管沒有出現新的主要編程語言範式,許多研究人員仍就擴充以前語言的構想並將它們運用到新的內容上。舉例來講,Argus以及Emerald系統的語言配合面嚮對象語言運用到分散式系統上。
1980年代的編程語言實做狀況也有所進展。計算機系統結構中RISC的進展假定硬件應當爲編譯器設計,而非身爲人類的組合語言程序員。藉由中央處理器速度增快的幫助,編譯技術也愈來愈積極,RISC的進展對高階語言編譯技術帶來不小的關注。
語言技術持續這些發展並邁入了1990年代。
在這段期間被開發出來的重要語言包括有:
1990年代未見到有什麼重大的創新,大多都是之前構想的重組或變化。這段期間主要在推進的哲學是提高程序員的生產力。許多"快速應用程序開發" (RAD) 語言也應運而生,這些語言大多都有相應的集成開發環境、垃圾回收等機制,且大可能是先前語言的衍生語言。這類型的語言也大可能是面向對象的編程語言,包含有Object Pascal、Visual Basic,以及C#。Java則是更加保守的語言,也具有垃圾回收機制。與其餘相似語言相比,也受到更多的觀注。新的腳本語言則比RAD語言更新更好。這種語言並不是直接從其餘語言衍生,並且新的語法更加開放地(liberal)與功能契合。雖然腳本語言比RAD語言來的更有生產力,但大多會有由於小程式較爲簡單,可是大型程式則難以使用腳本語言撰寫並維護的顧慮。儘管如此,腳本語言仍是網絡層面的應用上大放異彩。
在這段期間被開發出來的重要語言包括有:
編程語言持續在學術及企業兩個層面中發展進化,目前的一些趨勢包含有:
在這段期間被開發出來的重要語言包括有: