發明「Hello World」!他說解決問題全靠拖

Brian_Kernighan_in_2012_at_Bell_Labs_1.jpeg

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

a8fc-20a2cb5aed3c3ef9488685efd1804b6d.png

——這竟是因為80歲的原作者更新了。

是的你沒聽錯,有人都80歲了還在改代碼!

這位大神,就是加拿大計算機科學家——布萊恩·克尼漢(Brian Kernighan)。

與比爾·蓋茲、Java之父、Python之父等大佬齊名的他,開創的「Hello World」範式讓每一位學編程的同學刻煙吸肺:

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

printf(“Hello World!\n”);

cout

print “Hello World!”


……

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

如今老爺子已經滿頭白髮,還活躍在「一線」——今年5月,AWK的GitHub倉庫中,老爺子提交了新的pull request,給AWK添加了一直沒法做到的Unicode支持。

對此,網友的態度是這樣的:
006I1bcHgy1fqq6atxqzlj30c80c9mxm.jpeg

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

免試進入貝爾實驗室

事情還得從克尼漢的大學時代說起。克尼漢於1942年出生於加拿大,本科就讀於多倫多大學工程物理學。

他形容這是一個給那些自己也不知道想學什麼的人準備的「大雜燴」專業,但很幸運,剛上大一他就對編程開始感興趣,學起了Fortran語言。

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

96d8-2f86138d23d32526607b6d3f096ecbf9.png

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

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

大四畢業後,克尼漢決定繼續深造,並拿到了MIT和普林斯頓大學的offer。

由於去MIT要7年才能完成博士學業,且每週需做30小時的研究助理工作,而普林斯頓只要3年且提供全額獎學金,再加上克尼漢的好友就在普林斯頓,他毫不猶豫地選了後者。

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

讀博期間,他先是得到了MIT的實習機會,有幸在後來的圖靈獎得主費南多·柯巴托(Fernando Corbató)門下做事,給一種叫作Multics的分時操作系統項目寫代碼。

轉年夏天,他又得到了貝爾實驗室的實習機會,在那裡寫彙編語言。為了方便在Fortran程序中做列表處理,他還寫出了一套函數庫,他形容這份工作「十分過癮」。轉眼到了博士畢業,克尼漢被直接留校任教,並在沒有進行面試和研究成果展示的情況下,成為了貝爾實驗室的正式成員,足以見其優秀。

而他和Unix的淵源也就此展開。

Unix命名人

我們現在的大部分服務器、手機系統和物聯網系統的底層基本都是基於Unix。

而三大系統之一的Linux也是一種類Unix系統,可以說,Unix是現代操作系統的源頭之一。

1791542-50d2220e3ee14296.jpg

說起來比較意外,這麼一個重要的操作系統,其初代版本被後來的圖靈獎得主Ken Thompson僅花3週的時間就搞定了。

當時的Unix還叫UNICS(Uniplexed Information and Computing System),後來被克尼漢改成了現在的名字。

Unix中有一個核心工具,叫做AWK,克尼漢就是其發明者之一(名稱中的「K」正是代表他)。AWK作為一種文本處理語言,只做過濾和轉換文本行這一件事,卻成為Unix/Linux平台上現有功能最強大的數據處理引擎之一。在Linux系統中,它和grep、sed命令並稱為「三劍客」,並佔據「老大」席位,掌握了它,處理日常操作可以6到飛起。

如今,AWK已經分化出三個版本,依然受到人們的歡迎,誕生45年仍未「退休」。

除了AWK,克尼漢還發明了AMPL,一種描述並求解大規模複雜數學問題的建模語言,支持世界上大部分的求解器。還有編譯器Ratfor、文檔編制預處理器Pic、Grap和數學排版語言Eqn等這些重要研究成果背後都有他的身影。

除了寫代碼,克尼漢還很愛寫書,且誕生了不少經典之作。比如你想了解Unix的歷史,就可以看《Unix傳奇》,作為參與者和見證人之一,他寫的這本書可以讓沒有足夠專業技術背景的人也能欣賞Unix的思想。

9781695978553.jpeg
△《Unix傳奇》

而文章開頭所說的「Hello World」範式,則是出自於他與C語言之父丹尼斯·里奇(Dennis Ritchie)合寫的開山之作《C程式設計語言》。

再比如克尼漢的第一本著作《The Elements of Programming Style》(《程式設計風格的元素》),則留下了一個以他名字命名的定律——克尼漢定律,即:

