設置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

80 歲還嗖嗖改代碼!他是 Unix 命名人,發(fā)明“Hello World”,他說解決問題全靠拖

量子位 2022/8/26 13:00:16 責編:長河

今天,“Linux 三劍客”中一個非常古老的工具突然登上了 GitHub 今日熱榜:

—— 這竟是因為 80 歲的原作者更新了。是的你沒聽錯,有人都 80 歲了還在改代碼!這位大神,就是加拿大計算機科學家 —— 布萊恩?柯林漢 (Brian Kernighan)。

與比爾蓋茨、Java 之父、Python 之父等大佬齊名的他,開創(chuàng)的“Hello World”范式讓每一位學編程的同學刻煙吸肺:

不管你學的什么語言,第一個程序就是學會輸出它。

printf(“Hello World!\n”);
cout << “Hello World!\n”;
print “Hello World!”
……

此外,C 語言的第一本編程著作,作者之一有他;Unix 系統(tǒng)的早期開發(fā)人員、AWK(Linux 及 Unix 中的文本數(shù)據(jù)處理工具)的共同創(chuàng)造者名單中,他也赫然在列。

如今老爺子已經(jīng)滿頭白發(fā),還活躍在“一線”—— 今年 5 月,AWK 的 GitHub 倉庫中,老爺子提交了新的 pull request,給 AWK 添加了一直沒法做到的 Unicode 支持。

對此,網(wǎng)友的態(tài)度是這樣的:

是什么讓這位大佬常年保持編程熱情的呢?

免試進入貝爾實驗室

事情還得從柯林漢的大學時代說起??铝譂h于 1942 年出生于加拿大,本科就讀于多倫多大學工程物理學。他形容這是一個給那些自己也不知道想學什么的人準備的“大雜燴”專業(yè),但很幸運,剛上大一他就對編程開始感興趣,學起了 Fortran 語言。

當時,計算機的發(fā)展還處于初期。他直到大三才見到全校唯一的一臺晶體管計算機:IBM 7094。由于太貴(時值 300 萬美元),學生們并沒有機會碰到它。

由此可見彼時工具的稀缺,所以正在學編程的柯林漢也就只是拜讀了丹尼爾?麥克拉肯的大作,獲得了“頗豐”的理論知識,實際并沒有真正上手寫過一行代碼。

大一暑假,不知道他如何在一家石油公司找了個實習,任務是用 COBOL 語言給精煉廠開發(fā)優(yōu)化軟件。鑒于這個語言他不熟,也沒有編程經(jīng)驗,所以最后也沒寫出個像樣的程序來。雖然受了一點小挫折,但他對編程的熱情并沒有退卻,回到學校繼續(xù)研究。

大四畢業(yè)后,柯林漢決定繼續(xù)深造,并拿到了 MIT 和普林斯頓大學的 offer。由于去 MIT 要 7 年才能完成博士學業(yè),且每周需做 30 小時的研究助理工作,而普林斯頓只要 3 年且提供全額獎學金,再加上柯林漢的好友就在普林斯頓,他毫不猶豫地選了后者。

在普林斯頓大學,柯林漢讀的是電子工程專業(yè),因為當時同樣還沒有專門的計算機系。這完全沒妨礙他前進。

讀博期間,他先是得到了 MIT 的實習機會,有幸在后來的圖靈獎得主費爾南多?科巴托(Fernando Corbató)門下干活,給一種叫作 Multics 的分時操作系統(tǒng)項目寫代碼。

轉(zhuǎn)年夏天,他又得到了貝爾實驗室的實習機會,在那里寫匯編語言。為了方便在 Fortran 程序中做列表處理,他還寫出了一套函數(shù)庫,他形容這份工作“十分過癮”。

轉(zhuǎn)眼到了博士畢業(yè),柯林漢被直接留校任教,并在沒有進行面試和研究成果展示的情況下,成為了貝爾實驗室的正式成員,足以見其優(yōu)秀。而他和 Unix 的淵源也就此展開。

