万丈高楼平地起,计算机系统就像程序员金字塔的地基。理解了计算机系统的构造原理,在写程序的道路上才能越走越远。道理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 后面打算根据本身的学习进度不定时更新《深刻理解计算机系统》学习心得。
软件开发产业正在发生变化,它将再也不须要更多的程序员,它须要的是高级匠师,这句话与你们共勉。