关注、星标公众号,直达精彩内容

来源:技术让梦想更伟大

整理:李肖遥

代码并不是写给人看的,而是交给机器运行的。

所以我们去理解别人的代码时,并不能像看小说一样去通篇的阅读代码,而应该是像研究化石一样去调查它,解密它。有时我们往往也需要把对方的一段代码亲手的实现一遍,然后自己举一反三看自己会怎么去实现它,才能真正地理解。

举个例子:

不管是建一栋楼还是建一栋木屋,大致流程是这样的:画图纸→打地基→整平地面→建框架→砌墙→装修。

虽然大致流程是一样的,但显然建一栋楼所需要实现的细节远远大于建一栋木屋。

如果让一个人去建好一栋楼,这在技术实现和时间成本上是不切实际的。一栋楼的建成是许多分属不同工种的人群共同协作的结果。如果以做一栋楼的标准去建一栋木屋,显然也是不切实际的。比如:不可能用建一栋楼的地基去建一栋木屋。

如果我们要学习如何去建造一栋楼,我们可以先学会如何建一栋“木屋”,然后再深入的学习建造一栋“楼”的某个模块,再转向其他模块的学习。只有通过不断的实践,才有可能建成一栋布局合理、坚固耐用的楼,而不是空想。如果只知道生搬硬套别人的理论知识而不懂得根据实际情况作出改变,就像搭积木一样,建成的楼最终还是会东倒西歪而倒塌。

在战场上可以没有某个士兵,但不能没有拥有全局观念的指挥官,指挥官即使不亲自上战场也能左右整个战争的结果。指挥官也是从士兵做起的,但不是每个士兵都能变成指挥官。

一个人看完Linux内核源码的难度

Linux内核最初是由李纳斯托瓦兹在赫尔辛基大学读书时出于个人爱好而编写的。第1版本于1991年9月发布,当时仅有10000行代码。如今的Linux内核Git源码树中的代码达到了2780万行,核心代码只有2%是由李纳斯托瓦兹自己编写的,其他均是其他个人和组织贡献的,李纳斯托瓦兹公开了Linux但保留了选择新代码和需要合并的新方法的最终裁定权。

这么多的代码一个人可能穷尽一辈子都很难吃透,如果有人能够完全吃透,世界上除了Windows、MacOS、Linux,早就诞生了其他的很流行的系统了。“耐住寂寞,阅读代码”并不是一个可行的办法。在大多数情况下会半途而废,一个月之后,可能全部都忘记了。

学习Linux最重要的是培养自己写代码的能力和对Linux框架结构的了解

假如我们向某个人很有能力的人学习,并不是跟在他的屁股后面,他做什么你就做什么,那你的这个学习的过程只可能形似,而不是神似。当你单独处理某件事时,还是会手忙脚乱、处理的很不好。学习这个人的过程应该是看他处理某件事分开了哪个步骤,每个步骤又是如何处理和衔接的,自己有没有更好的方法实现。

学习Linux也是一样的,你需要知道Linux内核是由哪些模块组成的,这些模块实现的是什么样的功能,这些功能实现的原理是什么,模块与模块之间又是如何衔接才构成了一个完整的系统。通俗一些讲就是要有将军的架构意识和合理调控意识,而不是士兵的冲锋陷阵和奋勇杀敌的意志。因为Linux是一个庞大的系统,而不是时间线上的某一件事情。

没有当过士兵的将军能不能算是好士兵?不能,充其量只能算是“纸上谈兵”,将军只有清楚地了解士兵是如何冲锋陷阵和奋勇杀敌才知道如何去摆兵布阵。所以学习Linux不光光是要有阅读代码的能力,还需要有能熟练写出优秀代码的能力。

比如:

同一个软件项目,有的人项目规划很简洁,有的人项目规划很繁琐,项目规划决定了整体代码的规模。写程序代码实现某个功能时,有的人算法简洁代码量少在硬件上执行效率高,有的人算法繁琐代码量多在硬件上执行效率低。

所以我们对Linux内核的框架结构有了全面的了解之后,可以通过深入的学习某个模块来培养我们写代码的能力。当写代码的能力不断的提升就会对Linux内核有一个比较透彻的理解,这时就已经完全学会了Linux内核。

我们不需要纠结于多久能读完Linux内核源码,而是学会如何去读懂它

有人说穷尽一个人的一生都很难写出媲美Windows、MacOS、Linux那样的系统,但如果你对操作系统有架构层面的全面认识的时候,就不会这么说了。

Windows、MacOS、Linux并不是一个人独立完成的,他们是许许多多的人团队协作的结果。假如一个人独立完成一个操作系统需要100年,通过划分模块,将每个模块分给不同的团队来做,最终每个模块测试完后,整合成一个完整的系统,可能只需要几年。Linux内核从最初的10000行代码到现在的2780万行代码就是全球精英共同贡献的结果。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧关注我的微信公众号,回复“加群”按规则加入技术交流群。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

