专栏首页LINUX阅码场宋宝华: 迭代螺旋法——关于Linux学习方法的血泪建议

宋宝华: 迭代螺旋法——关于Linux学习方法的血泪建议

在下是一个码农,也号称是一个老湿,平生阅码农无数(吹牛的 ^-^)。经由大量的案例,我能够理解了为什么很多码农学了很多年Linux,还是感觉没有掌握要领,仍然内心崩溃,最终对Linux吐血而亡,正所谓:人世间最大的痛苦,莫过于,码农落花有意,而Linux流水无情.......

在这个2018农历七夕之夜,我决定写一点什么,来缅怀很多童鞋在Linux世界里逝去的青春,抚慰你内心的失落、彷徨、迷茫乃至绝望。

很多为Linux吐血而亡的程序员都犯了一个通病,那就是一开始就陷入无穷无尽的细节,比如一开始就陷入源代码情景分析。情景分析这样的书,无疑是好书,但是你把《新华字典》从第一个单词,背到最后一个单词,你仍然写不出一篇作文。

若言琴上有琴声,放在匣中何不鸣?

若言声在指头上,何不于君指上听?

《琴诗》

苏轼

我建议的学习方法是,反复迭代螺旋上升法。如下图:

下面我们来论述学习Linux内核的各个阶段

  1. 第一阶段: 先形成整体轮廓,比如对Linux的进程、内存、I/O、驱动模型有一些基本的认识,开始写一些简单的内核模块,比如hello-world模块、globalmem、globalfifo这样的字符驱动,你一定要动手。这个时候你可以看的书是《Linux内核设计与实现》,还有驱动的书。
  2. 第二阶段:从事具体的工作,在某个子系统(无论是进程、内存、IO还是驱动)从事工作,加新的功能,修bug,发patch,加深对知识的理解。这阶段你如果有兴趣,也有耐心,可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你工作的时候,会自然而然地自己进行代码分析。
  3. 第三阶段(回归第一阶段):你已经工作了一段时间,写了一些代码,修复了一些bug,提交了一些patch,然后你重新回来迭代整体的知识框架,搞清楚各个子系统内在的联系。这阶段你如果有兴趣可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你的工作让你自己有了分析的能力。
  4. 第四阶段(回归第二阶段):从事具体的工作,在某个子系统(无论是进程、内存、IO还是驱动)从事工作,加新的功能,修bug,发patch,加深对知识的理解。这阶段你如果有兴趣可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你的深入的工作,会让你自己具备了理清脉络和深入细节的能力。

接下来怎么办?不停地循环!生命不息,循环不止!!两情若是久长时,又岂在朝朝暮暮。

你千万不要倒着学,先跑进去细节,跑进去一行行,总共2000万行地撸代码,这样量太大,整体性太弱,各个组件的关联很难建立。且中间无法用前期的成就感,来催生后期学习的动力,只会强撸灰飞烟灭。你不从外围看Linux,横着看,竖着看,你是看不到Linux的真面目的。

横看成岭侧成峰,远近高低各不同。

不识庐山真面目,只缘身在此山中。

据我个人所知,也有极少量的人,一开始就以情景分析的方法,逐行解释代码,最后也学有所成,但是这样的人,都具有非凡的毅力,不是一般人可以去模仿的。

一般的人,类似我这样的懒惰分子,需要用整体带动部分的方法。正如我们看一个别人的.c文件,你不可能傻到从第一行读到最后一行。你肯定是先搞清楚这个.c的整体功能,对外接口API,再深入到static的内部函数,由外及内,继而由内及外。

下面我们用一个球来比如Linux,最外圈的球是整体的Linux,球内的小球是Linux的某个组件。最开始你这样看Linux:

接下来你把其中的某些子系统放大,整个Linux这个气球也随着变大:

随着掌握的越多,这个球越来越大:

然后,某个领域成为你的专业领域(比如你文件系统牛逼,比如你内存优化牛逼),这个球里面这个专业领域就凸起了:

我不是大神,我只是屌丝,但是我爱你们!

愿你的球球越来越大!

愿你的球球越来越大!!

愿你的球球越来越大!!!

你的球有多大,你的世界就有多大。

本文分享自微信公众号 - Linux阅码场(LinuxDev)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-18

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • nginx+php-fpm独立节点的部署wordpress笔记

    今天同学说他分开部署nginx+php-fpm出现了问题,总是报502,正好我也没试验过,于是自己也做了一遍,也遇到些问题,记下来以备以后用到。

    二狗不要跑
  • Samba网络文件共享服务介绍

    Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块,SMB主...

    二狗不要跑
  • 深入浅出 Kubernetes:初识 Pod(上)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    耕耘实录
  • 超大csv解析攻略

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    用户1149268
  • 学生时代所学的一些 C 语言知识点回顾(2)——指针

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    耕耘实录
  • Linux 实用好评的命令工具

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    阳光岛主
  • mongodb报错:connection refused because too many open connections: 819

    如果调大了maxConns,还是出现 too many open connections 的报错,也可能跟系统的ulimit限制有关。

    拓荒者
  • Linux 下安装ClamAV查毒软件

    echo '30 2 * * 6 /bin/bash /home/scripts/check_clamav.sh' >> /var/spool/cron/roo...

    二狗不要跑
  • TLS加密远程连接Docker

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    程序员欣宸
  • bug诞生记——无调用关系的代码导致死锁

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    方亮

扫码关注云+社区

领取腾讯云代金券