对于开发者来说,“设计模式”这个概念肯定不陌生,它是经过分类的、代码设计经验的总结,能将编写代码进行工程化,从而提升开发效率。
简单地理解,它就是“代码模板”。
设计模式 + 代码逻辑 => 清晰高效的程序
“写作模式”这个叫法也借鉴于此,是我针对一些热门技术文章的写作方式进行的总结,能帮我们快速地构思出结构清晰的文章。
下面通过7篇热门技术文章来总结7种写作模式。
《2018年你需要知道的11个JavaScript库》 大纲:
1. Lodash & Underscore 2. Ramda 3. MathJS 4. Moment & date-fns 5. Sugar 6. Lazy 7. CollectJS 8. ChanceJS 9. ChartJS 10. Polished 11. Mout 12. Voca 13. Licia
这里列举了13个GitHub上star数量较多的js库,各个库之间是并列的,相互之间并没有直接联系,即使调换说明顺序也不会对文章造成影响。
这种模式结构非常简单,我们可以直接用数组的形式来描述它:
[ sectionA, sectionB, ... sectionX, ]
《为什么Goroutine能有上百万个,Java线程却只能有上千个?》 大纲:
到底什么是线程? JVM线程使用固定大小的栈 Go线程使用动态大小的栈 JVM线程上下文切换成本高 Go线程切换成本低 结论
作者用JVM来指代Java语言,针对线程占用内存空间以及CPU的使用率两个方面,对JVM和Go进行了对比。
这种模式可以理解为“清单式”的2.0版本,所以我们用对象数组来描述它:
[ // 文章主体 { featureA: xxx, featureB: xxxx, ... }, // 参照对象1 { featureA: yyy, featureB: yyyy, ... }, ... ]
《为什么给你设置重重障碍?讲一讲Web开发中的跨域》 大纲:
一、跨域是个什么「问题」? 二、为什么不让我跨域? 三、JSONP——最常用的绕过办法 四、为什么JSONP可以? 五、跨域资源共享(CORS) 六、不让跨域请求?还可以直接跨网页
文章按照 what(什么是跨域) -> why(为什么会跨域) -> how(怎么解决跨域) 的思路来进行的写作,具有一定的递进关系。
因为这种模式的出现已经有弱逻辑关系了(顺序上有依赖,内容上无依赖),用串行的函数来描述它最适合不过了:
const sectionA = what(); const sectionB = why(); const sectionC = how();
《普通程序员怎么理解日志系统》 大纲:
1. Logging 系统的雏型 2. 什么时候打印日志是个问题 —— Level 3. 打印日志到哪里是还是一个问题 —— Appender 4. 日志什么样也是个问题 —— Formatter 5. 高效地打印日志是另外一个问题 —— Efficient 6. 总结
围绕日志系统分条陈述,包括日志级别、内容、存储、内容、性能。
可以用JSON数据类型来描述这种结构
{ sectionA: xxx, sectionB: yyy, sectionC: zzz, ... }
《如何Docker化任意一个应用?你需要参照这10步》 大纲:
选择基础镜像 安装必要软件包 添加自定义文件 定义容器运行时的用户权限 定义暴露的端口 定义入口点(entrypoint) 定义一种配置方式 外部化数据 确保处理好日志 轮转日志和其他仅追加文件
作者按照操作流程编写文章,具有强逻辑。
我们还是用函数来描述逻辑。
const sectionA = step1(); const sectionB = step2(sectionA); const sectionC = step2(sectionB); ...
《GO千万级消息推送服务》 大纲:
技术核心难点 解决技术难点 架构考量 源代码
文章结构简单,逻辑清晰,先提出技术难点,然后给出技术解决方案。
这种探索方式和循环有些类似:
while(!isBest(solution)) { solution = findBetterSolution() ... }
《你闺女也能看懂的插画版Kubernetes指南》 这篇文章比较特别和少见,没有明确的提纲,但是丝毫不影响阅读体验,因为图文穿插的方式能够缓解阅读疲劳,同时更容易理解。
如果要用代码来表示这种模式的话那么我们可以把图片看成注释来进行描述:
// comment sectionA sectionA // comment sectionB sectionB ...
总结一下本文提到的7种写作模式,他们是:
当然我们在写较长的文章的时候可以将多种写作模式结合起来,全文用某种模式,而不同章节内部用其它模式。
如果要把这7种写作模式抽象成写作原则的话,那么可以用两个词概括: 转化和联接 。
何谓转化?
何谓联接?
最后给读者一个思考题来检验阅读效果:本文属于那种写作模式,你有没有看出来呢?