+++ title = "稻草人周刊 Vol.24" subtitle = "写给独立游戏开发者的爽文" endnotes = [ "封面图来源:[Ritam Baishya @ Unsplash](https://unsplash.com/illustrations/a-drawing-of-a-person-holding-an-umbrella-in-the-rain-cqcOmID--7Y)",] tags = [ "编程", "写作", "游戏", ] related_cards = [ "原语", "世界语言的分类", "投射", "课题分离",] date = 2025-04-14T13:32:00 banner = "https://img.eltr.ac/uPic/ritam-baishya-cqcOmID--7Y-unsplash-2.jpg" draft = false toc = true aliases = [ "/posts/weekly/稻草人周刊-vol-24/", "/posts/weekly/24",] +++ ## 🙋 在做什么 一时兴起又整理了书桌,丢掉了一些不必要的收纳架,做了些断舍离,现在看起来要舒服不少。还购入了新的盆栽,栀子花和葡萄风信子,但因为还没开花就不发出来了。希望它们能活到开花的那一天吧。 {{< gallery >}} ![](https://img.eltr.ac/uPic/IMG_3386大-2.jpeg) ![](https://img.eltr.ac/uPic/IMG_3387大-2.jpeg) {{}} ## 📖 本周阅读 {{< bookcard "天生不同" >}} ## 💬 本期杂谈 ### 写给独立游戏开发者的爽文 > [!note] 📜 > 文章链接:[The Balatro Timeline](https://localthunk.com/blog/balatro-timeline-3aarh) 我大概是在一个月前就发现了《小丑牌》作者的博客 LocalThunk,这篇文章在我的阅读列表里躺了大半个月,读这篇文章的时候我恨我没有早点点开读它,读完的时候我大概经历了三次颅内高潮,因为读起来实在是太爽了。 作者花了一年多的时间制作并发布了《小丑牌》(Balatro),当他写道「这个本来只是做给我和我几个朋友的游戏,居然不知怎么地有这么多陌生人想要买它」的时候,我意识到游戏或许就应该是这样的——==先娱乐自己,再娱乐身边的人,最后让更多的人感到开心==。 作者也提到,做这种项目非常重要的一点在于,当自己感受不到驱动力的时候就停下来,这可以帮你: 1. 不精疲力尽地开始下一个想法; 2. 不自责地休息一段时间,然后更强势地回归。 作者还提到,他在刚开始的时候禁止自己玩新的肉鸽游戏,因为他不想无意识地抄袭别人的好点子。他想要犯错,想要重新造轮子,不想借鉴现存游戏中已经被验证过的设计。我想这是值得学习的。 不过,《小丑牌》其实是作者在下班后完成的一个爱好项目,一开始并没有当作正经的工作,他甚至在之前从未想过可以靠游戏赚钱。这让我想到了 Toby Fox,他似乎在一开始也不清楚自己到底在干什么。这样的成功兴许是不容易复现的[^1],但足以说明爱好也能创造不可估量的财富。 [#游戏](/tags/游戏) ### 博客写作的态度 > [!note] 📜 > 文章链接:[LocalThoughts](https://localthunk.com/blog/localthoughts) 这是《小丑牌》作者的第一篇博客文章,他在这篇文章里写的一句话让我感触良多: > I wanted to share more of the what happened and how instead of here's how you should do it and why. > > 我想要分享的更多是「发生了什么以及怎么回事」,而不是「你应该怎么办以及为什么」。 这段话让我开始反思我之前的博客文章是否带有过强的说教意味,我也在过去的写作中意识到,尽管我非常喜欢拆解底层逻辑和剖析深层次的原因,但过多的对「为什么」的论述似乎不总是能够吸引读者,至少读者很少对这样的内容作出回应。 兴许我应该在谈论「为什么」之前,多谈一谈「发生了什么」。在切入正题之前讲故事,或者用故事来辅助自己阐述观点,也确实是惯用的做法。 此外,兴许应该戒一戒说教瘾,也要认识到自己经验的局限性和读者自身经验的复杂性。自身的逻辑再完备,也不适用于所有情况——*完了我意识到自己现在就在说教。* 好吧,那就等我尝试多写一些「怎么样」和「发生了什么」之后,再来对比一下它们和「为什么」和「你应该」的区别吧。 [#写作](/tags/写作/) ### 论业余项目 > [!note] 📜 > 文章链接:[The blissful zen of a good side project](https://joshcollinsworth.com/blog/the-blissful-zen-of-a-good-side-project) 作者讲到自己在之前大概有一年多没有在闲暇时间开启一个新的业余项目了,在某天晚上,他打开自己的笔记本电脑新建了一个文件夹,找回了原先的感觉。 - 选择做什么并不重要,重要的是我选了某些东西来做。 - 我知道我没有在创造时,我的一部分枯萎了,而且我认为,我们内心都有那样的冲动。 - ==我认为我们存在的意义就是创造新东西==。 令我感触最深的,是作者对于业余项目的态度:It's done when you're done with it. 一个项目不一定要真的完成了才算是「完成了」,当你不想继续了,心想「就这样吧」,这个项目的意义就到此为止了。一个好的业余项目不一定要有任何结果。 我想到了现在躺在我硬盘里腐烂发臭的两个游戏项目,一个算是我的第一个电子游戏项目 Warstro,另一个是最近一个月做的 Philora。这两个项目都在做到一半时让我感到焦虑,不想继续,但不继续似乎又是在否定自己的选择,令我很是煎熬。但转念一想,我从这两个半途而废的项目中都学到了不少: - **Warstro** - 教训:别用 React 写游戏(认真)。 - 我所使用的 boardgame.io 引擎教会了我用一个全局变量数组储存所有游戏状态,这样便于管理。在 [Heart Hunter](/posts/为战斗献上心脏/) 中我就沿用了这一方法,所以在玩家死亡后重置游戏状态的操作,我几乎没有遇到任何问题,而且访问常用的游戏对象也变得很丝滑。 - **Philora** - AI 取代程序员还很遥远,就连目前最好的编程模型也会生成一大堆冗余代码。 - 游戏或许是我目前为止接触到的最复杂的软件设计,相比之前,之前做的 Java Web 项目真的非常清晰易懂。 - 不要让 AI 从一个空的项目文件开始写,那真的会让人摸不着一点头脑。 - 我开始找一些游戏编程相关的书和文章来看。 就像许久未见面的朋友,友谊或许已经难以延续,但对方给自己带来的影响是深远且无法计量的。意识到这一点之后,放下一定要完成的执念就变得更容易了。 [#编程](/tags/编程/) ### 重造轮子的原则 > [!note] 📜 > 文章链接:[Wheel Reinventor's Principles // Tobias Løfgren](https://tobloef.com/blog/wheel-reinventors-principles/) 程序员社群里的主流观点是:你不应该重新造轮子。直接使用别人已经写好的软件库能够节省时间,达成的效果往往也更好,有社区维护且被广泛使用的库往往也更安全。然而,作者指出,重新造轮子也有很好的理由: 1. 学习。从零开始编写一个库,能让程序员对底层的技术有更深刻的理解。 2. 特定的用途。不是所有的轮子都适用于每一种情况,有时候你确实需要为自己的需求重新造一个更适合的轮子。 3. 创新。现有的轮子,尽管很流行,但并不一定好。如果你有好点子,就做一个更好的。 4. 享受。重新造轮子可以是一件快乐的事情,不需要理由。 重造轮子的人必须谨记自己为什么要造这个轮子,不能忘记。同时,他们也应该遵许以下原则: 1. 最小化第三方库依赖。 2. 使用最简单的工具和最底层的技术。 3. 自己动手。 我知道有不少游戏开发者会自己写游戏引擎,或是在已有的、较简单的游戏引擎上实现自己的一套工具库用于后续的游戏开发。尽管我还不是一个成熟的游戏开发者,但我的确有在我的不少游戏项目中复用之前写的渲染管理器和状态管理器。我之前还听过一句戏谑的话:每个写博客的人最终都会造自己的博客程序(我自己确实也这样干过)。 我自己新造轮子的感受确实是快乐的,对相关领域的理解也会加深,如果你不是为企业工作,自己做项目时享受新造轮子的过程又未尝不可,不要被主流观点限制住了。 [#编程](/tags/编程/) ### 我们低估了自我效能的重要性 > [!note] 📜 > 文章链接:[我们高估了智力的重要性 \| Randy's Blog](https://lutaonan.com/blog/oi/) 我不太喜欢作者起的这个标题,读完这篇文章之后,我认为作者想说的并非是「我们高估了智力的重要性」,而是「我们低估了自我效能的重要性」。 我并不认可作者所说的「因为 AI,智力的差距变得更容易弥补了」,但我认可「人们应该主动利用智能」这一说法。或许,我们的关注点从来就不应该是「AI 到底有没有智能」「AI 会不会取代人类」,而是「我们应该如何利用 AI 所提供的智能」,而「如何利用」这一点,就与作者所说的「自我效能」有关。 作者认为自我效能可以通过后天训练(关注不能改变的智力,不如关注自己能够改变的),并引用了心理学家 Albert Bandura 提出的影响自我效能的四种因素: 1. **掌握经验** 通过亲身体验成功完成任务的经验来建立自信。 2. **替代经验** 观察与自己相似的人完成任务的经验,提升自己的信念。 3. **社会说服** 他人的鼓励和积极评价能够增强自我效能。作者认为这个条件是较为被动的,但我认为人在一定程度上可以选择自己所处的环境。 4. 解读**身体信号**的方式会影响自我效能。将紧张解读为「我不行」和解读为「兴奋」将会造成两种相反的结果。 你看,作者其实有大半的篇幅都在谈「自我效能」这一个概念,甚至根本不用提到 AI。 [#认知](/tags/认知/) ## 💡 新知复盘 > 原语(primitive)是计算机中**不可被中断**的一段机器指令,常见于**操作系统**中的进程调度,用于实现同步(synchronization)。一个操作需要用原语实现,常常是因为这种操作一旦被中断,就会发生非常严重的错误,所以不允许中断。 > > 原语的「原」可以理解为「原子」(Atom),执行原语就是在执行一个原子操作(atomic action)。 > > 要实现原语,有两种方式: > > 1. **禁用中断**,这种操作在多核处理器上非常低效。 > 2. **专用机器指令**,在多核处理器上实现同步,需要在硬件层面实现一套能够进行原子操作的机器指令(atomic instructions);例如 `test-and-set` 用于操作内存中的单个字(word),`compare-and-swap` 用于交换内存中的两个字。 > > Sources: 《操作系统 精髓与设计原理》[美] WILLIAM STALLINGS、[Synchronization (computer science) - Wikipedia](https://en.wikipedia.org/wiki/Synchronization_(computer_science)) > 语言往往能通过彼此之间在语音、语法和词汇等方面的相似性进行分类,常见的分类体系是基于**语系**(language family)、**语族**(language subfamily)和**语支**的。每个语系往往有一个共同的原始语言(proto-language)。 > > 以下是一些常见的语系和语族,这种划分呈树形结构。 > > - 印欧语系 > - 日耳曼语族 > - 英语 > - 德语 > - 罗曼语族(拉丁语族) > - 法语 > - 西班牙语 > - 葡萄牙语 > - 意大利语 > - 斯拉夫语族 > - 俄语 > - 波兰语 > - 汉藏语系 > - 汉语族 > - 官话(普通话) > - 粤语 > - 闽语 > - 藏缅语族 > - 日本-琉球语系 > - 日语 > - 琉球语 > > 需要注意的是,这种语言的分类体系似乎没有绝对的标准,学界也有一些争议。比如,一些学者认为日语应该被归类到汉藏语系下的藏缅语族,而非日琉语系;还有一些学者认为日语属于阿尔泰语系,而主流学术界则不认可这个语系存在。 > > 维基百科中也经常混用语族和语系两个词,导致我难以构建一个标准的世界语言体系。 > > 了解这种分类方式,最主要地是可以看到语言之间的联系。深入理解这种联系的一种方式是了解每个语系的原始语言——印欧语系的原始语言是**原始印欧语**(Proto-Indo-European, PIE),尽管这是一门根据印欧语系下各语言的特色构建出来的假想语言,但仍然是进行词源学研究的重要工具,印欧语系下不同语言中表达相似意思的词汇,很多都被认为有着相同的 PIE 词根。 > > Sources: [日本-琉球语系 - Wikipedia](https://zh.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC-%E7%90%89%E7%90%83%E8%AF%AD%E7%B3%BB)、[原始印欧语 - Wikipedia](https://zh.wikipedia.org/w/index.php?title=Special%3ASearch&search=%E5%8E%9F%E5%A7%8B%E5%8D%B0%E6%AD%90%E8%AA%9E&wprov=acrw1_0)、[Language family - Wikipedia](https://en.wikipedia.org/wiki/Language_family)、 > [语言系属分类 - Wikipedia](https://zh.wikipedia.org/w/index.php?title=Special%3ASearch&search=%E8%AF%AD%E8%A8%80%E7%B3%BB%E5%B1%9E%E5%88%86%E7%B1%BB&wprov=acrw1_0) > 投射(Projection)是一种心理防御机制,指人们常常将自己的不安等情绪代入到别人身上,下意识地否认自身的不良动机、欲望、行为,并将其怪罪于外界。 > > 这一点在许多霸凌者身上很常见,一些人认为霸凌者欺负弱小的行为,实际上反映了他们对自身能力的不安,因为不想被认为是弱小的,所以将「弱小」这一形象强加在别人身上,以此来证明自己的强大。另一个例子是,如果一个人骂你「你这样以后只能孤独终老」,那很有可能说明他自己很害怕「孤独终老」。 > > 简单来说,投射就是将自己的一部分属性设定在别人身上,并且会将自己投射的那部分自我误认为是别人而非自己,通常是为了达成某种自洽。 > > Sources: [Psychological projection - Wikipedia](https://en.wikipedia.org/wiki/Psychological_projection) > **课题分离**是阿德勒心理学中的一个概念,是阿德勒认为的、人际交往中应当遵守的法则。要区分一件事是谁的**课题**,可以思考「这件事情最终影响的是谁?」,例如孩子的学业情况最终影响的是孩子自己,而非父母,那么读书这件事情就是孩子自己的课题,父母原则上不应该干涉。 > > 在人际交往中,分清楚每件事情是谁的课题,并不干涉其他人的课题,就叫做**课题分离**。阿德勒认为人际交往中的一切问题都是由于干涉其他人的课题导致的。阿德勒认为「可以带马儿去河边,但不能强迫马喝水」。教育子女是父母的课题,学业是孩子的课题;提供物质基础和鼓励是父母的课题,这不一定要干涉孩子自己读书的课题。如果能在人际交往中做到课题分离,人与人之间的冲突就会大大减少。 > > Source: 《被讨厌的勇气》[日] 岸见一郎 ## 🗣️ 碎碎念 - ~~想用呋虫胺把室友也都杀了~~ - 在宿舍保证睡眠质量的方法只有一个:带耳塞。因为不能要求别人,所以只能做好自己能做的。除了室友打鼾(以及另外两个被鼾声吵到睡不着辗转反侧的室友的床板的声音),宿舍的门板隔音也是差到没边,走廊另一边有人说话和走路都能听得很清楚,夜里要一两点过后才能彻底安静。我发现自己的深度睡眠时间短得离谱,很难达到一小时,结果习惯每晚上床带耳塞之后,深度睡眠时间显著增加…… 不过,还真想尽早搬出去,因为他妈的不想闻室友的屎味了。 - 我不需要很大的空间,但我愈发清醒地意识到自己难以接受所有的事情都只能在一张并不宽敞的书桌上完成,所有的东西都只能在书桌的架子和柜子上放置,也不能用接受只比我肩膀宽一些的柜子塞下我所有的衣服…… 因为空间不足,我的 Mac Mini 在不到半个月的时间里产生了三处明显的磕碰;我在写下这段文字的今天在烧水时烫伤了手臂,水浸透了我的便签,我真的担心某一天水会撒在我的书和插排上;我的电脑、插排和书桌上原本的插座,间隔都不超过十厘米,我要在那不到四十立方厘米的空间里塞下所有的线缆…… - 写「论业余项目」这一节的时候,我竟然愣了半天翻译不出来「Side Project」这个词,就当我放弃了翻译,开始概括那篇文章的意思时,我发现自己非常自然地写下了「业余项目」四个字…… 它就这么顺滑地从我的脑子里溜了出来,好神奇…… [^1]: 话是这么说,但自称能复现的成功难道不是成功学吗……