深入理解计算机系统(序章)------谈程序员为什么要懂底层计算机结构

  万丈高楼平地起,计算机系统就像程序员金字塔的地基。理解了计算机系统的构造原理,在写程序的道路上才能越走越远。道理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 后面打算根据自己的学习进度不定时更新《深入理解计算机系统》学习心得。

  软件开发产业正在发生变化,它将不再需要更多的程序员,它需要的是高级匠师,这句话与大家共勉。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算

书中学编程:挑选有关编程的书籍

[本文由_John Paul Mueller_撰写]

2329
来自专栏微信公众号:Java团长

Java架构师之路:Java程序员必看的15本书的电子版下载地址

  作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序...

881
来自专栏程序人生

测量

在lean startup的框架里,测量(measure)是非常重要的一环,它承接着"build"和"learn",当系统的全部或者部分构建(build)出来后...

3408
来自专栏程序人生

如何从零开始学一门程序语言?

今天一大早排队挂号给孩子看病,耽搁了,现在才发。 说实话,『能花钱的,就不要花时间』是篇即兴之作,本该随着时间被有限的听众渐渐淡忘。但没想到前有 @老赵 微博转...

3186
来自专栏华章科技

双十一,我们除了能帮程序员省钱之外,还能帮你征个婚

导读:从光棍节到购物狂欢节,双十一真是一年比一年热闹。怎样用一条图文简单方便地把这两个节一起过了,数据叔也是操碎了心。脑洞一开,办法还是有的:老规矩,送书啊!送...

683
来自专栏新智元

【深度学习框架的未来】李沐:AWS开源端到端AI框架编译器NNVM

【新智元导读】AWS AI主任科学家李沐今天在官博发表文章,介绍了一种新的编译器NNVM,可以大大简化新的AI前端框架和后端硬件的设计,在各种前端和后端为用户提...

3465
来自专栏ACM算法日常

Facebook面试官:如何突围大厂算法面试?

“给你a、b两个文件,他们各存放50亿条URL,其中每条URL各占用64字节,内存限制是4G,请你编写代码找出a、b文件中相同的URL”。这是某家大公司在201...

1382
来自专栏大数据文摘

从商业视角理解数据:数据科学家的思维之路

702
来自专栏量子位

高清不卡!MIT用机器学习让你更流畅的观看在线视频

问耕 编译整理 量子位 出品 | 公众号 QbitAI ? 摔!在线视频看到关键时刻,突然卡住了! 你遇到过这样的情况么?有时候是卡住了,有时候是画质猛降。出现...

41510
来自专栏华章科技

阿里电话面试(算法工程师)

说起参加阿里巴巴这次内推过程挺有意思的,起因是我写了一篇关于知识图谱的文章:知识图谱相关会议之观后感分享与学习总结,然后有位大哥发私信给我,希望以后多交流并交换...

1432

扫码关注云+社区