牛!Hello World 發(fā)明人 80 歲還在寫代碼
年齡從來不是界限,除非自己拿過來為難自己。
今年 80 歲的 UNIX 核心開發(fā)者之一、UNIX 命名者 Brian W.Kernighan,在夏季很多人都在開啟學術(shù)休假之際,找到了一些空閑時間。
在這個時間段,他閃現(xiàn)了 1977 年時與好友一起開發(fā)的文本處理工具、Linux 及 UNIX 環(huán)境中最強大的數(shù)據(jù)處理引擎 AWK 在 GitHub 的倉庫上(https://github.com/onetrueawk/awk),瀟灑地寫了數(shù)百行代碼,提交了最新的 pull request,留言告訴開發(fā)者這些代碼可以讓 AWK 實現(xiàn) Unicode 的支持。
然后事了拂衣去,深藏功與名。
直至近日國外的一個專門聚焦于計算機領(lǐng)域的 Computerphile 頻道在采訪 Brian W.Kernighan 問及他最近主要在干什么時,這位普林斯頓大學計算機科學系教授才低調(diào)地分享了近況。
在今年 5 月,他給一位老朋友發(fā)了一封郵件,提及自己正在進行在 AWK 工具支持 Unicode 的一些嘗試,Kernighan 說道,“我已經(jīng)做了相當多的測試,但顯然還需要更多的測試......一旦我找到了方法,我將嘗試提交一個 pull request。我希望我能更了解 Git,但盡管有你的幫助,我仍然沒有正確的理解,所以這可能還需要一段時間。”
UNIX 的開發(fā)者之一、UNIX 命名者布萊恩·克尼漢(Brian W. Kernighan)
AWK 是一種數(shù)據(jù)驅(qū)動的腳本語言,它與 grep、sed 一起被稱為 Linux “三劍客”,它也是 UNIX 管道功能和系統(tǒng)間互操作性的關(guān)鍵。在功能上,AWK 能為開發(fā)者帶來極大的便利,如通過創(chuàng)建非常簡短的程序來讀取輸入的文件、為數(shù)據(jù)排序、處理數(shù)據(jù)、對輸入進行計算、生成報表等。
正如上文提及的,AWK 誕生于 1970 年代的貝爾實驗室,其名稱源自研發(fā)它的三位計算機科學家,分別是 Alfred Aho、Peter Weinberger、Brian W.Kernighan,其中 K 指的就是 Brian W.Kernighan。
"AWK 只適用于 ASCII,或者 8 位輸入,但它根本沒有真正處理 Unicode,這一直是一個尷尬的問題," Kernighan 在 Computerphile 的采訪中無奈的說道,“直到幾個月前,我花了一些時間來處理一個令人難以置信的老程序。我把這個問題又翻了出來,并解決了它,如今它可以處理 UTF-8 的輸入和輸出,這樣你就可以有正則表達式。"
這一波連續(xù)的操作,驚呆了所有的開發(fā)者,不僅讓 AWK 這款在更新上沉寂許久的工具再度出現(xiàn)在大眾視野,登上 GitHub Trending 的第 8 位,同樣 Brian W.Kernighan 對技術(shù)追求的精神更讓人欽佩。
對于 Brian W.Kernighan 本人,被外人所熟知的是,他還是開發(fā)者入門必須敲下的 Hello World 示例代碼的發(fā)明者,連 UNIX 的名字也是他取的。在《新程序員 001》中,我們與 Brian W. Kernighan 暢談技術(shù)與人生,整個過程中,我們驚訝于這位大師的真實和坦誠,也為這跨越半個世紀的史詩般的程序人生所深深感動。
以下是 CSDN 的《新程序員》與布萊恩·克尼漢(Brian W. Kernighan)教授訪談記錄:
50 年程序人生
《新程序員》:你曾說是理查德·漢明(Richard Hamming)啟發(fā)你寫了《UNIX傳奇:歷史與回憶》(UNIX:A History and a Memoir)這本書。那么,在你的職業(yè)生涯中,哪個人對你的影響最大呢?
Brian:我主要想提三個人。首先是迪克·漢明(Dick Hamming,漢明碼發(fā)明者,“迪克”是“理查德”的非正式稱呼),是他激發(fā)了我寫這本書的靈感,并給我提供了各種各樣的好建議,他是我的人生摯友。
其次是道格·麥克羅伊(Douglas McIlroy,著名數(shù)學家,UNIX 開發(fā)者),他是我見過的最聰明的人之一(我見過非常多的聰明人)。1967年,我在貝爾實驗室第一次實習時就是在他的手下,他曾對我的博士論文的內(nèi)容和寫作提出了很好的優(yōu)化建議,我們一起共事了近30年,他在任何領(lǐng)域都是我的“智多星”——編程、寫作、科學、技術(shù)、數(shù)學等等。
第三個人是林申(Shen Lin)。1968年,我在貝爾實驗室第二次實習期間,和林申一起研究了“圖劃分問題”(Graph Partitioning Problem),這后來也成為了我博士論文的基礎(chǔ)。1969年,當我以正式員工的身份回到貝爾實驗室時,我又和林申一起研究了“旅行商問題”(Travelling Salesman Problem)、以及其他組合優(yōu)化的問題,甚至還一起完成了一些網(wǎng)絡(luò)設(shè)計工具。他具備一種驚人的能力,在上手一些小例子之后,就能總結(jié)出普適的方法論。如果沒有他,我是無法順利完成論文的。
《新程序員》:從實習到退休,你在貝爾實驗室工作了 30 年,那里最吸引你的是什么?如今在技術(shù)領(lǐng)域,跳槽已然成為一件十分普遍的事情,你對此有什么看法呢?
Brian:在貝爾實驗室的時候,我先是實習,然后轉(zhuǎn)為全職。那是個神奇的地方,在那里,有數(shù)以千計的一流科學家和工程師在研究多個領(lǐng)域中有趣又有關(guān)聯(lián)的各類問題。公司(AT&T,貝爾實驗室的母公司)具備開放、合作的環(huán)境和長遠的眼光,所以我們可以用很長的時間(甚至數(shù)年)去完成自己想要完成的任何事。因此,大家自然而然地就會在那里一直工作下去,沒有理由要離開。
如今,這種環(huán)境已經(jīng)不存在了,但同時工作機會卻很多,尤其是對于程序員來說,所以人們在短時間內(nèi)頻繁地更換工作就不足為奇了。雖然這并不是我個人的工作風格,但似乎對很多人而言都是理所應(yīng)當?shù)摹N业故怯X得,盡管這種工作流動性在短期內(nèi)有一定的好處,但可能也會帶來一些長期的負面影響,比如許多公司內(nèi)部都缺乏連續(xù)性,喪失了一以貫之的企業(yè)文化和傳承。
貝爾實驗室給當今企業(yè)的啟示
《新程序員》:談到企業(yè)文化(Organization Culture),這也是 UNIX 成功的一個重要原因。在這方面,你認為其他企業(yè)和實驗室可以從貝爾實驗室中學到什么?假設(shè)現(xiàn)在你帶領(lǐng)的團隊工作量很大,并且員工都分散在不同的時區(qū),你將如何確保代碼質(zhì)量?
Brian:貝爾實驗室研究環(huán)境的獨特之處在于沒有“繁重的工作量”,大家都在做自己認為有趣或重要的事情,沒有要求、沒有產(chǎn)品,也沒有可交付的成果,所以一切進度壓力都是員工自己給自己的。因為所有人都生活在同一個地區(qū),因此不存在時區(qū)問題。當然,有些人習慣于傳統(tǒng)的白天工作,而有些人則習慣在夜間工作,還有一些人的工作時間很長(比如Ken Thompson),所以他們有時會和白天的人同步,有時會和夜間的人同步。因為所有的程序員都很優(yōu)秀,所以代碼本身的質(zhì)量也很高,而且所有的代碼都在文件系統(tǒng)中,任何人都可以讀取并修改;但唯一的要求是,如果你修改了一個程序的代碼,那么你就要對這個程序負責,從而提醒大家要謹慎。
《新程序員》:你曾說,貝爾實驗室創(chuàng)造的所有偉****明都得益于其開放的氛圍和充足的資金支持,但如今的公司往往只注重短期效益。這是否意味著將越來越難以見證 UNIX 這樣偉****明的誕生?目前,公司在研發(fā)方面還有其他可行的方式嗎?
Brian:我確實認為,過多地聚焦在短期目標和錢上是現(xiàn)今企業(yè)的一個問題。當然,企業(yè)必須要完成特定的工作并交付相應(yīng)的產(chǎn)品,這樣才能有收入維持企業(yè)的運轉(zhuǎn)。但是,如果一切都以短期目標來衡量的話,就沒有辦法去充分地仔細考慮其他選擇,或者尋找更好的行事方式以及為未來投資。然而,和很多事情一樣,這是一個權(quán)衡利弊的過程,我們不難發(fā)現(xiàn),許多優(yōu)秀甚至偉大的產(chǎn)品都來自研發(fā)風格截然不同的公司。
《新程序員》:你在書中提到,偉大的項目往往是由個人建立起來的,然而現(xiàn)在的公司往往都更強調(diào)合作和頭腦風暴。你認為兩者之間是否存在“矛盾”?還是說前者是只適用于“天才”的行事方式?
Brian:在UNIX的早期階段,程序規(guī)模要小得多,所以對團隊的關(guān)注度并沒有那么高。同一個項目可能會由兩個人共同完成,但如果三人一組的話就有點多了。工作中必然會產(chǎn)生合作,合作的過程是有機的,而不是由管理層刻意創(chuàng)造的。現(xiàn)在所說的頭腦風暴在過去也有:人們探討各自的想法,在黑板上寫寫畫畫,編寫程序來測試想法。
如今的系統(tǒng)規(guī)模和環(huán)境都龐大且復(fù)雜,因此獨行俠式的天才能發(fā)揮的作用是十分有限的。但許多大型系統(tǒng)在開始時的規(guī)模都非常小,核心貢獻者也非常少。我們可以想一想編程語言及其編譯器、Linux或各種主要開發(fā)工具。不難發(fā)現(xiàn),我們大多數(shù)的編程語言都是由一兩個或兩三個人創(chuàng)建的。Linux也是從一個人開始發(fā)展起來的。
《新程序員》:UNIX在發(fā)展過程中經(jīng)歷了版本分叉、標準競爭和訴訟,這些也是當今企業(yè)不得不面對的成長之痛,你對這些企業(yè)有什么建議嗎?
Brian:我認為一個企業(yè)總是會很自然地想要通過創(chuàng)造新的、有用的系統(tǒng)、工具、語言和功能來吸引客戶,并且用這些東西來留住自己的客戶。從短期來看這沒什么錯,但從長遠來看,我認為選擇合作會更好。
優(yōu)秀程序員所具備的能力與素質(zhì)
《新程序員》:作為一位“傳奇程序員”,你也曾和許多同樣具有傳奇色彩的程序員合作過,那在你看來,一名優(yōu)秀的程序員應(yīng)該具備什么樣的素質(zhì)呢?
Brian:其實說實話,我是一個非常普通的程序員,但我有幸與一些十分杰出的程序員合作過,比如肯·湯普森(Ken Thompson,UNIX 創(chuàng)造者)和丹尼斯·里奇(Dennis Ritchie,C 語言創(chuàng)始人)。尤其是肯(Ken),他似乎具備一種發(fā)現(xiàn)事物的統(tǒng)一性和通用性的天賦,這使他的代碼簡單、干凈且功能強大。他的工作效率高得令人難以置信,能夠在短時間內(nèi)寫出大量優(yōu)秀的代碼,而且他可以把這些東西全都記在腦子里。他是我認識的最好的程序員。
《新程序員》:肯(Ken)用3周的時間創(chuàng)建了 UNIX,道格(Doug)在幾天內(nèi)就提出了“管道(pipe)”的想法,是什么讓你們有如此高的工作效率?
Brian:因為他們是“別人家的程序員”,我從來沒有這么高效過!當然,肯(Ken)和道格(Doug)(以及其他一些人)確實是有天賦的,但我認為,他們的生產(chǎn)力有一部分來自于他們過去大量的工作經(jīng)驗,對于一些工作他們已經(jīng)形成了條件反射,從而可以非常有效地創(chuàng)造新事物。
《新程序員》:在遇到麻煩或新問題時,你的解決風格是怎樣的?是如何建立自己的思維體系的呢?
Brian:這個問題很籠統(tǒng)。我沒有什么特別的方法,但如果可能的話,我會盡可能地拖延,祈禱問題消失或自行解決。當然,這種方法也不一定總會奏效,但它確實讓我的潛意識有機會來消化這個問題,這對編程是非常有幫助的。
《新程序員》:對于軟件工程師來說,在職業(yè)生涯的不同階段需要培養(yǎng)什么樣的技能或心態(tài)呢?
Brian:下面這兩個技能,不僅僅是對軟件工程師,對每個人而言都很重要。一是學習如何寫,二是學習如何說。如果你能寫好、說好,并且能有效地把技術(shù)語言傳達給非技術(shù)人員的話,這將在你一生的職業(yè)生涯中發(fā)揮難以想象的價值。同時,我還認為,要對“有趣”或“值得學習”的事物保持開放的心態(tài)。不要讓自己變得狹隘,要保持廣泛的興趣。法國偉大的科學家路易斯·巴斯德(Louis Pasteur)曾說過:“機會是留給有準備的人”。所以,你看的東西越多,想的東西越多,探索的東西越多,你就越有可能在某件事上變得越幸運。
未來操作系統(tǒng)猜想
《新程序員》:一般來說,我們將 MULTICS 和 UNIX 的誕生看作是現(xiàn)代操作系統(tǒng)的起源。你認為操作系統(tǒng)發(fā)生了哪些變化?你對現(xiàn)在的主流操作系統(tǒng),比如Windows、macOS、Android、iOS 等有什么看法?
Brian:對這個問題我其實沒有什么看法。但是由于現(xiàn)代操作系統(tǒng)確實需要服務(wù)一個更加復(fù)雜的世界,所以它們相應(yīng)地也會更加復(fù)雜。例如,現(xiàn)在的處理器通常都是多核的,所以多處理成為了操作系統(tǒng)的一部分,這與50年前截然不同。現(xiàn)在內(nèi)存比以往要大得多,外設(shè)也更多。網(wǎng)絡(luò)也逐漸凸顯了其重要性。就我個人而言,因為我用的是MacBook,所以使用macOS系統(tǒng),但我大部分時間只用它來運行標準的UNIX命令。我有一部Android手機,但是手機編程太不好玩了,所以我也就沒怎么嘗試了。
《新程序員》:隨著云計算、人工智能和量子計算的發(fā)展,會不會對操作系統(tǒng)提出新的要求和挑戰(zhàn)?會不會出現(xiàn)新的操作系統(tǒng)概念?
Brian:因為我不是很了解量子計算,所以可能沒辦法給出有價值的看法。但我認為人工智能并不會改變我們對操作系統(tǒng)的看法。如果云計算使用起來更容易一些的話,人們可能會說它只是50、60年前出現(xiàn)的MULTICS和UNIX等分時操作系統(tǒng)的現(xiàn)代實現(xiàn)。所以我想說,這并不是一個新概念,只是一個舊概念的新版本。
《新程序員》: 你曾預(yù)言,對于編程而言,語言將會更容易且更安全。就這一點而言,這特定的“語言”會是什么呢?Rust 或者是更多面向應(yīng)用程序的語言,比如JavaScript、TypeScript、Dart、Swift、Julia 或其他語言?
Brian:如今的大部分編程語言都更安全、簡單,這是批量的而非單一的。每種語言都有其最適合的任務(wù)類型,比如適合嵌入式系統(tǒng)和高效庫實現(xiàn)的C語言,適合大型系統(tǒng)的C++,以及適合作為簡單通用語言的Python,等等。我想,專業(yè)的程序員應(yīng)該可以熟練掌握幾門語言,并且熟悉5~10種其他的語言。舊的語言永不會消亡,它們中的大多數(shù)都還在繼續(xù)發(fā)展,當然,有一些程序的嵌入式系統(tǒng)基礎(chǔ)太大、太復(fù)雜,難以重寫。但是,人們在創(chuàng)造新語言方面有著無窮的創(chuàng)造力,他們希望這些新的語言能夠取代舊的語言,但這從未實現(xiàn)過。
《新程序員》:指針(Pointer)是 C 語言的重要組成部分,程序員需要對內(nèi)存進行管理,這對于初學者甚至是高級程序員都是十分困難的。ALGOL 的創(chuàng)建者之一東尼·霍爾(Tony Hoare)稱,空指針(null-pointer)是他的一個“10億美元的錯誤”,你認為它在語言設(shè)計上是一個錯誤嗎?
Brian:在1972年前后C語言被創(chuàng)造出來的時候,計算機的速度比今天慢了一百萬倍,內(nèi)存也比今天少了一百萬倍。此外,C語言的目的是取代匯編語言來編寫關(guān)鍵的系統(tǒng)程序,最終取代操作系統(tǒng)本身。因此,這種語言必須簡單且高效,它必須使程序員能夠表達所有的計算,包括訪問位置為0的內(nèi)存。當然,大多數(shù)程序員從來不會刻意這么做,都是不小心做的(我們都做過很多次)。所以空指針可以說是一個“錯誤”,但我認為,更應(yīng)該說這是一個在當時很合理的設(shè)計選擇。只不過隨著計算機的功能越來越強大,當然,也隨著越來越多天賦不如丹尼斯·里奇(Dennis Ritchie)和肯·湯普森(Ken Thompson)的程序員編寫C代碼,最終證明,這種設(shè)計選擇的代價極其高昂。
《新程序員》:你曾提到過:“在計算領(lǐng)域中只有兩個真正的問題:計算機太難使用和太難編程”。你認為人工智能(自動生成代碼)的進步會讓編程變得更簡單嗎?
Brian:現(xiàn)在談?wù)摤F(xiàn)代人工智能的發(fā)展還為時過早,但我猜想利用AI自動生成代碼在某些情況下會有幫助。當我們對某些特定的計算任務(wù)理解得足夠透徹,以至于可以自動化生成代碼時,我們就已經(jīng)取得了很大的進步,編譯器就是一個很好的例子。所以我想也會有類似的情況,一個程序可以從程序中學習如何編寫新的程序。但是!別問我細節(jié)。
《新程序員》:你是否能預(yù)見面向?qū)ο缶幊蹋∣bject-Oriented Programming)未來的發(fā)展?或者說它是否已經(jīng)進入了穩(wěn)定停滯期?
Brian:面向?qū)ο缶幊讨皇墙M織計算的一種方法,但肯定不是唯一的方法。它在許多語言中得到了很好的支持,在一些語言中得到了部分支持,而在有的語言中則完全沒有支持。但我并不認為它是一種獨立的事物,僅僅是一種編程技術(shù),它適合解決某些類型的問題,但或許并不是解決其他問題的正確方法。當然,當人們真的要使用它時,仍然要好好地加以利用,以避免深度且脆弱的類層次結(jié)構(gòu),這需要技巧和練習。
《新程序員》:你如何看待“開源”的發(fā)展及其對世界的影響?它在未來將走向何方?在這個過程中,特別是對于中國的開發(fā)者來說,有哪些值得期待的呢?
Brian:開源是一件非常好的事情,并且對軟件行業(yè)的發(fā)展至關(guān)重要(現(xiàn)在幾乎所有東西都和開源有關(guān))。如今我們其實已經(jīng)取得了很大的進步,主要的軟件系統(tǒng),如操作系統(tǒng)、編譯器和工具都可以作為高質(zhì)量商品免費提供。開源使我們可以在他人的工作基礎(chǔ)上進行構(gòu)建,實現(xiàn)共同進步。雖然我無法準確地預(yù)測未來,但我希望開源可以繼續(xù)成為世界的重要組成部分。而且,我強烈希望中國的程序員們能夠為現(xiàn)有的項目作出貢獻,并創(chuàng)建出更多的新項目。
One More Thing
《新程序員》:關(guān)于 UNIX 的歷史,你還有什么要補充的嗎?
Brian:我很幸運。UNIX早期的日子對我而言是非常美好的。貝爾實驗室的環(huán)境很好,我身邊有很多了不起的同事,他們在各個領(lǐng)域不斷地創(chuàng)新。UNIX就是在這種獨特的環(huán)境中誕生的。從這個意義上來說,我認為UNIX是獨一無二、不可復(fù)制的,但在其他地方一定有人也同樣幸運,可以像UNIX那樣為改變世界作出貢獻。我希望更多人都是這樣的幸運兒。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。
負離子發(fā)生器相關(guān)文章:負離子發(fā)生器原理