自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用戶操作系統(tǒng)Unix的前世今生

系統(tǒng)
在 Kernighan 看來,今天的代碼編寫太難了,比起某個不知道多少層代碼的文檔中去找需要的函數(shù),自己寫程序邏輯這種創(chuàng)作的行為更加容易。Ken 的電子游戲或者類旅行商問題哪個更重要其實說不好,那么如何打造一個提升程序員工作效率的環(huán)境?如何讓編程變得更加容易呢?

【前言】

Brain Kernighan,加拿大計算機科學家,曾就職于貝爾實驗室,目前為普林斯頓大學教授。他曾參與 Unix 的研發(fā),也是 AMPL 與 AWK 的共同創(chuàng)造者之一,他和 Dennis Ritchie 共同寫作了C語言的第一本著作《C程序設(shè)計語言》,他是大名鼎鼎的 K & R 里面的 K,當然也是 AWK 里面的 K 。作為 Unix 的開發(fā)者之一、Unix 命名者,親眼見證了 Unix 的誕生。 關(guān)于 Kernighan,還有一個有趣的定律——柯林漢定律。

柯林漢定律:調(diào)試一段代碼的難度是編寫它們的兩倍,因此如果你的代碼寫的盡可能巧妙,按照定義而言,你可能沒有能力來調(diào)試它了。

關(guān)于 Unix ,除了 Kernighan,有三個人的名字需要記?。好绹嬎銠C科學學者和工程師、B語言發(fā)明人 Ken Thompson,美國計算機科學家C語言的創(chuàng)造者、Unix操作系統(tǒng)的關(guān)鍵開發(fā)者Dennis Ritchie 以及 達特茅斯學院的兼職教授、著名數(shù)學家、工程師以及程序員 Doug Mcllory。 Unix 的誕生地貝爾實驗室真的是大神云集,自己好幾天才能做出來的東西別人可能一頓飯工夫就能解決。這種自由的環(huán)境令人不禁想起來著名物理學家費恩曼介紹自己在 Caltech 的有趣故事。在 Unix 的誕生之路上,有哪些人和事給 Kernighan 留下了深刻印象呢?

在貝爾實驗室的第一天就遇到了 Richard Hamming !

1967 年,當 Kernighan 還是一個研究生的時候,就拿到了貝爾實驗室的實習,貝爾實驗室可真大,三千多人在此工作,Kernighan 雖然是實習生,也配置了獨立辦公室,讓我等打工人羨慕不已。令人更酸的是,Kernighan 后來去貝爾實驗室都沒有面試,只要完成博士論文就可以了。和我們一樣,快到中午的時候,也會思考“我中午要吃點什么才好呢?。就像電視劇當中的劇情一樣,真的就有一位紳士來邀請共進午餐。他介紹說自己是 Dick(英文名 Richard 的簡寫和昵稱),Kernighan 當時也沒有記住他的名字,只能偷偷去他的辦公室看門口的牌牌,他就是 Richard Hamming!

Hamming 的英文維基百科頁面特別的長,隨便哪個都是碾壓級別的:參與曼哈頓計劃為核武器發(fā)射編寫程序、圖靈獎得主、糾錯碼發(fā)明人,為了表彰他的貢獻,IEEE 還特意設(shè)立以他的名字命名的獎項。和費恩曼一樣,Hamming 在實驗室里面也不喜歡當團隊的領(lǐng)導(dǎo)者。

將 Kernighan 對于 Hamming 的描述概括起來就是兩個字——偉大。這可不是高帽,Hamming 真的是這樣要求自己的,這個天賦異丙而又有趣的人,在很多方面對世界做出了深刻的影響。Hamming 說過,他會把周五的下午用來思考偉大的事情。他還會去找其他方向的人聊天,發(fā)出靈魂拷問:“你的研究是否有可能獲得諾貝爾獎?”如果得到否定回答的話,就會化身教鞭“那你為什么要做?這個研究連獲得諾貝爾獎的可能都沒有,肯定沒那么重要了,你為什么要把時間浪費在不重要的事情上呢?”退休幾年之后,他還發(fā)表了關(guān)于如何獲得成功職業(yè)生涯建議的演講,題目為《你和你的研究》。

