初學計算機,往往會給你乙個幻覺,就是這樣一台神奇的機器,能夠做到很多你想象不到的事情。這一想法,本是無法可厚非。但如果將「電腦科學」看得過分神秘,或多或少,你將會將其當做神秘的巫術,而不是腳踏實地、按部就班的技術科學。即便是在該領域摸爬滾打多年的人,有時候還是能夠發現自己潛意識中暗藏的對神秘和未知的膜拜。
電腦科學的乙個神奇之處在於,它能夠不知疲倦地24小時連軸工作,能夠處理海量的資料、能夠永不停歇地做計算。這往往會給人乙個幻覺,就是:它能夠容納無限的資料,能夠有無限的引擎資源做計算。可事實是,電腦科學的藝術的精義是:在有限的果殼裡創造無限的世界。它並非具備無限多的儲存空間,也並非具備無限多的計算資源,但它能夠通過合理的規劃,服務於源源不斷到來的問題。雖然只有「有限」之身,卻能夠通過合理的規劃,有條不紊地持續輸出工作成果。
programming做到高階,必然避免不了的問題就是對cpu和記憶體的精細控制,就是對程序/執行緒、記憶體的分配與**。具體地說,就是對執行緒池的規劃,對記憶體**的精細控制,如 malloc/free 或 gc(garbage collection)原理與機制的精準掌握。
一般研習programming的道路,一定是以示例為主,在建立起足夠多的應用直觀之後,才能夠逐步加深對某些概念的**。這一方式也可以理解,畢竟,**的世界是乙個看不見、摸不著、但又真實存在的形式上的世界。但這就導致了乙個問題,即是:這樣的入門比起其它一些看得見、摸得著的學科來講,還太過粗淺,甚至,這根本就不能算作是「學科」的入門,只能算是類似於幼兒園小朋友的「實踐活動」課。因為作為「入門」,它沒有介紹清楚它的目標、基本核心思想、體系結構。但矛盾的地方在於,如果要能闡述清楚這些東西,又必須事先建立對這些抽象概念的了解。於是,先有雞還是先有蛋的問題就開始了。而要解決「雞」「蛋」問題,最好的辦法還是先從「直觀」的那一端入手。然後等到「直觀」建立得差不多的時候,再重新來一遍「入門」的教育。
當你已經具備一定程度的programming實踐經驗後,你應該重新回到原點出,重新思考一下關於「入門」所應該覆蓋到的幾個基本要點:這門學科需要解決的問題是什麼、它的核心指導方**又是什麼、它的知識體系結構又是什麼。這些基本的問題,需要不斷地回過頭來去審視自己。不斷嘗試回答這些最基本的東西,能夠讓你對計算機學科梳理得更為清晰透徹,也能夠對其本質做更為深刻的理解。
計算機所提供的核心服務,是快速地執行機械性的工作,即快速執行分配給它的指令。但這樣的優勢並非毫無限制,它受制於有限的空間,更受制於有限的時間,還受制於將「現實問題」轉化為「可執行指令」的準確性、有效性和條理性。而它們分別對應了:
初階developer的主要功夫,主要花費在**的實現,以及一定程度上的軟體工程的有效組織。高階developer則會越來越關注資源的復用效率,即:cpu/記憶體的管理。更往上走,則是對這些技能的綜合考慮,畢竟,這幾條目標並非涇渭分明,很多時候,每一條的提公升能夠促進其它方面的提公升,從而形成相互影響的放大效應。這正如「資料結構」同「演算法」是密不可分的:演算法的提公升有賴於資料結構的精準選取,資料結構的建立也有賴於演算法提公升的需求。
當我們談論一段**、乙個元件、乙個框架時,我們其實需要了解:
如果你對所使用的工具,無法了解到計算資源是被如何管理的,那麼,你對它的掌握就還不夠徹底。為何?因為凡是屹立於計算機之上的存在,都受制於這個「大環境」的硬性約束:cpu、記憶體的資源限制。如果這些「根本性的約束」對你來講是乙個黑箱,那麼,你就永遠無法這款工具的一些根本性的取捨標準。只有了解到了這個程度,你才能夠看到在根本性的限制之下,為何要做一些貌似奇怪的取捨,為何要如此來設計系統。
果殼中的宇宙
霍金寫的,不錯。彩頁,好看,就像看 一樣。不過使用的文字對我來說還是有點深奧。和過去一樣,我們還是追求知識,探索宇宙的奧秘,希望知曉過去和未來,樂意探知世界的邊際。有個理論很有趣。這或許是我見識短淺。時間也是有形狀的,和空間一樣。那麼時間能不能彎曲回到過去呢?書上說,時間有開始也有終止。黑洞可以記錄...
宇宙中的「創造之柱」
美國宇航局 nasa 揭示了著名的 創造之柱 pillars of creation 的新觀點,這是乙個由哈勃太空望遠鏡於1995年首次記錄的恆星苗圃。創造之柱距離鷹星雲約有6,000光年。望遠鏡背後的團隊還發布了一項新功能,突出了一年中每一天的不同影象。美國國家航空航天局 nasa 發布了著名的 ...
無限與有限的矛盾
前段時間在知乎看到了幾篇文章 為什麼春秋時大國間的戰爭還是爭霸戰爭為主,到了戰國就轉向更殘酷的滅國統一戰爭?怎麼評價重農抑商政策對中國傳統社會的影響?了解到了計量歷史學這種新的歷史研究方法。中國古代王朝頻繁的興衰的背後其實是馬爾薩斯陷阱在作怪。或者換句話說是無限的發展潛力與有限的可用資源之間的矛盾。...