Linux之父:編程之美

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我不知道該如何清楚地描述我對編程的癡迷。對編程的人來說,這是世界上最有趣的事情。這是一個比國際象棋更復雜的遊戲,在這個遊戲中,你可以制定自己的規則,並基於這些規則得到最終的結果。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然而,從表面上看,它似乎是地球上最無聊的東西。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"編程最初令人感到興奮的地方在於,當你告訴計算機要做什麼,它就會按照你的意思去做,分毫不差,馬不停蹄,毫無怨言。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這本身就很有趣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,儘管最初令人着迷,單靠盲目順從顯然並不能讓編程成爲討人喜歡的伴侶。讓編程變得如此吸引人的是:你可以讓計算機按照你的意思執行任務,但你必須先弄清楚如何執行。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我個人認爲,計算機科學與物理學有很多共同之處。兩者都是關於世界是如何在一個基本層面上運作。當然,它們的不同之處在於,在物理學裏,你要弄清楚世界是如何構成的,而在計算機科學裏,你要創造世界。在計算機世界裏,你是創造者,你最終將控制發生的一切。如果足夠優秀,你可以成爲某個領域的上帝。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我這麼說可能冒犯了地球上大約一半的人。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但真的是這樣。"},{"type":"text","marks":[{"type":"strong"}],"text":"你要創造自己的世界,唯一能限制你的是機器的能力和你自己的能力"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想象一下你要建造一個實用的樹屋,它有一個活板門,而且很穩固。但是,每個人都知道簡單穩固的樹屋和漂亮樹屋之間的區別是什麼。它是藝術和工程的結合。這就是爲什麼編程可以如此迷人的一個原因。與有趣、漂亮和令人驚豔相比,功能就變得次要了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這是一種創造性的活動。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最初吸引我接觸編程的是我想要弄清楚計算機的工作原理,其中最大的一個樂趣是知道了計算機就像數學一樣:你可以用自己的規則來構建自己的世界。在物理學裏,你會受到已有規則的約束。但在數學和編程領域,不管是什麼,只要它是自洽(self-consistent)的就行。數學不必受任何外部邏輯的約束,只要它本身具有邏輯性。數學家們都知道,你可以定義一組數學方程式,讓3加3等於2。你可以做任何你想做的事,只是在不斷增加複雜性的同時,要小心不要創造出與你所創造的世界不協調的東西。一個美麗的世界,不能包含任何瑕疵,而編程就是這樣的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"人們之所以如此迷戀計算機,其中一個原因是計算機能讓你體驗你所創造的世界,並瞭解一切可能的東西。在數學裏,你需要通過大腦進行想象。例如,當大多數人想到幾何時,他們想到的是歐幾里得幾何。但是,計算機可以幫助人們可視化不同的幾何圖形,甚至是那些非歐幾里得圖形。有了計算機,你就可以看到這些虛構的世界是什麼樣子的。還記得"},{"type":"text","marks":[{"type":"strong"}],"text":"曼德爾布羅特集合"},{"type":"text","text":"的分形幾何圖形嗎?這些都是純粹數學世界的視覺表現,在計算機出現之前是無法被可視化的。曼德爾布羅特只是制定了這些關於一個不存在的世界的規則,這些規則與現實毫無關聯,但事實證明,它們創造了迷人的圖案。有了計算機和編程,你就可以創造新世界。有時候,這些圖案真的很漂亮。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/53\/53bd4f647a22111bef8e1fdcd7fff362.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/86\/865b7ab05a2c38b3abb6861c0ea5d56d.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/ae\/aec7608fd7bced6e66efb60501cf52f0.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"曼德爾布羅特集合"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"大多數時候你並不是在創造世界,你只是通過寫程序來完成某個特定的任務。這個時候,你不是在創造新世界,而是在解決計算機世界裏的某個問題。你通過思考來解決問題。只有某一種類型的人能坐在那裏盯着電腦屏幕思考問題,比如像我這樣的書呆子。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"操作系統是計算機的基礎,而開發操作系統是一個終極挑戰。開發操作系統就是在創造一個世界,所有的程序都在這個世界裏運行,規則由你來制定,比如什麼是可接受的、什麼可以做、什麼不能做。每個程序都遵循這些規則,而操作系統是基礎。操作系統就像是你所創造的世界的憲法,其他程序則是普通法律。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有時候,法律本身沒有意義,意義本身才是你要追求的東西。你希望用正確的方法得到正確的答案。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"還記得學校裏總能得到正確答案的那個人嗎?那個人之所以比其他人更快得到答案,是因爲他(她)並沒有嘗試去得到答案。那個人不知道該如何解決這個問題,但他(她)會用正確的方式思考問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"計算機也是如此。你可以用蠻力或愚蠢的方式嘗試尋找答案,或者你找到了正確的方法,問題就迎刃而解了。如果從另一個角度看問題,你就會頓悟:問題之所以是問題,是因爲你看問題的方式不對。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"也許,這方面最好的例子不是來自計算機界,而是來自數學界。有這樣一個故事:偉大的德國數學家卡爾·弗里德里希·高在學校的時候,他的老師講課索然無味,爲了讓學生們全神貫注,他要學生們把1到100之間所有的數字加起來。老師希望這些年輕人花一整天時間來算出這些數字的和。但是五分鐘之後,這位嶄露頭角的數學家就給出了正確答案:5050。他的解決辦法不是把所有數字加起來,因爲那樣做太愚蠢了。他發現1加100等於101,2加99等於101,3加98等於101,最後是50和51等於101。很快,他得出總共是50個101,所以答案是5050。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"也許這個故事是虛構的,但其寓意很明顯:一個偉大的數學家不會用漫長而無聊的方法來解決問題,因爲他會看到隱藏在問題背後的模式,然後應用這些模式找到答案。在計算機科學領域也是如此。當然,你也可以編寫一個程序來計算數字的和。要在現在的計算機上完成這個任務是件非常容易的事。但是,一個偉大的程序員,只要他想一想就知道答案是什麼。他也知道如何寫出一個漂亮的程序,用一種新的並且是正確的方法來解決問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當你不知道該如何以更好、更漂亮的方式解決問題,冥思苦想了三天三夜。我們很難解釋爲什麼這個過程會讓人着迷,但一旦你找到了正確的方法,那種感覺將是無與倫比的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/www.brynmawr.edu\/cs\/resources\/beauty-of-programming?fileGuid=kxiSzjaRxbcskaHI"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章