如何写好技术文章/书籍:四个指导原则

标签: 公众号文章程序员


不知不觉专职写技术文章/书籍的时间已经有两年了,刚开始是摸着石头过河,什么东西都是尝试着来,今天再回头看我最初写的一些东西仍是蛮幼稚的,但愿再过两年看我今天写的这些东西也能产生这种感受吧(那才能说明我进步了嘻嘻)。架构

当咱们从事一门工做时,首先要界定清楚咱们要达到的目的是什么。对于写技术书籍/文章的我来讲,目的很简单,就是:让同窗们更快、更温馨的掌握我想让他们掌握的那些知识。达到这个目的比较困难,不过在不断探索中逐渐造成了我本身的一套写做方法论,今天这篇文章就着重于我本身提出的写技术文章的四个指导原则,主要是给下边两类同窗看:学习

  • 对于刚刚开始写做的同窗们,但愿你们能够少走些弯路。spa

  • 对于学不懂某一门专业知识的同窗们,虽然我不能让你们当即把专业知识学会,可是至少可让你们明白本身为何学不会。操作系统

    小贴士: 个人一个观点:对于大部分工程技术问题来讲,理解并掌握它们并不须要很高的智商,可是须要解释这些问题的人下一些功夫,从初学者的角度出发来解释问题。也就是说:学不会东西不怨你们,是咱们的文档没写清楚~ 翻译

好的,废话少说,所谓的写技术文章的四个几本原则就是指:设计

  • 简单
  • 简洁
  • 有趣
  • 系统

咱们下边分别来看一下。code

简单

计算机是一个很是精密的机器,咱们能够用叹为观止来形容,简直比艺术品还艺术品。不过即便是通过成千上万科学家精心研究的这个艺术品,底层也只不过是由一堆晶体管组成的,咱们做为程序员平时使用C、Java这些高级语言写出的程序实质上是在操纵这些晶体管。比方说咱们用C语言敲了一行printf的代码,而后把它编译运行,最后在屏幕上把它显示出来,这样的一个简单的操做,实际上是通过层层调用获得的:cdn

  • 咱们的应用程序(这里是一个C语言的程序)会调用操做系统提供的往屏幕上输出一行字的接口,称之为系统调用,不一样厂商能够生产不一样的操做系统,比方说UnixLinuxWindows之类的。接口

  • 操做系统接收到须要往屏幕上输出一行字儿的指令和内容以后,会调用相关硬件的机器指令,这些机器指令其实就是010101...这样的二进制代码。不一样的厂商生产的不一样机器有不一样的机器指令体系,比方说x86MIPSPowerPC等等等。

  • 这些010101...二进制代码它们自己没有啥意义,针对同一个指令体系来讲,不一样的厂商能够针对一样的机器指令画出不一样的电路图,比方说对于x86机器指令的体系,Intel公司和AMD公司能够真对同一个机器指令开发出不一样的电路图,这个电路图就是所谓的微体系结构。

  • 电路图其实就是个图,它是由各个具体的逻辑组件组成的,比方说作加法须要加法器,作乘法须要乘法器,存储数据须要触发器吧啦吧啦的。

  • 而这些逻辑组件本质上是数字电路,由与、或、非以及其余的一些基本逻辑门构成的。逻辑门仍是一个抽象的概念,它假设电路里只有0和1两种状态,可是实际的电路中只能靠电平(或者说电压)来表明电路的状态,而电平的变化是一个连续变化的过程,不是单纯的从0点平直接跳到1电平,因此咱们把在某个区间内的电平认为是0,某个区间内的电平认为是1。

  • 模拟电路中的电平信号是连续的,它是靠底层的一些硬件来导电的,比方说继电器、真空管、晶体管啥的。

  • 继电器、真空管、晶体管这些器件是怎么导电的呢?咱们只能认为这是大天然的魔力,或者说大天然的一种规则。

从这个过程能够看出来,这样子的抽象把一个极其复杂的问题分配到了不一样层级去处理,就像把军队分红军、师、旅、团、营、连、排、小工兵同样,最高级别的指挥官会下达一个较为抽象的命令,比方说把某个地方给攻占掉,以后这个命令层层落实到最基层,每一层都有本身的任务,可是最具体的任务仍是要给小兵去完成。

