不忘初心,越挫越勇

本文作者鲸鱼,是《程序员的成长课》征文活动第一篇入选文章。

安晓辉老师的《程序员的成长课》是一本特别的书。这本书谈的不是具体的技术,而是程序员进阶、成长的“方法论”。

此书第2章——“如何在技术上持续精进”给我的印象最深。我想结合自身经历,说说我是怎么精进的,还有我走过的弯路。

怎样找标杆

要想在技术上持续精进,可以试试书上讲的“对标管理法”。

所谓对标,就是和标杆比较,找出你们之间的差距,然后制定计划、采取行动,不断缩小差距,最终赶上甚至超越标杆。

怎样找标杆呢?按书中所说,可以从以下四方面寻找。

  • 优秀的人

  • 一般性规律

  • 技术本身的知识层次

  • 项目指标

这里我再加一点,就是优秀的作品。

我的一个前领导对我说过,写代码就像写作文,要想写出好代码,就要多读优秀源码,看看人家是怎么设计,怎么实现的。正所谓:“熟读唐诗三百首,不会吟诗也会吟。”

从那以后,我一见到好的代码,眼睛就会发亮。有一次和闺蜜逛街,她问我:“看到漂亮的包包,你有没有这样的感觉——我要是能拥有这个包包就太好了!”我瞥了一眼某包(其实我根本不认识),回答:“没啥兴趣。不过,看到漂亮的代码,我有这样的感觉——我要是能写出这样的代码就太好了!”

学习技术的三个阶段

如上所说,可以根据“技术本身的知识层次”来找标杆。安老师认为,学习一门技术一般分为三个阶段:

  • 第一阶段,基于API开发

  • 第二阶段,阅读源码,洞悉内在原理

  • 第三阶段,优化框架

如果你觉得抽象,可以参考书上第41页,有安老师绘制的Qt技术三阶段导图。

几年前,我所在的公司以stm32为硬件平台,以μC/OS-Ⅱ为实时操作系统,在其上开发导航类的应用。

我知道,应用开发需要调用μC/OS提供的API,可是API背后发生了什么呢?如果说这个实时操作系统是一个黑盒子,那么我恨不得快快把黑盒子拆开,一探究竟。

于是,我定下了读懂μC/OS-Ⅱ源码的目标。现在回看,当时的我不满足于第一阶段,还想完成第二阶段,这算是一种精进。

SMART原则

仅有目标是不够的,还需要确保这个目标是有效的。书上说,有效目标要符合“SMART”原则。SMART原则中的“S”、“M”、“A”、“R”、“T”五个字母分别对应了五个英文单词,绘制成表格如下:

可惜,我当初根本不知道这个原则。

根据此原则,“读懂μC/OS-Ⅱ源码”肯定不是一个有效目标:首先不可衡量,什么算是读懂?其次,是没有设置时限,既然没有时限,那就可以一拖再拖,极有可能达不成。

如果现在让我修正此目标,我会这样写:

找到下一步行动

找到有效目标后,就要从目标分解出能够立刻开始的“下一步行动(安老师建议最少三个)”。然后就是“Just do it”. 做完之后,分解新的下一步行动,继续做……不断迭代,直到目标实现。写成伪代码就是:

do{
   找出下一步行动;
   做;
} while (目标未实现);

我当时就是这么做的:

首先,从官网下载源码;然后买了一本参考书,再按照书上的讲授顺序,每天抽出一个小时研读对应的源码。读不懂就反复看书反复读。

就这样按部就班,循序渐进,2个月后就实现了目标。我又趁热打铁,乘胜追击,把μC/OS-Ⅲ的源码也给读了。

行动不下去怎么办

很多时候,行动并不像我刚才描述的那样顺利。

经常遇到的情况是:行动的时候,发现根本执行不下去。

2015年秋天,朋友给我推荐了一本书——《Linux内核完全剖析——基于0.12内核》。先不说内容,光书名就很吸引我。

我立马买了一本,从作者序开始看,原来“这是一本有关Linux操作系统内核基本工作原理的入门读物”,作者采用了Linux-0.12版内核作为学习和剖析的对象。

当时的我兴致勃勃,心想太好了,看完我就知道0.12内核怎么工作了。虽然这本书很厚很厚(一共17章,900多页),但是我下决心一年内看完。

说干就干。每天晚上吃完饭,我都躲在书房里啃书。第1章是概述,理解起来不难。第2章是微机组成结构,还算顺利。到了第3章,我终于看不下去了。对着那一行行的汇编代码,我是两眼一抹黑啊。哎,大学时候学过汇编语言,可是这么多年不用,早就忘了。