Unix 命名人

我們現(xiàn)在的大部分服務器、手機系統(tǒng)和物聯(lián)網(wǎng)系統(tǒng)的底層基本都是基于 Unix。而三大系統(tǒng)之一的 Linux 也是一種類 Unix 系統(tǒng),可以說,Unix 是現(xiàn)代操作系統(tǒng)的源頭之一。

說起來比較意外,這么一個重要的操作系統(tǒng),其初代版本被后來的圖靈獎得主 Ken Thompson 僅花 3 周的時間就搞定了。當時的 Unix 還叫 UNICS (Uniplexed Information and Computing System),后來被柯林漢改成了現(xiàn)在的名字。Unix 中有一個核心工具,叫做 AWK,柯林漢就是其發(fā)明者之一(名稱中的“K”正是代表他)。

AWK 作為一種文本處理語言,只做過濾和轉(zhuǎn)換文本行這一件事,卻成為 Unix / Linux 平臺上現(xiàn)有功能最強大的數(shù)據(jù)處理引擎之一。在 Linux 系統(tǒng)中,它和 grep、sed 命令并稱為“三劍客”,并占據(jù)“老大”席位,掌握了它,處理日常操作可以 6 到飛起。

如今,AWK 已經(jīng)分化出三個版本,依然受到人們的歡迎,誕生 45 年仍未“退休”。

除了 AWK,柯林漢還發(fā)明了 AMPL,一種描述并求解大規(guī)模復雜數(shù)學問題的建模語言,支持世界上大部分的求解器。還有編譯器 Ratfor、文檔編制預處理器 Pic、Grap 和數(shù)學排版語言 Eqn 等這些重要研究成果背后都有他的身影。

除了寫代碼,柯林漢還很愛寫書,且誕生了不少經(jīng)典之作。比如你想了解 Unix 的歷史,就可以看《Unix 傳奇》,作為參與者和見證人之一,他寫的這本書可以讓沒有足夠?qū)I(yè)技術背景的人也能欣賞 Unix 的思想。

△《Unix 傳奇》

而文章開頭所說的“Hello World”范式,則是出自于他與 C 語言之父丹尼斯?里奇(Dennis Ritchie)合寫的開山之作《C 程序設計語言》。

再比如柯林漢的第一本著作《The Elements of Programming Style》(《編程格調(diào)》),則留下了一個以他名字命名的定律 —— 柯林漢定律,即:

調(diào)試一段代碼的難度是編寫它們的兩倍。按照這個定義,如果你的代碼寫得非常巧妙,那你可能沒有足夠的能力來調(diào)試它。

(相比于復雜代碼,簡單的代碼更可取。因為調(diào)試復雜代碼的過程中,任何問題都會十分棘手,甚至無法解決。)

解決問題靠拖延?

那么,柯林漢本身是個什么性格的人呢?2021 年他接受《程序員》采訪時,曾被問了這么一個問題:

肯(Ken)用 3 周創(chuàng)造了 Unix,道格(Doug)在幾天內(nèi)就提出了“管道(pipe)”的想法,你們工作效率這么高,有什么訣竅嗎?

(以上兩人都是他在貝爾實驗室的同事)

對此,柯林漢連連擺手:

他們是“別人家的程序員”,我可從沒這么高效過!

老爺子說了,遇到新問題,他的解決方案通常簡單粗暴,那就是盡可能地拖延,以及祈禱問題消失,或者祈禱問題自己解決自己。

這個玄學辦法本身是不能解決問題的,但這樣做,柯林漢有足夠時間消化問題,然后想出對策。

而且,他其實會選擇直接動手搞定問題。今年 1 月 1 日,柯林漢剛好過 80 歲生日。上個月,油管頻道 Computerphile 對他進行了采訪,大伙兒才知道,老爺子還在改代碼!

柯林漢說,沒有任何一種計算機語言或工具是萬能的,AWK 也不例外。此前,AWK 只適用于 ASCII 或 8 位輸入,不能處理 Unicode(統(tǒng)一碼)。

