宋宝华: 迭代螺旋法——关于Linux学习方法的血泪建议
在下是一个码农,也号称是一个老湿,平生阅码农无数(吹牛的 ^-^)。经由大量的案例,我能够理解了为什么很多码农学了很多年Linux,还是感觉没有掌握要领,仍然内心崩溃,最终对Linux吐血而亡,正所谓:人世间最大的痛苦,莫过于,码农落花有意,而Linux流水无情.......
在这个2018农历七夕之夜,我决定写一点什么,来缅怀很多童鞋在Linux世界里逝去的青春,抚慰你内心的失落、彷徨、迷茫乃至绝望。
很多为Linux吐血而亡的程序员都犯了一个通病,那就是一开始就陷入无穷无尽的细节,比如一开始就陷入源代码情景分析。情景分析这样的书,无疑是好书,但是你把《新华字典》从第一个单词,背到最后一个单词,你仍然写不出一篇作文。
《琴诗》
苏轼
若言琴上有琴声,放在匣中何不鸣?
若言声在指头上,何不于君指上听?
我建议的学习方法是,反复迭代螺旋上升法。如下图:
下面我们来论述学习Linux内核的各个阶段
第一阶段: 先形成整体轮廓,比如对Linux的进程、内存、I/O、驱动模型有一些基本的认识,开始写一些简单的内核模块,比如hello-world模块、globalmem、globalfifo这样的字符驱动,你一定要动手。这个时候你可以看的书是《Linux内核设计与实现》,还有驱动的书。
第二阶段:从事具体的工作,在某个子系统(无论是进程、内存、IO还是驱动)从事工作,加新的功能,修bug,发patch,加深对知识的理解。这阶段你如果有兴趣,也有耐心,可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你工作的时候,会自然而然地自己进行代码分析。
第三阶段(回归第一阶段):你已经工作了一段时间,写了一些代码,修复了一些bug,提交了一些patch,然后你重新回来迭代整体的知识框架,搞清楚各个子系统内在的联系。这阶段你如果有兴趣可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你的工作让你自己有了分析的能力。
第四阶段(回归第二阶段):从事具体的工作,在某个子系统(无论是进程、内存、IO还是驱动)从事工作,加新的功能,修bug,发patch,加深对知识的理解。这阶段你如果有兴趣可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你的深入的工作,会让你自己具备了理清脉络和深入细节的能力。
接下来怎么办?不停地循环!生命不息,循环不止!!两情若是久长时,又岂在朝朝暮暮。
你千万不要倒着学,先跑进去细节,跑进去一行行,总共2000万行地撸代码,这样量太大,整体性太弱,各个组件的关联很难建立。且中间无法用前期的成就感,来催生后期学习的动力,只会强撸灰飞烟灭。你不从外围看Linux,横着看,竖着看,你是看不到Linux的真面目的。
横看成岭侧成峰,远近高低各不同。
不识庐山真面目,只缘身在此山中。
据我个人所知,也有极少量的人,一开始就以情景分析的方法,逐行解释代码,最后也学有所成,但是这样的人,都具有非凡的毅力,不是一般人可以去模仿的。
一般的人,类似我这样的懒惰分子,需要用整体带动部分的方法。正如我们看一个别人的.c文件,你不可能傻到从第一行读到最后一行。你肯定是先搞清楚这个.c的整体功能,对外接口API,再深入到static的内部函数,由外及内,继而由内及外。
下面我们用一个球来比如Linux,最外圈的球是整体的Linux,球内的小球是Linux的某个组件。最开始你这样看Linux:
接下来你把其中的某些子系统放大,整个Linux这个气球也随着变大:
随着掌握的越多,这个球越来越大:
然后,某个领域成为你的专业领域(比如你文件系统牛逼,比如你内存优化牛逼),这个球里面这个专业领域就凸起了:
我不是大神,我只是屌丝,但是我爱你们!
愿你的球球越来越大!
愿你的球球越来越大!!
愿你的球球越来越大!!!
你的球有多大,你的世界就有多大。
查看更多精华文章请扫描二维码关注"LinuxDev"
宋宝华: 迭代螺旋法——关于Linux学习方法的血泪建议相关推荐
- 宋宝华:评Linux 5.13内核
目录 Misc cgroup Landlock安全模块 系统调用的堆栈随机化 printk无锁ringbuffer的进一步优化 BPF可调用内核函数 公共的IO PAGE Fault支持 Linux ...
- linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可 ...
- 宋宝华_2010年11-12月Linux驱动和内核讲座PPT下载
12月29日,宋宝华老师在线讲座(按键和LCD驱动) cloudquan 2010-12-20 2/146 heyan0208 3 天前 00:37 宋宝华_2010年12月11日_& ...
- 宋宝华:LEP(Linux易用剖析器) 是什么,为什么以及怎么办(2)
LEP(LINUX EASY PROFILING) 是Linuxer之LEP项目组(Barry Song,Mac Xu,陈松等以及陈莉君教授/西邮Linux 3+1实验室)正在致力于打造的一个开源项目 ...
- linux pdf 宋宝华,51CTO博客-专业IT技术博客创作平台-技术成就梦想
原创 宋宝华 Linux阅码场 2018-04-10 前言 网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂! 我曾经跨过山和大海 也穿过人山 ...
- 宋宝华: 用off-cpu火焰图进行Linux性能分析
在<宋宝华:火焰图:全局视野的Linux性能剖析>一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析.但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU) ...
- 宋宝华:论一切都是文件之匿名inode
01 唯有文件得人心 当一个女生让你替她抓100只萤火虫,她一定不是为了折磨你,而是因为她爱上了你.当你们之间经历了无数的恩恩怨怨和彼此伤害,她再次让你替她抓100只萤火虫,那一定是因为她还爱着你. ...
- 宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清
原创 宋宝华 Linux阅码场 2018-01-22 作者简介 宋宝华,他有10几年的Linux开发经验.他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上r ...
- platform设备驱动全透析(转自宋宝华老师)
platform设备驱动全透析(转自宋宝华老师) 2013-04-12 09:58 384人阅读 评论(0) 收藏 举报 分类: linux kernel(22) 1.1 platform总线.设备与 ...
最新文章
- 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
- 喂~讲真~我很讨厌chrome谷歌浏览器的默认填充输入框input样式咧,敲击讨厌滴啦,怎么去掉介个样式尼
- 6 OC 中的isa 指针
- memcahce 介绍以及安装以及扩展的安装
- UA MATH567 高维统计II 随机向量11 kernel的构造 用内积替换反三角函数
- img 光盘映像文件已损坏_系统封装||还在用MSDN下载Windows镜像文件?你out了,用这个就可以了...
- SQL中的left outer join,inner join,right outer join用法详解1
- HDU-1847 Good Luck in CET-4 Everybody! (博弈+找规律)
- mysql数据库 sid_jdbc连接数据库使用sid和service_name的区别
- svn文件大小类型限制,提交必须加多少字的说明
- linux系统级别及特殊字符的意义
- Python Imaging Library: Script(脚本)
- jsp页面显示mysql数据库数据_jsp页面显示数据库表数据
- php 调用vs2013 dll文件,vs2015 肿么添加dll文件
- Vegas中的色彩校正怎么用?
- 多线程之线程通信条件Condition二
- 推到 旋转矩阵公式_想知道旋转矩阵的带入公式
- linux ssh freeradius,如何将SSH身份验证配置到FreeRADIUS服务器
- 基于QtGUI的宠物小精灵对战游戏设计
- dolphinscheduler 2.0.4 PIGEON任务使用的一次尝试
热门文章
- Day2 Numerical simulation of optical wave propagation之标量衍射理论基本原理(二)
- Ensp实验随心记——PPP
- React Native学习指南
- Java判断回文字符串的几种方法
- 腾讯 Flutter 跨平台 Web 实践
- 3.30 使用抓手工具浏览和编辑大尺寸图片 [原创Ps教程]
- 宽禁带半导体:后摩尔时代超车绝佳赛道?
- solr教程从入门到精通(solr5搜索引擎)-任亮-专题视频课程
- :app:checkDebugAarMetadata 8 issues were found when checking AAR metadata: 8 issues were found when
- win10系统+3060显卡驱动+cuda11.5+cudnn8.3安装