沒有C語言之父 就沒有喬布斯和Win10

不知不覺,丹尼斯·里奇離開我們4周年了。2011年10月12日,和里奇共事20多年的同事Rob Pike從加州到新澤西去拜訪他,才發現他已經去世了。由於是獨居,當時無法知道準確的死亡時間,後來確定離世日期是10月9日。據他的兄弟透露,那幾年丹尼斯·里奇的健康狀況一直不好,他患有前列腺癌和心臟病。

喬布斯和丹尼斯·里奇都是在同年同月離世。但之後每年的這段時間,很多媒體都會紀念喬布斯,但很少提到丹尼斯·里奇。

-----【下面是今年的紀念文章】-----

如果沒有丹尼斯·里奇(Dennis Ritchie),就不會有我們現在所熟知的現代計算。他是C語言之父和UNIX操作系統的聯合發明人。四年前我們失去了兩位對業界有巨大影響的人。

▲其實Lisp之父約翰·麥卡錫也是在2011年10月離世。10月24日

不可否認,喬布斯帶給我們世上從未見過的創新和標誌性的產品,還有一大批對他頂禮膜拜的狂熱消費者和終端用戶。諸如此類的事情可能再也看不到了。

儘管我對喬布斯和他的公司有看法是有據可查的,當他去世時,我和很多業界的人一樣表達了我的敬意和對他的影響力的認可。

但是蘋果和喬布斯以及很多其他公司所創造的「神奇的」產品,和所有現在我們了解和寫在現代計算里的東西,都要歸功于丹尼斯·里奇,他於2011年10月12號離開人世,享年70歲。

丹尼斯·里奇何許人也?

普通年輕人可能都要搖頭。丹尼斯·里奇是誰?

丹尼斯·里奇不像某位來自矽谷,精緻的和少年得志的億萬富翁,穿著簡約黑色的高領毛衣在站滿粉絲的屋子裡,演示新酷產品和惡意攻擊對手。

不,丹尼斯·里奇是一位鬍子有些凌亂的計算機科學家,他穿著羊毛衫坐在一間凌亂的辦公室里。

和喬布斯在大學輟學不同,他畢業於哈佛大學,有物理學和應用數學的博士學位。他工作於新澤西的AT&T貝爾實驗室,而不是閃閃發光的矽谷。

是的,就是「What exit?」的新澤西。(編註:「What exit?」是新澤西當地俚語,Garden State Parkway是一條南北走向的高速公路,它穿過整個新澤西州,所以是一個很有用的地標。新澤西當地人問地方都問從這條高速的哪個出口出來就可以到達。)

鑒於喬布斯古怪的個性又極富創造力,人們經常把他和愛迪生作比較。我不贊同這種比較,因為實際上我們錯把喬布斯當做一個真正的技術專家和發明東西的人。

有一件重要的事情我們必須要意識到:儘管喬布斯有他擅長的事情,而且他為技術和計算機業界做出很大的貢獻,但事實上他並不是一個技術專家。

他對於時尚和工業設計的確很有感覺,他理解用戶想要什麼,他還是一個營銷大師和推銷員。所有這些讓他成為業界的巨人。

但是說到發明家?不,他不是。

但是丹尼斯·里奇發明了和共同發明了兩個關鍵的軟體技術,它們是構成每一款計算機軟體產品的DNA,現在我們直接或間接都在使用這些軟體產品。這聽起來讓人難以置信,但它確實是真的。

首先,讓我們從《C程序設計語言》開始

C語言是里奇在1969-1973開發的,它被認為是第一個真正意義上可移植的現代編程語言。自它誕生差不多45年以來,它已經被移植到幾乎每一個出現過的系統架構和操作系統上。

因為它是一種命令的、編譯的和程序化的編程語言,它允許語法變數作用域和遞歸,允許內存的底層訪問,還有複雜的I/O和字元串操作功能,這種語言變得相當通用。

里奇和布萊恩·克尼漢(Brian Kernighan)對它進行了一定程度的優化,最終於1989年被美國國家標準協會的X3J11委員會進一步細化為ANSI C程序設計語言。

1978年,克尼漢和里奇合著出版了《C程序設計語言》這本書。該書被很多人簡稱為「K&R C」,是計算機科學的傑作,它也是解釋現代程序設計概念的一個關鍵參考,甚至到今天,它還是計算機科學課程里學習程序設計的經典教材。

直到今天,ANSI C作為一種編程語言還被大量地使用,後來它還發展出很多的姊妹語言,這些語言又都有很多的追隨者。

最流行的C++是由本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)於1985年發明,它增加了面向對象編程和類的支持,用在各式各樣的操作系統上,包括像Linux和Mac這樣的UNIX衍生品上,它作為微軟Windows軟體開發的主要編程語言長達20多年。

Objective-C,是由達石軟體(Stepstone,Lumesse(路敏思)的前身)的布萊德·考克斯(Brad Cox)和Todd Love在八十年代發明的,增加了Smalltalk消息傳遞功能,進一步拓展了這種語言面向對象和代碼重用的特性。

Objective-C很大程度上被認為是一個鮮為人知的C語言衍生品,直到它在八十年代末和九十年代初被廣泛用於NeXT計算機系統公司的NeXTStep和OpenStep操作系統上,NeXT是喬布斯在1985被趕出蘋果公司後所創辦的。

「下一個」發生了什麼就是一段計算機領域的傳奇。NeXT於1996年被蘋果公司收購,喬布斯在1997年重新回歸蘋果並出任公司的CEO。

2001年蘋果發布了Mac OS X,其中大量使用了Objective-C,以及NeXTStep和OpenStep所引入的面向對象技術。

