作者:Linus Torvalds(“最偉大程序員”之一,對(duì) Linux 內(nèi)核開(kāi)發(fā)起著至關(guān)重要的作用)
譯者:賀佳
原文:The Beauty of Programming
雖然還不知道怎樣去解釋我對(duì)編程的迷戀,但是我想盡量把這種感受傳遞給你。對(duì)于一些編程者來(lái)說(shuō),這世上再?zèng)]有比它更有趣的事情了。這可比下棋強(qiáng)多了,你可以自己制定規(guī)則,并且利用它,獲得一切想得到的結(jié)果。
不過(guò),在旁人看來(lái),編程可能是世界上最無(wú)聊的東西了。
編程最初讓人興奮的點(diǎn)很容易解釋:只要告訴計(jì)算機(jī)做什么,它就會(huì)一一照辦,一絲不茍、始終不渝、并且絕無(wú)抱怨。
這本身就很有趣。
當(dāng)然,一味地盲從雖然最初令人著迷,但顯然單靠這一點(diǎn),并不能讓人終生為伴。編程的迷人之處在于,在讓計(jì)算機(jī)執(zhí)行指令之前,你得弄明白怎么做。
個(gè)人而言,我堅(jiān)信計(jì)算機(jī)科學(xué)與物理學(xué)有諸多共同點(diǎn)。兩者都在一個(gè)相當(dāng)基礎(chǔ)層面的探討世界的運(yùn)行規(guī)則。在物理學(xué)領(lǐng)域,人們要研究世界如何構(gòu)成,而在計(jì)算機(jī)科學(xué)中,你可以創(chuàng)造世界。
在計(jì)算機(jī)的世界里,你就是“造物主”,你主宰一切的發(fā)生。如果足夠優(yōu)秀,你甚至可以成為“上帝”,當(dāng)然,是就這個(gè)小世界而言的。
我這么說(shuō)可能冒犯了世上一半的人。
但事實(shí)便是如此。你可以創(chuàng)造屬于自己的世界,對(duì)你唯一的限制就是機(jī)器的性能,很多時(shí)候你會(huì)發(fā)現(xiàn),也可能是你自己的能力。
想想樹(shù)屋吧。你可以造一個(gè)功能齊備、結(jié)構(gòu)穩(wěn)定還帶著活動(dòng)門的樹(shù)屋。人人都知道樹(shù)屋是簡(jiǎn)陋還是精致,要看怎么在搭屋的樹(shù)上進(jìn)行創(chuàng)作。這關(guān)乎藝術(shù)和工程學(xué)的結(jié)合。這也是編程如此引人入勝又令人充滿滿足感的原因之一。這種感覺(jué)僅次于有趣、漂亮或者令人驚嘆。
它還可以訓(xùn)練創(chuàng)造力。
最初吸引我參與編程的是,想要了解計(jì)算機(jī)工作原理的過(guò)程。最大的樂(lè)趣之一是,我發(fā)現(xiàn)計(jì)算機(jī)就像數(shù)學(xué):你可以用其規(guī)則創(chuàng)造屬于你自己的世界。在物理學(xué)中,人們要受到既有規(guī)則的束縛,但數(shù)學(xué)不同,和編程一樣,只要自洽,一切皆可行。數(shù)學(xué)不必受外部邏輯的約束,但它必須有自身邏輯。每一個(gè)數(shù)學(xué)家都知道,你確實(shí)可以設(shè)立一組“3+3=2”的方程。事實(shí)上,你可以做任何想做的事,但隨著所創(chuàng)造的這個(gè)“世界”日漸復(fù)雜,你必須要小心地保持它們邏輯上的一致性。為了這個(gè)小小“世界”的精致美好,不能有任何疏漏。這就是編程的工作原理。
人們對(duì)計(jì)算機(jī)著迷的原因之一是,它能使人感受自己創(chuàng)造出的新世界,去了解什么是可能的。數(shù)學(xué)上,人們能在腦子里聯(lián)想。比如,提到幾何形狀,大多數(shù)人會(huì)想到歐幾里得幾何,而計(jì)算機(jī)可以幫助人們實(shí)現(xiàn)所想不同幾何形狀的可視化,它們可都不是歐幾里得幾何。
利用計(jì)算機(jī),你可以進(jìn)入這些虛擬世界,并且實(shí)實(shí)在在看到它們的樣子。還記得Mandelbrot set基于Benoit Mandelbrot方程的分形圖像嗎?
它們就是純數(shù)學(xué)世界的視覺(jué)表現(xiàn),這在計(jì)算機(jī)出現(xiàn)之前是無(wú)法想象的。
Mandelbrot隨意為他的世界編造了些不存在的規(guī)則,與現(xiàn)實(shí)世界無(wú)關(guān),制定了這些任意規(guī)則,但事實(shí)證明,這些規(guī)則所創(chuàng)造的模式令人著迷。運(yùn)用計(jì)算機(jī)和編程,你可以建立一個(gè)全新的世界,有時(shí),這個(gè)模式真是很美。
大多數(shù)情況下,你并沒(méi)有在做上面所說(shuō)的事。你只是在簡(jiǎn)單寫(xiě)個(gè)程序完成某個(gè)特定任務(wù)。
此時(shí),你并不是在創(chuàng)造一個(gè)新世界,而是在解決計(jì)算機(jī)世界中的問(wèn)題。這個(gè)問(wèn)題要想辦法解決,而只有某一類的人才會(huì)坐在屏幕前盯著屏幕思考這些問(wèn)題,像我這樣的“書(shū)呆子”。
操作系統(tǒng)是計(jì)算機(jī)的基礎(chǔ),而創(chuàng)造一個(gè)操作系統(tǒng)則是計(jì)算機(jī)領(lǐng)域的終極挑戰(zhàn)。當(dāng)你創(chuàng)建操作系統(tǒng)的時(shí)候,你就是在創(chuàng)造一個(gè)世界,在這個(gè)“世界”中,所有計(jì)算機(jī)程序基本上都會(huì)實(shí)時(shí)運(yùn)行,而你則在制定規(guī)則,規(guī)定什么合適,什么可以做,什么不能做。程序來(lái)具體運(yùn)行,但操作系統(tǒng)是最基礎(chǔ)的。這就像是你在制定這片“土地”上的憲法,其他計(jì)算機(jī)上運(yùn)行的程序則是普通法。
有時(shí)候,某條規(guī)則講不通,但是“通”的是你努力追求的。
你希望能看到解法,并且發(fā)現(xiàn)自己通過(guò)正確方式得到了正確答案。
還記得學(xué)校里那些總能做對(duì)題的人嗎?他們比別人做得快,之所以會(huì)這樣,是因?yàn)樗麄儾⒉蛔非筮@個(gè)。他們并不是在學(xué)如何解決問(wèn)題,而只是在以正確的方式思考問(wèn)題。一旦有了結(jié)果,就非常完美。
在計(jì)算機(jī)中也是如此。你可以用蠻力,愚蠢地對(duì)付問(wèn)題,直到它不再是問(wèn)題,或者找到正確的方法,讓問(wèn)題自己消失。換一種方式看問(wèn)題,你會(huì)頓悟:它之所以是問(wèn)題,是因?yàn)榭创姆绞藉e(cuò)了。
最好的還是數(shù)學(xué)中的一個(gè)例子。偉大的德國(guó)數(shù)學(xué)家高斯(mathematician Carl Friedrich Gauss)小時(shí)候,某天,老師很無(wú)聊,為了使學(xué)生專心,決定讓他們從1加到100。他希望學(xué)生們花一整天算完。
沒(méi)想到,這位初出茅廬的數(shù)學(xué)家五分鐘就交卷了,答案完全正確:5050。這道題的解法并不是將所有數(shù)字順序一一相加,這樣既笨拙又勞神。高斯發(fā)現(xiàn),將1和100相加可以得到101,然后2和99相加也是101,3和98也是,直到50和51相加得到101。僅僅幾秒鐘,他注意到正好50對(duì)101,因此答案是5050。
也許這個(gè)故事是虛構(gòu)的,但是道理很清楚:偉大的數(shù)學(xué)家并沒(méi)有采用漫長(zhǎng)而無(wú)聊的方式解決問(wèn)題,他看到了問(wèn)題背后的真正規(guī)律,并且運(yùn)用該規(guī)律用更好的方式找到了答案。
在計(jì)算機(jī)科學(xué)領(lǐng)域也是如此。當(dāng)然,你可以寫(xiě)一個(gè)程序來(lái)計(jì)算總和。在現(xiàn)在的電腦上,也就是一瞬間的事。但是一個(gè)偉大的程序員只要夠聰明,就知道答案是什么。他知道要寫(xiě)一個(gè)漂亮的程序,用一種新的方法來(lái)解決問(wèn)題,最終,這也是正確的方法。
還是很難解釋,連著把頭往墻上撞三天還找不出更好的、更漂亮的解決方法這件事有什么好迷人的,但是一旦你找到了,那真是世界上最棒的感覺(jué)了。
Refenrence:
https://www.brynmawr.edu/cs/resources/beauty-of-programming
學(xué)術(shù)頭條-生命科學(xué)讀者交流群來(lái)啦!
為了給大家?guī)?lái)更優(yōu)質(zhì)的體驗(yàn)
本群采取實(shí)名驗(yàn)證入群
歡迎生命科學(xué)、醫(yī)學(xué)相關(guān)話題的討論、交流和分享
聯(lián)系客服