边学边写

Lobsters Hottest 新闻

摘要

文章探讨了学习资源在初级与专家级别之间的差距,以Minecraft模组制作中使用KubeJS和NeoForge为例,强调了创建中级学习材料的重要性。

<p><a href="https://lobste.rs/s/ukzxid/write_while_learning">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/09/19 07:59

# 学习中边写边记 来源:https://purplesyringa.moe/blog/write-while-learning/ 2026年9月19日 当学习新领域时,我们总会遇到一些搜不到答案的问题。“为什么有两个看似功能相同的API?”“要如何实现这个目标?”“为什么这段代码和示例相似却无法运行?” 随着研究深入和工具熟练,我们会逐渐理解。当掌握到一定程度,便成了能解答前述问题的专家。但记录我们如何从A点走到B点的过程,同样有助于他人进步。根据我的经验,事后看来答案往往显而易见,但从“面对问题”到“知道该搜索什么术语”之间,往往缺少一座桥梁。 通常我必须先熟悉项目架构、阅读代码、查看交互模块、浏览问题追踪系统,在脑中构建出能解答问题的模型后,才会发现这个模型其实易于理解,且文档齐全——这时我才会认同专家们“这是个合理且设计精良的模型”的说法,却完全忘记了自己作为新手时,明明文档存在却遍寻不得的窘境。 ### 示例说明 以我最近接触Minecraft模组开发为例:KubeJS (https://kubejs.com/) 是一个用JavaScript重配置Minecraft的工具,它使用如下语法将物品添加到标签中: ```javascript ServerEvents.tags('item', (event) => { event.add('tag_name', 'item_name') }) ``` 我立刻产生疑问:`ServerEvents`是什么?为什么操作要在闭包中执行?这个闭包是立即调用的吗,还是仅为获取`event`的手段?若它不响应玩家操作,为何称作“事件”? 最终答案是:KubeJS集成了模组加载器(此处为NeoForge),而NeoForge提供了事件系统(https://docs.neoforged.net/docs/concepts/events/)。该文档页面展示的“实体跳跃”等示例显然是游戏事件,但文档末尾提到: > 生命周期事件在每个模组启动过程中运行一次。[...] 注册表事件[...]包括`NewRegistryEvent`、`DataPackRegistryEvent.NewRegistry`以及每个注册表对应的`RegisterEvent`。 进一步研究后我才明白:我注册的闭包确实是事件处理器,NeoForge会在世界加载时同步分发此事件。虽然这更像是混入/补丁点而非传统事件,但由于底层机制相同,故沿用相同术语。 为获取这些信息,我不得不: 1. 阅读KubeJS文档 2. 研究KubeJS源码以理解其与NeoForge的关联 3. 查阅NeoForge文档 4. 分析NeoForge代码以理解混入机制 ### 学习资源之困 我们都重视学习资源,但常见情况是:文档多为初学者或专家而写,却少有针对“从新手向专家过渡阶段”的资料。 记得当初我不懂网络工作原理时,所有相关文章都简单地说“你的电脑向谷歌发送0和1,谷歌再返回0和1”。但数据究竟如何到达谷歌?现在我知道了以太网如何用特定比特序列标识数据包、IP地址如何通过ARP解析为MAC地址、HTTP与加密技术的原理。但这些知识我大多是偶然习得——比如从老师那儿学数据包边界概念,或在WireShark中发现ARP协议。 不妨亲自测试:告诉一个仅听说“HTTPS让连接更安全”的人,如何从HTTPS维基百科页面(https://en.wikipedia.org/wiki/HTTPS)了解到迪菲-赫尔曼密钥交换(https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange),而他此前完全不知道非对称加密才是HTTPS安全保障的核心。 当然,维基百科是“专家为专家撰写”的典型代表,但我们平易近人的文档也少有改善:“专家为五岁孩童写作”的表述,当你需要技术细节时同样令人困扰。 ### 我的呼吁 我创立这个博客的初衷,就是向只掌握基础知识的人传授精彩内容。我的目标是提升读者水平至我的层次,而非像科普期刊那样仅越过基准线。虽然有时需要调整复杂度做出妥协,但整体效果显著。撰写文档时我也遵循同样原则:对于高层级API,会说明其底层细节(如采用何种算法),引导读者沿着线索自主学习。 但作为专家的我,已记不清新手时期遇到的所有问题。只有在费尽周折终于找到答案后的短暂时间里,我才既记得曾经的困惑和尝试搜索的术语,同时又掌握了解决方案。 这正是文章标题的由来。当你面对问题耗费数日找到解决方案时,请记录你的成功——甚至失败经历。这将帮助其他卡在相同问题上的人,也能帮助专家发现文档中缺失的信息或模糊的表述(这也是记录失败经验的价值所在)。博客、社交媒体任何形式皆可——即使只有朋友可见,其中某些人可能也会觉得有用。 即便你花很久才得出简单结论,这很可能不是你的错——恰恰相反,知道某些基础内容如此难以获取非常有价值!了解这类知识缺口很有意义:每当你这样的人找到答案,就有十个本可轻松理解却未能发现答案的人受益。维护者会感谢你,即使他们不说,其他遇到相同问题的人也会。

相似文章

用现代地牢游戏教孩子编程

Hacker News Top

一位家长创建了一款名为Canon的现代网页地牢游戏,用来教八岁的孩子编程,玩家可以使用简单的脚本语言构建和修改游戏世界。

为利基市场而创造

Hacker News Top

作者反思了为利基市场开发产品所面临的挑战,以 MtnKBD 的关闭以及他们开发 Table Slayer 和 Counter Slayer 的个人经历为例。文章探讨了利基软件开发的可持续性,重点介绍了开源模式和社区参与的重要性。

通过视频预训练学习玩 Minecraft

OpenAI Blog

OpenAI 推出了视频预训练(VPT),这是一种半监督方法,通过学习 70,000 小时的未标注人类游戏视频和少量标注数据集来训练神经网络玩 Minecraft。该模型使用原生人类界面(键盘和鼠标)学习复杂的序列任务,展示了制作钻石工具和柱子跳跃等能力,代表了朝向通用计算机使用代理的进步。