?

奇迹赌场

-->
大數據的發展,伴隨的將是軟件工程師的漸退,算法工程師的崛起
Cathal Horan 译者 薛命灯 2017-05-16 中国大数据

大数据在人类历史长河的各个时期一直存在着,只是要等到技术发展到一定阶段,它才开始崭露头角。而它的未来又在哪里?来自 Intercom 的工程师 Cathal Horan 表达了他对大数据的看法,他认为,未来属于算法,而不是代码。以下内容翻译自 Cathal 在 hackernoon 网站发表的博文,已获得翻译授权。原文链接:The future is algorithms, not code。

大数据

“大數據時代”的稱號並不能爲當今世界所獨享,數據充斥著人類文明曆史長河的各個時期。縱觀這些曆史時期,通過從離散到抽象的轉換,我們就會明白爲什麽算法比代碼重要。

說到大數據……

如果我們把整個人類曆史看成一天,那麽我們只能從晚上11點7分開始說起。這是安靜的一天。但是在隨後的一丁點時間裏,我們積攢了很多知識和故事,並打算將它們傳達給其他人。你可以想象最開始人類通過對話的形式將知識代代相傳,從父輩傳給子輩,從老師傳給學生。但是整個社會的知識量增長迅速,以至于最初的對話形式無法傳達這麽多的信息。

我們需要將這些信息編撰成冊進行保存和傳播。通過書寫的方式將知識編撰成冊代表著這些時期在技術上的重大轉變。事實上,蘇格拉底(柏拉圖“斐德羅篇”裏的角色)認爲這種技術轉變比不上最初的對話形式,擔心它會降低我們開發智慧和知識的能力。所以很自然地,我不認爲蘇格拉底會喜歡電視。

問題的核心是,對話代表了一種離散的溝通手段。你知道你的交談對象是誰,而且參與對話的人通過論證和反證的方式進行直接的互動。反過來,書本是一種抽象的溝通手段,作者和讀者之間不存在直接的互動。作者並不知道誰讀了他的書,也不知道有多少人、在什麽時候、在哪裏讀了他的書。有時候,我們可能知道潛在的讀者群體是誰,然後根據讀者群體進行內容裁剪。不過大多數時候,書本都只是一種抽象的傳播知識和學習新技能的手段。

等腰三角形的大數據

當我們從簡單的計算形式轉變爲由定理、符號和算法組成的抽象形式(我們現在稱其爲數學),就開啓了另一個大數據時代。第一批有記載的計算發生在公元前2500年的美索不達米亞。當時,美索不達米亞人需要計算出一谷倉的糧食能夠養活多少人。

美索不達米亞人有具體的問題關注點,他們很清楚需要解決的問題是什麽。他們的計算都是很離散的,因爲每一次計算只能解決一個問題。這也就是爲什麽評論家們認爲它們不是數學。直到公元前500年的古希臘,畢達哥拉斯學者們(可以把他們認爲是早期的Google使用者,哈哈)開始針對三角形提出了一些奇怪的問題。比如,他們想知道等腰直角三角形的三個邊能否都是整數(這聽起來像不像一個Google風格的面試題?)。

如果你想通過離散的方式來解答這個問題,那麽可以像美索不達米亞人那樣做。不過,隨著數字的增加,這種方式會顯得很笨重。要證明這個假設,你需要進行多少次計算(其實這個假設是錯誤的,三個邊不可能都是整數)?等腰三角形問題的不同之處在于,它不存在具體的關注點。我們不知道三角形的大小,也不知道它們的邊長,而且它們的大小可能是無限的。如果我們在數字上應用推理,那麽就進入了數學領域,大數據也就接踵而至。畢達哥拉斯式的思維方式體現了數學的抽象特征,在今天,我們使用符號、規則和推理來解答這類抽象的問題。

或許你想知道人類曆史上的其他大數據時期,不過我想直接跳到20世紀,看看代碼如何成爲現代技術領域的重要組成部分(如果你有其他大數據時期的資料,可以聯系我@cathalhoran,我相信它們會很有趣)。

代碼的崛起

1945年,当Grace Hopper开始在 Harvard Mark I计算机上工作时,编码(或者说编程,不过我们不打算在这里区分它们有什么不同)这项工作的重要性就开始凸显出来。在这之前,电脑(如果可以这么叫它的话)充其量只是个计算工具。以二战为例,当时的大炮需要借助矩阵进行辅助瞄准。矩阵是一些方程式的计算结果,这些方程式使用数百种不同的计算因子,比如距离、海拔、风速、温度、湿度,等等。电脑(computer)这个名字的由来也是很偶然的,人们用它描述在二战中操作计算机的女性,她们被称为“computer”。操作员们必须使用打孔卡和曲柄来处理方程式。一个打孔卡需要170个人月才能完成。

這個與我們之前討論的事情有什麽相似之處?美索不達米亞人使用黏土矩陣來進行計算,而到了20世紀,計算媒介變成了編碼。雖然已經有了長足的進步,不過編碼仍然是一種離散的操作,因爲它執行的是具體的計算任務,只是效率上有所提升而已。編碼解放了人工操作,讓我們可以處理更多的數據。

