打开网易新闻 查看精彩图片

2009年,一个计算机系学生随手做了套入学测试题。16年后,原作者把它从报废的Flash文件里挖出来,用Rust写的模拟器重新跑通。结果他发现:题还是那些题,但现在的开发者反而更容易栽跟头。

不是因为题目变难了,是工具把坑藏得太深。

从.swf到浏览器:一场技术考古

从.swf到浏览器:一场技术考古

这套题当年用Adobe Flash(.swf格式)打包,现在主流浏览器早就拔掉了Flash插件支持。按常规思路,作者Milihwork得重写整套代码,把ActionScript翻译成JavaScript或者Vue组件。

他没这么干。Ruffle——一个用Rust语言写的Flash模拟器——让这份2009年的二进制文件直接在2025年的Chrome里跑了起来。模拟器接管了渲染和脚本执行,原作者甚至没碰一行旧代码。

这种"考古式复活"本身就在回答一道题:技术债务不一定非要偿还,有时候你可以绕过它。

但比技术路径更有趣的是题目内容。16道选择题,覆盖密码学基础、编程范式、计算机历史。作者把波斯尼亚语和英语双语版本都保留了,只翻译了题干和选项,菜单界面还是2009年的像素风。

你能在浏览器里直接玩:在线演示 | GitHub仓库

藏起来的复杂度,正在重新浮出水面

藏起来的复杂度,正在重新浮出水面

题目里有道典型的"陷阱题":面向对象编程的哪个特性不属于其定义?选项里混进了"函数式编程"的特征。2009年考这个,是怕学生把课堂概念记混;2025年考这个,是怕学生根本不知道有这些概念。

现代框架太擅长封装了。React的useState让你不用理解闭包也能写状态管理,Docker让你不用理解进程隔离也能部署服务,Copilot让你不用理解算法也能生成排序代码。工具把复杂度压进黑箱,效率确实上去了,但黑箱故障时你往往不知道往哪捅。

Milihwork在复盘里提了个观察:有些题目"今天 arguably 更重要"。比如Diffie-Hellman密钥交换算法——现在每当你连上HTTPS网站,浏览器和服务器就在后台跑这套1986年定型的协议。但问十个用Next.js全栈开发的工程师,可能有六个讲不清楚它防的是中间人攻击还是重放攻击。

再比如隐写术(Steganography)。2009年考这个像是冷门知识,现在每张AI生成的图片都可能嵌入了不可见水印,每个短视频平台都在用类似技术追踪泄露源。工具普及了应用场景,但没普及背后的原理。

工具越智能,人对底层假设的验证就越少。

那套题里埋着的时间胶囊

那套题里埋着的时间胶囊

有一道题问:C语言的前身是?答案是B语言。另一道问:Alexey Pajitnov从《俄罗斯方块》赚到的8亿美元里,本人拿到了多少?答案是零——苏联时期的知识产权归国家,他直到1996年才通过谈判拿到部分版权收入。

这些题不考技术能力,考的是对行业历史的体感。2009年的学生可能觉得无聊,2025年的开发者反而需要这种提醒:技术决策从来不只是技术决策,它牵扯法律、商业、政治。

Flash本身的命运就是例证。它曾经支撑了整个网页游戏和流媒体时代,2010年乔布斯那封《关于Flash的思考》公开信判了它死刑,理由是封闭、耗电、不安全。但Ruffle项目证明,技术遗产可以用新工具延续,不必非此即彼地推翻重来。

Milihwork的选择很有产品经理味道:用户要的是"能做题",不是"用原始技术做题"。模拟器方案比重写更快,风险更低,而且保留了那份2009年的交互质感——像素字体、渐变按钮、答错时的机械音效。

当"不会过时"成为稀缺品

当"不会过时"成为稀缺品

作者在文末写了句话,被Hacker News顶到最上面:"好的软件思维不会变老,变老的只有工具。"

这句话的微妙之处在于它的主语。不是说"知识不会变老"——知识当然会更新,Diffie-Hellman现在有了更安全的椭圆曲线变体。说的是"思维":怎么拆解问题,怎么建模数据,怎么在约束条件下做 trade-off。

这些能力很难被框架替代,因为框架本身就是某个特定 trade-off 的产物。React选了声明式UI和虚拟DOM,Svelte选了编译时优化,没有 universally better,只有 contextually appropriate。理解这一点,比记住useEffect的依赖数组规则重要得多。

那套2009年的题现在还在跑,用的却是2025年的浏览器。这个画面本身就像个隐喻:表层工具迭代得飞快,但底下的地层相对稳定。问题是你愿不愿意往下挖——或者说,你的日常工作给你留了多少往下挖的空间。

最后留个测试:那道题问C语言的前身,你第一反应是B语言,还是"C++"?