为了运行十年前的代码,程序员们甚至翻出了一台 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 半路「杀出」。
▲ 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 是意大利的一名计算机物理学家,他在 1996 年用 Fortran 语言建模了一个超导装置,并用 Microsoft Visual Basic 来处理结果。二十多年过去,「Visual Basic 是一门死掉的语言,早就被 Visual Basic.NET 取代」,Maggi 只能在自己的 Mac 电脑上做了一个十年前的 Windows 虚拟机来尝试运行代码。好巧不巧,Windows 在 96 年发布的众多系统版本不向前兼容,导致 Maggi 的代码没能成功运行。
代码改变世界
不知不觉中,编程语言已经成为能影响世界发展轨迹的事物之一,和每个人的生活或多或少产生着各种关联,甚至可以说我们「生不离编程,活不离编程,死不离编程」—— 接生婴孩的医疗器械需要编程好操作软件,从小到老的方方面面都需要编程参与(例如微信、外卖等),延缓我们死亡的医疗系统也需要编程制作各种软件。
今年 3 月 25 日,不少用户发现用 iPhone 打开淘宝 app 时,会自动弹出一个对话框,提示用户 3 天后将无法使用淘宝 app,不少剁手党都担心以后不能愉快清空购物车了。事后,淘宝迅速发布了新版本,修复了这一 BUG。
不妨想象一下,如果 3 天后淘宝真的不能用了,我们个人乃至整个社会将会受到怎样的影响?如果某一天中午 12 点,所有的外卖 app 都不能使用了,又会出现什么样的局面?
作为构建虚拟社会的工具,代码实际是现实社会人性的折射。编程语言一直在那里,怎么用,终究要看我们自己。
路漫漫其修远兮,吾将上下而求索。
各位程序员同行们,一起加油,好吗?
小编的程序员编程学习基地【点击进入】!从零基础到高级软件开发工程师~
欢迎到访~
涉及:编程入门、游戏编程、windows编程、Linux编程、Qt、黑客等等......
为了运行十年前的代码,程序员们甚至翻出了一台 1977 年的 Apple II的更多相关文章
- 十年京东Java程序员的工作总结,写给迷茫中的你!
很多年前,刚刚从大学毕业的时候,很多公司来校招.其中最烂俗的一个面试问题是:“你希望你之后三到五年的发展是什么?”.我当时的标准回答是(原话):“成为在某一方面能够独当一面的技术专家“.后来经历了几家 ...
- 十面阿里 Java 程序员,最终拿下阿里 P6 offer!
转子:https://mp.weixin.qq.com/s/RkMxPbm8E99-rTZKmvBy6Q 今天介绍小编的一个朋友,他现今有四年开发经验了,前前后后为了进阿里面试十次(阿里旗下—蚂蚁金服 ...
- Hi Java!!!---来自十八岁的程序员随笔
9月23日我正式加入了程序员的行列,在哪以前我都不知道程序员到底是干嘛的,电脑对于我来说也不过是打打游戏,玩玩QQ.转眼间一个月了,我真正的喜欢上了这门行业,当自己写出一个程序的时候特别有成就感,哪怕 ...
- 一个在 .NET 一线战斗了十年的 C# 程序员的内心独白
这是我的一个内心独白,内容有点长,希望你能耐心地看完. 估计看到标题,大部分人都会说:哇!大牛!膜拜--之类的.至于是不是大牛,那我不知道,毕竟我依然有很多地方不懂,特别是现在已经流行的 Redis ...
- 程序员写的东西出了bug,造成了损失谁来承担?
这是个持续多年的话题了,很多大公司,尤其是牛逼的独立分包公司(开发公司)都会有代码审核和严格QA程序,一般的公司就很难说咯,在法律上目前还没有完全支持处罚程序员bug经济损失的判例(国内如此),国外也 ...
- 【G彩娱乐网】作为一名程序员,我应该如何选购一台电脑?
G彩娱乐网说到程序员专用电脑,那肯定是苹果电脑.优点有很多,比如白平衡特别准.酷炫的黑科技.特别方便的软件等显而易见的优势:也有能够增加提案通过率.专注工作提高工作效率这样的玄学buff. 但是!并不 ...
- 如何优化C语言代码(程序员必读)
1.选择合适的算法和数据结构 应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍.将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序 ...
- 【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)
结对信息.具体分工 Github地址:https://github.com/MokouTyan/131700101-031702425 学号 昵称 主要负责内容 博客地址 131700101 莫多 代 ...
- 十年Java开发程序员回答,自学Java,培训Java的利和弊
最近有一个朋友在群里面问我:是应该去培训Java还是应该自学Java,我想的说的是我并不是想给他一个去培训或者不去培训,我用自己多年对于行业的了解去分析这个问题,然后让他自己去思考,哪种更加适合他.他 ...
随机推荐
- 搭建MQTT学习平台
关于MQTT协议的介绍就不赘述了,网上资料非常多,直接入正题. MQTT协议的实现非常多,我选择了一个非常轻量级的开源项目来学习MQTT协议——mosquitto,官网:www.mosquitto.o ...
- Python 3 列表
列表:是可变的序列,也是一种可以存储各种数据类型的集合,用中括号([])表示列表的开始和结束,元素之间用逗号(,)分隔.列表中每个元素提供一个对应的下标. 1.列表的基本格式表示: 2.列表的不同数据 ...
- 第0课 - 搭建开发环境之安装QT
第0课 - 搭建开发环境之安装Qt 1. 课程学习的原材料 — Visual Studio 2010 — Qt SDK 4.7.4 — Qt Creator 2.4.1 2. Visual Studi ...
- 解决ExcelReport导出Excel报Number of rules must not exceed 3错误的问题
报错信息: Number of rules must not exceed 3 [ArgumentException: Number of rules must not exceed 3] NPOI. ...
- Centos 7 redis、tomcat、Spring Boot添加开机自启服务
一.redis添加开机自启 1.添加服务配置文件 [root@test system]# vim /etc/systemd/system/redis-server.service 2.服务配置文件内容 ...
- 在浏览器输入 URL 回车之后发生了什么(超详细版)
前言 这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了. 这篇笔记是我这两天看了数十篇文章总结出来的,所以相对 ...
- golang "%p"学习记录随笔
对于获取slice的指针地址, 通过unsafe.Pointer 和 "%p"占位符两种方式得到的地址是不同的 s := make([]int, 1) t.Log(unsafe.P ...
- python安装scrapy库失败
解决方法: 首先,下载Twisted.cp后数字为python版本,例如cp36为python3.6:amd则表示系统位数,例如amd64为64位.下载对应版本即可.点击打开链接 找到Twisted, ...
- Flutter音频播放--chewie_player的基本使用
发现网络似乎没有关于简单音频播放的插件介绍,这几天找了一下,结果也都不尽人意,最后也是debug一下chewie_player插件的官方demo 先上官方demo图 官方git地址:https://g ...
- Spring--AOP的见解
AOP是指面向切面编程,与JAVA中的动态代理有很深的渊源. 在使用Spring框架时,AOP编程能简化很多繁杂的步骤,精简代码. 切面:横切关注点(跨越程序中多个模块的功能),被模块化的特殊对象,也 ...