IE9下訪問可能不佳,推薦使用以下版本瀏覽器X

歡迎您來到炎黃網(wǎng)絡(luò)!

服務(wù)熱線:400-0000-786

大數(shù)據(jù)時代,軟件工程師漸退,算法工程師崛起

—— 閱讀:3309次
  

大數(shù)據(jù)在人類歷史長河的各個時期一直存在著,只是要等到技術(shù)發(fā)展到一定階段,它才開始嶄露頭角。而它的未來又在哪里?

“大數(shù)據(jù)時代”的稱號并不能為當(dāng)今世界所獨享,數(shù)據(jù)充斥著人類文明歷史長河的各個時期。縱觀這些歷史時期,通過從離散到抽象的轉(zhuǎn)換,我們就會明白為什么算法比代碼重要。

說到大數(shù)據(jù)……

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

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

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

等腰三角形的大數(shù)據(jù)

當(dāng)我們從簡單的計算形式轉(zhuǎn)變?yōu)橛啥ɡ、符號和算法組成的抽象形式(我們現(xiàn)在稱其為數(shù)學(xué)),就開啟了另一個大數(shù)據(jù)時代。第一批有記載的計算發(fā)生在公元前2500年的美索不達(dá)米亞。當(dāng)時,美索不達(dá)米亞人需要計算出一谷倉的糧食能夠養(yǎng)活多少人。

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

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

代碼的崛起

1945年,當(dāng)Grace Hopper開始在Harvard MarkI計算機上工作時,編碼(或者說編程,不過我們不打算在這里區(qū)分它們有什么不同)這項工作的重要性就開始凸顯出來。在這之前,電腦(如果可以這么叫它的話)充其量只是個計算工具。以二戰(zhàn)為例,當(dāng)時的大炮需要借助矩陣進(jìn)行輔助瞄準(zhǔn)。矩陣是一些方程式的計算結(jié)果,這些方程式使用數(shù)百種不同的計算因子,比如距離、海拔、風(fēng)速、溫度、濕度,等等。電腦(computer)這個名字的由來也是很偶然的,人們用它描述在二戰(zhàn)中操作計算機的女性,她們被稱為“computer”。操作員們必須使用打孔卡和曲柄來處理方程式。一個打孔卡需要170個人月才能完成。

美索不達(dá)米亞人使用黏土矩陣來進(jìn)行計算,而到了20世紀(jì),計算媒介變成了編碼。雖然已經(jīng)有了長足的進(jìn)步,不過編碼仍然是一種離散的操作,因為它執(zhí)行的是具體的計算任務(wù),只是效率上有所提升而已。編碼解放了人工操作,讓我們可以處理更多的數(shù)據(jù)。

算法與代碼

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

人們可以借助這種直接向計算機發(fā)送編碼指令的方式來實現(xiàn)更為復(fù)雜的指令序列,并以算法的形式呈現(xiàn)出來。算法比編碼的出現(xiàn)要早得多。穆斯林?jǐn)?shù)學(xué)家Al-Khawarizm早在公元820年就對解決線性方程和二次方程式的算法進(jìn)行了描述。算法一詞來源于這位數(shù)學(xué)家的拉丁文名字“Algoritmi”,而“algebra”則來源于“al-jabr”,Al-Khawarizm用它來解決二次方程式問題。算法由一系列有限的計算或指令組成,并產(chǎn)生一個結(jié)果。正如我們所知道的那樣,代碼是向計算機發(fā)出指令的一種方式,很適合用于實現(xiàn)算法。它們只不過是一系列按照一定次序執(zhí)行的操作。

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

算法的崛起

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

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

“更加令人感到吃驚但同時又令人難以理解的是,在很多領(lǐng)域,算法為性能帶來的提升已經(jīng)遠(yuǎn)遠(yuǎn)超過了處理器速度提升所帶來的性能改進(jìn)。”——面向總統(tǒng)和國會的報告:設(shè)計數(shù)字的未來

抽象算法

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

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

我們不僅可以從中搜索到模式,它還能夠生成做這些事情所需要的代碼。Pedro Domingos在“The Master Algorithm”一書中描述了如何使用“學(xué)習(xí)者算法”來創(chuàng)建新的算法,這些算法可以反過來為我們編寫我們所需要的代碼,“通過機器學(xué)習(xí),計算機可以自己編程,我們就可以解放了”。為了實現(xiàn)這個目標(biāo),我們需要更好地理解這些算法的原理,以及如何讓它們與我們的需求相匹配。否則,我們就無法向抽象轉(zhuǎn)變。

“工業(yè)的發(fā)展讓手工勞動自動化,信息的發(fā)展讓腦力勞動自動化,而機器學(xué)習(xí)則讓它自己自動化。如果沒有機器學(xué)習(xí),程序員就會成為發(fā)展瓶頸。而有了機器學(xué)習(xí),發(fā)展的速度就會加快。”——Pedro Domingos,“The Master Algorithm”

思考算法

不過,不管如何從離散轉(zhuǎn)變成抽象,我們?nèi)匀恍枰绦騿T,但這不是重點。并不是說代碼已經(jīng)變得不重要了,也不是說代碼就不會再帶來任何改進(jìn)。重點在于,我們要開始思考算法,這不僅僅是數(shù)學(xué)家或?qū)W者的事情。我們周邊充斥著各種算法,以致于我們不需要知道如何編寫代碼來使用它們,或者理解它們,F(xiàn)在,有一些人通過新的算法對不同的領(lǐng)域進(jìn)行優(yōu)化和改進(jìn),他們使用了遺傳編程(genetic programming)和大數(shù)據(jù)技術(shù)。人們甚至創(chuàng)造了更好的優(yōu)化技術(shù),他們觀察金屬的冷卻過程,并通過算法對其進(jìn)行建模(被稱為模擬退火算法,這就是我們應(yīng)該從算法角度開始考慮問題的一個最好的例子)。

編碼作為新數(shù)字經(jīng)濟的關(guān)鍵技能,就像學(xué)習(xí)如何閱讀一樣,已經(jīng)模糊了我們對算法的理解。算法正逐漸成為我們生活的組成部分,從電影推薦到新聞過濾和尋找合作伙伴。我們要更好地理解它們,這樣才能更好地理解和掌控我們的未來。

收縮

在線客服

customer service