说了这么多,咱们只是想说一个极其复杂的系统背后确定是有其抽象层级的,做为解释者的咱们须要把这样的抽象层级给解构出来,直到解构到足够简单让用户理解,而后再把它们串联起来造成一个大的系统。为了作到简单,咱们给出一些能够落地的建议:

  • 清晰的结构划分。

    这个过程相似于思惟导图,咱们首先搞清楚本身要讲清楚的主题是什么,而后这个主题是由哪几个部分组成的,每一个部分又能继续化为更小的哪些部分。化成的这些部分的相互依赖关系是如何,千万要记住一条硬性规定:不要用一个没有解释过的概念去解释另一个新概念,这种状况是致使用户学不懂的首要元凶。

  • 魔鬼藏在细节里,对一个概念的充分解释

    不少同窗觉得写的字越少,可能意味着越精华,这纯粹是胡扯。个人经验是咱们给出的细节越多,读者更容易理解,读者在越多过程当中会产生不少疑惑,细节列出的越多,留给读者产生疑惑的状况就越少,这样他们的思路就更不容易被打断。

  • 把某些不适合展开讨论的概念看成黑盒对待,可是要显式的对读者声明

    咱们的文章/书籍的篇幅有限,不可能把每一个概念都讲述的十分清楚。这时候咱们的首要思路是想办法绕过这个概念,在使出浑身解数都绕不过期,须要显式地跟读者说明这个概念咱们暂时不讲,只须要知道它有一个什么样的属性就好。

    小贴士: 就个人写做经验来讲,那些当前还不着急介绍的概念十有八九都能绕过。

简洁

简洁直白一点儿的翻译就是废话不要太多。

  • 咱们在写做以前必定要明确本身介绍的主题是什么,而后与这个主题全部无关的东西均可以算做冗余部分,能够用一句或者两句话介绍带过。由于对于无用概念的过多介绍会让读者下降读者注意力,分散注意力的后果就是他们可能分不清那些是重点,哪些是没用的。

  • 避免概念过多出如今一个地方。

    若是你发现本身在某个不长的篇幅里连续引入了大量的概念,并且看上去密密麻麻的介绍性文字,中间也没啥段子的话,那你就要当心了,这样的篇幅容易引发读者不适,不少人会下意识的先扫一眼,发现里边有好多本身不认识的词儿,内心立马就有了抵触,这种抵触情绪会影响到他的阅读体验,从而更难真正理解你所描述的内容。因此若是你须要在某处介绍大量概念的话,这时你就须要考虑如何拆分这些概念,你能够把它们拆成不一样的主题,或者在同一主题里拆分到不一样的地方去描述。

  • 图表让文章立马变得简洁

    语言在图表面前是十分苍白的,真滴~

有趣

首先说一下,有趣简洁在不少地方都比较冲突,若是你想让文章更有趣,那就得适度牺牲简洁,把握好度比较重要,这个度就像厨师的火候,不可说~

  • 能用咱土语描述的就千万别扯过多的专业术语,专业术语用多了,就成了文言文,让人看多了就忘了是个啥意思。有的时候为了表述某个观点你以为汉语不够使了,你扯点英格蕾丝也是能够的嘛。

  • 段子该用就用,甚至能够是咱们刻意设计的,笑点掌握在本身手中那是种高级境界,我目前还差着远呢~

  • 注意趣味性不能喧宾夺主,沦为儿童读物。

系统

系统能够表述为一种知识的闭环,写书的时候尤为要注意,写单篇文章的时候也要稍微注意一下。

就是说咱们把要讲述的那些主题划分红多个模块后,将每一块的依赖关系划分出后,先讲那些简单的,再讲那些复杂的,最后所有都联系到一块就造成了咱们要讨论的主题,针对每一块,咱们都要考虑清楚:

  • 咱们在讲什么东西?
  • 为何会有这个东西?
  • 这个东西有什么用?

一个概念的产生不是凭空想像出来的,它是有它存在的环境的,咱们把它们诞生的情景说清楚,而后把它们和其余模块的依赖说清楚,就能够造成一个浑然天成的体系,用户们也就能够得到一个慢慢的学习成就感。

关于正确性

咱们怎么没有唠叨内容的正确性呢?哈哈,这玩意儿还用强调么,多找几本参考书,多对照着源码看一下。虽然咱们是人就可能犯错,可是但愿能够尽可能让错误少一些吧~

结语

但愿咱们的技术文章/书籍愈来愈好,曾经帮助过我宣传《MySQL是怎样运行的:从根儿上理解MySQL》的公众号「架构师之路」的博主沈剑老师对我说:“我是技术人,不是商人”,与各位共勉,尽可能改变一下国内技术书籍晦涩难懂的现状,一块儿加油⛽️

题外话

写文章挺累的,有时候你以为阅读挺流畅的,那实际上是背后无数次修改的结果。若是你以为不错请帮忙转发一下,万分感谢~ 这里是个人公众号「咱们都是小青蛙」,里边有更多技术干货,时不时扯一下犊子,欢迎关注:

相关文章
相关标签/搜索