算法與代碼算法:一系列用于描述一個問題解決方案的步驟,符合正確性和有限性的標准。是與具體實現相互獨立的抽象計算步驟。代碼:一系列計算機指令。它們是計算的具體實現,使用一種特定的編程語言,運行在一個特定的平台上。

人们可以借助这种直接向计算机发送编码指令的方式来实现更为复杂的指令序列,并以算法的形式呈现出来。算法比编码的出现要早得多。穆斯林数学家Al-Khawarizm奇迹赌场平台公元820 年就对解决线性方程和二次方程式的算法进行了描述。算法一词来源于这位数学家的拉丁文名字“Algoritmi”,而“algebra”则来源于“al-jabr”,Al-Khawarizm 用它来解决二次方程式问题。算法由一系列有限的计算或指令组成,并产生一个结果。正如我们所知道的那样,代码是向计算机发出指令的一种方式,很适合用于实现算法。它们只不过是一系列按照一定次序执行的操作。

與早期的大數據時期一樣,我們這個時代的信息量也在增長。根據摩爾定律,我們在編碼的設計和使用方面所作的改進換來了性能的提升,從而能夠應付不斷增長的數字化需求。你可以繼續編寫代碼從數據庫查詢相關的資源列表。這些操作的離散特征仍然被保留了下來,因爲人們仍然在通過編寫代碼告訴硬件應該做哪些事情。就算操作變得越來越複雜,它仍然只是人類的編碼指令。不過,算法已經開始展露頭角,正在創造一個抽象的新時代。

算法的崛起

所以說,算法和代碼之間有很大的不同。代碼可以用來實現算法,而且代碼的實現方式會影響到性能。例如,如果你要從一個序列裏找出最大或最小的元素,那麽二叉堆的性能相比其他的數據結構要好很多。不過,你已經沒有必要通過編寫代碼來實現一個算法,就像沒有必要通過聽音樂來寫歌一樣。

雖然每個人都知道摩爾定律的魔力,驅動數字經濟發展的性能改進遵循的就是摩爾定律,但鮮有人知道,在很多領域,算法所産生的性能改進已經超過了硬件所帶來的性能提升。實際上,2010年的一份官方報告表明,算法已經爲很多領域帶來了顯著的性能提升,比如語音識別、神經語言處理和物流。

“更加令人感到吃驚但同時又令人難以理解的是,在很多領域,算法爲性能帶來的提升已經遠遠超過了處理器速度提升所帶來的性能改進。”——面向總統和國會的報告:設計數字的未來抽象算法

我們現在擁有大量的數據,這意味著我們不能再用離散的思維來思考問題。大數據促使我們轉變思維。它促使我們向後退一步,去尋找能夠處理數據洪流的方法。按照傳統的方式,你可能會根據一些指定的模式或參數編寫代碼來查詢數據。例如,你可能想從數據庫中查找在過去兩周買過2件商品並且支付超過30歐元的顧客,因爲你想聯系到這些顧客,並向他們推薦一些優惠活動。你使用這個模式來查找匹配的數據。不過大數據卻正好相反,你先有了數據,然後查找可以匹配這些數據的模式。

想想看,有這麽多的數據,但是我們卻找不到匹配的模式,所以我們要回退一步。我們通過集群、分類、機器學習和其他新的支撐技術來尋找模式,而能夠幫助我們做到這點的是算法,不是代碼。要找到隱藏在暗處的模式,跨出這一步是必需的。與光譜一樣,有一些波長的光線我們是看不到的,而超過一定數據量之後的模式我們也是看不到的,它就是大數據。

我们不仅可以从中搜索到模式,它还能够生成做这些事情所需要的代码。Pedro Domingos 在“The Master Algorithm”一书中描述了如何使用“学习者算法”来创建新的算法,这些算法可以反过来为我们编写我们所需要的代码,“通过机器学习,计算机可以自己编程,我们就可以解放了”。为了实现这个目标,我们需要更好地理解这些算法的原理,以及如何让它们与我们的需求相匹配。否则,我们就无法向抽象转变。

“工业的发展让手工劳动自动化,信息的发展让脑力劳动自动化,而机器学习则让它自己自动化。如果没有机器学习,程序员就会成为发展瓶颈。而有了机器学习,发展的速度就会加快。”——Pedro Domingos,“The Master Algorithm”思考算法

不过,不管如何从离散转变成抽象,我们仍然需要程序员,但这不是重点。并不是说代码已经变得不重要了,也不是说代码就不会再带来任何改进。重点在于,我们要开始思考算法,这不仅仅是数学家或学者的事情。我们周边充斥着各种算法,以致于我们不需要知道如何编写代码来使用它们,或者理解它们。现在,有一些人通过新的算法对不同的领域进行优化和改进,他们使用了遗传编程(genetic programming)和大数据技术。人们甚至创造了更好的优化技术,他们观察金属的冷却过程,并通过算法对其进行建模(被称为模拟退火算法,这就是我们应该从算法角度开始考虑问题的一个最好的例子)。

编码作为新数字经济的关键技能,就像学习如何阅读一样,已经模糊了我们对算法的理解。算法正逐渐成为我们生活的组成部分,从电影推荐到新闻过滤和寻找合作夥伴。我们要更好地理解它们,这样才能更好地理解和掌控我们的未来。