亚达斯密在其经济学巨著《国富论》中提出了“看不见的那只手”的概念,意指市场机制对经济发展的作用,作为普通的个人来说我们在平时的生活中可能很难感受到市场机制所发挥的作用,但这只看不见的手却无时无刻不在发挥着它的作用。

而对于程序员来说,在程序的运行环境中也会有一只看不见的手,这只看不见的手无时无刻不在影响着程序的运行,但你可能对此却浑然不知,对于程序员来说这只看不见的手就是操作系统,这只看不见的手就是本书的主题。

作为程序员我们要知道,操作系统从本质上讲也是一个普通的程序,和我们平时所编写的程序没有什么本质的不同,操作系统这个程序的特殊之处仅仅体现在其用途上。

操作系统的作用不是用来播放音乐、网上聊天、看电影、浏览网页、玩游戏的,这些都由特定的应用程序来完成,比如音乐播放器程序、视频播放器程序、微信、浏览器等,这些程序都有特定的用途并为计算机用户带来丰富多彩的体验,那么操作系统是一个什么样的程序呢?

操作系统其实是控制这些程序运行的一个程序,因此从这个角度看,操作系统的作用有点类似于政府,政府自身不去生产商品,运输货物,修盖建筑,政府的作用仅仅在于提供一个良好的社会生产环境,协调好各种资源的分配,对不法分子实施惩戒等等,政府对人的影响其实也是无时无刻不存在的,只不过我们平时可能感觉不是那么明显。操作系统也是这样,操作系统为程序员编写的程序提供了一个良好的运行环境,使得多种多样的程序在系统资源有限的情况下(CPU数量有限,内存容量有限)也可以畅通无阻的运行下去,同时操作系统对于“不法分子”也会予以惩戒,当我们的程序存在严重bug时,操作系统会毫不留情的将程序运行终止掉,防止其影响其它程序的正常运行。

一般情况下作为程序员我们无需去关注操作系统,既然操作系统在背后默默无闻工作的很好,那么我们为什么要费心去理解操作系统,去关心这只看不见的手呢?

每一个严肃的程序员都应该清楚的知道他的程序是如何同操作系统交互的

如果程序员不能很好的理解操作系统,那么对于自己写的程序会始终存在所谓 “神秘的未知的恐惧”。当写完一段程序后,只能在心里默默祈祷千万不要有问题,千万不要有问题,但实际情况往往事与愿违。这时bug的修复来说对你来说非常困难,为什么,因为你根本就不知道到底是哪里出了问题,你不知道为什么会出现这样的问题,你连对手是谁都不清楚,更何况去打败它,这是其一。

其二,如果程序员不能很好的理解操作系统,那么一个大型的软件项目对于你来说很可能就是一个看得见摸不着的怪物。你根本就不清楚这个软件到底是如何运行起来的,在这样的软件项目中工作简直就是噩梦一般,你只能祈祷自己工作的模块不要有问题,遇到问题后只能不断的去问别人;为这个软件开发新功能对你来说更是一个极大的挑战,就好比让医生去为病人做手术,但是这个医生并不知道病人到底得了什么病。相信会有很多程序员有类似的体验。

工作多年后我逐渐观察到一种现象,这种现象在我们认为的编程高手中非常常见,那就是那些编程高手总是能解决各种在我们看起来都极难解决的问题。我把这些编程高手所拥有的这种能力称之为“独立探索”的能力。作为程序员,尤其是想成为高手的程序员,我们应该拥有所谓独立探索的能力,什么叫独立探索呢?即,虽然我暂时不熟悉一个复杂的软件、暂时不知道bug是怎么来的,但是基于自己所拥有的知识体系,可以依靠自己力量来弄清楚这一切。拥有独立探索能力是编程高手的标志,那些编程高手可以依靠自己的力量来解决在我们看来及其难以解决的问题,弄清楚在我们看来理不清头绪的复杂的软件代码。拥有独立探索能力的编程高手不会对任何程序产生畏惧心理,不会对任何bug产生畏惧心理,这些对于他/她来说反而是一个有趣的挑战,因为这是丰富自己知识体系的一个很好的机会,但这样的“机会”对于没有独立探索能力的程序员来说简直就是噩梦。

那么如何才能成为拥有独立探索能力的程序员呢?

我们知道,任何程序,无论这个程序有多么复杂,最终都是由操作系统来管理运行的,作为程序员所能利用的所有能力(进程、线程、锁、进程通信、网络、I/O等)都是操作系统赋予的。如果你理解了操作系统,理解了操作系统到底是如何运行你写的程序的,那么恭喜你,你将拥有了这种独立探索的能力,也就是“元能力”,这是其它能力的源泉。

而这也正是本书的重点所在,甚至,你可以理解为本书只解决一个问题,那就是,站在程序员的角度为大家彻底讲清楚“你写的程序到底是如何被操作系统运行的”,赋予大家独立探索的能力。

本书的书名《深入理解操作系统》致敬经典的《深入理解计算机系统》(即Computer System:A Programmer’s Perspective),希望大家通过该书的学习能将操作系统纳入自己的武器库,这将是一件威力及其强大的武器,从此你不再惧怕任何看似未知的困难,因为拥有独立探索能力的程序员最终都可以依靠自己的力量战胜它,进而成为大家眼中的编程高手。

