程序員為什麼要懂底層計算機結構

萬丈高樓平地起,計算機系統就像程序員金字塔的地基。理解了計算機系統的構造原理,在寫程序的道路上才能越走越遠。道理LZ很早就懂了,可是一直沒下定決心好好鑽研,或許是覺得日常工作中根本用不到這些,又或許是每次拿起書看到那些複雜的底層架構,看到存儲器,寄存器,CPU,總線等等這些概念就頭大。總之,由於各種各樣的原因,對這塊的知識一直沒有認真花時間去鑽研。那麼你可能會問,那你寫這篇博客的題目不就是準備學習這方面的知識嗎?是的,LZ 準備下定決心鑽研了,至於原因如下:

①、經常用一些不知其所以然的技術,會感到不安

大家可以看看LZ前面寫的博客,很多都是對框架的用法進行總結,至於為什麼這個框架要這麼實現等等而涉及的很少。原因很簡單,LZ 研究框架的源碼很吃力。因為源碼的實現往往涉及到多方面的的知識,比如設計模式,比如JDK的一些高級特性等等。LZ 是想做一個有夢想的鹹魚,但是每次看到很多不懂的東西,就深深的體會到現實與理想落差的痛苦,所以LZ下定決心要改變這種無力感。

②、在這個數據爆炸的年代,很多系統對於項目性能的優化有很高的要求。那麼如何調優成為了程序員不可避免的問題,我們知道 Java 是運行在 JVM 上的,程序的調優那就需要對 JVM 有一定的瞭解。LZ 本來想直接研究 JVM 的,書都找好了------《深入理解Java虛擬機:JVM高級特性與最佳實踐》。但是 LZ 發現很難消化,理解起來特別困難,於是間接的將 LZ 推上了研究計算機系統的道路。

③、再就是如果你對計算機系統的構造不太瞭解,可能你平時寫的程序都是錯誤的。

比如我們一直以為兩個正數的和或者積一定為正,但是用二進制補碼錶示的正數和或者積卻不一定;程序員和編譯器不能用(x-y<0)來代替(x

④、第四個原因,這個也是最直接的原因。不知道大家是否瞭解大的互聯網公司面試,比如阿里巴巴,騰訊這樣的公司。他們面試對於基礎的東西要求的很嚴格,你對這些東西的瞭解程度將直接決定你的面試成敗。

比如:講一下JVM的結構,TCP/IP的三次握手、四次揮手,淘寶用戶的數據怎麼滿足高併發?等等。像這些問題,如果我們不懂計算機底層知識肯定是不能過關的。

⑤、樹立正確的計算機世界觀

培養一種心態,即計算機的一切是可以理解的,沒有超出人類的智慧。即使有些問題你現階段沒有明白,但這些問題都是可以理解的,只是你時間不夠,所以先放一下,等有時間再學習它們。這種心態可以防止你滑入無助的陷阱。 有時候你的潛意識會愚弄你,把很難做成的事情當成無法做成的事情。就像《肖申克的救贖》中表現的那樣,一把很小的錘子也是可以砸開監獄的牆壁逃出來的。而Red第一次看到那個錘子時,他就認定了Andy肯定逃不出來了。而實際上Andy卻用19年的時間確實把牆給鑿開了,雖然其間各種艱辛,但是結局卻很美好。

計算機科學與其他學科相比,好的地方在於,它是人創造的,它的原理沒有超出我們人類的大腦的理解範圍,它為什麼這樣設計,每一個做法都是有理由的。而那些發明它的人,有許多現在還活著,比如晶體管的發明者,硬盤的發明者,顯示器、鼠標、鍵盤等的發明者,有些發明者雖然已經過世,但是有豐富詳盡的記錄,他不是一門有可能超出人類理解範圍的科學,所以我們不要擔心不能理解它。

其次 我們是程序員,不是造計算機的,我們也不需要對計算機的每一個部件都瞭解,我們只需要瞭解我們所寫的程序在系統中的執行過程,以及計算機系統的構造對我們的程序代碼有什麼限制,有什麼影響即可。


分享到:


相關文章: