如果沒有丹尼斯·里奇(Dennis Ritchie),就不會有我們現在所熟知的現代計算。他是 C 語言之父和 UNIX 操作系統的聯合發明人。四年前我們失去了兩位對業界有巨大影響的人。
(伯樂在線編註:其實原作者還漏了一位,2011 年 10 月 24 日 Lisp 之父約翰·麥卡錫離世。)
不可否認,賈伯斯帶給我們世上從未見過的創新和標誌性的產品,還有一大批對他頂禮膜拜的狂熱消費者和終端用戶。諸如此類的事情可能再也看不到了。
儘管我對賈伯斯和他的公司有看法是有據可查的,當他去世時,我和很多業界的人一樣表達了我的敬意和對他的影響力的認可。
但是蘋果和賈伯斯以及很多其他公司所創造的「神奇的」產品,和所有現在我們了解和寫在現代計算裡的東西,都要歸功於丹尼斯·里奇,他於 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。
沒有微軟的 Windows 10 和 Surface Book。
沒有雲端計算、沒有 AWS(亞馬遜網絡服務,Amazon Web Services)、沒有 Azure(微軟雲)。
沒有「為 XX 而生的應用程式」,也沒有網路這個東西。
向丹尼奇·里奇致敬—— 感謝他帶給我們這些技術,讓我們可以成為今天的專家。
1972 年,丹尼斯·里奇(左)與肯·湯姆森在一台 PDP-12 前的合影(照片來源:丹尼斯里奇的主頁)
(本文轉載自合作夥伴《伯樂在線》;未經授權,不得轉載)