“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、黑客等等......

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/82423.html
標籤:C
