相信不少人都有过这样的感受:当我们去学习一项新的技术时,会有一大堆的技术名词和专业术语向我们袭来。而当我们试图去学习和理解它们时,网络上的各种学习资料,要么是非常晦涩的原理阐述,要么是大段的代码讲解,看得云里雾里。在我们对一项技术还没有一个全局和整体的认识之前,一下就陷入到细节中,这对新手学习的效率和信心都有不少负面影响。
除了学习,在工作中也有类似的现象,经常会有技术分享和技术讲座,很多时候,负责分享和讲述的人都只顾着单方面的信息输出,把自己要讲的东西说完就算完事,至于下面的人听懂没有,听懂多少,似乎并不关心。
上面的两种现象,在我十一年的编程生涯中,就经常遇到。
每到这个时候,我就在想:为什么不能站在读者/观众的角度来想一想呢,想一想什么样的方式更容易让他们接受和理解。如果是我来讲、我来写,该用什么样的语言让大家更好理解呢?
后来,我总结了自己的一套方法,那就是举例子、打比方、讲故事,把一个晦涩的概念用我们熟知的事物表达出来,去降低技术名词本身的神秘感,让我们能快速知道这个技术是干什么的,要解决什么问题,然后才关注它具体是怎么工作的。
运用上面的表达方式,我曾经在大学的时候通过远程语音讲述的方式,帮助一个学经济学专业的高中同学从零基础开始学C语言并通过了计算机二级考试。
我们再来看另外一个问题。
在我面试过的很多人中,以及在如今的互联网上,我发现很多程序员都在忙着学习各种编程语言、各种开发框架和各种中间件的使用,却对计算机底层相关的技术知之甚少。我思考造成这一现象主要有几个原因:
1. 很多程序员都是半路出家的,没有系统地学习过计算机底层知识。
2. 科班出身的程序员由于大学里陈旧的教学方式对这些底层技术也提不起兴趣。
3. 实际工作中的很多岗位只需要具备增删查改(CRUD)能力,对计算机底层技术没那么看重。
由于这些原因,很多程序员的基础知识欠缺,在工作中涉及技术原理的时候就会发现不足。
随着越来越多新人的加入,计算机软件开发行业的竞争也越来越激烈,只靠CRUD技能很大程度上会限制程序员在技术领域的发展。而学习这些底层技术知识,修炼好程序员的内功,可以帮助我们知其然还能知其所以然。
举个简单的例子,如果不知道零拷贝技术和I/O多路复用技术底层的原理,就很难理解Nginx为什么能支持高并发。