當C++也被大量應用在Mac上,Objective-C被用來在XCode IDE下編寫本地面向對象的「Cocoa」API,這些API是iOS上手勢識別和動畫功能的核心,這些功能為iPhone和iPad增光不少。

Objective-C還提供了Foundation Kit和Application Kit,用於構建本地的OS X和iOS應用程序。

微軟也有自己的C語言衍生品——C#(讀作「C Sharp」),於2001年發明並作為.NET框架的編程基礎。

C#還是編寫基於Windows運行時(WinRT)的現代應用程序的基礎,WinRT在Windows 10上發展成統一的Windows平台(UWP,Universal Windows Platform)。作為開發Mono(一個.NET框架的可移植版本)的編程環境,它也被用在Linux和其他Unix衍生系統上。

但是C語言的影響並不僅局限在它的衍生品上。Java這樣一個重要的企業級編程語言,在很大程度上也是基於C語言語法(本身也演變為Dalvik和Android運行時,它們是Android最基本的編程環境)。

其它語言例如Ruby、Perl和PHP等,它們是構成動態現代網路的基礎,也都使用了丹尼斯·里奇發明的C語言語法。

所以說如果沒有丹尼斯·里奇的工作,我們根本就不可能有現代的軟體。

除了C語言,他還有Unix

只談C語言對於現代計算的重要性和它對於每個人的影響,我其實就可以結束這篇文章。但這個人的工作生涯我才講了一半而已。

里奇還是UNIX操作系統的共同發明人。當然UNIX的原型是用彙編語言編寫,到七十年代早期就完全用C重寫了。

早在1969年,在一台DEC PDP-7上引導了第一個版本的「Unics」,從那開始UNIX已經演變出很多類似的操作系統,並運行在各種各樣的系統架構上。

每一個主要的計算機供應商都曾經實現過自己的UNIX。甚至連微軟也曾經擁有一個叫做XENIX的產品,後來賣給了SCO(已經不存在了)。

你可點擊和放大看這張圖,可更好地理解這個「家族」。(編註:手機上無法查看大圖)

UNIX本質上有三個主要分支:

第一個分支是「System V」UNIX,現在我們知道的有IBM的AIX、Oracle的Solaris和惠普的HP-UX。這些被認為是「大傢伙」的操作系統被廣泛應用於世界財富1000強的大企業里,驅動著關鍵的、面向交易的商業應用和資料庫。

沒有System V UNIX,那些被財富雜誌1000強的企業不可能完成任何事情。商業都幾乎停滯了。它們也許只佔任何特定企業百分之十到二十的計算能力,但是這百分之二十相當重要。

第二個分支是BSD(伯克利系統發行版),包含FreeBSD、NetBSD和OpenBSD,這些都是Max OS X和iOS的基礎。它們也被用於支持關鍵的基礎設施骨幹上,互聯網就運行在上面。

第三個分支甚至不能算作一個分支——GNU/Linux。Linux內核(Linus Torvalds開發的)加上GNU用戶空間程序、工具和實用程序,提供了一個完全重新實現的「類似UNIX」,或者說「兼容UNIX」的操作系統。

當然Linux也是所有UNIX操作系統里最具破壞力的。從非常小的嵌入式微處理器到智能手機、到平板和桌面電腦,甚至強悍的超級計算機都可以看到它的身影。

IBM的Watson就是這樣一台Linux超級計算機,在《冒險吧!》的眾目睽睽下甚至打敗了Ken Jennings。

但我們還是要認識到Linux和GNU沒有包含任何UNIX代碼——因此有自由軟體的遞歸短語「GNU』s not UNIX」。(譯者註:GNU是GNU』s Not UNIX的縮寫,GNU』s not UNIX => (GNU』s Not UNIX)』s Not UNIX => ((GNU』s Not UNIX)』s Not UNIX)』s Not UNIX =>…,有興趣的話還可以找找其它的,比如PHP、XNA等等)

但GNU/Linux在設計上表現得很像UNIX,可以說如果沒有里奇和他在貝爾實驗室的同事們(Brian Kernighan、Ken Thompson、Douglas Mcllroy和Joe Ossanna)一起率先開發出UNIX,也就不會有什麼Linux或者任何一個開放源代碼軟體運動。

從這個意義上說,自由軟體基金會或者Richard Stallman很高興看到喬布斯離開了。

我們虧欠丹尼斯·里奇很多

雖然存在宗教和意識形態的差異。但我們虧欠丹尼斯·里奇很多,超出我們的想像。沒有他的貢獻,現在我們沒法用個人計算機,成熟的軟體應用甚至是互聯網。

沒有Android智能手機,沒有昂貴的DVR和流媒設備,沒有喬布斯和蘋果創造令人驚嘆的Mac和iPad。

沒有微軟的Windows10和Surface Book。

沒有雲計算、沒有AWS(亞馬遜網路服務,Amazon Web Services),沒有Azure(微軟雲)。

沒有「為XX而生的應用程序」,也沒有互聯網這個東西。

向丹尼奇·里奇致敬——感謝他帶給我們這些技術,讓我們可以成為今天的專家。

▲1972年,丹尼斯·里奇(左)與肯·湯姆森在一台PDP-12前的合影(照片來源:丹尼斯里奇的主頁)

微信搜索「IT之家」關注搶6s大禮!下載IT之家客戶端(戳這裡)也可參與評論抽樓層大獎!

聲明:本文由入駐搜狐號的作者撰寫,除搜狐官方賬號外,觀點僅代表作者本人,不代表搜狐立場。
推薦閱讀:

經典語言??增添智慧
[語言百科] 《佳句秀語大辭典》文摘十萬字(5)
中國人造語言也有大獎賽了?要不要來試試參加「巴別獎」
網站丨15個不能錯過的快速學習編程語言的網站

TAG:語言 | 沒有 | C語言 | 喬布斯 |