如何写好一篇技术文章?

低并发编程

共 4359字,需浏览 9分钟

 · 2021-07-07

低并发编程
战略上藐视技术,战术上重视技术

技术文章有很多种,我们本文缩小一点范围,探讨的是,如何写好一篇讲原理的技术文章

首先,我要直言不讳地说出我写这篇文章的目的:

1. 梳理:回顾一下我之前的技术文章,给自己做个梳理,顺便给他们带带阅读量。
2. 快照:写下我当前对写好一篇技术文章的理解,看看多年后有没有提升。
3. 分享:将自己的写作感悟分享给读者,让读者也能知道如何写好一篇技术文章,因为读者大部分也是从事技术的。
4. 引流:知乎中有类似的问题,我准备写完之后直接去知乎回答,一方面提升一下知乎的影响力,另一方面也为自己的公众号吸引一波粉丝。
5. 人设:通过本篇文章,树立一个会写技术的专业形象,提升自己在读者心目中的形象。

你看,把一个事情说明白,其实很简单,只需要把自己的真实想法,如实地用人话的方式写出来,就可以了,甚至不需要动脑。


说人话





而一篇好的技术文章,最核心的目标就是,把这个技术点讲明白,让读者听懂

所以这就说明了,写技术文章的核心要素,就是说人话。

要比不说人话的文章,你比不过源码注释和官方文档。

等等。

你觉得现在的官方文档真的是不说人话么?你错了,现在的官方文档一个比一个友好,图文并茂,就怕你看不懂。

这是 kafka 的官方文档,不但图文并茂,还有视频讲解,完全可以无脑按照它给出的步骤去操作。

所以,写让人看得懂的人话,应该是大家的共识了,我们就接着往下推理。


内功





要想把一篇文章写得说人话,该怎么办呢?

首先,你得真的懂,才能用人话的方式讲出来。

所以,大量的学习并且消化这个技术点,甚至把这个技术点所在的外延知识和内涵知识都搞懂,你才能说对这个知识点是真的懂了。

如果你的技术功底不够,请不要先把目标定在如何写好一篇技术文章,并且不遗余力地去探索写文章的技巧性。

你的技术水平,永远是决定你写文章的上限,就像内功一样

而写文章的形式技巧,就像招式一样。

没有内功,招式再多也无济于事,有了内功再配合招式,就能天下第一。

而且,修炼自己的内功,永远不会浪费时间,即使这时你一篇文章都不写,也能收获知识不是么。


招式





当然,有了内功后,招式就变得重要起来了。

刚刚说了,有了内功再配合招式,就能天下第一。接下来我们就展开讲招式。

1. 层次性

我们来看一段 springboot 的源码。

 public ConfigurableApplicationContext run(String... args) {
    ...
    prepareEnvironment(listeners, applicationArguments);
    configureIgnoreBeanInfo(environment);
    printBanner(environment);
    createApplicationContext();
    prepareContext(context, environment, ...);
    refreshContext(context);
    afterRefresh(context, applicationArguments);
    callRunners(context, applicationArguments);
    ...
}

我做了些简化,不过不重要,不知道你看完之后是什么感受。

如果没啥感觉,那我再放出一段代码,你看看,只是在上面的基础上加了点而已。

 public ConfigurableApplicationContext run(String... args) {
    ...
    prepareEnvironment(listeners, applicationArguments);
    configureIgnoreBeanInfo(environment);
    printBanner(environment);
    Map<String, String> map = new HashMap<>();
    if (env == null) {
        for(int i = 0; i < size; i++) {
            map.put(key + i, waooo);
        }
    }

    createApplicationContext();
    prepareContext(context, environment, ...);
    refreshContext(context);
    afterRefresh(context, applicationArguments);
    callRunners(context, applicationArguments);
    ...
}

这样一看,上一个代码的美感就体现出来了吧?

没错,好多人写文章就会犯下面这段代码的错误,就是讲述的内容在不同层级上反复横跳,显得十分混乱。

比如,你想用一篇文章讲网络,就想解决一个疑惑,就是一个网络包是怎么一步步从一个节点,发送到另一个节点的。

那么你就一定要把握主干,将集线器、交换机、路由器中最核心的功能讲清楚,就好。

此时,将一大堆路由算法展开讲解,或者将 NAT 这种基于现有网络骨架的魔改技术拿出来喧宾夺主,我认为都是不合适的,除非你是想写一本书。

这就是写文章招式的第一个要领,就是层次性

2. 连贯性

接下来讲第二个要领,连贯性。

写文章要前后连贯,不要有逻辑断层,而且最好是递进关系。

通过前面你写的东西,一定要非常顺畅地推出后面你要讲的东西。

当然,这里还要和刚刚说的层次性做好取舍。

还是举刚刚网络的例子,比如你讲到路由器,讲到路由表。如果你展开讲路由算法,则失去了层次性。如果你不讲路由表是怎么生成的,直接跳过去了,又失去了连续性,怎么办呢?

这里我的做法是,优先保层次性,但与此同时和读者明确说明一下,我们先假设,路由表通过一些路由算法,或者手工配置的方式,变成了这个样子,然后巴拉巴拉,再说后面的,就续接上了。

这样,就既没有失去层次性,又保证了连续性,而且还有个好处就是让读者抓大放小,先不要管具体的细节,这也是学习计算机知识的一种很好的方式。

3. 抓本质

这点就见仁见智了,有的人喜欢站在宏观层面去解释,有的人喜欢站在微观层面去解释,我觉得都无可厚非。

但不可取的是,站在宏观层面,去写一篇讲原理、追细节的微观文章。或者站在微观层面,去写一些宏观层面的抽象概念讲解。

举几个例子,你想讲 IO 模型的本质和细节,你用阻塞非阻塞同步异步这些名词,用各种烧水壶、取快递的例子,永远也讲不明白它的本质在哪里。

而这个问题,必须深入到具体函数的 API,内核态与用户态分别完成了什么事情,阻塞在微观层面的本质是什么,只有这样才能讲清楚这个问题,所以不要回避它。

除非你写文章的目标受众,或者你的写作初衷,就是让初学者头脑里先有个形象的认识,并不想深入到细节里。


总结


今天就从几个大方面说了下如何写好技术文章。

首先,保持说人话的写作风格,你就成功了一半。这个其实很容易,因为让我说特别严谨的那种官方话,我也说不出来,我相信大多数人自己写出的东西,都有说人话的特征。

其次,修炼自己的内功,这个就慢慢来吧,先尝试不惧怕那些计算机名词开始,遇到总是想不明白的问题,勇敢地打开源码,或者用二进制方式去看某些结构的内存和磁盘布局。所有的原理,归根结底落实到最底层无非就是数据结构与算法,而这些资料人人都能获得,你还怕什么呢?

最后,才到了真正写文章的时候,那就是招式

首先保持自己文章的层次性,不要上下乱窜,写作的时候时时刻刻提醒自己主干脉络是什么,不要写着写着自 high 起来,把一个细节无限展开使得思维栈溢出了。

然后,保证思维和逻辑的连贯性,写的时候始终把自己当做一个刚刚接触这个原理的小白,看看能不能从前一句话,推断出你写的后一句话。如果不能,就细化一下,但如果发现细化之后影响了层次性,就明确说明下,我们先不管细节,假定 xxx,然后再往下写。

最后,写这种原理文章,要抓本质,不要再浮于表面,飘在空中,当然这个也取决于你的内功,只有内功到位了,才能看到事物的本质。

你看,都是相辅相成的,最终还是要功夫到家,再配合一些小招式,就可以成大作。

期待大家的大作!共勉!

浏览 49
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报