「Hello, World!」前端
46 年過去,這段被世人熟知的代碼仍散發着歷久彌新的魅力,和它一塊兒登場的 C 語言,現在也成長爲世界幾大通行編程語言之一,爲互聯網世界乃至現實世界都編織着更美好的將來。程序員
爲了回顧和記念編程史,GitHub 上的計算機神經科學家 Nicolas Rougier 和理論生物物理學家 Konrad Hinsen 共同發起了一項 Ten Years Reproducibility Challenge(十年代碼挑戰)活動,鼓勵你們找出本身十年前或更早的代碼,看看這些代碼如今還能不能運行,代碼相關的研究能不能復現。算法
目前,活動頁面上已經有幾十名參與者提交了十多年前的代碼,這些代碼在當年看來算得上高新前沿技術,但如今很多被當事人打上了「運行可能性低」的標籤。這在咱們行外人看來很難理解,編程的字母和符號沒變,爲何就不能運行了呢?編程
以前流行一句玩笑話,說「寫 C 語言的看不起寫 C++ 的,寫 C++ 的看不起寫 Java 的,寫 Java 的看不起寫 C# 的,最後你們一塊兒看不起寫 PHP 的」。windows
一句玩笑話,充分說明了編程語言的變化。微信
TIOBE(編程語言排行榜單)公佈了近 20 年的編程語言排行變化趨勢圖,整體來看,Java 和 C 語言仍然佔據老大老二的位置,Python 異軍突起,PHP、C++、C#持續走低,SQL「起死回生」,Swift 半路「殺出」。app
▲ 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」在當年的軟硬件載體上,如今還能找獲得這些軟硬件嗎?
前文提到的 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、黑客等等......