blog
鸡蛋面-第六十一期
周末懒得出门去吃饭,又不想去买菜,就将冰箱里有的食材做了晚餐,我自认为味道很不错,鸡蛋这样也很营养 ,妈咪却觉得没有蔬菜,吃不下面,其实味道不错就吃得下。我看来是真的一点也不挑。
技术类分享
如何利用队列解决吵闹邻居问题
https://densumesh.dev/blog/fair-queue/
当一个用户注册了一个含有数百万级的任务,就会阻塞通道里其他人的时间,造成堵塞,因为按照正常顺序,需要处理完上一个用户的任务才会处理下一个人的任务,这显然就会造成拥堵,如何解决呢?其实也很简单,如果客户 A 有 1,000 条消息,而客户 B 有 1 条消息,则客户 B 不必等待客户 A 的所有 1,000 条消息清除。系统只是在它们之间交替:A、B、A、A、A…每个人都在进步。
安斯康姆四重奏
https://en.wikipedia.org/wiki/Anscombe%27s_quartet
1973年,英国统计学家弗朗西斯·安斯康姆提出了四张数据散点图。
这四个数据集的分布截然不同,但是它们的平均值、方差、相关系数、线性回归,都是一样的。
安斯康姆通过这四张图,证明了不能只看统计指标,必须关注散点图和异常值。
类型系统不是解决方案
https://programmingsimplicity.substack.com/p/type-checking-is-a-symptom-not-a
最近数十年,软件行业的一大共识是,类型系统非常有用,至关重要。
大家认定,通过类型系统,在编译阶段就能发现错误,所以人们开发出了越来越强大的类型系统。
我不这样想。我认为,类型系统并不是解决复杂性的根本办法,反而创造出不必要的复杂性。
不使用类型系统,也可以构建出可靠的大型复杂系统。
作为例子,我们可以想一下复杂的硬件系统。电子工程师经常构建包含数百万个元件、充满复杂交互的系统,怎么保证可靠性?
他们主要依赖的是架构原则:模块化、显式接口、严格的调用顺序。
如果你有良好的架构设计,类型系统其实不是必需的,下面就是两个例子。
(1)UNIX 管道可以将数十个程序组合成复杂的工作流,不需要进行类型检查,因为每个组件都遵守约定:内部发生的事情不暴露到组件外部,外部通信仅通过显式的、简单的文本数据进行。
(2)互联网本身也没有集中式的类型检查。HTTP 服务器、客户端、电子邮件系统、DNS 解析器,都通过简单的协议进行互操作,遵循组件松耦合和接口简洁的架构原则。
总之,当组件真正隔离,并通过简单、明确的接口进行通信时,即使是大型系统也能保持可理解性。
编程的未来不在于更好地分析复杂系统,而在于更好地构建简单系统。
非技术类分享
Minecraft版九龙城塞
https://www.thisiscolossal.com/2025/09/sluda-builds-minecraft-kowloon-walled-city/
上个世纪90年代被拆除的香港九龙城寨,可能是历史上人口密度最大的地方。四个足球场大小的地方,住着几万人。一个国外建筑师在 Minecraft 游戏里面,重建了九龙城寨。
AI为什么会产生幻觉
https://openai.com/index/why-language-models-hallucinate/
假设一个大模型被要求回答某人的生日,但它不知道。如果它猜测”9月10日”,那么它有1/365的概率猜对。回答”我不知道”,则猜对的概率为零。对于只有一个“正确答案”的问题,可以考虑三类回答:准确回答、错误和弃权。根据准确性对模型进行优先级排序和排名,但错误比弃权更严重。
最后的程序员
https://www.xipu.li/posts/the-last-programmers
我最近加入一家 AI 公司,发现一位同事已经好几周没看过实际的代码了。他只用简单的英语编写设计文档,然后交给 AI 处理实现。当需要修复某些问题时,他会编辑文档,而不是代码。
这让我深刻地意识到:我们正经历着人类手工将想法转化为代码的时代的终结。
这个感觉我也明显有,现在设计一个组件,同事经常问AI,然后让AI写,写的不对,继续让AI改,但自己不会去思考对应的逻辑了。