還有那些像《編碼-隱藏在計算機軟硬體背後的語言》這本書一樣,把深奧的知識講的如此深入淺出的書?

這本書實在太牛逼了,讓我回歸到了計算機設計的起點去思考問題。真正的好書都應該如此,而不是僅僅堆砌看似高大上的概念。

=====更新======

好久沒翻這個問題,都快忘了,沒想到多了這麼多回答。。

自己更新一下吧,這兩年也讀了不少計算機方面的書,跟大家做個分享吧:

《Linux C 一站式編程》 宋勁彬 著 沒看完全部,後悔當初學C語言為什麼用譚浩強的書。。

《How Tomcat Works》 Budi Kurniawan

當然,像《深入理解計算機系統》一類的書也是很經典很值得下功夫啃的,但是我的題目中要求「把深奧的知識講的如此深入淺出」。。。讀完讓人好感動。。。


厚著臉皮推薦下我的公眾號吧: 碼農翻身(id:coderising ) , 用故事講解技術。

我是一個線程

我是一個Java class

Javascript: 一個屌絲的逆襲

Java:一個帝國的誕生

JSP:一個裝配工的沒落

TCP/IP 之 大明王朝的郵差

TCP/IP 之 大明內閣

TCP/IP 之 薊遼督師

CPU 阿甘

CPU 阿甘之煩惱

CPU 阿甘:函數調用的秘密

我是一個網卡

我是一個路由器

我是一個進程

我是一塊硬碟(上)

我是一塊硬碟(下)

我是一個鍵盤

張大胖的socket

張大胖學遞歸

學習面向對象的令狐沖

張大胖學資料庫

資料庫村的旺財和小強

小李的資料庫之旅(上)

小李的資料庫之旅(下)

....


80年代後期及90年代初期國內引進的計算機方面的教材基本上都是從硬體、計算機設計理念和計算式哲學的角度起步的,我覺得基本上符合題主所言的狀況。

然而windows普及以及後來的web普及之後,大多數人都懶得看基礎啊理念啊設計啊哲學啊什麼的,熱衷於短平快照著例子擼代碼出結果的快餐,所以很少了……

例子嘛……操作系統的一些經典教材、編譯器的一些經典教材、KR的C語言書、高姥爺(人家真有個中文名)的編程藝術,這些照理來說都能引導看的人以機器和數學而不是日常邏輯去思考編程的事情。


推薦兩本。

一本是已經有人提過的《深入理解計算機系統》,另一本是少有人提的《計算的本質》。

編碼把硬體轉化為計算能力,而深入從硬體指令上升到軟體能力,本質則告訴你計算的能力的極限。

還有一些領域,急需補齊的,如軟體複雜性的討論,已經如何使用諸如類型系統等工具克服這些問題。閱讀有限,還沒有找到值得推薦的讀物。


世界是數字的


Programming language:application and interpration


編碼 是一本非常好的書最近找到了另外一本

網路是如何連接的

這本也是從開始到結束講解的非常清晰


通信領域的強烈推薦下面這篇連載,講解簡單樸實但又深刻,無論對於剛接觸通信的學生還是已經工作兩三年的通信人,這個連載都能讓你收穫良多,反正我看了以後只有一種感覺,大學的通信課程都白學了,作者現在還一直保持著更新,很難能可貴。

[原創連載]深入淺出通信原理(11月1日連載562:信息傳輸之基本概念)。


多年以前偶然看到的一篇文章《我是一塊硬碟》,用擬人化、故事化的手法介紹了電腦里的基礎硬體知識,看得我居然被純純的「愛情」感動了。後來還發現了系列文章《我是一條內存》、《我是一塊CPU》等姐妹文章十餘篇。原始出處據考證可能是來自《電腦報》。所有文章當年我已經收集整理製作在電子書中,起名《電腦里的愛情》,共十三篇文章。目錄如圖:

網盤下載地址:https://pan.baidu.com/s/1mioiyc4

