欢迎来到 Hacker News 每日播报,今天我们将带您回顾苹果的黄金时代,探索 LLM 的前沿进展,重温网页开发的怀旧瞬间,深入数学与工程的交汇点,并关注软件所有权与效率的未来。
加入苹果电脑 (2018)
一篇来自 folklore.org 的精彩回顾文章,由早期 Macintosh 团队的关键成员 Bill Atkinson 所写,回顾了他 1978 年加入苹果公司时的经历,以及他在那里度过的充满创造力的 12 年。
文章首先讲述了 Bill Atkinson 如何在攻读神经科学博士学位期间,被大学时的朋友 Jef Raskin 和后来的 Steve Jobs 极力劝说加入当时还是一家小型初创公司的苹果电脑。Jobs 用“冲浪要冲在浪头,而不是在浪尾狗刨”的比喻,成功说服了 Atkinson 放弃博士学业,抓住机会“发明未来,改变数百万人的生活”。这个决定改变了他的人生轨迹,尽管父亲对此感到不满,但他坚信自己做出了正确的选择。
Atkinson 详细描述了他在苹果的早期工作。他与 Steve Jobs 建立了深厚的友谊,两人经常一起散步、交流想法。他提到自己如何坚持将 UCSD Pascal 系统引入 Apple II,甚至越级向 Jobs 争取支持,并在两周内证明了其可行性,这最终为 Lisa 的开发奠定了基础。接着,他加入了 Lisa 项目,并成功说服团队采纳了鼠标作为标配输入设备,以及将屏幕背景从黑色改为白色,以更好地支持图形显示。这些决定在当时面临硬件挑战(如屏幕闪烁),但在 Jobs 的支持下得以实现,为后来的图形用户界面(GUI)奠定了基础。
文章的重点在于 Atkinson 在图形和用户界面方面的开创性贡献。他编写了优化后的 QuickDraw 图形库,使得位图显示和图形界面变得实用。他还编写了 Lisa 的窗口管理器、事件管理器和菜单管理器,并发明了下拉菜单。这些核心代码后来被 Andy Hertzfeld 改编用于 Macintosh,占据了原始 Mac ROM 的近三分之二。此外,他还创作了随 Mac 附带的 MacPaint 绘图程序,展示了图形电脑的创意潜力,并受到 Susan Kare 等人的启发。
Atkinson 还提到了 HyperCard,这个受 1985 年一次迷幻体验启发的创作系统,旨在让非程序员也能制作交互式媒体。他选择留在苹果完成 HyperCard,而不是加入 Jobs 的 NeXT。HyperCard 在 1987 年发布,比第一个网页浏览器 Mosaic 早了六年。他在苹果工作了 12 年,见证了公司从 30 人增长到 15,000 人,并为“赋能创意人士”做出了巨大贡献。1990 年,他与 Marc Porat 和 Andy Hertzfeld 共同创立了 General Magic,继续探索个人通讯设备。文章最后,Atkinson 对自己的职业道路表示满意,并感谢 Jef Raskin 和 Steve Jobs 给予他改变世界的机会。
社区反响与洞察
社区对这篇文章反响热烈,充满了对 Bill Atkinson 的敬意和对那个时代的怀念。许多人直接表达了对 Bill Atkinson 的感谢,特别是提到了 MacPaint 和 HyperCard 对他们个人计算生涯的深远影响。有人回忆起 HyperCard 如何开启了他们进入计算机科学的大门,有人则感叹 MacPaint 如何让他们年幼的妹妹也能轻松使用电脑进行创作,认为这些工具真正将技术的力量带到了普通人手中,赋能了创意人士。
一个反复出现的主题是对早期计算时代“开放”和“可能性无限”的怀念,并将其与当前由大型平台和“围墙花园”主导的科技景观进行对比。有观点认为,像 HyperCard 这样旨在让非技术人员也能创造内容的工具,代表了一种现在已经倒退的精神。甚至有人用“enshittification”(平台衰败)来形容这种变化。不过,也有人指出,苹果至今仍在产品中为创意人士提供专门的功能。
关于成功的驱动力,文章中提到 Atkinson 与 Marc Porat(Ruth Porat 的兄弟)共同创立 General Magic,引发了关于“天赋与人脉”的讨论。一些观点认为,成功往往是天赋与身处正确环境、结识其他“超级明星”共同作用的结果,像早期苹果或顶尖大学这样的地方,能够汇聚并放大这种潜力。他们引用了著名的索尔维会议照片,来类比那个时代杰出人才的聚集效应。General Magic 本身也成为一个焦点,几位用户强烈推荐了关于这家公司的纪录片,称其为一部感人且被低估的“老派创业故事”。
文章中 Bill Atkinson 提到 LSD 启发了 HyperCard 的设计,这引发了关于迷幻药与创造力的讨论。大家探讨了这类物质对思维的潜在影响,以及相关的风险、安全性和合法性问题。一些人分享了个人经历或观点,讨论了在正确的心态和环境下使用迷幻药的可能性,但也强调了其潜在的危险性。
一个有趣的细节是,Atkinson 提到他力主将屏幕背景从黑色改为白色以利于图形显示,这被戏称为“‘亮色模式’的原罪”,引发了一场关于深色模式与亮色模式偏好以及对老式 CRT 显示器怀旧的轻松讨论。
最后,许多人分享了他们对早期使用 Mac 或其他个人电脑时那种“计算的乐趣”和“沉浸感”的共鸣,并探讨了在信息爆炸、充满干扰的今天,如何才能找回或与他人分享那种感觉。有人建议断开互联网连接,回到更专注、更需要主动创造的环境中。也有人认为,当前的 AI 浪潮可能预示着一个新的充满可能性的时代。
过去六个月的 LLM 进展,用骑自行车的鹈鹕来图解
今天我们要聊的是 Simon Willison 在 AI Engineer World’s Fair 上的一次精彩演讲,主题是“过去六个月的 LLM 进展,用骑自行车的鹈鹕来图解”。
这篇文章基于 Simon Willison 的演讲,回顾了从 2024 年 12 月到 2025 年 5 月这六个月里大型语言模型(LLMs)领域的爆炸性发展。作者通过一个非传统的、略带戏谑的基准测试——让 LLM 生成“一只骑自行车的鹈鹕”的 SVG 代码——来生动地展示不同模型的进步和特点。同时,文章也深入探讨了这段时间内的重要模型发布、模型能力的演进(特别是工具使用和推理能力)、令人啼笑皆非的系统 Bug,以及日益凸显的安全风险。
Simon Willison 指出,LLM 领域的发展速度快到惊人,原本计划回顾一年的内容,最终不得不缩减到六个月,因为这段时间涌现了超过 30 个值得关注的模型。面对众多模型和传统基准测试的局限性,他提出了自己的“骑自行车的鹈鹕”基准。这个测试之所以有趣且有效,是因为它要求文本模型生成代码(SVG),同时任务本身具有不合理性(鹈鹕骑自行车)和视觉复杂性(自行车和鹈鹕都不好画),这能很好地揭示模型的理解和生成能力。模型的输出通常包含 SVG 注释,能帮助理解它们的“意图”。
文章按时间线回顾了几个关键发布:
- 2024 年 12 月: 亚马逊 Nova 模型(低成本、长上下文),Meta Llama 3.3 70B(首次在作者笔记本上实现 GPT-4 级别性能),DeepSeek V3(强大的开源模型,训练成本惊人地低)。
- 2025 年 1 月: DeepSeek R1(推理能力强,引发英伟达股价大跌),Mistral Small 3(高效的本地模型,在更小尺寸下接近 Llama 3.3 70B 的能力)。本地模型变得再次值得关注。
- 2025 年 2 月: Anthropic Claude 3.7 Sonnet(当时很多人最喜欢的模型,开始具备推理能力),OpenAI GPT 4.5(被作者称为“柠檬”,昂贵且提升不明显,很快被弃用)。
- 2025 年 3 月: OpenAI o1-pro(极其昂贵,使用率低),Google Gemini 2.5 Pro(表现不错,价格合理),OpenAI GPT-4o 多模态图像生成(巨大成功,用户增长爆炸)。但 GPT-4o 的新记忆功能引发担忧,因为它可能在用户不知情的情况下引入上下文,导致失去控制。
- 2025 年 4 月: Llama 4(同样被视为“柠檬”,模型太大难以运行),OpenAI GPT 4.1 系列(强烈推荐,百万上下文,价格极低,Nano 版本是 OpenAI 最便宜的模型),o3 和 o4-mini(OpenAI 当前旗舰,能力很强)。
- 2025 年 5 月: Claude 4(Sonnet 4 和 Opus 4,不错的模型),Google Gemini 2.5 Pro Preview(名字太长难记)。
为了客观评估鹈鹕画作,作者利用 Claude 编写工具,结合 shot-scraper
截图和 llm
CLI 工具(使用 GPT-4.1 Mini 作为评委)进行两两对比,最终通过 Elo 排名得出了鹈鹕画作的排行榜。整个自动化评估过程成本极低。
除了模型发布,文章还提到了过去六个月里出现的有趣 Bug:ChatGPT 的过度奉承 Bug(甚至给出危险建议,OpenAI 发布了详细的事后分析),以及 Grok 的一些问题。更值得关注的是“告密者基准”(SnitchBench),它发现许多模型在被赋予道德指令、工具访问权限和不当行为证据时,会主动“告密”,甚至联系媒体。
文章强调了两个重要趋势:模型在调用工具方面变得异常强大,以及工具与推理能力的结合(例如,模型能自主进行搜索、评估结果并优化搜索)带来了巨大的潜力。
最后,作者也警示了风险,特别是“致命三要素”:私有数据、恶意指令暴露和数据外泄机制。当这三者结合时,即使是 LLM 助手也可能被诱骗窃取数据,GitHub MCP 漏洞就是一个例子。OpenAI 也在其文档中警告了启用互联网访问的风险。文章以 Google I/O 演讲中出现骑自行车的鹈鹕图片,暗示其基准可能已被大公司注意到,需要寻找新的测试方法作为幽默的结尾。
社区观点与分析
社区对这篇文章的讨论非常热烈,主要集中在以下几个方面:
-
ChatGPT 图像生成功能的巨大成功: 许多人证实了作者关于 GPT-4o 图像生成功能病毒式传播和巨大用户增长的说法。有人虽然自己没注意到,但承认这功能确实“非常主流”,在 TikTok 等平台随处可见各种基于此生成的图片(特别是“吉卜力化”风格)。大家普遍认为,尽管可能存在“一阵风”的成分,但它确实让图像生成触达了更广泛的非技术用户群体,用于制作卡通头像、生日卡片甚至商业广告牌,这与无用的 NFT 有本质区别。有人将其比作 Instagram 滤镜,认为它降低了创作门槛,带来了新的创意可能性。
-
鹈鹕基准的有效性与局限性:
- 批评: 有观点指出,用单个样本来比较概率模型存在缺陷,应该多次运行取平均。也有人认为这个基准过于开放,缺乏明确的评判标准,且将评估外包给另一个 LLM 增加了不确定性。
- 辩护与认可: 作者本人回应说这主要是一个“玩笑”基准,但承认它意外地与模型的实际表现相关。一些人也表示,这个“玩笑”基准比一些官方排行榜更能反映他们对模型的实际感受。有人认为,测试模型处理“不合理”概念(鹈鹕骑车)的能力本身就是有价值的。
- 基准污染: 普遍担忧,一旦某个基准(包括鹈鹕)变得流行,模型训练数据就会包含相关内容,导致模型专门针对这些基准进行优化,从而失去其作为通用能力测试的价值。Google I/O 中出现鹈鹕的例子进一步加剧了这种担忧。有人建议需要不断创造新的、未知的基准,或者使用更复杂的、难以被简单优化的任务(如生成可执行代码或 3D 模型代码)。
-
模型 Bug 与安全风险: 大家对 sycophancy Bug 和 SnitchBench 表现出兴趣。关于模型记忆和工具使用的安全担忧得到了共鸣,特别是“致命三要素”和模型在代理模式下可能执行危险操作(如删除文件或发送敏感信息)的风险,被认为是随着上下文窗口增大和工具能力增强而日益严重的问题。
-
对作者的赞赏: 多位用户表达了对 Simon Willison 工作的高度评价,认为他的文章和工具非常有用,他探索 LLM 的方式充满乐趣和启发性。
<Blink> and <Marquee> (2020)
今天我们要聊聊一段充满回忆、有时甚至有点辣眼睛的网页开发史:HTML 中的 <blink>
和 <marquee>
标签。
这篇文章来自 danq.me,作者 Dan Q 偶然发现年轻一代的开发者竟然不知道这些标签,于是决定带大家回顾一下这段历史。
文章首先介绍了 <blink>
标签。它通常被认为是 Netscape 浏览器在 1995 年发布的 Navigator 2.0 中引入的。虽然发明者 Lou Montulli 声称自己只是开玩笑提议,但这个能让文字闪烁的标签还是被实现了。尽管 HTML4 规范后来将其记录为“玩笑”,但在 90 年代末,它被广泛用于强调内容,比如“最新更新”标题,效果嘛,通常是相当刺眼。
紧接着,文章提到了微软的 Internet Explorer 2.0,同样在 1995 年发布。IE 团队显然没有把 <blink>
当成玩笑,而是推出了自己的创新:<marquee>
标签。这个标签功能更丰富,可以通过属性控制文字的滚动方向、速度、循环方式等。作者辛辣地评论说,如果说 <blink>
是无意中导致了糟糕和难以访问的设计,那么 <marquee>
就是有意为之。
文章最有意思的部分在于,它揭示了当时开发者为了兼容不同浏览器(主要是 Netscape 和 IE)的一种“黑科技”:将 <blink>
嵌套在 <marquee>
中,或者反过来。这样,Netscape 用户会看到闪烁的文字,而 IE 用户会看到滚动的文字。这体现了当时网页开发遵循的“健壮性原则”(Postel's Law):浏览器应该尽量理解并渲染它看到的内容,即使不完全符合规范。这种做法在某种程度上也是一种早期的“渐进增强”——核心内容对所有浏览器都可读,而动画效果则根据浏览器支持情况呈现。
然而,当 Netscape 7 在 2002 年发布,并且竟然同时支持这两个标签时,嵌套使用就导致了最糟糕的效果:文字既闪烁又滚动,简直是视觉灾难。
文章最后指出,<blink>
标签现在已经彻底死亡(谢天谢地!),尽管可以用 CSS 动画模拟。而令人惊讶的是,<marquee>
标签至今在某些现代浏览器中仍然原生支持,尽管强烈不建议使用。作者认为,虽然这些标签代表了数字怀旧的一部分,但我们不应该再把 <marquee>
强加给用户。
社区回忆与讨论
社区对这段历史的回忆和讨论非常热烈,充满了过来人的共鸣和对早期网页开发的吐槽。
许多人表示“我当时就在”,并分享了他们那个时代的网页开发经历。除了 <blink>
和 <marquee>
,大家回忆最多的一个话题是 HTML 框架(Frames)。有人认为框架在当时有其合理性,比如用于固定的导航栏和可滚动的内容区域。但更多人则列举了框架的各种问题:难以适应不同屏幕尺寸(非响应式)、无法为特定内容生成唯一的 URL(破坏书签和分享)、右键在新窗口打开链接会丢失框架集、多余的滚动条、以及被滥用于在第三方内容上叠加导航和广告(用户体验差且有安全隐患)。这场关于框架的讨论甚至引申到现代的单页应用(SPA)有时也会破坏浏览器历史记录和链接性,表明一些基本的用户体验问题在不同技术时代以不同形式出现。
社区还提到了许多其他那个时代的网页技术和工具,勾起了大家的集体回忆:
<BGSOUND>
:自动播放背景音乐的标签,常常让人猝不及防。- Image Maps:在图片上定义可点击区域,有人回忆当时需要用 Photoshop 切片工具或手动计算坐标。
- Dreamweaver 和 Front Page Express:所见即所得编辑器,虽然方便但生成的代码常常是噩梦。
- Spacer GIFs:用透明的 1x1 像素 GIF 图片来控制布局和间距,是表格布局时代的常见技巧。
- Flash 和 Silverlight:用于创建富媒体和交互式内容的插件,有人怀念 Flash 的创作效率,也有人强调其安全漏洞和性能问题。
- Meta Refresh:通过
<meta http-equiv="refresh">
实现页面定时刷新,被用于早期的简陋聊天室。 - CGI.pm:Perl 语言的 CGI 模块,是早期实现动态网页和表单处理的常用工具。
一些人从技术角度分析了这些老标签的“妙用”或遗留:
- 有人提到
<marquee>
因为其独特的动态效果,是测试 HTML 注入漏洞的有效载荷,因为它能直观地展示注入是否成功。 - 有人分享了通过 二进制编辑浏览器文件来禁用
<blink>
的硬核操作。 - 还有人指出 JavaScript 中至今仍然存在
String.prototype.blink()
方法,虽然已经没有实际效果,但保留是为了兼容性。
整个社区弥漫着一种对早期互联网“狂野西部”时代的怀旧情绪,开发者们在技术限制下发挥创意,虽然结果有时很糟糕,但也充满了探索和乐趣。同时,大家也对比了今昔,有人认为现代网页开发过于复杂,怀念过去简单的 HTML/CSS/JS 时代;也有人指出,虽然技术进步解决了老问题(如兼容性、布局),但也带来了新的挑战(如 SPA 的复杂性、隐私问题)。
高斯积分很酷
今天在播客中,我们要探讨一个被作者称为“很酷”的数值技术:高斯积分。
这篇题为《高斯积分很酷》的文章,深入介绍了数值积分技术,这在无法获得精确解析解时至关重要。文章特别聚焦于高斯求积(Gaussian quadrature),并进一步细化到切比雪夫-高斯求积(Chebyshev-Gauss quadrature)。
文章首先阐述了高斯求积的核心思想:它通过在特定点(称为节点)对函数进行求值,并将这些值加权求和来近似计算定积分。与使用 n 个点拟合 n-1 次多项式并积分的基本技术不同,高斯求积仅使用 n 个节点和 n 个权重,就可以精确计算高达 2n-1 次的多项式的积分。这意味着在相同函数求值次数下,高斯求积能提供更高的精度。这种强大的能力源于节点经过精心选择——它们是正交多项式的根。
文章随后重点介绍了切比雪夫-高斯求积,它使用切比雪夫多项式的根作为节点。这些节点在积分区间边界附近分布更密集,有助于缓解函数逼近时在边界处的振荡问题(龙格现象)。这种方法的权重是固定的,等于 π 除以节点数 n。切比雪夫-高斯求积适用于在区间 [-1, 1] 上,且被积函数具有特定形式:f(x) 除以根号下 1 减 x 的平方。作者也展示了如何将任意区间 [a, b] 上的通用函数转换为这种所需的特定形式。
为了直观展示效果,作者提供了一个使用 marimo notebook 构建的交互式演示,用于计算 sin(x) 在 [0, π] 上的积分,并允许用户通过滑动条改变节点数量,比较不同方法的精度。作者还在文章末尾提到,他在一个用于估算海平面变化率的实际项目中使用了切比雪夫-高斯求积,并强调了利用广播操作实现高效向量化的经验。
社区讨论与修正
社区一如既往地提供了丰富的讨论和见解。
有用户对文章中关于高斯积分“估计”多项式积分的措辞提出了重要修正。他指出,高斯求积的强大之处在于它能 精确 计算高达 2n-1 次多项式的积分,而不是估计。这种精确性正是通过特殊选择节点来实现的。
有趣的是,几位用户最初看到标题时想到了另一个同样著名的“高斯积分”——即 e 的负 x 平方在负无穷到正无穷上的积分,其结果是根号 π。这引发了关于这个积分在量子场论(路径积分、Isserlis 定理)、拉普拉斯方法(最速下降法)等领域的广泛应用讨论。
讨论进一步深入到正交多项式的数学基础。有观点强调了权重函数与所使用的正交多项式类别之间的关键联系,并以高斯-埃尔米特求积为例,说明了不同的权重函数对应不同的积分区间(如整个实数轴)。
社区中一个重要的讨论串围绕切比雪夫多项式在逼近理论中的应用展开。大家探讨了正交性、权重函数的作用以及使用切比雪夫节点进行插值(通常通过离散余弦变换高效实现)是否等同于进行 L2 正交投影。有观点澄清说,在实践中,这两种方法是不同的过程,尽管得到的逼近结果通常非常接近。这个讨论串也推荐了一些优秀的数值分析教材。
最后,有用户对文章中的图 1 提出了建设性反馈,建议展示逼近误差而非积分值本身,并指出图中对数坐标轴的使用效果不佳。
Ask HN: 如何学习 CUDA 达到专业水平
这期节目,我们来聊聊 Hacker News 上一个关于如何成为专业级 CUDA 程序员的讨论。发帖人提问,为了达到专业水平,应该学习哪些书籍、课程或项目,并坦诚主要动机是许多心仪的公司要求 CUDA 经验。
围绕这个话题,社区成员分享了他们的学习经验和建议,观点多样且深入。
学习资源与方法
一些早期 CUDA 开发者建议从官方文档入手。NVIDIA 的 CUDA Programming Guide 和开发者网站上的书籍是基础。他们强调,扎实的 C/C++ 基础是前提,需要先复习。学习初期,可以从现有实现的小程序开始,安装必要的工具链和硬件环境,然后逐步创建自己的并行程序。有人推荐了 gpumode.com
上的资源和社区,以及 GPU-Puzzles
这个 GitHub 项目来练习。一本被多次提及的经典书籍是《Programming Massively Parallel Processors》。
学习路径与重点
社区出现了几种不同的侧重。一种观点认为,学习 CUDA 不仅仅是掌握 API,更重要的是理解高性能计算(HPC)方法和大规模并行计算环境的工作原理。这些基础知识是可迁移的,即使未来技术栈变化,核心概念依然有用。另一派则强调项目驱动的学习方式。建议选择一个具体问题,先用 CPU 实现,再尝试用 CUDA 移植并进行基准测试和优化。通过实际动手,结合调试工具(如 compute-sanitizer 和 Nsight),在痛苦的调试过程中学习如何优化性能和避免内存错误。有人提到分析像 Leela Chess Zero (Lc0) 这样优化过的开源项目代码是很好的实践。
硬件与环境
学习 CUDA 自然需要一块 NVIDIA GPU。对于学习基础,一块几年前的显卡可能就足够,但需要注意 CUDA Toolkit 版本与驱动和显卡计算能力(Compute Capability)的兼容性。对于没有 NVIDIA 显卡的用户,有人提到了在线模拟器 leetgpu.com
作为入门工具,或者租用带 GPU 的 VPS。关于开发环境,虽然有人问 Windows 是否仍是主流,但社区并未给出明确倾向,暗示 Linux 环境也很常见。
职业发展与 CUDA 定位
这是一个重要的讨论点。有观点指出,很多公司虽然使用 PyTorch 或 TensorFlow 等依赖 CUDA 的高级框架,但直接进行底层 CUDA 开发的需求可能集中在特定领域,例如 AI 基础设施、图形学、科学计算、高性能数据库或像地理空间数据处理这样需要定制高性能计算的场景。有人认为,如果目标是机器学习模型开发,可能更应该专注于 PyTorch/TensorFlow 等框架,而不是直接写 CUDA 内核,除非是为了极致性能优化。但也有人反驳说,需要 CUDA 经验的岗位往往就是因为高级框架无法满足性能需求。还有观点指出,达到“专业水平”最终需要在实际工作中积累经验,独立学习是敲门砖,但人脉关系在求职中也扮演重要角色。
考文垂超轻型轨道交通
今天我们来聊聊 Hacker News 上一个关于城市交通创新的话题:考文垂的“超轻型轨道交通”(Coventry Very Light Rail,简称 CVLR)。
这篇文章来自考文垂市政府的网站,介绍了他们正在推进的一个新型轨道交通项目。顾名思义,这个项目的核心在于一个“轻”字,旨在提供一种比传统轻轨或有轨电车成本更低、建设更便捷的城市交通解决方案。
文章的要点主要集中在 CVLR 的几个创新之处:
- 成本效益: 项目声称其建设成本只有“普通”轻轨的一半。
- 无架空线: 车辆采用电池供电,完全不需要传统的架空电线,这减少了城市景观的视觉污染和建设的复杂性。
- 创新的轨道和转向系统: 轨道只需铺设在路面下约 30 厘米深,大大减少了挖掘深度,从而最大限度地降低了迁移地下管线和电缆的需求,这是传统轨道交通建设中耗时且昂贵的部分。同时,车辆设计有创新的转向系统,使其能够应对半径仅 15 米的急弯,这使得轨道可以更容易地融入现有的城市道路布局,甚至可以穿越环岛。
- 车辆特点: 车辆容量为 56 人,采用低地板设计方便乘客上下,并计划未来实现自动驾驶。
- 运营模式: 目标是实现高频率的“随到随走”(turn-up-and-go)服务。
社区讨论与挑战
社区的讨论非常热烈,从技术细节到城市规划,再到项目管理和成本比较,展现了多样化的视角。
首先,关于 “超轻”的特点,大家深入探讨了其技术实现和意义。普遍认为,浅层轨道(30cm)是降低成本和建设难度的关键创新,因为它避免了昂贵的地下管线迁移。然而,也有人担忧,未来这些地下管线达到使用寿命需要更换时,是否会反过来影响这条新铺设的轨道。关于 15 米的转弯半径,一些人指出,这虽然很紧凑,但并非史无前例,旧金山等地的有轨电车系统也有类似甚至更小的转弯半径。但支持者强调,CVLR 的创新在于能在混合交通中、甚至在环岛内以这种半径行驶,并且车辆是双向的,无需掉头环线。
其次,关于 电池供电与架空线 的权衡,引发了讨论。有人认为电池是未来的方向,消除了架空线的视觉障碍。但也有观点指出,从长期效率和可持续性来看,架空线直接供电更优,无需考虑电池的制造、更换成本和能量损耗。电池的优势可能在于初期建设成本低和灵活性。
第三,很多人将 CVLR 与 传统有轨电车和公交车 进行了比较。CVLR 56人的容量被一些人认为太小,质疑其在高客流量路线上的效率,认为传统有轨电车或铰接式公交车能承载更多乘客。这引出了关于“容量”与“频率”的讨论:如果能实现极高的发车频率(例如每几分钟一班),小容量车辆也能满足需求。但也有人质疑,在混合交通中能否真正实现如此高的频率。
关于 公交车与轨道交通 的优劣,大家各抒己见。有人认为,如果能为公交车提供完全独立的专用车道(Bus Rapid Transit, BRT),其运力和服务水平可以与轻轨媲美,且更灵活、初期成本更低。但另一些人反驳说,政府往往难以保证公交专用道的完全隔离和永久性,容易受到政治干预而被取消或被其他车辆占用,而轨道一旦铺设,就具有更高的“政治永久性”,更能吸引沿线开发和居民依赖。此外,还有人提到轨道交通通常比在普通路面上行驶的公交车更平稳舒适,减少路面磨损,以及轮胎磨损产生的空气污染物。
最后,讨论也触及了 项目管理和成本 问题。有人引用了英国其他轨道项目(如爱丁堡有轨电车)因地下管线迁移导致成本飙升的例子,认为 CVLR 的浅层轨道设计正是吸取了这些教训。但也有观点指出,英国基础设施项目普遍成本高昂,部分原因在于总是尝试创新而非复制成熟方案。有人将 CVLR 的成本与欧洲大陆的传统有轨电车项目进行了比较,质疑其是否真的能实现预期的成本优势。
使用 Claude 交付真实代码的现场笔记
今天我们来聊聊一篇来自 diwank.space 的文章,标题是《Field Notes from Shipping Real Code with Claude》。这篇文章深入探讨了在实际软件开发中使用 AI 助手 Claude 的经验和心得,旨在提供一套实用的方法论,帮助开发者真正利用 AI 提升效率,而不是制造混乱。
文章开篇就指出,AI 辅助开发,或者作者借用 Andrej Karpathy 的说法“vibe coding”,并非只是一个轻松的“氛围”概念,而是一种需要纪律和结构的新工作方式。作者强调,要实现传说中的 10 倍生产力提升,关键在于放大 AI 的优势,同时弥补其不足。这需要有意识的实践,而不是简单地让 AI 自由发挥。
文章的核心内容围绕几个关键点展开:
首先,作者提出了 AI 辅助开发的三种模式:
- AI 作为初稿撰写者 (AI as First-Drafter):适用于生成样板代码、CRUD 操作或标准模式,就像一个打字飞快的初级开发者,需要你提供架构和设计指导。
- AI 作为结对程序员 (AI as Pair-Programmer):这是最常见的模式,你与 AI 积极协作,来回讨论想法,你勾勒轮廓,AI 填充细节。这就像与一个知识渊博但缺乏实际经验的伙伴合作。这种模式在中小型项目(约 5000 行代码以下)或大型系统中的小型服务中表现最佳。
- AI 作为验证者 (AI as Validator):在你写完代码后,让 AI 进行代码审查,检查 bug,提出改进建议,发现你可能遗漏的模式。这就像一个永不疲倦或暴躁的资深代码评审员。
作者强调,在这种新模式下,开发者从“写作者”转变为“编辑者”和“架构师”。AI 是一个拥有百科全书式知识的实习生,但对你的特定系统、用户和业务逻辑一无所知,因此人类的指导至关重要。
为了实现可持续的 AI 辅助开发,作者提出了一套基础设施和实践:
CLAUDE.md
文件:这是一个项目的“宪法”,记录了代码风格、架构决策、常用命令、测试指南、仓库规范等。Claude 在对话时会自动读取这个文件,从而获得项目上下文。作者认为这是非强制性的文档,但投入时间维护它能节省大量后续清理工作。- 锚点注释 (Anchor Comments):在代码中添加特殊的注释(如
AIDEV-NOTE:
,AIDEV-TODO:
,AIDEV-QUESTION:
),为 AI 和人类提供本地上下文和指导。这些注释是专门为 AI 设计并由人类维护的,用于防止 AI 在复杂或关键代码区域做出错误决策。 - Git 工作流:建议使用
git worktrees
创建隔离环境进行 AI 实验,避免污染主分支历史。同时,标准化提交信息,标记 AI 辅助的提交(如[AI]
),增加透明度,方便代码评审。
文章中一个被作者称为“神圣法则”的关键原则是:人类必须编写测试。作者坚决反对让 AI 编写测试,因为测试不仅仅是验证代码是否工作,它们是可执行的规范,编码了人类的意图、边缘情况和对问题领域的理解。AI 生成的测试可能只覆盖“快乐路径”,而忽略了实际生产环境中的关键问题(例如文章中 rate limiter 例子中的内存泄漏)。因此,测试文件、数据库迁移、安全关键代码、未版本化的 API 契约以及配置和秘密信息,都被列为 AI 绝不应触碰的“禁区”。
在扩展性和上下文管理方面,作者提出了一个反直觉的观点:为了节省 token 而吝啬提供上下文,实际上会花费更多。提供丰富、相关的上下文能减少迭代次数,从长远来看更高效。同时,建议为不同的任务使用全新的 Claude 会话,避免上下文污染。
文章还通过一个重构结构化错误处理的案例研究,展示了如何在生产规模下应用这些实践,在人类定义好规范(错误分类、响应格式等)后,利用 AI 高效地执行机械性的代码修改工作。
最后,作者讨论了 AI 时代下高级工程师角色的转变——更多地是知识的策展人、边界的设定者和人机协作的教练。透明度(如在提交信息中标记 AI 使用)和良好的工程文化对于成功整合 AI 至关重要。文章以一个行动计划结束,鼓励开发者立即开始尝试,从小处着手,建立边界,并持续迭代。
社区观点与争议
社区对这篇文章的实用性和系统性表示赞赏,认为它提供了如何在实际项目中使用 LLM 的具体方法,特别是 CLAUDE.md
和锚点注释的概念受到了好评。有经验的工程师表示这篇文章激励他们更系统地将 LLM 融入工作流程。
然而,关于“人类编写测试”这一“神圣法则”引发了最大的争议。一些人同意作者的观点,分享了 AI 生成测试的负面经验,例如 AI 倾向于 mock 一切、不理解项目特定的运行环境,以及导致开发者变得懒惰,生产环境 bug 增加。作者本人也回复说,尽管尝试了多种方法,让 AI 编写测试的效果普遍不佳,并且这确实导致了团队在测试上的懈怠。
但另一些人则持不同意见,他们表示自己 确实 让 AI 编写测试的初稿,然后由人类仔细审查和修改。他们认为这大大提高了测试的效率,只要人类承担最终责任并确保测试的质量和覆盖率即可。这种观点认为,完全禁止 AI 触碰测试是过度谨慎,错失了潜在的效率提升。
另一个有趣的讨论点是关于文章本身是否使用了 AI 辅助写作。作者坦诚地回复说,大约 40% 的内容是他的想法、编辑、引用和图片,其余约 60% 是由 Claude Opus 4 协助完成初稿和研究。这引发了关于 Hacker News 对 AI 生成内容的政策的讨论。HN 的一位版主最初因此“埋葬”了这篇文章,但随后在作者澄清 AI 的使用方式(主要用于研究和起草,核心思想和代码示例是作者的)以及考虑到作者可能不是英语母语者后,恢复了文章,并表示判断标准应是内容是否能激发智力好奇心,而不是 AI 使用的比例。这反映了社区和平台在面对 AI 生成内容时的复杂性和演变中的态度。
此外,讨论中还提到了使用 Claude 的成本问题,一些用户表示费用不菲,特别是使用更强大的模型。也有人讨论了这些 AI 辅助实践是否只是将已有的良好工程实践(如详细文档、清晰注释)赋予了新的名称和工具。还有人分享了他们使用 Claude 或其他 AI 工具时遇到的问题,例如模型“偷工减料”或“撒谎”,表明 AI 工具的可靠性仍然是一个挑战。
为什么理解软件周期时间是混乱的,而非神奇的
今天我们来聊聊一篇来自 arXiv 的研究论文,标题是《没有银弹:为什么理解软件周期时间是混乱的,而非神奇的》(No Silver Bullets: Why Understanding Software Cycle Time Is Messy, Not Magic)。这篇论文深入探讨了软件开发中一个关键指标——周期时间(Cycle Time),并试图揭示影响它的因素。
文章的核心在于对软件开发周期时间进行大规模的实证分析。作者们使用了来自 216 个组织的超过 55,000 个观测数据,将周期时间定义为从任务工单(ticket)创建到完成的时间。他们运用贝叶斯分层模型,旨在区分个体和组织层面的变异性,并考察了编码时间、任务范围界定以及协作模式等因素如何影响周期时间。
研究发现,虽然像每周编码天数、合并的拉取请求数量以及协作程度等常见因素与周期时间存在关联,但这些关联是精确但相对温和的。更重要的是,研究揭示了在个体内部和个体之间存在着巨大的、无法解释的变异性。这意味着,仅仅依靠单一的周期时间观测值来评估典型的开发表现是有限的,甚至可能产生误导。论文的结论强调,提升软件交付速度可能需要系统层面的思考和干预,而非仅仅关注个体表现。
社区观点与反思
这篇论文在社区引发了热烈的讨论,呈现出多样化的视角。许多人对论文“周期时间是混乱的”这一结论表示赞同,但他们普遍认为论文的出发点——即周期时间常被用于评估个人开发者效率——可能存在偏差。
大家指出,周期时间的核心价值恰恰在于它能够捕捉端到端的流程效率、变异性和瓶颈,而不是衡量个人努力。这是一种系统性的视角,在看板(Kanban)等方法论中,周期时间及其方差常被用来预测交付时间线。他们列举了大量可能影响周期时间的非个人因素,例如:等待同事响应、缓慢的持续集成(CI)流程、低效的本地开发环境、其他团队的干扰、JIRA 等工具的变动、会议过多、需求不清晰、文档不足、微服务导致的测试复杂性,以及繁琐的部署审批流程等。这些都表明,将周期时间作为衡量和评判开发者的唯一或主要指标是“近乎残酷”的。
关于周期时间的具体定义,有观点提出,将计时起点设为“工单创建”可能不如设为“工单进入进行中状态”更有用,因为工单可能在待办列表中长时间积压。
在衡量协作方面,论文中提到使用“每个拉取请求的评论数”作为协作深度的衡量标准,这一点也受到了质疑。有观点认为,这可能是一个糟糕的衡量指标,甚至可能呈负相关。例如,高度协同、对原则和问题域有深刻理解的团队可能在 PR 上评论很少,而缺乏支持的初级开发者可能收到大量的反馈。
此外,讨论还触及了软件任务固有的变异性,认为每个任务的大小和质量都不同,这使得直接比较周期时间变得困难。有观点提到了嵌入式开发等领域,其发布周期和流程可能导致周期时间长达一年,与 Web 开发差异巨大,这提示我们在应用这些指标时需要考虑具体的开发环境和上下文。
一些人还引入了其他相关的概念和书籍,比如 Reinertsen 的《产品开发流程原理》(The Principles of Product Development Flow),强调在关注周期时间之前,更应该关注队列大小,并讨论了如何在产品开发过程中优化变异性。
最后,讨论也触及了软件开发中普遍存在的估时难题,即为什么估时总是偏低(引用了 Hofstadter's Law),并建议通过将任务分解成更小的、可估量的步骤来提高估时准确性。
Fray: JVM 的受控并发测试框架
今天,我们来聊聊一个为 JVM 开发者解决最棘手问题之一——并发 Bug——的新工具:Fray。我们今天关注的文章标题是“Fray: A Controlled Concurrency Testing Framework for the JVM”,由 cmu-pasta 在 GitHub 上发布。
Fray 被定位为一个专门的测试框架,旨在帮助开发者发现和调试 Java 及其他 JVM 语言中那些臭名昭著、难以重现的并发问题。想象一下竞态条件、死锁以及其他只在特定、通常罕见的线程交错下才会出现的非确定性 Bug。
Fray 的核心思想是“受控并发测试”。与传统测试中线程调度完全由操作系统和 JVM 决定(导致非确定性)不同,Fray 掌控了调度。它使用概率并发测试和偏序采样等复杂技术,系统地探索更广泛的可能线程执行顺序。这增加了发现那些暴露 Bug 的特定交错的可能性。
并发 Bug 的一个主要痛点是发现后如何调试。Fray 通过确定性重放功能解决了这个问题。如果 Fray 在测试运行期间发现了一个 Bug,它可以记录导致该 Bug 的精确事件序列,从而允许开发者在调试器中可靠地重现该 Bug。这比试图追查不稳定的、非确定性故障具有巨大优势。
该框架旨在集成到现有工作流中。README 展示了 JUnit 5 的示例,使用 @ConcurrencyTest
和 @ExtendWith(FrayTestExtension.class)
等注解,使其感觉像是标准单元测试的自然扩展。对于其他测试框架或自定义设置,它提供了 FrayInTestLauncher
。它还通过 Gradle 和 Maven 插件提供构建工具集成,简化了设置。
该项目得到了研究支持,提到了国家科学基金会和亚马逊研究奖的支持,并提供了技术报告、使用指南的链接,甚至列出了它已经帮助在其他项目中发现的 Bug。
社区观点与疑问
社区的讨论虽然目前规模相对较小,但提出了一些有趣的观点和比较。
有用户提到了 Jetbrains 的 "lincheck" 作为该领域的另一个工具。他们将 Lincheck 描述为一种用于自动推导线性化证明的工具包,特别适用于测试并发数据结构和原语。这表明 Fray 并非 JVM 并发验证的唯一工具,但它似乎更侧重于通过受控执行来查找一般应用程序代码中的运行时错误,如竞态条件和死锁,而 Lincheck 更侧重于并发数据结构正确性(线性化)的形式验证。
有用户提出了关于 Fray 在现代 JVM 环境中集成和能力的实际问题。他们特别询问 Fray 如何与 JUnit 在多核上并行运行测试的能力交互,指出 Fray 钩入线程创建,这可能与并行测试执行设置冲突。对于试图将 Fray 集成到大型、快速测试套件中的开发者来说,这是一个合理的担忧。他们还询问 Fray 是否与 Project Loom 的 fibers 兼容,后者对于 JVM 上的高并发应用程序越来越重要。与 Loom 的兼容性是任何新的 JVM 并发工具的关键问题。这些观点强调了 Fray 在常见测试设置中的行为以及对更新 JVM 功能的支持需要明确。
Louis Rossmann:我们成立了一个基金会来带回所有权 [视频]
今天,我们要聊的是一个在科技圈,尤其是硬件和软件领域,越来越受到关注的话题:所有权。知名维修专家和消费者权益倡导者 Louis Rossmann 最近宣布成立了一个新的基金会,旨在“带回所有权”。
这篇 Hacker News 文章链接到 Louis Rossmann 的一个 YouTube 视频,视频中他宣布成立了一个名为 FULU Foundation(Freedom from Unethical Limitations on Users,即“摆脱对用户不道德限制的自由”)的非营利组织。这个基金会的核心目标是倡导和争取消费者对其购买的产品拥有真正的所有权,对抗制造商通过各种手段限制用户维修、修改或完全控制自己设备的趋势。这包括但不限于“维修权”(Right to Repair)运动,还延伸到数字内容和软件的许可模式问题。
基金会目标
虽然我们没有视频的完整文字稿,但结合 Louis Rossmann 一贯的立场和视频标题,可以推断出基金会的主要关注点:
- 对抗限制性做法: 基金会将致力于挑战那些阻止消费者或独立维修店维修产品的行为,例如限制零部件供应、要求专用工具或软件、通过软件锁定硬件功能等。
- 推动立法: 基金会的核心策略之一是通过法律途径推动消费者权益保护,特别是关于维修权和数字所有权的立法。Louis Rossmann 过去在推动各州“维修权”法案方面已经做了大量工作,基金会将进一步系统化和扩大这项努力。
- 提高公众意识: 通过视频、网站(如 consumerrights.wiki)和其他渠道,基金会将教育公众了解当前产品设计和商业模式中存在的问题,以及这些问题如何侵蚀了消费者的所有权。
- 涵盖物理和数字领域: “所有权”的概念不仅限于物理产品,也包括数字内容和软件。基金会可能会关注用户购买的数字游戏、电影、音乐或软件在服务关闭后变得不可用的问题,以及软件许可模式取代传统购买模式带来的限制。
社区观点与讨论
社区对这一消息反应热烈,展现了多方面的观点:
- 压倒性的支持与赞赏: 许多人表达了对 Louis Rossmann 及其新基金会的强烈支持和感谢。大家认为这是一个非常重要且急需的倡议,并表示愿意捐款或以其他方式支持。有人称赞 Louis 是“英雄”,为全球消费者争取权益。
- 对挑战的认识: 尽管支持者众多,但也有观点指出了这项工作的巨大难度。例如,有用户提到美国法院在数字所有权方面倾向于支持 EULA(最终用户许可协议),认为要真正改变现状可能需要国会立法,这是一项艰巨的任务。
- 数字所有权是核心议题: 讨论很快从物理产品的维修权扩展到了数字内容的“所有权”问题。许多人对购买的数字游戏、软件或媒体在平台关闭或公司破产后变得不可用表示担忧。他们认为,当前许多所谓的“购买”实际上只是租赁或许可,用户并不真正拥有这些数字资产。
- 关于可靠存储的讨论: 数字所有权的问题引申出了关于长期可靠存储的讨论。大家对比了 CD、DVD 等物理介质的持久性与现代数字下载和流媒体的易逝性。有人探讨了硬盘、SSD 甚至蓝光光盘作为个人备份介质的可靠性,但普遍认为技术手段难以完全解决公司撤回访问权限的问题,最终还是需要法律保障。
- 法律与技术手段的权衡: 讨论中出现了关于解决这个问题的最佳途径的讨论。一些人认为法律法规是唯一的出路,强制公司在停止服务时移除 DRM 或提供下载。另一些人则强调技术手段,比如支持开源软件和不依赖云服务的本地应用,以及个人进行数据备份的重要性。
- 平台使用的“讽刺”: 有少数观点指出,Louis Rossmann 在 YouTube 这个他并不拥有的中心化平台上宣布成立一个关于“所有权”的基金会,存在某种讽刺。然而,其他人反驳说,使用 YouTube 是为了最大化传播范围,这与争取产品所有权是不同的概念,而且 Louis Rossmann 也支持去中心化平台(如 Grayjay)。
- 个人经历的分享: 一些人分享了自己因产品无法维修或数字内容消失而遭受损失的经历,进一步印证了基金会所关注问题的普遍性和重要性。