1,什么程序?
2,进程?程序?傻傻分不清
3,程序员应如何理解内存:上篇
4,程序员应如何理解内存:中篇
5,程序员应如何理解内存:下篇
6,程序员应如何理解CPU:上篇
7,程序员应如何理解CPU:下篇
8,操作系统是如何看待进程的
9,系统调用是如何实现的
10,程序员应如何理解系统调用:上篇
11,程序员应如何理解系统调用:下篇
12,以发展的眼光来看待操作系统
13,操作系统是如何获取键盘按键的
14,程序员应如何理解中断
15,操作系统是如何运行的
16,实际动手观察一下中断

持续更新中。。。

通往编程高手之路:《深入理解操作系统》相关推荐

  1. Spring高手之路——深入理解与实现IOC依赖查找与依赖注入

    本文从xml开始讲解,注解后面给出 文章目录 1. 一个最基本的 IOC 依赖查找实例 2. IOC 的两种实现方式 2.1 依赖查找(Dependency Lookup) 2.2 依赖注入(Depe ...

  2. Python编程高手之路——第一章:用户交互

    一.编程入门 1.编程语言的划分 编程语言分为机器语言.汇编语言.高级语言 1.1 机器语言 机器语言是用二进制数字0和1进行编程,机器语言是人站在计算机的角度去编程,编程开发效率低,程序运行效率高. ...

  3. 【Linux】Linux系统编程(入门与系统编程)(三)(深入理解操作系统、进程、环境变量、内存分布)

    本博客操作系统最多涉及30%的理论,重点在于部分进程的内容,部分文件系统的内容,部分文件管理的内容不是主讲操作系统,我们的最终目的是理解系统中最高频的知识点,然后被完全利用指导我们编程. 下面是这三篇 ...

  4. Python编程高手之路——第二章:流程控制

    二.流程控制 2.1 运算方式 计算机的核心部件是CPU,CPU有两个功能,控制和运算: 2.1.1 数学运算 print(a ** b) # 幂 print(a // b) // 取整数 2.1.2 ...

  5. 编程高手之路——闭包函数

    目录 一.函数嵌套调用 1.1函数嵌套调用 1.2 函数嵌套定义 二.名称空间 2.1 名称空间说明 2.2 名称空间的分类 三.作用域 3.1 变量作用域 3.1.1 参数名称的另一种定义形式: 3 ...

  6. Python编程高手之路——第三章:数据类型

    三.数据类型 3.1 数据类型 3.1.1 数字类型int和float 数字类型即变量的值,如age=18,18就是我们保存的值: 变量是用来反映/保存状态以及状态变化的,针对不同的状态应该用不同的数 ...

  7. python编程高手之路——函数调用

    目录 一.函数介绍 1.1 函数的定义与调用说明 二.函数的定义 2.1 函数定义说明 2.2 定义函数的三种形式 三.函数的调用 3.1 函数调用说明 3.2 调用函数的三种形式 四.函数返回值 4 ...

  8. Hbase高手之路 -- 第五章 -- HBase的Java API编程

    Hbase高手之路 – 第五章 – HBase的Java API编程 一. 需求与数据集 某自来水公司,需要存储大量的缴费明细数据,以下截取了缴费明细的一部分内容: 因为缴费明细的数据记录非常庞大,该 ...

  9. 中国第一计算机编程高手横瓜的天才求职之路异常艰辛,天妒奇才呀

    中国第一计算机编程高手横瓜的天才求职之路异常艰辛,天妒奇才呀 横瓜(601069289)  17:17:21 大家如何跳槽? 我这样写如何?年薪要求100万,先付50万,面试地点来我所在的城市,并且是 ...

最新文章

  1. linux磁盘满时,如何定位并删除文件
  2. python基础教程第二版和第三版哪个好-最好的Python入门教材是哪本?
  3. 人工智能工程师学习路线及具备的5项基本技能
  4. ubuntu中怎么打开python_如何在Linux Ubuntu 16.04下安装及打开PyCharm
  5. 计算机ppt试题训练,powerpoint2010操作题 计算机POWERPOINT操作题
  6. MSP430FR6989系列教程之PWM波
  7. Python 教程之再见 Excel你 Python 的spreadsheets电子表格
  8. QT编译Python问题:During startup program exited with code 0xc0000135
  9. NOIP中的数学--第6课 排列与组合
  10. svn status详解
  11. item在python中什么意思_Python中使用item()方法遍历字典的例子
  12. PDF文件旋转页面的简单方法
  13. 计算机主机电池馈电,电脑主板电池没电了表现 电脑主板电池没电了解决方法【详解】...
  14. php控制树莓派GPIO
  15. 微信小程序自定义组件,和 父子组件 之间的传值
  16. 美国名校为何青睐爱吃泡面的考生
  17. Hacking Tools搜罗大集合
  18. 【001】光学系统的像质评价方法
  19. 帕斯卡计算机结构,帕斯卡计算机: 第一台受专利保护的计算机
  20. NORDIC-NRF52832蓝牙芯片选型表,基本参数以及应用领域

热门文章

  1. 【洛谷】P2676 [USACO07DEC]Bookshelf B (c++)
  2. react hooks学习之useState set值后,获取值没有更新
  3. FRDM-KL25Z MKL25Z128 MCU 资源概览
  4. Java计算器按钮间隔_获得声音按钮的最佳方法按Java计算器?
  5. git上传本地工程到码云上,报错: ! [rejected] master - master (non-fast-forward) error: failed to push some
  6. 蝉联AI专业全球冠军!清华力压CMU再夺CSRankings高校AI排行王座
  7. websocket实现GPS数据的实时推送与地图的展示(优化)
  8. 最新彩虹易支付源码┼教程,彩虹易支付平台源码新增域名绑定功能和实名人工审核
  9. 六级考研单词之路-十四
  10. 【UEFI基础】UEFI变量基础