△ 圖源 Youtube 頻道 Computerphile 視頻

幾個月前,柯林漢花了點時間,折騰了一下 AWK—— 他稱它是“一個非常古老的程序”—— 現(xiàn)在 AWK 可以處理 UTF-8 輸入和輸出了。

現(xiàn)在,用戶已經(jīng)能用正則表達式提取日語字符以及類似的東西。視頻中柯林漢還順口提了一嘴,他修補了一些“又快又臟”的東西,讓 AWK 可以處理 CSV 文件。

△ 圖源 Youtube 頻道 Computerphile 視頻

整個采訪過程,老爺子依然健談,精神面貌也不賴。話說回來,精力充沛的他,對幾十歲的“古老程序”改改改,還有啥原因呢?

柯林漢的回答是這樣的:

今天的計算環(huán)境,和三、四十年前非常不同,內(nèi)存量也大大擴充了,“這會改變你對 AWK 的思考方式,尤其是 AWK 運行不起來的部分”。

所以,老爺子一直偷偷在后臺玩兒新版本的 AWK,目的是盡可能做拓展,讓 AWK 更容易實踐和使用。

這其實是柯林漢一以貫之的行事準則,此前,他就在播客 CoRecursive 中表示過:

如果做些能對自己有幫助,又對他人工作有所改善的事,何樂而不為呢?

有意思的是,世界上沒有萬能工具,也沒有萬能通才。老爺子自己就承認說,他的 bug 是還沒完全搞懂 Git 怎么用。

所以他只能通過電子郵件,把更改發(fā)送給當前的維護人員。

△ 圖源柯林漢的郵件

網(wǎng)友:Hacker 永不退休

80 歲高齡還要修改幾十年前寫下的代碼,這位程序員屆卷王的故事再次引起了網(wǎng)友關注。自面世起,AWK 就廣受歡迎。看到 AWK 在今天依然能得到完善,變得更強,不少人對老爺子的敲代碼熱情表示 respect。

有的網(wǎng)友表示了對老爺子的感激。

還有人覺得,為改善程序員寫代碼的環(huán)境不斷付出,是一件很鼓舞人心的事情。

當然少不了玩梗的人。

Hacker 永不退休!

One More Thing

最后,讓我們回到“Hello, world”。這句“萬物開頭”其實最早是在柯林漢 1974 年撰寫的《Programming in C: A Tutorial》中首次出現(xiàn),后來才被合寫進那本經(jīng)典之作。

該書中兩位作者形成的寫代碼風格,也被稱為 K&R 風格 (K&R 即指柯林漢 Kernighan 和里奇 Ritchie)。有意思的是,柯林漢表示這本書是自己強行拉著丹尼斯寫的。

至于為什么選擇用“Hello, world”而不是別的,柯林漢自己都記不清了。在接受福布斯雜志訪談時,他模模糊糊回憶:

可能是因為看了個動畫片,里面有一個雞蛋和一只小雞,小雞說了句:Hello,World!

參考鏈接:

  • [1]https://www.youtube.com/watch?v=GNyQxXw_oMQ

  • [2]https://arstechnica.com/gadgets/2022/08/unix-legend-who-owes-us-nothing-keeps-fixing-foundational-awk-code/?comments=1

  • [3]https://www.theregister.com/2022/08/23/universal_unix_tool_awk_gets/

  • [4]https://www.cs.princeton.edu/~bwk/

  • [5]https://corecursive.com/brian-kernighan-unix-bell-labs1/

  • [6]https://baijiahao.baidu.com/s?id=1696979082867013424&amp;amp;amp;amp;amp;amp;wfr=spider&amp;amp;amp;amp;amp;amp;for=pc

  • [7]https://github.com/onetrueawk/awk/commit/9ebe940cf3c652b0e373634d2aa4a00b8395b636

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關文章

關鍵詞:Unix,柯林漢

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機APP應用 魔方 最會買 要知