Fortran 那么難

話題說回 Kernighan,他聽從了 Hamming 的建議,論文研究的課題是圖分割,這個跟著名的旅行商問題比較像。不過他還得用普林斯頓的電腦,要知道,1967年的電腦跟今天的可大不一樣,和段子里面中用針刻光盤類似,那時候的程序員編程還是喜歡用打孔卡,比如 Fortran 和 Combol 語言。Fortran 是用于科學計算的編程語言,現(xiàn)在也有很多科學家的課題組或者專業(yè)軟件在使用Fortran語言編程。

Kernighan 其實也是個有趣的家伙,有一次他們參與了一條廣告的拍攝,他反常地打了一條領(lǐng)帶,結(jié)果幾周后對方表示照片丟失了,需要再拍一張,結(jié)果 Kernighan 堅決表示不打領(lǐng)帶拍攝,后來發(fā)現(xiàn)刊登的還是打領(lǐng)帶的照片,因為那張照片居然被他們找到了。

現(xiàn)在連小學生都會玩電腦和平板,但是大部分見到軟盤的話應(yīng)該會當成“保存按鈕”,就更不用說古老的打孔卡了。感興趣的朋友可以搜索一下關(guān)于打孔卡的歷史。編寫一個程序真的太費功夫了。做好的打孔卡裝在盒子里面,去計算機房,計算機操作人員給你們處理,你就只能等結(jié)果,而且可不會給你顯示什么報錯,就算這樣,在那個時候真的是足夠快、且昂貴了。

【關(guān)于打孔卡】19世紀80年代,美國人口調(diào)查局職員發(fā)明了用于人口普查的穿孔卡片和機器,用于90年的人口普查,用了六周就完成了之前需要7年的工程。何樂禮創(chuàng)建的公司發(fā)展成了今天的 IBM ,1928 年(算到這邊就是民國十七年),IBM 發(fā)現(xiàn)矩形孔更省空間,發(fā)明了 80 列的矩陣孔卡片。它的設(shè)計是這樣的,最下面的 10 行命名為 0-9 行,頂部兩行為 11、12 行,每列的孔代表一個字符,一些特殊的字符用了額外的單孔雙孔表示。 后來 IBM 又對打孔卡進行了一系列的改進。

 

用戶操作系統(tǒng)Unix的前世今生
80 孔打孔卡

分時系統(tǒng)和 Multics 的誕生

在 Unix 分時系統(tǒng)出現(xiàn)之前,人工和機器的交互簡直就像《瘋狂動物城》里面的樹懶一樣,慢是真慢,而且毫無交互體驗,和現(xiàn)在相同的是,提交者都不希望有 bug 出現(xiàn),即使多提交幾張打孔卡的代碼也無妨。

Kernighan 講到,他注意到 Jerry Saltzer寫的給博士論文排版的程序,自己也寫了一個代碼來給自己的論文進行排版。但是 Fortran 對于字符的處理實在是不太好,以至于最后論文居然有 3 盒打孔卡,每盒 5000 張,大概 5 公斤那么重,其中 1000 張是程序代碼,等了兩三個小時之后才打出來這份論文。

貝爾實驗室的 Ken Thompson 和 Dennis Ritchie 開始了一個新的項目——Multics。這是個分時操作系統(tǒng),在交互式方面有著重要的突破。它允許多人連接到計算機上,每個人都可以獲得一部分時間,給用戶一個獨占整個計算機的感覺,不過計算機實際上還會在他們之間來回切換。如果你可以“獨享”的話,你就可以使用電傳打字機而不需要打孔卡了。電傳打字機這個東西是打字機、打印機和電話線的結(jié)合體,你可以輸入命令,通過電話線傳給計算機,然后輸出。這種原理和現(xiàn)在的 SSH 其實比較類似,

打孔卡的環(huán)境其實叫做批處理環(huán)境,這個提交腳本作業(yè)、Windows 當中的 bat 比較像,如果代碼完正確的話,其實效率還是挺高的,就比如我們現(xiàn)在利用超算提交作業(yè),往往就是用的批處理腳本,例如著名的競賽網(wǎng)站 Kaggle 平臺就會分別提供 Notebook 交互環(huán)境和 Scripts 的模式。有了分時系統(tǒng),用戶就可以進行及時的人機交互,對于較小的不成熟的作業(yè)就能夠及時獲得反饋。

