深入理解计算机系统(序章)------谈程序员为什么要懂底层计算机结构
Posted YSOcean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解计算机系统(序章)------谈程序员为什么要懂底层计算机结构相关的知识,希望对你有一定的参考价值。
万丈高楼平地起,计算机系统就像程序员金字塔的地基。理解了计算机系统的构造原理,在写程序的道路上才能越走越远。道理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 学习是以《深入理解计算机系统》这本书为基础,我们还是要尊重作者,先来介绍一下作者:Randal E.Bryant:1981年在麻省理工学院获计算机科学博士学位,现任美国卡内基·梅隆大学计算机学院院长,是ACM和IEEE的双会士。
那么为什么要选择这本书呢?LZ也在网上找了很多这方面的教材,但是都不是太满意,不过当LZ看到这本书的时候却眼前一亮,这本书是从程序员视角全面剖析的实现细节,使读者深刻理解程序的行为,将所有计算机系统的相关知识融会贯通。注意是以程序员的角度来分析的,那么作为一个程序员,相对于市面上关于计算机系统的书,这个理解起来应该不会很困难。
其次这本书是以案例驱动为讲解顺序的。第一章就给我们详细的讲解了学习程序的万能入门级程序“Hello World” 在计算机是如何运行的。说实话,LZ 接触了 C 语言,C#,Java,php等,也都写过每种语言的 “Hello World”,但是到底在计算机中是怎么运行的,LZ 是完全不了解的。
LZ 后面打算根据自己的学习进度不定时更新《深入理解计算机系统》学习心得。
软件开发产业正在发生变化,它将不再需要更多的程序员,它需要的是高级匠师,这句话与大家共勉。
以上是关于深入理解计算机系统(序章)------谈程序员为什么要懂底层计算机结构的主要内容,如果未能解决你的问题,请参考以下文章