深刻理解計算機系統(序章)------談程序員爲何要懂底層計算機結構

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

  ①、常常用一些不知其因此然的技術,會感到不安面試

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

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

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

    好比咱們一直覺得兩個正數的和或者積必定爲正,可是用二進制補碼錶示的正數和或者積卻不必定;程序員和編譯器不能用(x-y<0)來代替(x<y),由於前者會產生溢出。甚至也不能用表達式(-y<-x)來代替,由於在二進制補碼錶示中負數和正數的範圍是不一致的。算術溢出是形成程序錯誤和安全漏洞的一個常見根源。併發

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

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

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

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

    計算機科學與其餘學科相比,好的地方在於,它是人創造的,它的原理沒有超出咱們人類的大腦的理解範圍,它爲何這樣設計,每個作法都是有理由的。而那些發明它的人,有許多如今還活着,好比晶體管的發明者,硬盤的發明者,顯示器、鼠標、鍵盤等的發明者,有些發明者雖然已通過世,可是有豐富詳盡的記錄,他不是一門有可能超出人類理解範圍的科學,因此咱們不要擔憂不能理解它。

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

  好了,說了這麼多,實際上是想告訴你們,作一隻鹹魚很簡單。可是LZ是想作一隻有夢想的鹹魚。若是和LZ有一樣想法的人,又一直下不定決心去學習的人,咱們能夠一塊兒,互相監督,互相學習交流。

 

《深刻理解計算機系統》

  如題,LZ 學習是以《深刻理解計算機系統》(Computer Systems A Programmer's Perspective)這本書爲基礎,咱們先來介紹一下做者:Randal E.Bryant:1981年在麻省理工學院獲計算機科學博士學位,現任美國卡內基·梅隆大學計算機學院院長,是ACM和IEEE的雙會士。

  那麼爲何要選擇這本書呢?LZ也在網上找了不少這方面的教材,可是都不是太滿意,不過當LZ看到這本書的時候卻眼前一亮,從這本書的英文名字就能夠看出是從程序員視角全面剖析的計算機系統,使讀者深入理解程序的行爲,將全部計算機系統的相關知識融會貫通。注意是以程序員的角度來分析的,那麼做爲一個程序員,相對於市面上關於計算機系統的書,這個理解起來應該不會很困難。

  其次這本書是以案例驅動爲講解順序的。第一章就給咱們詳細的講解了學習程序的萬能入門級程序「Hello World」 在計算機是如何運行的。說實話,LZ 接觸了 C 語言,C#,Java,PHP等,也都寫過每種語言的 「Hello World」,可是到底在計算機中是怎麼運行的,LZ 是徹底不瞭解的。

  LZ 後面打算根據本身的學習進度不定時更新《深刻理解計算機系統》學習心得。

  軟件開發產業正在發生變化,它將再也不須要更多的程序員,它須要的是高級匠師,這句話與你們共勉。

相關文章
相關標籤/搜索