一、学习新技术的 6 个问题阶段
我根据从学到用的顺序,总结了学习新技术时遇到问题的 6 个阶段,见下图。
这 6 个阶段是:
不知道学什么、不知道从哪里开始学。比如音视频,是从编解码开始,还是从 Demux 开始?
找不到学习资料。
看不懂知识,看不明白用法。比如看不懂 H.265 的 spec,看不明白 ffmpeg 里怎么添加新的解码器。
写代码时不会用。知识貌似懂了,代码写不出来,或者写出来后没法与其他输入输出模块整合在一起。
设计模块搞不清用哪些功能、模块、接口等。比如用 ffmpeg 渲染时,不知道选 SDL 还是 OpenGL。
遇到 Bug 不知道怎么解。产品发布,出了问题,不知道从何下手去解决。
你可以先看看自己的问题是在哪个阶段。
二、不同阶段的精进策略
接下来咱们说不同阶段的应对策略。
第 1 个问题阶段,不知道学什么不知道从哪里开始学。
有两种策略,一是问题导向,你要解决什么问题,就从问题入手,倒推需要学什么。比如你要转码,那就先了解常见的编解码格式,从 ffmpeg 或者 vlc 的转码功能看起。
第二种策略是以既有知识体系为基础进行学习,比如买一本音视频的书,系统去看。
第 2 个问题阶段,找不到学习资料。
学习资料分为文章、图书、论文、标准、课程等,可以到图书网站搜书,可以到常见的在线教育平台搜课,可以用 Google、百度等搜关键字,还可以到专业论坛浏览帖子或文章……
第 3 个问题阶段,看不懂知识,看不明白用法。
同一个知识,可能有不同讲法,有的人讲的通俗易懂,有的人讲的云山雾罩。所以首先尝试更换学习资料,寻找讲得更好的资料。
另一种策略是先看别人的 demo,看这些 demo 运转起来是怎么回事儿,再看它怎么用那些知识,从应用往回倒推,去理解知识、技术点。
还有一种策略,就是找人给你讲。
第 4 个问题阶段,写代码时不会用。
这往往是在使用具体知识点、接口、类库时出现的。此时的常见策略,是找同一个知识点,看别人怎么用的。
比如有些小伙伴学习 LibVLC,写代码时,不知道 libvlc_media_new_callbacks 这个方法该怎么写,各种 callback 怎么定义,内部怎么实现,那就看例子怎么用的,看别人怎么用。
先模仿,再自己写,调试着看……反复这么练,慢慢就搞明白了。
第 5 个问题阶段,设计模块搞不清用哪些功能、模块、接口等。
这往往是因为不大了解某种技术实现同一目的的不同手段各自的应用场景和具体特性,需要逐一去了解,然后匹配你的目标,匹配你模块提供给外界的接口,比较着去选择。
第 6 个问题阶段,遇到 Bug 不知道怎么解。
一般解 Bug,三种策略:
利用日志查找线索
分析逻辑,走读源码,定位问题
调试跟踪
这些都要求你熟悉业务、熟悉设计、熟悉源码、熟悉具体技术的特性或原理,所以想要更好的解决 Bug,其实有很多基本功要练。另外还要有分析问题的能力。
三、问题的反面是成长的契机
我提供的一般性思路,不一定能解决你的问题,但我却也希望,你不要就此放弃。
有问题,有挑战,才有成长。
本文转载自 程序视界公众号。
原文链接:https://mp.weixin.qq.com/s/dN5pulWlNU3kjGRyD8t77w
评论