为了运行十年前的代码,程序员们甚至翻出了一台 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,我想的说的是我并不是想给他一个去培训或者不去培训,我用自己多年对于行业的了解去分析这个问题,然后让他自己去思考,哪种更加适合他.他 ...
随机推荐
- jmeter连接redis取数据
1.导入fastjson-1.2.2.jar.jedis-2.2.1.jar到 jmeter\lib\ext\ 下 2.新建BeanShell Sampler import com.alibaba.f ...
- pyhton:操作redis
一.redis介绍 redis是一种非关系型数据库:没有表结构,没有字段,没有sql语句.只是用get获取数据,set插数据,类似字典.比如mangodb,redis redis的数据全存在内存,re ...
- oracle之三rman 备份
rman 备份 7.1 归档方式下rman备份常用语法: 7.1.1 backup 备份 1)备份全库:1.1 RMAN> backup database format='/u01/myrman ...
- SDWebImageInfo
SDWebImage 简介 iOS中著名的牛逼的网络图片处理框架 包含的功能:图片下载.图片缓存.下载进度监听.gif处理等等 用法极其简单,功能十分强大,大大提高了网络图片的处理效率 国内超过90% ...
- CSDN博客图片水印自定义及去除方法
小图上传说明 尺寸较小的图片上传后默认不加水印,而且默认水平居中显示.你可以更改markdown格式后面的#pic_center,这是设置图片水平对齐的方式.#pic_left就是左对齐,#pic_r ...
- 数据库分表分区后的ID生成之雪花生成
转自https://www.cnblogs.com/jajian/p/11101213.html 传统的单体架构的时候,我们基本是单库然后业务单表的结构.每个业务表的ID一般我们都是从1增,通过AUT ...
- solr综合案例
1. 综合案例 1.1. 需求 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能. 界面如下: 1.2分析 开发人员需要的 ...
- BurpSuite抓取本地包方法
本文重点在介绍抓本地包, 而非介绍抓包步骤 Burpsuite配置 默认配置即可 Chrome 浏览器配置 Falcon Proxy扩展程序配置浏览器代理. 需要抓包的网页是个本地搭建的网址, 一般会 ...
- MySQL手注之盲注(布尔)
布尔注入: 当我们在注入的过程中输入的语句在页面没有数据返回点,这就需要利用布尔型盲注一步步来猜取想要的数据.(盲注分为布尔盲注和时间盲注) 盲注常用函数: length() 返回字符串的长度, 可 ...
- 图片压缩工具pngquant
关于图片压缩的,之前看到一个imageOptim,用着不错,也挺好用的,直接打开要压缩的图片或者文件夹,唰唰唰的就开始压缩了,如下图 后来觉得不是很方面,还要打开软件,选择文件夹,然后就又研究了一下, ...