了不起的 Ken Thompson

不過,Multics 實在是太貴了,盡管它能提供很好的計算環(huán)境,很多針對它的描述用到了”過度工程“這個詞。 因此,貝爾實驗室在 1969 年退出了項目,只有 MIT 和 AT&T 還在支持。雖然貝爾實驗室退出了 Multics計劃,Ken 可沒閑著,實驗室有一臺 PDP-7,說是一臺微型機,實際上也是需要一件屋子才能放得下,不過還好已經(jīng)有顯示器了。他就用這臺 PDP-7 機器,把自己寫的《Space Travel》 游戲在上面運行了。游戲當中玩家可以互相射擊,而且還加入了引力效果,讓玩家對軌道動力學有了簡單了解。

總是有那么多巧合,Ken 的愛人帶著一歲的孩子去加州呆了三周度假。利用這三周的時間,Ken 完成了可以正常運行的系統(tǒng),他命名為“Uniplexed Information and Computing System”,縮寫為 UNICS ,這可以說是 Unix 的初代機了。

對于文檔處理軟件,Ken 也很感興趣,為了論文格式之類的問題,他們買了一臺排字機,這個東西有點像現(xiàn)在的激光打印機,打印到感光紙上,然后洗成照片。不過機器本身的軟件很容易出錯,兩人商量了決定逆向一下這個軟件,設(shè)計自己的軟件來運行。一臺機器、使用手冊,匯編語言的代碼,這就是他們目前手頭上有的東西。Kernighan 想著太難了還是先吃個晚飯,等他回來的時候,Ken 已經(jīng)寫出了反匯編程序看到裸機當中代碼了,第二天他甚至還用 B 語言寫了一個解釋器。Kernighan 表示說這些事情你我都可以完成,但絕對不是幾個小時就能搞定的。對 Ken 來說簡直就是砍瓜切菜,手到擒來。

文件系統(tǒng)、shell 和管道

早期的計算機,例如 IBM,實際上沒有什么文件系統(tǒng),雖然存儲信息的方式比較多,但是都比較局限于特定設(shè)備和場景,但訪問輔助存儲的信息是,你就得記住注入光盤柱面等等奇怪的屬性。而 Ken 在 Unix 當中就實現(xiàn)了更加簡單整潔的文件系統(tǒng)。只要 6 個系統(tǒng)調(diào)用就能獲得處理信息需要的所有東西。

關(guān)于 Unix 另外一個偉大的點在于交互式 shell,也就是我們喜歡的命令行。這個想法最初在 Multics 上就有體現(xiàn),只是 Unix 上更加清晰。早期的管道概念也是在這里萌生的,你不用經(jīng)過中間件,就能將程序的輸出放到另一個的輸入當中,大概 1973 年,Doug Mcllory 希望把程序接在一起,就像花園里面的水管連接起來一樣,后來反復(fù)提及,他想到了用豎線,也就是我們今天的管道符號。Ken 也將管道符號添加到了 Unix 系統(tǒng)。這個有點像函數(shù)式編程,Unix 程序似乎一下子變成了積木,有了拼接的可能。

Unix 文化

Unix 系統(tǒng)后來被移植到了 PDP-11 上面,放置這臺機器的地方在貝爾實驗室的 6 層,這就是 Unix 房間,房間很大,但是走廊光線很差,還有些二戰(zhàn)時期的垃圾設(shè)備。不過房間本身不錯,就像現(xiàn)在開放式環(huán)境一樣,大家可以閑聊,雖然有點嘈雜,畢竟大家的工作一致,有時候很容易得到啟發(fā)。

你可以在辦公室里面思考程序,也可以寫在黑板上,需要的時候在放回公共區(qū)域,有些人就喜歡一直在公共區(qū)域里。比如 Ken,他從來不在自己的辦公室里面,Kernighan 就喜歡在辦公室里面,然和每隔一兩個小時就去沖個咖啡,和別人交流一下。整棟大樓的人都很愿意和別人交流,樓里面的走廊里面貼著很多東西。計算機方向的人在兩個小走廊直接辦公,他們很愿意來回走動。不過 Unix 房間某個時期在走廊的一端,后來又到了六樓,空間非常緊湊,不過這種布局也更方便了大家交談。這種友善的環(huán)境當中,經(jīng)常能發(fā)現(xiàn)一些有趣的東西。