調試一段代碼的難度是編寫它們的兩倍。按照這個定義,如果你的代碼寫得非常巧妙,那你可能沒有足夠的能力來調試它。(相比於復雜代碼,簡單的代碼更可取。因為調試複雜代碼的過程中,任何問題都會十分棘手,甚至無法解決。)

解決問題靠拖延?

那麼,克尼漢本身是個什麼性格的人呢?

2021年他接受《程序員》採訪時,曾被問了這麼一個問題:肯(Ken)用3週創造了Unix,道格(Doug)在幾天內就提出了「管道(pipe)」的想法,你們工作效率這麼高,有什麼訣竅嗎?(以上兩人都是他在貝爾實驗室的同事)

對此,克尼漢連連擺手:他們是「別人家的程序員」,我可從沒這麼高效過!

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

截圖 2022-08-31 下午3.11.33.png

這個玄學辦法本身是不能解決問題的,但這樣做,克尼漢有足夠時間消化問題,然後想出對策。而且,他其實會選擇直接動手搞定問題。

今年1月1日,克尼漢剛好過80歲生日。

上個月,YouTube頻道Computerphile對他進行了採訪,大夥兒才知道,老爺子還在改代碼!

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

2e22-4166907f0267877d2e232e977f7e2bf9.png
△圖源YouTube頻道Computerphile影片

幾個月前,克尼漢花了點時間,折騰了一下AWK——他稱它是「一個非常古老的程序」——現在AWK可以處理UTF-8輸入和輸出了。

現在,用戶已經能用正則表達式提取日語字符以及類似的東西。

影片中克尼漢還順口提了一嘴,他修補了一些「又快又髒」的東西,讓AWK可以處理CSV文件。

53c5-411323e5527dc76ff57da35640d23c35.png
△圖源YouTube頻道Computerphile影片

整個採訪過程,老爺子依然健談,精神面貌也不賴。

話說回來,精力充沛的他,對幾十歲的「古老程序」改改改,還有啥原因呢?

克尼漢的回答是這樣的:今天的計算環境,和三、四十年前非常不同,內存量也大大擴充了,「這會改變你對AWK的思考方式,尤其是AWK運行不起來的部分」。

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

這其實是克尼漢一以貫之的行事準則,此前,他就在播客CoRecursive中表示過:如果做些能對自己有幫助,又對他人工作有所改善的事,何樂而不為呢?

有意思的是,世界上沒有萬能工具,也沒有萬能通才。老爺子自己就承認說,他的bug是還沒完全搞懂Git怎麼用。所以他只能通過電子郵件,把更改發送給當前的維護人員。

5653-13b904b4e5cfcae1a451531e626582e1.png
△圖源克尼漢的郵件

網友:Hacker永不退休

80歲高齡還要修改幾十年前寫下的代碼,這位程序員大佬的故事再次引起網友關注。

自面世起,AWK就廣受歡迎。看到AWK在今天依然能得到完善,變得更強,不少人對老爺子的敲代碼熱情表示respect。

0901-7da90825807f812034e6134307ac469d.png
c9e3-3530b8bf7dc9dfa328f2bdb064e23bfc.png

有的網友表示了對老爺子的感激。

22b0-6ac14aeafc65491f20f0f22c7bb4ce81.png

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

5d66-12fdb14965e1677e6d521bed57fc29ad.png

當然少不了玩梗的人。Hacker永不退休!

1064-cc075487405510c9331634c7552f90d0.png

One More Thing

最後,讓我們回到「Hello, world」。

這句「萬物開頭」其實最早是在克尼漢1974年撰寫的《Programming in C: A Tutorial》中首次出現,後來才被合寫進那本經典之作。

wyit72wBJleJMoPMLGYc.jpeg

該書中兩位作者形成的寫代碼風格,也被稱為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&wfr=spider&for=pc
[7]https://github.com/onetrueawk/awk/commit/9ebe940cf3c652b0e373634d2aa4a00b8395b636


已有(2)人回文

切換到指定樓層
jackmanx 發表於 2022-9-1 21:51
這個拖下去不知道會影響到多少東西
daxz 發表於 2022-9-3 14:38
算電腦界的活化石了吧,80歲了頭腦還是很好,超強
你需要登入後才可以回覆 登入 | 註冊會員

本版積分規則

驚驚驚嘆號

LV:1 旅人

追蹤
  • 1537

    主題

  • 1537

    回文

  • 5

    粉絲