如果你打算看完Linux内核源码,可能穷尽一生都做不出一个系统相关推荐

  1. 有必要学好linux内核吗,如果你打算看完Linux内核源码,可能穷尽一生都做不出一个系统...

    代码并不是写给人看的,而是交给机器运行的. 所以我们去理解别人的代码时,并不能像看小说一样去通篇的阅读代码,而应该是像研究化石一样去调查它,解密它.有时我们往往也需要把对方的一段代码亲手的实现一遍,然 ...

  2. 做linux内核开发累吗,如果你打算看完Linux内核源码,可能穷尽一生都做不出一个系统...

    代码并不是写给人看的,而是交给机器运行的. 所以我们去理解别人的代码时,并不能像看小说一样去通篇的阅读代码,而应该是像研究化石一样去调查它,解密它.有时我们往往也需要把对方的一段代码亲手的实现一遍,然 ...

  3. 需要多久才能看完linux内核源码?

    代码中自由颜如玉! 代码中自有黄金屋! 那么Linux内核代码到底有多少行? 我们需要多久能读完呢? 一.内核行数 Linux内核分为CPU调度.内存管理.网络和存储四大子系统,针对硬件的驱动成百上千 ...

  4. Linux内核源码分析方法

    说明:这是一个刚接触内核三个月的同学,通过对一个内核特性的分析,总结出一套分析内核的方法. 一.内核源码之我见 Linux内核代码的庞大令不少人"望而生畏",也正因为如此,使得人们 ...

  5. 腾讯首发Linux内核源码《嵌入式开发进阶笔记》差距差的不止一点点哦

    一,前言 Linux内核是一个操作系统(OS)内核,本质上定义为类Unix.它用于不同的操作系统,主要是以不同的Linux发行版的形式.Linux内核是第一个真正完整且突出的免费和开源软件示例.Lin ...

  6. 玩转腾讯首发Linux内核源码《嵌入式开发笔记》

    一.前言 Linux内核是一种开源电脑操作系统内核,它是一个用C语言写成,符合POSIX标准的类Unix操作系统. Linux内核最早是由芬兰Linus Torvalds为尝试在英特尔x86架构上提供 ...

  7. Linux内核源码分析方法—程序员进阶必备

    一.内核源码之我见 Linux内核代码的庞大令不少人"望而生畏",也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是 ...

  8. Ubuntu 安裝 GNU Global(gtags) 阅读Linux内核源码

    CSDN GitHub Ubuntu 安裝 GNU Global(gtags) 阅读Linux内核源码 AderXCoding/system/tools/global 本作品采用知识共享署名-非商业性 ...

  9. 内核大佬讲述,Linux内核源码分析方法(建议收藏)

    一.内核源码之我见 Linux内核代码的庞大令不少人"望而生畏",也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是 ...

最新文章

  1. 【 FPGA 】UltraFast设计方法学:定义时钟分组
  2. 面试5家公司,我发现这80道面试题最好用,直中要害
  3. 想爱容易,相处难:当ASP.NET MVC爱上IoC
  4. 使用curl获取Location:重定向后url
  5. 元气森林难撕“网红”标签
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的网上商城系统
  7. 如何安装python3.7.2_CentOS7下安装Python3及Pip3并保留Python2
  8. 智能云端服务器连接不了,智能云解析,智能在哪里?
  9. 用word怎么做c语言框图作业,在Word中绘制简单C语言流程图精.docx
  10. 响铃:创业三年即IPO,拼多多不应该被质疑
  11. 安卓如何隐藏APP图标探讨
  12. Linux常用命令、相关软件安装及项目部署
  13. 数字内容产业的七种主要盈利模式
  14. 网址缩短 php 安装包,PHP长链接网址缩短防封短网址短链接生成平台整站源码(一键安装)...
  15. 版本 87.0.4280.66_iOS 14.2 Beta 2发布,修复闪退与优化改进
  16. RL中的策略优化问题
  17. Unity之线性渲染器
  18. Berkeley DB(BDB)
  19. 主题:内存的管理 DATE:2004-09-17
  20. Linux vi 文本代码时显示行号或不显示行号

热门文章

  1. Prometheus 系列开篇:为什么要学 Prometheus ?
  2. 20201110提莫攻击
  3. java订单 并发_订单并发处理思路
  4. 无锁编程与分布式编程那个更适合多核CPU?
  5. 百度地图 公交线路查询
  6. B - Ternary Logic
  7. kafka 延时消息处理
  8. 自驱力超强的羊驼?斯坦福微调LLaMa
  9. IE6 遇到bug及解决办法
  10. 博客专家3月原创奖励