
Sign up to save your podcasts
Or

欢迎来到 Hacker News 每日播报,今天我们将带您回顾苹果的黄金时代,探索 LLM 的前沿进展,重温网页开发的怀旧瞬间,深入数学与工程的交汇点,并关注软件所有权与效率的未来。
一篇来自 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 浪潮可能预示着一个新的充满可能性的时代。
今天我们要聊的是 Simon Willison 在 AI Engineer World’s Fair 上的一次精彩演讲,主题是“过去六个月的 LLM 进展,用骑自行车的鹈鹕来图解”。
这篇文章基于 Simon Willison 的演讲,回顾了从 2024 年 12 月到 2025 年 5 月这六个月里大型语言模型(LLMs)领域的爆炸性发展。作者通过一个非传统的、略带戏谑的基准测试——让 LLM 生成“一只骑自行车的鹈鹕”的 SVG 代码——来生动地展示不同模型的进步和特点。同时,文章也深入探讨了这段时间内的重要模型发布、模型能力的演进(特别是工具使用和推理能力)、令人啼笑皆非的系统 Bug,以及日益凸显的安全风险。
Simon Willison 指出,LLM 领域的发展速度快到惊人,原本计划回顾一年的内容,最终不得不缩减到六个月,因为这段时间涌现了超过 30 个值得关注的模型。面对众多模型和传统基准测试的局限性,他提出了自己的“骑自行车的鹈鹕”基准。这个测试之所以有趣且有效,是因为它要求文本模型生成代码(SVG),同时任务本身具有不合理性(鹈鹕骑自行车)和视觉复杂性(自行车和鹈鹕都不好画),这能很好地揭示模型的理解和生成能力。模型的输出通常包含 SVG 注释,能帮助理解它们的“意图”。
文章按时间线回顾了几个关键发布:
为了客观评估鹈鹕画作,作者利用 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 滤镜,认为它降低了创作门槛,带来了新的创意可能性。
鹈鹕基准的有效性与局限性:
模型 Bug 与安全风险: 大家对 sycophancy Bug 和 SnitchBench 表现出兴趣。关于模型记忆和工具使用的安全担忧得到了共鸣,特别是“致命三要素”和模型在代理模式下可能执行危险操作(如删除文件或发送敏感信息)的风险,被认为是随着上下文窗口增大和工具能力增强而日益严重的问题。
对作者的赞赏: 多位用户表达了对 Simon Willison 工作的高度评价,认为他的文章和工具非常有用,他探索 LLM 的方式充满乐趣和启发性。
今天我们要聊聊一段充满回忆、有时甚至有点辣眼睛的网页开发史:HTML 中的 和 标签。
这篇文章来自 danq.me,作者 Dan Q 偶然发现年轻一代的开发者竟然不知道这些标签,于是决定带大家回顾一下这段历史。
文章首先介绍了 标签。它通常被认为是 Netscape 浏览器在 1995 年发布的 Navigator 2.0 中引入的。虽然发明者 Lou Montulli 声称自己只是开玩笑提议,但这个能让文字闪烁的标签还是被实现了。尽管 HTML4 规范后来将其记录为“玩笑”,但在 90 年代末,它被广泛用于强调内容,比如“最新更新”标题,效果嘛,通常是相当刺眼。
紧接着,文章提到了微软的 Internet Explorer 2.0,同样在 1995 年发布。IE 团队显然没有把 当成玩笑,而是推出了自己的创新: 标签。这个标签功能更丰富,可以通过属性控制文字的滚动方向、速度、循环方式等。作者辛辣地评论说,如果说 是无意中导致了糟糕和难以访问的设计,那么 就是有意为之。
文章最有意思的部分在于,它揭示了当时开发者为了兼容不同浏览器(主要是 Netscape 和 IE)的一种“黑科技”:将 嵌套在 中,或者反过来。这样,Netscape 用户会看到闪烁的文字,而 IE 用户会看到滚动的文字。这体现了当时网页开发遵循的“健壮性原则”(Postel's Law):浏览器应该尽量理解并渲染它看到的内容,即使不完全符合规范。这种做法在某种程度上也是一种早期的“渐进增强”——核心内容对所有浏览器都可读,而动画效果则根据浏览器支持情况呈现。
然而,当 Netscape 7 在 2002 年发布,并且竟然同时支持这两个标签时,嵌套使用就导致了最糟糕的效果:文字既闪烁又滚动,简直是视觉灾难。
文章最后指出, 标签现在已经彻底死亡(谢天谢地!),尽管可以用 CSS 动画模拟。而令人惊讶的是, 标签至今在某些现代浏览器中仍然原生支持,尽管强烈不建议使用。作者认为,虽然这些标签代表了数字怀旧的一部分,但我们不应该再把 强加给用户。
社区对这段历史的回忆和讨论非常热烈,充满了过来人的共鸣和对早期网页开发的吐槽。
许多人表示“我当时就在”,并分享了他们那个时代的网页开发经历。除了 和 ,大家回忆最多的一个话题是 HTML 框架(Frames)。有人认为框架在当时有其合理性,比如用于固定的导航栏和可滚动的内容区域。但更多人则列举了框架的各种问题:难以适应不同屏幕尺寸(非响应式)、无法为特定内容生成唯一的 URL(破坏书签和分享)、右键在新窗口打开链接会丢失框架集、多余的滚动条、以及被滥用于在第三方内容上叠加导航和广告(用户体验差且有安全隐患)。这场关于框架的讨论甚至引申到现代的单页应用(SPA)有时也会破坏浏览器历史记录和链接性,表明一些基本的用户体验问题在不同技术时代以不同形式出现。
社区还提到了许多其他那个时代的网页技术和工具,勾起了大家的集体回忆:
一些人从技术角度分析了这些老标签的“妙用”或遗留:
整个社区弥漫着一种对早期互联网“狂野西部”时代的怀旧情绪,开发者们在技术限制下发挥创意,虽然结果有时很糟糕,但也充满了探索和乐趣。同时,大家也对比了今昔,有人认为现代网页开发过于复杂,怀念过去简单的 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 提出了建设性反馈,建议展示逼近误差而非积分值本身,并指出图中对数坐标轴的使用效果不佳。
这期节目,我们来聊聊 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 环境也很常见。
这是一个重要的讨论点。有观点指出,很多公司虽然使用 PyTorch 或 TensorFlow 等依赖 CUDA 的高级框架,但直接进行底层 CUDA 开发的需求可能集中在特定领域,例如 AI 基础设施、图形学、科学计算、高性能数据库或像地理空间数据处理这样需要定制高性能计算的场景。有人认为,如果目标是机器学习模型开发,可能更应该专注于 PyTorch/TensorFlow 等框架,而不是直接写 CUDA 内核,除非是为了极致性能优化。但也有人反驳说,需要 CUDA 经验的岗位往往就是因为高级框架无法满足性能需求。还有观点指出,达到“专业水平”最终需要在实际工作中积累经验,独立学习是敲门砖,但人脉关系在求职中也扮演重要角色。
今天我们来聊聊 Hacker News 上一个关于城市交通创新的话题:考文垂的“超轻型轨道交通”(Coventry Very Light Rail,简称 CVLR)。
这篇文章来自考文垂市政府的网站,介绍了他们正在推进的一个新型轨道交通项目。顾名思义,这个项目的核心在于一个“轻”字,旨在提供一种比传统轻轨或有轨电车成本更低、建设更便捷的城市交通解决方案。
文章的要点主要集中在 CVLR 的几个创新之处:
社区的讨论非常热烈,从技术细节到城市规划,再到项目管理和成本比较,展现了多样化的视角。
首先,关于 “超轻”的特点,大家深入探讨了其技术实现和意义。普遍认为,浅层轨道(30cm)是降低成本和建设难度的关键创新,因为它避免了昂贵的地下管线迁移。然而,也有人担忧,未来这些地下管线达到使用寿命需要更换时,是否会反过来影响这条新铺设的轨道。关于 15 米的转弯半径,一些人指出,这虽然很紧凑,但并非史无前例,旧金山等地的有轨电车系统也有类似甚至更小的转弯半径。但支持者强调,CVLR 的创新在于能在混合交通中、甚至在环岛内以这种半径行驶,并且车辆是双向的,无需掉头环线。
其次,关于 电池供电与架空线 的权衡,引发了讨论。有人认为电池是未来的方向,消除了架空线的视觉障碍。但也有观点指出,从长期效率和可持续性来看,架空线直接供电更优,无需考虑电池的制造、更换成本和能量损耗。电池的优势可能在于初期建设成本低和灵活性。
第三,很多人将 CVLR 与 传统有轨电车和公交车 进行了比较。CVLR 56人的容量被一些人认为太小,质疑其在高客流量路线上的效率,认为传统有轨电车或铰接式公交车能承载更多乘客。这引出了关于“容量”与“频率”的讨论:如果能实现极高的发车频率(例如每几分钟一班),小容量车辆也能满足需求。但也有人质疑,在混合交通中能否真正实现如此高的频率。
关于 公交车与轨道交通 的优劣,大家各抒己见。有人认为,如果能为公交车提供完全独立的专用车道(Bus Rapid Transit, BRT),其运力和服务水平可以与轻轨媲美,且更灵活、初期成本更低。但另一些人反驳说,政府往往难以保证公交专用道的完全隔离和永久性,容易受到政治干预而被取消或被其他车辆占用,而轨道一旦铺设,就具有更高的“政治永久性”,更能吸引沿线开发和居民依赖。此外,还有人提到轨道交通通常比在普通路面上行驶的公交车更平稳舒适,减少路面磨损,以及轮胎磨损产生的空气污染物。
最后,讨论也触及了 项目管理和成本 问题。有人引用了英国其他轨道项目(如爱丁堡有轨电车)因地下管线迁移导致成本飙升的例子,认为 CVLR 的浅层轨道设计正是吸取了这些教训。但也有观点指出,英国基础设施项目普遍成本高昂,部分原因在于总是尝试创新而非复制成熟方案。有人将 CVLR 的成本与欧洲大陆的传统有轨电车项目进行了比较,质疑其是否真的能实现预期的成本优势。
今天我们来聊聊一篇来自 diwank.space 的文章,标题是《Field Notes from Shipping Real Code with Claude》。这篇文章深入探讨了在实际软件开发中使用 AI 助手 Claude 的经验和心得,旨在提供一套实用的方法论,帮助开发者真正利用 AI 提升效率,而不是制造混乱。
文章开篇就指出,AI 辅助开发,或者作者借用 Andrej Karpathy 的说法“vibe coding”,并非只是一个轻松的“氛围”概念,而是一种需要纪律和结构的新工作方式。作者强调,要实现传说中的 10 倍生产力提升,关键在于放大 AI 的优势,同时弥补其不足。这需要有意识的实践,而不是简单地让 AI 自由发挥。
文章的核心内容围绕几个关键点展开:
首先,作者提出了 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),并建议通过将任务分解成更小的、可估量的步骤来提高估时准确性。
今天,我们来聊聊一个为 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 最近宣布成立了一个新的基金会,旨在“带回所有权”。
这篇 Hacker News 文章链接到 Louis Rossmann 的一个 YouTube 视频,视频中他宣布成立了一个名为 FULU Foundation(Freedom from Unethical Limitations on Users,即“摆脱对用户不道德限制的自由”)的非营利组织。这个基金会的核心目标是倡导和争取消费者对其购买的产品拥有真正的所有权,对抗制造商通过各种手段限制用户维修、修改或完全控制自己设备的趋势。这包括但不限于“维修权”(Right to Repair)运动,还延伸到数字内容和软件的许可模式问题。
虽然我们没有视频的完整文字稿,但结合 Louis Rossmann 一贯的立场和视频标题,可以推断出基金会的主要关注点:
社区对这一消息反应热烈,展现了多方面的观点:
相关链接:
The podcast currently has 291 episodes available.