怎么办呢?我首先想到的是跳过这一章,接着往后看。冷静思考后,我认为不能跳过。因为内核的启动代码就是用汇编写的,看不懂汇编,就无法搞清楚内核的启动过程。

所以,我要学汇编,一定要学会!我赶紧买来《汇编语言》,打算两个月学完。

通过这件事,我认为行动不下去的时候,肯定是“下一步行动”没有找对。这时候,就需要根据自身情况,分析哪里出了问题。本着解决问题,找出合理的下一步行动。

越挫越勇

不到两个月,我就把《汇编语言》学完了。我心想这下可好了,应该能看懂Linux-0.12了。谁知好景不长,好不容易磕磕绊绊看完第3章,第4章又看不懂了。

第4章讲的是80x86保护模式。“全局描述符表寄存器”、“中断描述符表寄存器”、“局部描述符表寄存器”……各种陌生的词汇,看得我是云里雾里。原来,我学的《汇编语言》是实模式的汇编语言,还有保护模式的汇编语言等着我呢。

哎,这本书根本不像序言所说,哪里是“入门读物”?对我来说门槛太高了!

还好,我没有放弃。缺啥补啥,我一定要跨过这道门槛。我再次调整下一步行动,计划学习x86保护模式的汇编语言。为此,我买来《x86汇编语言:从实模式到保护模式》,打算三个月内学完。

渐行渐远

三个月后,我终于学完了保护模式的汇编语言。此时我想,要是能把学习心得总结成博文就更好了!

于是,我重头学习,边学习边输出博客,总共写了70多篇。说来惭愧,博客写着写着,我把初心给忘了。一直到2017年冬天,偶然间看到书架上落了灰尘的《Linux内核完全剖析——基于0.12内核》,我才发现我离Linux-0.12渐行渐远。

不知道你是否听过这样一个故事:说一个人,有一天想要往墙上挂幅画,然后就急急忙忙地找来了锤子和钉子,一钉,发现这个钉子吃不住这幅画,那怎么办呢?他说我得打一个小木头锲子,让这个钉子能够吃住画,然后就去找木头,找着了以后说不行,我必须得去找把斧子,就去找斧子,找着以后觉得这斧子对付木头不顺手,又去找锯子,锯子有了,发现锯条断了,又去找锯条……就这样一轮一轮找下来,等到他把所有的东西都凑齐的时候,已经不知道要干什么了,他早就忘了那幅画了。

这故事里的人不就是我吗?

本来想看Linux-0.12,发现汇编语言不会,就去学汇编,学完发现不行,必须要懂保护模式,又去学保护模式,学完觉得还是不行,要有博客输出,于是开始写博客,等写了70多篇博客后,已经忘了当初要干什么了。

我想起了纪伯伦的话——“我们已经走得太远,以至于我们忘记了为什么而出发。”

不忘初心

2017年底,我幡然悔悟,迷途知返。我从书架上取下《Linux内核完全剖析——基于0.12内核》,掸去灰尘,重新上路。

有了保护模式的底子,第4章和第5章很快就看完了。从第6章起,作者开始正式剖析源码。我想,一定要有个实验环境,也就是说Linux-0.12的源码要可以编译,可以运行,可以调试。我尝试在Ubuntu环境下编译Linux-0.12,谁知满屏满屏地报错,压根就编译不过。为了这个环境,我折腾了好几个晚上,仍旧没有搞定,最后心灰意冷。

这时,一个朋友建议我看Linux-0.11的源码,他说这个版本网上资料很全,而且有别人配置好的实验环境。我听后大喜,东搜西寻,找到了一个环境搭建压缩包,安装后确实可用,完全可以达到编译、运行、调试的目的。你看,我的下一步行动又调整了,改为学习Linux-0.11。我想,等我把0.11学懂了,应该就可以搭建出0.12的实验环境了。

我要吸取上次的教训,牢记目标“Linux-0.12”,千万不能学完0.11后就把0.12给忘了。

最后,请允许我以郑板桥的《竹石》作为本文的结尾。祝愿屏幕前的你能像诗中的竹子一样,像安晓辉老师一样,持续精进,不忘初心,“咬定青山不放松”,日日“对标”终成功!

咬定青山不放松,立根原在破岩中。 千磨万击还坚劲,任尔东西南北风。


戳阅读原文,也可直接购买。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值