|为了运行十年前的代码,他们翻出了1977年的Apple II
“Hello, World!”
46 年过去 , 这段被世人熟知的代码仍散发着历久弥新的魅力 , 和它一起登场的 C 语言 , 如今也成长为世界几大通行编程语言之一 , 为互联网世界乃至现实世界都编织着更美好的未来 。
为了回顾和纪念编程史 , GitHub 上的计算机神经科学家 Nicolas Rougier 和理论生物物理学家 Konrad Hinsen 共同发起了一项 Ten Years Reproducibility Challenge(十年代码挑战)活动 , 鼓励大家找出自己十年前或更早的代码 , 看看这些代码现在还能不能运行 , 代码相关的研究能不能复现 。
本文插图
目前 , 活动页面上已经有几十名参与者提交了十多年前的代码 , 这些代码在当年看来算得上高新前沿技术 , 但现在不少被当事人打上了「运行可能性低」的标签 。 这在我们行外人看来很难理解 , 编程的字母和符号没变 , 为什么就不能运行了呢?
十多年 , 首先变的是编程语言和工具
之前流行一句玩笑话 , 说「写 C 语言的看不起写 C++ 的 , 写 C++ 的看不起写 Java 的 , 写 Java 的看不起写 C# 的 , 最后大家一起看不起写 PHP 的」 。
一句玩笑话 , 充分说明了编程语言的变化 。
TIOBE(编程语言排行榜单)公布了近 20 年的编程语言排行变化趋势图 , 总体来看 , Java 和 C 语言仍然占据老大老二的位置 , Python 异军突起 , PHP、C++、C# 持续走低 , SQL「起死回生」 , Swift 半路「杀出」 。
本文插图
【|为了运行十年前的代码,他们翻出了1977年的Apple II】▲ 2002 年到 2020 年编程语言趋势图 。 图片来自:TIOBE
工具的变化往往和编程语言的变化是同步的 。
2009 年 , Spring 需要若干 XML 配置和 Java 文件 , 而 2019 年只需要一个 Java/Kotlin 文件就可以 。 十年前前端只有 Plain Old Javascript、jQuery、ExtJS 可选 , 而如今就有二十多个选项 。
本文插图
▲ 工具的变化
本文插图
▲ 可选性大大提升
「唯一没大变的 , 可能就是算法了吧?」国外一位程序员小哥说 , 十年前的 Statistics(统计) , 到了十年后摇身一变成了 Machine Learning(机器学习) , 可是算法公式还是一样的 。
先问在不在 , 再问能不能「run」
本文插图
▲ 全球最大的程序员「交友」及代码托管平台 , 2008 年才上线
要想知道十年前的代码还能不能「run」起来 , 首先必须能找到十年前的代码 —— 这也是「十年代码挑战」虽然在圈内引起不少关注但截至目前参与者不多的原因之一 。
知名的项目托管平台 GitHub 2008 年 4 月才上线 , 很多人更是在 2012 年后才开始使用它托管代码 , 在此之前的代码大多以论文、杂志期刊等形式保存 , 因此遗失了不少 。
例如 , 法国国家信息与自动化研究所的计算机科学家 Roberto DiCosmo 在 1998 年发布了一篇论文 , 写了一个名为「OcamlP3l」的并行编程系统 , 但找遍自己和合著者的硬盘以及备份 , 他也没能找到代码 , 最后机缘巧合才在一个代码抓取网站找到当年的代码 。
还有一位参与活动的 Rougier, 他的代码发表在 32 年前的杂志《Tremplin Micro》上 , 这家杂志出版商早已消失在历史的长河中 , 如果没有其它备份途径又找不到当年的杂志 , 这份代码相当于在编程历史上从未存在过 。
很难想象 , 作为互联网的产物 , 代码也会因为新老时代存储容器革新的问题而遗失 , 这是「十年代码挑战」给编程圈带来的第一个现实意义 , 如何妥善保管之前的代码是值得考虑的事情 。
你「run」凭你「run」 , 没当年的软硬件也白搭
找到当年的代码后 , 别高兴得太早 , 第二个问题来了 , 相当一部分代码是「run」在当年的软硬件载体上 , 现在还能找得到这些软硬件吗?
前文提到的 Rougier 就遇到了这样的问题 , 32 年前 1988 年他才 16 岁 , 给 Apple II 电脑(1977 年 - 1993 年)写了一个图像放大器的程序代码 , 是截至目前「十年代码挑战」活动中最古老的代码 。
本文插图
▲ Apple II
还好 Rougier 的同事在清理办公室时抢救出了一台 Apple II, 这台「老古董」可不好「伺候」 , 它的老式磁盘无法和现在的计算机连接 , 代码的运行也就成了大难题 。 最终 Rougier 在亚马逊上淘到了 1993 年的老式磁盘 , 写入了三次数据才「盘活」磁盘 , 有了运行代码的必要硬件基础 。
遇到类似问题的人不少 , 比如活动的发起者 Hinsen 说 , 他在 90 年代写的代码都保存在软盘里 , 现在找不到读取相应软盘的的工具了 。
本文插图
▲ 系统也会影响老旧代码的运行 。 图片来自:Sabino Maggi
另外 , 系统环境也很重要 。
Sabino Maggi 是意大利的一名计算机物理学家 , 他在 1996 年用 Fortran 语言建模了一个超导装置 , 并用 Microsoft Visual Basic 来处理结果 。 二十多年过去 , 「Visual Basic 是一门死掉的语言 , 早就被 Visual Basic.NET 取代」 , Maggi 只能在自己的 Mac 电脑上做了一个十年前的 Windows 虚拟机来尝试运行代码 。 好巧不巧 , Windows 在 96 年发布的众多系统版本不向前兼容 , 导致 Maggi 的代码没能成功运行 。
人家 9 岁写的代码还能运行 , 9 岁的我却在玩泥巴
本文插图
▲ 十年代码挑战网页第一个提交的代码
「When I was 9 I tried to heal a trees broken branch with grass.」(当我 9 岁的时候 , 我试图用草来治疗一棵树的断枝 。 )
一位年轻的小哥在 YouTube 上说自己 9 岁写的代码还能运行 , 一位用户发布了上面这样的评论 , 获得了 6363 个赞 。
这次参与「十年代码挑战」的代码都是什么样的呢?
爱范儿进入 GitHub 上的活动页面 , 发现这些代码和我们预想的不太一样 , 相当一部分是和科学研究有关的 , 和大众衣食住行的直接关联性较低 。
比如第一个参与人 John (EBo) David 提交的代码 , 写于 22 年前 , 名为「The behavior of landscape metrics commonly used in the study of habitat fragmentation」(常用于生境破碎化研究的景观度量的行为) 。
还有的代码涉及物理和数学研究领域 , 像「fermions at unitarity(统一的费米子)」、「Poincaré dodecahedral space parameter estimates(庞加莱十二面体空间参数估计值)」等 。
「Typographical features for scene text recognition(场景文字识别的印刷功能)」、「Effects of fire on regional evapotranspiration in the central Canadian boreal forest(火对加拿大中部北方森林中区域蒸散的影响)」算是和普通人关联度比较高的了 。
本文插图
▲ 十五年前有关心血管疾病研究的代码
能让我们感觉到有一点「现代互联网」的代码也有一些 , 例如「Accuracy Study and Improvement of Network Simulation in the SimGrid Framework(SimGrid 框架中网络仿真的准确性研究和改进)」让我们联想到了近几年大火的「AI」 , 而这份代码实际发布于 2009 年 。
基因学、神经学、计算机学、生物学、物理学、数学等都有涉及 。
「十年代码挑战」页面参与活动的代码之所以和想象中「软件开发」代码有所不同 , 我们推测可能有两个原因 。
第一 , 得益于完善的论文制度 , 很多和论文相关或发布了论文的代码都得到了良好的保存 , 只有保存下来的代码才有可能参与这次活动 。 第二 , 十多年前无论是电脑还是编程技术都不像现在那么普及 , 电脑和代码的运用更多集中在高精尖领域 。
备注:以上翻译均来自谷歌
代码改变世界
本文插图
不知不觉中 , 编程语言已经成为能影响世界发展轨迹的事物之一 , 和每个人的生活或多或少产生着各种关联 , 甚至可以说我们「生不离编程 , 活不离编程 , 死不离编程」—— 接生婴孩的医疗器械需要编程好操作软件 , 从小到老的方方面面都需要编程参与(例如微信、外卖等) , 延缓我们死亡的医疗系统也需要编程制作各种软件 。
今年 3 月 25 日 , 不少用户发现用 iPhone 打开淘宝 app 时 , 会自动弹出一个对话框 , 提示用户 3 天后将无法使用淘宝 app , 不少剁手党都担心以后不能愉快清空购物车了 。 事后 , 淘宝迅速发布了新版本 , 修复了这一 BUG 。
不妨想象一下 , 如果 3 天后淘宝真的不能用了 , 我们个人乃至整个社会将会受到怎样的影响?如果某一天中午 12 点 , 所有的外卖 app 都不能使用了 , 又会出现什么样的局面?
代码在改变世界的同时 , 也带来了很多新的问题 , 最引人关注的就是个人数据和隐私问题 。
前不久 , 小米的 MIUI 12 测试版上线 , 新推出了「照明弹」功能 , 许多 app「原形毕露」 , 原来在用户不知情的时候 , 有的 app 甚至每日悄悄读取用户的隐私信息高达上千次 , 除了必要的关联唤醒行为 , app 那些不必要的「小动作」 , 究竟是什么样的代码在背后驱动?护卫我们隐私的 MIUI 12 照明弹的代码 , 又是谁替我们写的?
本文插图
▲ MIUI 12 展示的照明弹功能
9 月 3 日 , 苏州「苏城码」app 上线「苏城文明码」功能 , 该功能旨在构筑起文明积分信息识别体系 , 形成市民文明程度「个性画像」 , 文明积分等级高的市民将会享受工作、生活、就业、学习、娱乐的优先和便利 , 引起了大众的广泛讨论 , 不少人认为「文明」的标准不够客观 , 「不文明」的惩罚也容易被技术左右 。 ***专门发表了点评 —— 是否遵循了程序正义 , 是否突破了依法行政的「红线」 。
还有 , 当我们在手机上输入了一些商品关键词被云同步或被 app 读取剪切板后 , 第二天在购物 app 显要位置就能看到相似商品 , 不知这个功能是谁写下的代码?
作为构建虚拟社会的工具 , 代码实际是现实社会人性的折射 。 编程语言一直在那里 , 怎么用 , 终究要看我们自己 。
推荐阅读
- 这早餐我从3岁开始吃,三十多年了,从没吃腻过,晶莹剔透很好吃
- 天冷了,怎能不吃此菜?十分钟就上桌,香辣可口还美味,贼香
- 炖猪肉时,牢记“3不放”,肉烂味鲜无腥味,香味十足!
- 七种蔬菜自带“有害物质”,食用前要焯水,为了健康别图省事
- 南瓜不要煮粥了, 教你做面皮, 比凉皮还简单, 筋道十足又好吃
- 香味十足的几道家常菜,美味营养,解馋下饭,大人孩子都爱吃
- 几道香味十足的家常菜,色香味俱全,简单美味,让家人吃的过瘾
- 一家三口早餐,用了30分钟,营养十几种,网友:比我家午餐都丰盛
- 几道超级美味的下饭菜,做法简单还营养十足,上桌大家都夸你!
- 几道简单好吃的家常美食,好吃又好看,鲜香十足,很受大家的欢迎