據(jù) Kernighan 講,當時他們還搬來了 10kg 的巧克力,人們用刀切一兩塊帶走,搞得滿地都是渣渣,估計負責清潔的人都要炸了。有時候你走進 Unix 房間,走到旁邊的屋子里面,聽到人們會討論 Unix 多么強大或者給別人介紹我們做的其他東西,有時候還會有一些名人到訪。整個氛圍輕松愉快。Ritchie 經(jīng)常會把他姐姐送給他的英國諷刺刊物《私家偵探》放在桌子上,一般就在巧克力旁邊,我有時候也會翻一下看看里面有趣的卡通畫,不過有些東西真的是英式幽默,沒有在英國生活過可能無法理解。

給 CIA 演示

Unix 的強大引來參觀者無數(shù),70年代中后期,Kernighan 他們就要給許多名人展示 Unix 系統(tǒng), 陪同人員還都是貝爾實驗室的高層。不過最有意思的還是中情局局長,William Colby。

展示的內(nèi)容主要基于 Unix 的組合思想,比如管道,多個程序組合就能比寫一個專用程序容易得多。常見的展示就是拼寫檢查,可以把文檔分割成單詞,然后都變成小寫,獲得一片叫好。不過,由于當時的機器比較慢,知道 Colby 要來的時候,提前運行了管道,然后把結(jié)果存在文件里面當天直接打印,畢竟不能讓大人物等三四十秒。這就是一個經(jīng)典的“演示工程”。不過比今天很多"PPT 項目”已經(jīng)好很多了。

如果對于程序誰有新的想法,也可以寫一個新版本來改進,不過這里有個特別的規(guī)則,最后修改這擁有程序的所有權(quán),Kernighan 后來成為了 ed 文本編輯器的所有者。這時候,其實計算機也是一個社區(qū),只是你們看不到誰在線而已。那么還有個命令就是 who,不僅能看到誰在線,還能知道他最后做了什么。這種方式方便了信息共享和共同交流。

編程很難,如何變得簡單?

我們今天用的一切,比如分享代碼樹、審查 PR 等等,其機制在四五十年前就出現(xiàn)了。后來 Unix 傳到了貝爾實驗室之外,包括源碼,人們開始給 Unix 貢獻代碼,雖然這不是開源,但是和開源非常相似。

在 Kernighan 看來,今天的代碼編寫太難了,比起某個不知道多少層代碼的文檔中去找需要的函數(shù),自己寫程序邏輯這種創(chuàng)作的行為更加容易。Ken 的電子游戲或者類旅行商問題哪個更重要其實說不好,那么如何打造一個提升程序員工作效率的環(huán)境?如何讓編程變得更加容易呢?如果做出了一些能對自己有幫助的事情,對他人的工作可能也會有所改善,何樂而不為呢?

責任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2021-06-09 15:15:10

鴻蒙HarmonyOS應(yīng)用

2019-07-08 18:23:45

Windows操作系統(tǒng)功能

2010-04-20 10:19:51

Unix操作系統(tǒng)

2010-04-15 18:10:30

2010-04-19 14:29:59

2010-04-28 18:24:11

2010-04-15 14:40:26

Unix操作系統(tǒng)

2010-04-13 12:27:44

Unix操作系統(tǒng)

2010-05-10 17:11:12

2010-04-16 09:27:36

2010-04-30 17:53:29

2010-04-09 10:49:01

Unix操作系統(tǒng)

2010-04-28 19:11:29

Unix操作系統(tǒng)

2010-05-06 17:59:50

Unix命令

2011-08-23 09:52:31

CSS

2025-02-12 11:25:39

2014-07-30 10:55:27

2015-11-18 14:14:11

OPNFVNFV

2010-04-08 16:18:22

Unix操作系統(tǒng)工具

2010-04-19 18:18:30

Unix操作系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號