平心而论,若是只想浅尝辄止地了解,那么这本书无疑是很好的,但每部分的内容,限于篇幅都十分精简,总会给人一种,我了解了这部分内容,但似乎并没有近距离地接触的感觉,好像是在隔靴搔痒,其实正如作者所说的,其中很小一部分,譬如TCP/IP,展开来讲就可以讲好几本书了,所以要想更深入地了解,还要多读一些书。 前十章是看的纸质版,感觉看电子版的也不错呢。
强烈推荐《计算机是怎样跑起来的》 最开始以为这本书是基础,自认为基础还行,所以很草率的阅读了前几章。但是越往后读越让我惊叹,不论是编程、加密、还是内存、数据库等,它每一章的基础都讲的如此通俗易懂又直达本质,把我脑海里残缺的八股文记忆很好的串了起来,好多地方看完都有种豁然开朗的感觉。学习中很多常见但却从未留意过的点也一一帮我点到,比如说windows XP中的xp什么意思?CPU是什么的缩写?IT的含义是什么? 事件驱动和中断的区别?到底什么是算法? 什么是面向对象编程?它和面向过程的区别是什么?数据结构的根是结构是什么?Java和C++的关系是什么?加密算法的本质是什么? …… 虽然这本书深度略显欠缺,但有关计算机的点基本都有涉猎,也让人对其背后知识的兴趣更加浓厚,有了更多探索下去的欲望。这本书也很好的为第二本书《程序是怎样跑起来的》做了铺垫(因为有位80岁大爷在看完第二本书说看不懂,所以作者大大写了这一本)。在第二本书里,对CPU、计算机数据、内存、环境、系统等做了更深入的阐述。基本涵盖了80%的计算机组成原理的知识。有一些知识也让我耳目一新,原来计算机也会算不准,原来逻辑右移和算术右移有区别等等。如果还想更深入的了解,《穿越计算机的迷雾》这本书同样经典,从最基础的电知识讲起,手把手带你造一台加法器,也就是能够自动计算加法的计算机,在制造过程中,你会明白原来这就是晶体管,原来逻辑学和电学有如此紧密的关系,原来振荡器才是自动化的源头……里面有很多有趣的电学知识,不过有些知识没点硬件基础可能还不太好理解。
非常棒的计算机入门书,深入浅出,通俗易懂,远强于像《计算机导论》这样的教科书。虽然这本书写于十几年前,某些内容略显过时,但现在读起来任然有耳目一新的感觉,很多概念,方法总结得非常到位,直击本质。作者非常擅长类比,把很多隐晦难懂的内容非常清楚地通过文字和插图表达出来。总之,五星推荐,相信每个阅读此书的人,都会理解计算机,爱上计算机,用好计算机。
如果五颗星是满分我要给十颗星。 作为计算机专业的人,我都不好意思说这是我第一本从头看到尾的专业书。我翻过很多专业书,但是大部分都是看重点内容,或者是作为工具书参考。直到离开学校开始进入社会工作的时候,我才意识到自己欠缺太多基本功。如果不是因为老板分配的项目和硬件相关,我大概还沉迷于各种敲代码和机器学习的世界。 因为这第一个项目,让我意识到我必须把计算机最最最基本的、底层的东西学好,而不是今天冒出一个技术我去学,明天又冒出一个技术我再去学。现在世界变化的速度还有科技创新的速度,根本等不及人们去学好就又进入到下一个阶段,而我们过于追求学习新技术就会忘记了:基本功的打磨是需要时间的。每次新技术一出现,就有各种《XX21天速成》《XX一个月速成》,然后每次学完都感到十分满意:自己没有被这个世界落下。 这本书是2003年写的,16年过去了再看这本书,依旧有很多很多东西的内容让我觉得一点都不过时,而且是看完之后真的对计算机有了更透彻的理解。我很感谢作者能把描写计算机的书写的这么有趣,不是那种让我看了几页就想睡的专业书,我也要静下心来,好好地打磨自己的基本功。 我始终相信,那些让人赞叹不绝的能力,都是花了很多很多时间修炼出来的。 突然想起《卖油翁》里的那句话:无他,但手熟尔。
【计算机是怎么跑起来的】 一直是关注软件方面比较多,抱着从硬件角度梳理一下思路的愿望翻阅此书,结果被前言的“今天,计算机正在以惊人的速度发展变化着,变得越来越复杂,而这期间产生了许多技术,但是人们并没有过多的时间去深入学习每一门技术,这就是问题的根源。稍微看了看技术手册,只学到了表层的使用方法,觉得自己“反正已经达到目的了”,这就是现状”直接拉进坑��现在这么多《21天精通xx》,到头来还是给我国人对于效率追逐下的急功近利。 虽然此书写于2003年,作为日新月异的IT业,很多描述确实过时了,但是我赞同作者的一点就是:做学问有三点1⃣️知识范围2⃣️基础中的基础知识3⃣️目标。层出叠现的新兴技术是学问的“应用层”,而经过这么多年还没有改变的才是“基础层”,这才是根基,而我觉得这本书讲的如是也,而这也是此书称为经典的缘由。 下面是个人笔记精华和章节核心要点的梳理: 第1章 “计算机的三大原则”。 原则1:计算机只能够做输入、运算、输出三种操作 原则2:程序是指令和数据的集合 原则3:计算机有自己的处理方法(对计算机来说什么都是数字) 硬件由大量IC(集成电路)组成;函数(方法、语句、子例程(无返回值)、子程序(有返回值));•Net(xml➕soap);面向组件编程的方法是通过将组件(程序的零件)组装到一起完成程序;面向对象编程的方法是先如实地对现实世界的业务建模,之后再把模型搬到程序中; 第二章《微机原理》 cpu、内存、i/o、电源��、电路、时钟发生器/信号��clk、 数据/地址总线、控制引脚、外部设备(DMA直接存储器访问控制) 第三章《汇编语言》 机器语言 汇编语言 cpu寄存器(a累加器f标志寄存器 bc de hl ix iy sp栈顶指针 pc程序指针 程序就是依靠不断变化的PC寄存器Program Counter的值运行起来的) i/o寄存器 (「0」端口a数据寄存器、「1」端口b数据寄存器、「2」端口a控制寄存器、「3」端口b控制寄存器)207、255、0 在内存中,每个地址的功能都一样,既可用于存储指令又可用于存储数据。 而I/O则不同,地址编号不同(即寄存器的类型不同),功能也就不同 指令的分类,按功能这些指令可以分成运算、与内存的输入输出和与I/O的输入输出三类 机器语言=地址+汇编语言 根据CPU种类的不同,有的CPU使用大端序,有的CPU使用小端序(将数据由高位到低位顺序地存储到内存的存储顺序则叫作“大端序”(Big Endian)) JP LOOP 跳转指令 第四章 程序流程 三种:顺序、条件分支、循环�� 特殊:中断处理(特殊条件分支)、事务驱动 流程图、 在这些高级语言中,程序员使用“程序块”表示循环而不是跳转指令 根据比较操作的结果,跳转到之前处理过的步骤就是循环;跳转到之后尚未处理的步骤就是条件分支 所谓结构化程序设计就是“为了把程序编写得具备结构性,仅使用顺序执行、条件分支和循环表示程序的流程即可,而不再使用跳转指令” 作为计算机硬件上的行为,无论是条件分支还是循环都必须使用跳转指令实现 中断处理:以硬件形式连接到CPU上的I/O模块会发出中断请求信号,CPU根据该信号执行相应的中断处理程序。在诸位使用的个人计算机上,中断请求信号是由连接到周边设备上的I/O模块发出的 事务驱动:用事件驱动的方式编写那些工作在GUI(Graphical User Inteface,图形用户界面)环境中的应用程序,事件驱动是一种适用于GUI环境的编程风格,在这种环境中用户可以通过鼠标和键盘来操作应用程序 顺序:CPU中的PC寄存器的值会自动更新 条件分支和循环:在高级语言中用程序块表示,在机器语言和汇编语言中用跳转指令表示,在硬件上是通过把PC寄存器的值设为要跳转到的目的地的内存地址来实现 第五章 算法 辗转相除法(最大公约数)、哨兵(一种含有特殊值的数据,可用于标识数据的结尾等)、最大公倍数:两数乘积除以最大公倍数 典型算法 算法:步骤明确有限、机械非直觉、终止结果明确 编程优化、计算机处理速度、数字规律、先在纸上写算法 第六章 《数据结构》 内存、变量、数组(ds基础)、典型ds:栈、队列、结构体、链表、二叉树 变量:是数据的容器,实质是按照变量所存储数据的大小被分配到的一块内存空间。 数组:可以高效地处理大量的数据。数组的实质是连续分配的一块特定大小的内存空间。 在内存中存储数据的空间是连续分布的 数组是数据结构的基础,只要使用数组就能通过程序实现各种各样的算法以处理大量的数据。通常把像变量i这样的用于记录循环次数的变量称为循环计数器(Loop Counter)。数组之所以方便,就是因为可以把循环计数器的值与数组的索引对应起来使用。 二叉树多用于实现那些用于搜索数据的算法,比如“二分查找法”。比起只使用链表,使用二叉树能够更快地找到数据 第七章 面向对象 c++、java、c#(被命名为C++,是因为C++在C语言的基础上增加了面向对象的机制这一点。另外,将C++进一步改良的编程语言就是Java和C#语言) 面向对象编程通过把组件拼装到一起构建程序:可以说类就是程序的组件(Component)。面向对象编程的关键在于能否灵活地运用类 能够提升程序的开发效率和可维护性