把代表文章《我是一塊硬碟》全文也粘這了:

  我是一塊硬碟,ST380021A, 在一個普普通通的台式機里工作。別人總認為我們是高科技白領,工作又乾淨又體面,似乎風光得很。也許他們是因為看到潔白漂亮的機箱才有這樣的錯覺吧!其實象我們這樣的小台式機,工作環境狹窄,裡面的灰塵多的能嚇死人。每天的生活死水一潭,工作機械重複。跑跑文字處理、看看電影還湊活,真要遇到什麼大軟體或者遊戲,上上下下就要忙的團團轉,最後還常常會死機。

  我們這一行技術變化快,差不多每過兩三年就要升級換代,所以人人都很有壓力,而且沒有安全感。每塊新板卡來的時候都神采飛揚躊躇滿志,幾年光陰一過,就會變得灰頭土臉意志消沉。

  機箱里的人都很羨慕能去別的機器工作。特別是去那些筆記本,經常可以出差,飛來飛去的,住五星級的酒店,還不用乾重活,運行運行 Word, 上網聊聊天就行了。而我卻更喜歡去那些大伺服器,在特別乾淨明亮的機房裡工作。雖然工作時間長點,但是福利好,24 小時不間斷電源、UPS, 而且還有陣列、熱插拔,幾個人做一個人的事情,多輕鬆啊。而且也很有面子,只運行關鍵應用,不像我們這裡,什麼亂七八糟的事情都要做。不過我知道,那些硬碟都很厲害,不是 SCSI, 就是 SCSI II、Fibre Channel, 象我這樣 IDE 的,能混到工作站就算很不錯了。我常常想,當年在工廠里,如果我努力一下會不會也會成一塊 SCSI, 或者至少做一塊筆記本硬碟。但我又會想,或許這些都是命運,所以我從不抱怨。

  內存就常常抱怨,抱怨他們主板部門的複雜,抱怨他如何跟新來的雜牌內存不兼容,跟網卡或者是電視卡又是如何的衝突。

  我的朋友不多,內存算是一個。他很瘦而我很胖,他動作很快,而我總是很慢。我們是一起來這台機器的,他總是不停地說,而我只是聽—— 我從來不說。

  內存的頭腦很簡單,雖然他名字叫 Memory, 可是他什麼 memory 都不會有,天大的事睡一覺就能忘個精光。我從來不說話,但我會記住所有的細節。他說我這樣憂鬱的人不適合做技術活,遲早要精神分裂的。我笑笑,因為我相信自己的容量。

  有時候我也很喜歡這份工作——簡單,既不用像顯示器那樣一天到晚被老闆盯著,也不用像光碟機那樣對付外來的光碟 — 我只要和文件打交道就行了,無非就是讀讀寫寫,很安靜和單純的生活,直到有一天……

  我至今還記得那漸漸掀起的機箱蓋子,從缺口探進來的光柱越來越寬,也越來越亮 — 空氣里瀰漫著跳動的顆粒。那個時候,我看到了她。她是那麼的纖細瘦弱,銀白色的外殼一閃一閃的,渾身上下的做工都很精緻光潔,讓我不禁慚愧自己的粗笨。等到數據線把我們連在了一起,我才緩過神來。開機的那一剎那,我感覺到了電流和平時的不同。後來內存曾經笑話我,說我們這裡只要有新人來,電流都會不同的,上次新內存來也是這樣。我覺得他是胡扯。我盡量的保持鎮定,顯出一副很專業的樣子,只是淡淡的向她問好並介紹工作環境。

  慢慢的,我知道了,她,IBM-DJSA220, 是一塊筆記本硬碟,在老闆一位朋友的筆記本里做事,這次來是為了複製一些文件。我們聊得很開心,她告訴我很多旅行的趣聞,告訴我坐飛機是怎麼樣的,坐汽車的顛簸又是如何的不同,給我看很多漂亮的照片,還有遊記,特別是有一次她從桌子上掉下來的的歷險故事。而我則賣弄各種網上下載來的故事和笑話。

  她笑得很開心。

  而我也很驚訝自己也可以說個不停。

  一個早晨,開機後我看到數據線上空蕩蕩的插口。

  她一共呆了 7 天。後來,我再也沒有見過她。

  我有點後悔沒有交換電子郵件,也沒能和她道別。不忙的時候,我會一個人懷念射進機箱的那股陽光。

  我不知道「記憶」這個詞是什麼意思,我有的只是她留下的許多文件。我把它們排的整整齊齊,放在我最常經過的地方。每次磁頭從它們身上掠過時,我都會感到一絲淡淡的愜意。

  但我沒有想到老闆會要我刪除這些文件。我想爭辯還有足夠的空間,卻毫無用處。於是,平生第一次違背命令,我偷偷的修改了文件分配表。然後把它們都藏到了一個秘密的地方,再把那裡標誌成壞扇區 — 不會有人來過問壞扇區。而那裡,就成了我唯一的秘密,我常常去看它們,雖然從不作停留。

  日子一天一天的重複,讀取寫入、寫入讀取……我以為永遠都會這樣繼續下去,直到有一天,老闆要裝 XP 卻發現沒有足夠的空間。

  他發現了問題,想要去修復那些壞扇區。我拒絕了。但很快,我接到了新的命令:格式化。

  我猶豫了很久……

  … … …

  … … …

  track 0 bad, disk unusable


