# 科技爱好者周刊（第 288 期）：技术写作的首要诀窍

这里记录每周值得分享的科技内容，周五发布。

本杂志[开源](https://github.com/ruanyf/weekly)，欢迎[投稿](https://github.com/ruanyf/weekly/issues)。另有[《谁在招人》](https://github.com/ruanyf/weekly/issues/3814)服务，发布程序员招聘信息。合作请[邮件联系](mailto:yifeng.ruan@gmail.com)（yifeng.ruan@gmail.com）。

## 封面图

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024011602.webp)

在昔日的“皇家园林”北京颐和园，昆明湖已经完全结冰，变成了游人玩乐的大冰场。夕阳西下，湖上的十七孔桥现出了“金光穿洞”景观。（[via](https://news.66wz.com/system/2024/01/15/105618610.shtml)）

## 技术写作的首要诀窍

技术写作非常重要，产品的开发、推广、维护都需要它。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012307.webp)

跟大家想的不一样，**技术写作的好坏，跟语文水平关系不大，更多是一个技巧问题**。

因为技术写作的评价标准，不是艺术性，而是表达是否清楚明白。它不需要华丽的词藻、巧妙的比喻、深刻的感悟，只需要把问题说清楚。

**把问题说清楚的关键，在于你的思想是否清楚。**

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012308.webp)

当你想清楚了一个问题，只要掌握几个基本诀窍，就能写出一篇很好的技术文章。

今天，我来说说，技术写作的首要诀窍是什么。很简单，就是一句话：**文章采用单线结构**。

所谓“单线结构”（也称“线性结构”），指的是一篇文章只说一件事，按照线性顺序进行叙述，由浅入深、循序渐进、平铺直叙、层层递进。

这就好比一个游览区，只有一条游览路线，从入口到出口，跟着箭头一路走，就能看到所有景观，非常明白清楚。

如果同时有好几条路线，游客就会糊涂，到底选哪一条？会不会错过景观？要是这些路线还互相交叉，那就更糟糕了，游客非串线不可。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012309.webp)

（图片说明：上面的景区路线图，应该选择哪条路线吗？）

只要采用了单线结构，技术文章就不会太差。即使内容是难懂的，至少结构是清晰的，一环扣一环，读者能知道自己卡在哪一环上。只要克服了这个难点，就能继续往前走，不会有陷入迷宫、找不到方向、如坠五里雾中。

有一篇[老外的文章](https://thisisimportant.net/posts/content-as-a-graph/)，使用图形表示文章结构，非常形象。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012310.webp)

上图就是单线结构，按照箭头，一步步推进。

有的问题比较复杂，涉及多个因素，可能是星状结构。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012311.webp)

也可能是”层次结构”。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012312.webp)

这时，建议把这个问题拆分成多篇文章，每篇文章保持单线结构，坚持做到一篇文章只讲一点，而且争取把这一点讲透。

但是，单线结构说起来容易，做起来难。难就难在，人类的思想不是单线的，而是多线的，甚至是非线性。

你要把混乱而跳跃的思维，整理成单线结构，表达出来，让他人理解，谈何容易，通常都需要反复推敲和提炼。

举例来说，我们的思维可能是下图这样，好多点各自发散，连接在一起。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012313.webp)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012314.webp)

这种乱麻一团的思维并不可怕，可怕的是，你把文章也写成这样的结构，而不是耐心地梳理出一条线索。

## 科技动态

