HN 写作课

工程师们二十年里聊过的写作。

工程师、作家、编辑和创业者在 Hacker News 上聊了二十年“怎么写”:怎么写得清楚、怎么讲好一个故事、技术文档怎么写、小说和出版是怎么回事。这里把其中关于写作与讲故事的帖子挑出来,配上中文导读、可以直接用的写作要点和评论翻译。

从必读开始
  • 2,600+篇关于写作的 HN 讨论

Writing tips

写作锦囊

正在抽一条写作要点…

Essential

必读 30 篇

在讨论库里看全部精选

编辑精选里 HN 讨论最热的 30 篇,每篇都有中文导读和写作要点。

  1. 正在载入…

Archive

讨论库

按发帖年份分布,点柱子筛选。

排序

    About

    这些讨论是怎么挑出来的

    1. 01

      从全量里捞

      读取 Hacker News 自 2006 年以来的全部帖子,用关键词先捞出 40 分以上、可能和写作有关的约 1.1 万篇。

    2. 02

      只留真正讲写作的

      由 AI 逐条判断是否和写作、讲故事、文风、出版有实质关系,剔除“写代码”“编辑器”这类字面撞车,并分进十个类别。

    3. 03

      提炼可用的要点

      为值得读的帖子写中文导读,提炼 2-4 条可以直接用到自己写作里的要点,并精选翻译 HN 高赞评论。内容由 AI 生成,可能有误。

    语言与文风2020rust-analyzer.github.io

    Ungrammar:不合语法

    Ungrammar

    阅读原文 HN 讨论
    152HN 得分
    14条评论
    4条写作要点

    导读

    rust-analyzer 团队介绍他们设计的一种极简语法记号 Ungrammar:用最少的符号描述语法树的结构,再由它生成解析器和语法树代码。对写作者来说,它示范了一件事:怎样用一套小而稳定的记号,把复杂结构讲到别人能照着复现;以及怎样通过分层隐藏细节,让主干清晰。

    关键词 语法树结构化表达抽象分层简洁记号

    可以直接用的写作要点

    1. 01

      先约定一套最小记号,再描述结构:Ungrammar 只用几条规则就撑起整套语法,写复杂内容时也可先给出简化的符号约定,读者理解起来会轻松很多。

    2. 02

      把繁杂的分支收进一个概括层:Ungrammar 用“辅助符号”把递归压平成列表,写作中同样可以先归纳再展开,避免主干被细节淹掉。

    3. 03

      区分“该让读者看见的”和“可以隐去的”:只保留必要的节点,其余放进背景,叙述才有层次。

    4. 04

      检验结构描述是否清楚,最好的办法是照着它写出一个最小例子(比如 Hello, World!);能生成例子,才算真的讲明白了。

    HN 评论精选

    把符号分成隐藏、辅助、可见三层,细节就能按需折叠,递归也会被压平成列表。

    很有意思。我最近几天在做一件很相关的事:从语法(就是实际用来解析的那份语法)生成 Swift 的语法树数据结构。我发现很有用的做法是把符号分成隐藏、辅助、可见三类:隐藏符号不出现在树里,可见符号正常出现,辅助符号则只让它的子节点进入语法树。目前效果很好。这样如果递归符号是辅助符号,左递归还是右递归都无所谓,因为它最终会被压平成一个列表。因此我可以在语法里用正则表达式,按常规方式通过辅助符号脱糖成上下文无关规则,并为它生成合理的语法树。

    auggierose查看英文原文

    Very interesting. I am actually working for a few days now on something very related: Generate syntax tree data structures (in Swift) from a grammar (which is the actual grammar used for parsing). What I found very useful is to distinguish between hidden, auxiliary and visible symbols. Hidden symbols don't appear in the tree, visible symbols appear as normal, and for auxiliary symbols only their children appear in the syntax tree. Seems to work very nicely so far. This way, left oder right recursion for example doesn't matter if your recursion symbol is auxiliary, because it will just be flattened into a list anyway. Therefore I can use regular expressions in a grammar by desugaring them via auxiliary symbols in the usual way via context-free rules, and have a sensible syntax tree generated for that.

    结构描述的最终检验,是照它生成一个可运行的最小示例。

    能不能拿一份扩展 BNF 和一批标准非终结符名(stat、funcname 之类),直接生成一个 Hello, World! 示例?只靠扩展 BNF 就能生成出一门编程语言的样子,那会非常酷。

    andrewmcwatters查看英文原文

    Is it possible to take some extended BNF and standard nonterminal names (stat, funcname, etc.) then output some Hello, World! example from it? It would be really cool to just generate the look and feel of a programming language just using extended BNF.

    这种“从语法生成数据结构”的做法早有先例(ASDL),Python 至今仍在沿用。

    这不就是当年 Zephyr 项目的 ASDL 做的事吗?(附论文链接)我记得 Python 现在还在用它。

    pfdietz查看英文原文

    Wasn't this what ASDL did, way back from the Zephyr project? https://www.cs.princeton.edu/research/techreps/TR-554-97 I think Python is still using this.

    同类还值得读

    1. 像说话一样写作

      Write like you talk

      这篇短文主张写作应像说话一样自然、清晰,避免装腔作势的书面腔。

      语言与文风2015 · 647 分 · 272 评4 条写作要点编辑精选
    2. 法律语言难懂源于写作不佳,而非专业概念

      Poor writing, not specialized concepts, drives difficulty with legal language

      这是一项认知科学研究:法律文本难懂,主要不是因为充斥专业术语,而是因为写作者把句子写得又长又绕、修饰语层层嵌套、回指距离过远。

      语言与文风2022 · 559 分 · 322 评5 条写作要点编辑精选
    3. 写得简单

      Write Simply

      保罗·格拉汉姆在这篇短文里主张:好文章应该写得简单——用日常词汇、短句、直白的结构,不为显得聪明而堆砌复杂表达。

      语言与文风2021 · 484 分 · 330 评4 条写作要点编辑精选
    4. Tortured phrases:科学写作中出现的一种可疑文风

      Tortured phrases: A dubious writing style emerging in science

      《自然》新闻报道了一种在科学论文中蔓延的怪现象:原本标准的术语被同义替换软件改写成了古怪说法,比如把 "cloud computing" 写成 "haze figuring"。

      语言与文风2021 · 329 分 · 256 评4 条写作要点编辑精选
    5. 乔治·奥威尔 1940 年对《我的奋斗》的书评

      George Orwell's review of Mein Kampf (1940)

      这是奥威尔1940年对《我的奋斗》的书评。

      语言与文风2014 · 305 分 · 240 评4 条写作要点编辑精选

    打赏支持

    打赏二维码

    觉得有用,请作者喝杯咖啡。

    WeChat

    关注向阳乔木

    微信公众号「向阳乔木推荐看」

    微信公众号「向阳乔木推荐看」二维码

    微信扫一扫;在微信里打开本页时,长按二维码识别。