又找到一本:《計算機網路-自頂向下方法》


《編碼》確實是一本好書,同樣推薦《什麼是數學》

略微的說明一下,《編碼》裡面的知識確實很重要也很有意思,可是並不能說「深奧」。

就像《SCIP》一樣,很多人說很深奧,其實你去探究之後發現講的無非也就是那些道理。

真正的深奧的書要做到「深入淺出」其實是比較困難的,因為這個標準是拿捏在讀者手裡的。

作為大本畢業而且有相關經驗看《SICP》可能很多東西都是在複習,而一個以科普性質來讀的讀者可能覺得:你他媽是在逗我么。

所以關鍵找到適合自己目前水平的書才是最關鍵,而說到那些普遍意義上的「深入淺出」的書籍,大多數不過是科普性質的罷了(不要求讀者有任何前置知識),這些書籍讓你理解這些概念大概「是什麼」,並不能讓你「深入」理解,同時也很難教會你真正在生產中的「為什麼和怎麼辦」。


王爽的彙編,深入淺出不夠CODE那麼出神入化,但是知識的屏蔽和引導做的非常好,裡面安排的練習也是精心設計的,在編程這條路上更進一步之後我才發現這本書的牛B


總算找到知音了,我當時是為了買《穿越計算機的迷霧》這本書沒買到,卓越推薦的《編碼》,看完之後覺得收穫太大了,我還專門做了筆記,很奇怪這本書從沒有在什麼對程序員影響最大的TOP100榜單上出現過,可能大家都太強了吧^^。非常推薦給像我一樣可能用過幾個類庫,會寫點程序,但並非計算機專業出身的程序員。這本書解決了我一直以來的一個最大的疑惑,就是通常講CPU的書都是將CPU擬人化,跳轉啦,執行這條指令啦,關鍵是CPU不是人,它根本談不到「理解」這件事情,「跳轉」對它來說意味著什麼,「執行」又意味著什麼。我可以理解mov語句,要從寄存器存到內存,但是CPU是怎麼辦到的呢,它又沒有一隻「手」去把寄存器中的數據取出來,再寫到內存的相應位置。何況還有那麼多不同種類的指令,不同的指令誰去通知CPU怎麼執行?

類似的很有啟發的書還有《深入理解計算機系統》,也是強推,看這本書第一次引起了我對計算機底層的興趣,條分縷析,把我之前腦袋裡的一坨漿糊攪開了,不過《編碼》更基礎更清楚。


程序員的自我修養,真心覺得不錯,雖說有些抄linker那本書的嫌疑,但是寫的內容都很受用。


同類型的還有《穿越計算機的迷霧》

比較簡單的有《不插電的計算機科學》

其他領域就不清楚了


1. 王爽的《彙編語言》 最近在上微機原理課,想更進一步了解彙編,看了這本書就停不下來!!!

2..& Java入門的絕對好書


深入理解計算機系統 正在看,強力推薦。

以下是看過的,

數學之美,浪潮之巔,也超級深入淺出,真心推薦,不輸編碼。

王爽的彙編語言。


《計算機是咋個跑起來的》


知乎上對這本的推薦太多了,然後我就買了一本....感覺看著像是在浪費時間...太基礎,太簡單了.但是不否認是本好書


《程序是怎樣跑起來的》


圖解xxx全家桶都算吧


推薦閱讀:

數據結構與演算法中,樹一般會應用在哪些方面?為什麼?
大學期間的兩到三萬的代碼量從哪裡來?可以做些什麼來增加代碼量?
計算機系統內的字長到底指的是什麼?
c++學夾生了怎麼辦?
幫忙分析一下我應該選擇的方向?

TAG:計算機 | 計算機科學 |