1、[仓库机器人](https://www.businessinsider.com/new-amazon-warehouse-robot-humanoid-2023-10)

亚马逊公司开始在仓库，测试一款人形机器人。

![](https://cdn.beekka.com/blogimg/asset/202312/bg2023120804.webp)

它用于捡货和搬运，每小时的运行成本是10至12美元。如果将来大量应用，成本可望降到2至3美元。

![](https://cdn.beekka.com/blogimg/asset/202312/bg2023120805.webp)

它跟工人一起工作（下图）。工人都非常害怕，这种机器人取代他们。亚马逊表示，机器人只是协助工人，并不会取代后者。

![](https://cdn.beekka.com/blogimg/asset/202312/bg2023120806.webp)

如果让你跟机器人一起上班，做差不多的事情，而且它还不要薪水，大概没人会心情好吧。

2、[蜜蜂条形码](https://theapiarist.org/barcoding-bees/)

科学家研究蜜蜂，需要追踪每一只蜜蜂的行为，但怎样才能在一群蜜蜂中，分清谁是谁呢？

科学家想到了一个绝妙的办法，在每一只蜜蜂身上，贴上一个简化的二维码。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024011901.webp)

这种二维码的面积是2.1平方毫米（即边长不足1.5毫米），重0.6毫克，是工蜂重量的 0.7%，共可以表示2048只蜜蜂。

科学家手动为每只蜜蜂贴上二维码，一共贴了1400只，然后在高速摄像机下就可以读到这些二维码，从而分辨出每一只的行为。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024011902.webp)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024011903.webp)

蜂巢里面同时有上千只蜜蜂，放大图像后，就可以画出每只蜜蜂的行动路线（下图），分析它们在干什么，与谁合作。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024011904.webp)

3、[舌头鼠标](https://www.nbcnews.com/tech/tech-news/tongue-controlled-touchscreens-hit-market-year-rcna133270)

今年的拉斯维加斯“消费电子展” CES 上，展示了一款“舌头鼠标”。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024011905.webp)

它使用牙套，将一块迷你触摸板固定在上颚，不需要用手，只用舌头就能控制鼠标。

这个设备的原意是，方便手部损伤的或瘫痪的人士使用电脑，但后来发现，它在健全人中也有市场，机械师或外科医生可以用它控制电脑，同时腾出双手干其他事情。

4、[防盗盒](https://www.curbed.com/2023/01/shoplifting-crime-wave-spam-keeper-retail-loss-prevention-design.html)

欧美的小型零售店，比如杂货店和小超市，越来越流行把商品放在防盗盒里面。

![](https://cdn.beekka.com/blogimg/asset/202301/bg2023011702.webp)

这种透明的塑料盒，需要钥匙才能打开，顾客自己取不出商品，只有店员才能打开。

![](https://cdn.beekka.com/blogimg/asset/202301/bg2023011703.webp)

盒子还内置 RFID 芯片，如果擅自带出商店，会引发警报器。这样就大大减少了商品损耗和被窃。

![](https://cdn.beekka.com/blogimg/asset/202301/bg2023011704.webp)

## 文章

1、[高德地图如何实现红绿灯倒计时？](https://mp.weixin.qq.com/s/3_LNM62zoHaJsmvAryujEw)（中文）

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012401.webp)

高德地图会显示，红绿灯倒计时读秒。本文介绍背后的专利。

2、[2023年前端技术盘点与展望](https://mp.weixin.qq.com/s/LiygBJqMN8U_vSpAjxMibQ)（中文）

腾讯云开发者公众号与腾讯 MoonWebTeam 前端团队联合推出的长篇技术报告。（[@ryantang1991](https://github.com/ruanyf/weekly/issues/3917) 投稿）

3、[JS 空数组的 every() 方法](https://humanwhocodes.com/blog/2023/09/javascript-wtf-why-does-every-return-true-for-empty-array/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202312/bg2023120209.webp)

every() 方法对于空数组总是返回 true，这是为什么。

4、[8个开源密码管理器介绍](https://itsfoss.com/open-source-password-managers/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202312/bg2023120205.webp)

密码管理器用来管理各种登录密码，本文介绍8个开源的密码管理器。

5、[令人震惊的 CSS 动画效果](https://codersblock.com/blog/the-surprising-things-that-css-can-animate/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202312/bg2023120513.webp)

本文介绍一些高级的 CSS 动画技巧。

6、[HTTP/3 详解](https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202309/bg2023091202.webp)

一组系列文章，向初学者介绍 HTTP/3 协议的设计，以及与 HTTP/2 的不同之处。

7、[CPU 制造过程图解](https://blog.robertelder.org/how-to-make-a-cpu/)（英文）

![](https://cdn.beekka.com/blogimg/asset/202310/bg2023102301.webp)

作者使用大量图片，简明通俗解释如何从石头制造出 CPU。读了以后，对于 CPU 的制造流程就有一个大致的了解。

## 工具

1、[Gemini Pro Chat](https://github.com/lchh5/GeminiPro-Next-Web)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012005.webp)

作者修改了 ChatGPT Next Web 的源码，使其可以用于 Gemini Pro，这里是 [demo](https://chat.googlegemini.co/)。（[@lchh5](https://github.com/ruanyf/weekly/issues/3923) 投稿）

2、[WoodenFish](https://github.com/jwenjian/wooden-fish)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012006.webp)

一个敲木鱼的网页 App，移动端打开时，只有侦测到手机陀螺仪的角度变化，才算一次敲击动作，这时可以把手机想象成敲木鱼的棒子。（[@jwenjian](https://github.com/ruanyf/weekly/issues/3929) 投稿）

3、[Moodist](https://github.com/geekyouth/moodist)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012301.webp)

一个开源的 Docker 镜像文件，提供50多种[背景声](https://moodist.java666.cn/)，比如风声、雨声、咖啡馆的声音。（[@geekyouth](https://github.com/ruanyf/weekly/issues/3943) 投稿）

4、[Echo UI](https://echoui.dev/zh/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012302.webp)

一款专为 Web Audio API 设计的 UI 库，适合用来搭建基于 Web 的音频应用。（[@codeacme17](https://github.com/ruanyf/weekly/issues/3946) 投稿）

5、[Photor](https://www.photor.fun/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012303.webp)

截图美化工具，可以在线使用，也可以通过浏览器插件使用。（[@sleepy-zone](https://github.com/ruanyf/weekly/issues/3948) 投稿）

6、[Message Nest](https://github.com/engigu/Message-Push-Nest)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012304.webp)

开源的消息推送平台，整合邮件、钉钉、企业微信等多种通知方式。（[@engigu](https://github.com/ruanyf/weekly/issues/3947) 投稿）

7、[Tiny RDM](https://redis.tinycraft.cc/zh/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012306.webp)

Redis 桌面管理客户端，支持 Mac、Windows、Linux。（[@tiny-craft](https://github.com/ruanyf/weekly/issues/3955) 投稿）

8、[Frigate](https://github.com/blakeblackshear/frigate)

![](https://cdn.beekka.com/blogimg/asset/202311/bg2023111906.webp)

开源的摄像头固件，具有实时目标物体侦测。

9、[InstantID](https://github.com/InstantID/InstantID)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012402.webp)

只使用一张图片，就可以提取人脸，用于个性化图像合成，并支持各种不同的风格，试用 [Demo](https://instantid.org/#playground)。（[@zinc1234596](https://github.com/ruanyf/weekly/issues/3959) 投稿）

10、[HandBrake](https://handbrake.fr/)

![](https://cdn.beekka.com/blogimg/asset/202311/bg2023111910.webp)

一个跨平台的桌面应用，用于转换视频编码。

11、[Animotion](https://cssanimotion.pages.dev/)

![](https://cdn.beekka.com/blogimg/asset/202311/bg2023111911.webp)

一个网页 CSS 动画生成器，可视化设定动画，自动生成代码。

12、[Ada](https://github.com/ada-url/ada)

![](https://cdn.beekka.com/blogimg/asset/202311/bg2023112102.webp)

一个 URL 解析器，符合最新规范，使用 C++ 编写，可以快速处理 URL。

13、[Inpaint-web](https://github.com/lxfater/inpaint-web)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012501.webp)

开源的图片修复和超分辨率工具, 纯浏览器端实现。（[@lxfater](https://github.com/ruanyf/weekly/issues/3964) 投稿）

14、[人像生成工具](https://sinqi.tools/zh/avatar)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012502.webp)

基于手绘风 SVG 人物画像集合 [Open Peeps](https://www.openpeeps.com/)，一个人物画像的在线定制工具。（[@zerosoul](https://github.com/ruanyf/weekly/issues/3968) 投稿）

## 资源

1、[唐库学习](http://www.tanglib.com/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012003.webp)

电子书网站，提供世界名著的中英双语对照朗读。（[@bigtang5](https://github.com/ruanyf/weekly/issues/3918) 投稿）

2、[AI 字体模型市场](https://www.ai.zitijia.com/list/1)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012007.webp)

该网站列出 AI 生成的字体，可以在线使用它们进行文字渲染。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012008.webp)

它还支持网页手写八个字，生成自己的 AI 字体。（[@qq345386817](https://github.com/ruanyf/weekly/issues/3930) 投稿）

3、[云原生应用市场](https://hub.grapps.cn/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012305.webp)

用户可以在这里浏览各种云原生应用，并一键安装到各类运行环境（ Docker、Kubernetes、Rainbond），支持国内镜像加速。（[@RainBondsongyg](https://github.com/ruanyf/weekly/issues/3956) 投稿）

4、[iHateRegex](https://ihateregex.io/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012009.webp)

一个收集常用正则表达式的资源库，并通过可视化帮助理解，基于 [regexper](https://github.com/ruanyf/weekly/issues/regexper.com)。（[@zkerhcy](https://github.com/ruanyf/weekly/issues/3938) 投稿）

5、[AsPoem.com](https://aspoem.com/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012010.webp)

学习欣赏中国古诗词的网站。（[@meetqy](https://github.com/ruanyf/weekly/issues/3941) 投稿）

6、[极简博客](https://dev.mblog.club/)

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012004.webp)

作者用 NextJS + Laf 云搭建的博客托管网站，赠送二级域名。（[@kingwrcy](https://github.com/ruanyf/weekly/issues/3922) 投稿）

## 图片

1、[旧金山人行道](https://zachklein.com/Sidewalk+Garden)

下面是美国旧金山市的一段人行道，2015年的样子。

![](https://cdn.beekka.com/blogimg/asset/202308/bg2023082603.webp)

一位设计师决心改造这段人行道，营造出“城市森林”的景观。

人行道宽3.66米，他保留中间一半供通行，两侧改为绿化。

![](https://cdn.beekka.com/blogimg/asset/202308/bg2023082604.webp)

中间一段重新铺设路面以后，他在2016年在两侧种上植物。

![](https://cdn.beekka.com/blogimg/asset/202308/bg2023082605.webp)

![](https://cdn.beekka.com/blogimg/asset/202308/bg2023082606.webp)

2022年，这段路变成了下面这样。

![](https://cdn.beekka.com/blogimg/asset/202308/bg2023082607.webp)

![](https://cdn.beekka.com/blogimg/asset/202308/bg2023082608.webp)

这不由让人想起了那句有名的话：“种一棵树的最佳时间是十年前，其次就是现在。”

## 文摘

1、[我装了一台 NetBSD 服务器](https://it-notes.dragas.net/2023/08/27/that-old-netbsd-server-running-since-2010/)

2010年的某一天，我接到一个电话。

客户想在内网部署几个服务（dhcp、内部 DNS、Apache + PHP 服务器、NFS 和 Samba 件服务器），需要架设一台服务器。

我建议客户购买企业级硬件，但是他们坚持使用已有的服务器，那是一台消费级电脑：没有双电源，没有远程管理功能，硬盘也是消费级的。

客户原计划安装 Windows 2008 Server，然后在上面部署这些服务。我考虑到只有两天时间，就建议改成安装 NetBSD 系统。客户同意了。

![](https://cdn.beekka.com/blogimg/asset/202401/bg2024012315.webp)

我安装完以后，就移交给了客户。后面的一个月，除了一些网络延迟问题，客户的反馈基本是正面的。

接下来的两三年里，我偶尔对这台服务器进行了一些调整，随后就与客户失去了联系。

2021年2月，我又接到了那个客户的电话，他们想要一个新的防火墙。这意味着那台 NetBSD 服务器还在运行！出于好奇，我接受了这个任务。

我惊讶地发现，这台服务器的工作完全正常。它不再对外网提供访问了，但在内网运行顺利。NFS SMB、DNS、SMTP 都是正常运行，它正在执行大约80%的原始任务。

最让我惊讶的是它的正常运行时间。上一次重启是在2012年，那时发生了一次小地震。客户有备用发电机，因此服务器始终拥有不间断电源。

谁能想到，这台机器当初只花了几个小时安装，而且全部都是消费级硬件，但是正常运行了九年没有重启，并且这些年基本上是无人管理的。

我现在明白了，为什么我没有——也永远不会——发财。我以前的老板抱怨，我偏爱为客户推荐稳定可靠的解决方案，这等于较少的长期利润。据他说，需要频繁维护的不可靠解决方案，才能带来最多的收入。但是我觉得，出色的工作应该是持续有效的，不需要不断的修复。

现在，我不确定这台服务器是否仍在运行，如果有机会我一定会检查一下。我很感激 NetBSD，它值得信赖，是一个轻量级、稳定、安全且高效的操作系统。在我看来，它至今仍然没有得到应有的赞誉和地位。

## 言论

1、

AI 聊天机器人很快就会变得强大无比，看上去像神一样，未来也许会出现崇拜 AI 的教派。

-- [themessenger.com](https://themessenger.com/tech/church-artificial-intelligence-worship-god)

2、

那些背负巨额债务以完成学业的学生，不太可能有远大的理想。因为当人们陷入债务时，他们就没有时间思考其他问题。

债务是一种改造手段，当这些学生毕业时，他们不仅背负着沉重的债务，思想上已经被改造过了，使他们成为消费经济的有效组成部分。

-- [诺姆·乔姆斯基](https://medium.com/blob-streaming/programming-as-a-career-isnt-right-for-me-f9f0846fef82)，美国著名学者

3、

1931年，奥地利逻辑学家库尔特·哥德尔提出了重要的“哥德尔不完备定理”。他证明，任何一组数学公理都不可能是完备的，总有一些事实无法用这些公理来证明；同时，他还证明，没有一组公理具有一致性（即永远不会导致矛盾）。

这意味着，任何一个理论体系总有一些无法证明的命题，或者说，你能证明什么，取决于你的起始假设，而这些假设是不能证明的。

-- [《哥德尔不完备定理的证明》](https://www.quantamagazine.org/how-godels-proof-works-20200714/)

4、

一家公司需要多少工程师？这与软件功能的数量有关，与软件用户的数量无关。

如果软件要添加更多功能，就需要更多工程师。如果软件功能单一，但是规模很大，甚至有几亿用户，事实上并不需要很多工程师。

-- [Hacker News 读者](https://news.ycombinator.com/item?id=34567237)

## 往年回顾

[中国的增长动力在内陆](https://www.ruanyifeng.com/blog/2023/02/weekly-issue-241.html)（2023 #241）

[一个程序员的财务独立之路](https://www.ruanyifeng.com/blog/2022/01/weekly-issue-191.html)（2022 #191）

[封闭系统的胜利](https://www.ruanyifeng.com/blog/2021/01/weekly-issue-141.html)（2021 #141）

[印度孟买的房价，为什么跟北京一样高？](https://www.ruanyifeng.com/blog/2020/01/weekly-issue-91.html)（2020 #91）

（完）

