ECUG(Effective Cloud User Group,實效雲計算用戶組)主辦的 2021 ECUG Con 於 2021 年 4 月 10 日 - 11 日在上海舉辦。會上,七牛雲 CEO 許式偉以 「數據科學與 Go+」 爲主題發表了主題分享,講述了對數據科學變遷的理解,對新語言 Go+ 的設想和規劃,並大膽指出 數據科學正迎來爆發期,像字節跳動同樣的新型公司只會愈來愈多。如下爲演講內容整理。
剛纔在閒聊說 ECUG 變得愈來愈高大上,其實我也變得愈來愈像一個單純的講師。今年是 ECUG 社區的第 14 個年頭,這場活動也是第 14 屆 ECUG Con。其實這一屆原本應該在去年辦,但由於疫情延後了。前端
其實,我在 ECUG 一直貫徹的理念有兩個:git
第一,讓本身持續地寫代碼。由於每一次來 ECUG 我都很緊張,不能什麼都沒有呀。因此這也是挺好的機會,能讓本身持續留在技術一線;程序員
另外,我每一年分享的主題都有必定的延續性,呈現了我本身對將來思考的脈絡。github
去年開始,我在聊數據科學,前面有三年是聊在端上的一些實踐。緣由是我認爲雲計算的第一個時代應該是屬於機器計算,也就是虛擬機;第二代就是雲原生,我認爲這是一場被稱爲「基礎架構」的革命。也就是說,第一階段是資源,第二階段是基礎架構。 第三個階段,個人判斷爲應用計算,這會涉及前端和後端的協同。segmentfault
從去年開始,個人分享轉向了數據科學,一個很重要的因素和趨勢是,數據時代的到來。尤爲是 2017 年以後,數據大量地被數字化之後,在各行各業都會有涉及數據科學的普遍應用。後端
去年也是蠻巧的,我腦子一熱就搞了一個語言出來。我之前搞過蠻多語言,受衆也有一些。可是那個都很明確,歷來沒有想過有一天可以商業化。也許碰巧有一些公司用它來作商業化,可是基本上從出生那一刻開始,就不是衝着商業化去的。session
2012 年我花了不少精力在佈道 Go,由於當時做爲一個初創公司,招人太難。一個比較好的招人邏輯就是讓別人以爲你有趣,公司技術氛圍很不錯。Go+ 是我第一個認認真真但願可以把它商業化的語言,但目前宣傳得還很少,1.0 還沒發佈。我想講講我本身對 Go+ 和數據科學的一個思考,爲何認爲 Go+ 有商業化的機會。架構
我今天聊的話題大概有四個方面:框架
首先,咱們講講語言的發展,程序員對這個話題很是感興趣。我把語言的發展史分爲三個部分來講。分佈式
第一,靜態語言的發展史。我選的是 TOP20 的語言,這個是根據如今最火的語言排行榜排名選的,前 20 名的語言我排了一下大概是這樣的,最先發布的是 C,到如今其實還在排行榜前三的位置。第二是 C++,Objective-C、Java、C#、Go、Swift、Go+。咱們能夠看到一個比較有趣的現象,差很少每 6-8 年會出現一輪新的、具有影響力的靜態語言,這是生產力迭代的表徵。
第二,腳本語言的發展。你會發現它們很是不同。最先是 Visual Basic,而後是 Python、PHP、JavaScript、Ruby,腳本語言是集中大爆發的,差很少全在 Java 出現的先後,來自 90 年代的前 5 個年頭。這是很是有趣的一件事情,也是很是值得思考的,背後必定有一些內在的緣由。
第三,數據科學相關語言的發展。但數據科學我選的是 TOP50,由於 TOP20 實在太少了。也蠻有意思的,最先的是 SQL,第二個 SAS,MATLAB、Python、R、Julia。Python 最先歷來沒想過本身會是數據科學語言,但最終變成了人工智能領域最火的語言。
這裏又存在一個很明顯的特徵:它的跨度跟靜態語言同樣大,因此數據科學發展實際上是古老而漫長的,但發展得沒有那麼快。靜態語言差很少每 6-8 年有一個迭代,但數據科學語言不是,中間跨度特別大。但我以爲如今正進入數據科學的加速期。
你可能會想,爲何我要分析語言發展史呢?有幾個結論是關鍵。
首先,我認爲腳本語言是特定歷史階段下的產物,長期來看,靜態語言更有生命力。
第二,數據科學是計算機的最初需求,最先計算機就是用來作計算的。它歷史悠久但進步緩慢,由於數據大爆發的時代一直沒有到來。
聊完語言的發展,接下來咱們談談數據科學的發展。數據科學也能夠分爲幾個階段,第一個階段我叫作「原始時期」,也能夠叫「數學軟件時代」,這個時期基本上可概括爲兩個特徵,第一個是在有限領域裏,最典型的是 BI(商業智能);第二個有限數據規模,典型就像 Excel,行列數都是很是有限的,其餘的軟件也基本上是這樣的。
這個時期的數據科學特色是什麼?首先它不是一個基礎設施,其實是數學應用軟件,但能力很是全,很強大,包括了統計、預測、洞察、規劃、決策等等。
第二個時期我叫作「數據科學的基建時期」,真正讓數據科學成爲了基礎設施,最典型的表明是大數據的興起。Map/Reduce 是 Google 2004 年發佈的一篇論文,2006 年就出現了 Hadoop,2009 年出現了 Spark。我認爲這算是大數據興起的一個階段,也是數據科學基礎設施化的開始。這個時期跟剛纔的數學軟件不同,是以大規模處理能力爲先,並非以功能強大爲先,它的功能相對侷限。
深度學習的興起和大數據的興起間隔時間比較長,深度學習 2015 年開始有 TensorFlow,2017 年開始有 Torch,這是兩個知名度最高的深度學習框架,深度學習本質就是經過數據自動推導 y=F(x)中的 F 函數。咱們日常一般都是程序員實現這個 F,但深度學習最核心的概念是如何讓機器自動產生這個 F,來達成最佳曲線擬合。它實際上是基於測量結果的自動計算。
假設今天沒有牛頓三大定理,但我有一堆測量數據,理論上應該可以發現牛頓三大定理,這就是深度學習的核心邏輯。它跟大數據並非相互取代的關係,而是一種能力的增強,更多實際上是如何讓大數據的能力更進一步,更強悍。
有種見解認爲,今天經濟發展背後科技的驅動因子其實核心就只有兩個,一個是計算,另一個是數據。
數據核心就是咱們今天聊的數據科學,數據科學實際上是到了一個新的範式,有一個詞叫「第四範式」,中國有一個公司也叫第四範式,咱們認爲數據是更高階的一種生產能力,它跟計算相比的話站在更高層次的維度。
前面是數據科學的兩個階段,那麼第三個階段是什麼?我以爲是數據科學的大爆發時期,也就是今天,用馬雲的話說是「DT 時代」。原始時期是在有限的領域,有限的數據規模下去作的一種能力。將來首先是全領域的,首先領域不侷限於的商業智能( BI )這樣的範疇,第二個是大規模的數據,第三個是隨處可見,隨處可見包括雲、智能手機、嵌入式設備等,這些都會植入咱們所謂的數據智能。
這就意味着,今天移動互聯網的興起已經讓不少公司很是牛,互聯網的平民化或互聯網應用的誕生,催生了 BAT。可是咱們知道,如今新興的、比較牛的公司,像字節跳動這種,其實不是互聯網的成功,而是數據科學的成功。今天仍然不能說,數據科學是平民化的,它的門檻很是高。
可是咱們看到,智能應用已經產生了,智能應用不會只侷限於抖音這樣一個局部領域的生產力放大,各行各業都會被數據智能,也就是剛剛咱們提到的第四範式所影響。
數據和數據科學,必定會成爲下一代生產力的支撐,今天產生了字節跳動、快手這樣的新興的公司,但他們只是一個開始,絕對不是結局。
在數據科學的原始時期,數據只是副產品。你們想象一下,在 BI 領域,數據只是一個副產品,只是用於後期的運營決策。
可是今天咱們看到在大量的應用裏,數據就是原材料。這是很是不同的狀態,這也是爲何,我把它叫作數據科學大爆發時期,這是我以爲今天爲何須要 Go+ 的緣由,也是其背後的歷史背景。
數據科學的將來必定是通用語言和數學軟件的融合,從而完成真正意義上的數據科學的基礎設施化。但在今天,數據科學的基礎設施化還遠沒有徹底完成,這是我本身的判斷。
固然不少人會有疑問:今天的 Python 已經很好了,在深度學習領域已經被很是普遍地使用,爲何 Python 還不夠,須要 Go+?其實我是認爲,Python 是成不了基礎設施的,它是一個腳本語言,我認爲僅僅是特定歷史階段的須要。
數據科學自己是一種算力革命,哪怕在芯片領域,數據也能幹翻計算,這是 Nvidia 幹翻 Intel 的核心緣由。上層軟件領域就更加如此,必定會有一個新的基礎設施承載者須要出現。
算力本質上是一種計算密集型業務,Python 的背後是 C,只靠 Python 仍是不行。今天是 C 和 Python 支撐了整個深度學習,但數據科學必定還要進一步下沉,下沉的結果是什麼?
這是咱們今天須要 Go+ 的緣由!前面主要講我本身爲何認爲 Go+有商業化的機會。固然我所說的商業化不必定是賺錢,你們不要誤會這一點,語言可能在大多數人心目中是一個不賺錢的東西,可是這不表明它不重要,它很是重要。
聊完數據科學的發展,接下來咱們聊聊 Go+ 的設計理念。Go+爲何是今天這個樣子?計算背後要的是程序員,而數據科學背後要的是數據科學家或者叫分析師。這兩個角色其實仍是不同的,雖然都是技術工做。我認爲培養程序員是相對容易的,今天程序員的數量是很是龐大的,但數據科學家的數量相對較少,這也是爲何前幾年深度學習興起之後,所謂的 AI 工程師薪資被炒翻了,比程序員貴不少。其實就是由於數據科學家不容易找。
這個角色承載着技術和商業的鏈接,要找到同時具有兩種能力的人是很難的。數據科學首先是一個技術工做,要的是技術能力,又要懂商業。今天仍然沒有很是體系化的培養數據科學家的能力,沒有這樣一個體系方法論。
那麼 Go+ 的核心理念又是什麼呢?
第一個,咱們試圖用 Go+ 來統一程序員和數據科學家,讓他們之間有共同話語,讓雙方能天然對話,我以爲這是 Go+ 最核心的一個思考點。Go+ 很重要的一個核心邏輯,是用一門語言讓兩個角色進行對話。
在這個基礎上,咱們延伸了一些設計邏輯。首先,Go+ 是一個靜態語言,語法是徹底兼容 Go 的;第二,形式上要比 Go 更像腳本,有更低的學習門檻。Go 雖然在靜態語言裏,可能學習門檻是低的,但還不夠低,沒有 Python 那麼低;第三,很天然的,咱們要作一個數據科學的語言,因此它必然要有更簡潔的、數學運算上的語言文法支持;第四是雙引擎,同時支持靜態編譯爲可執行文件,也支持編譯成字節碼來解釋執行。
爲何咱們會選擇語法徹底兼容 Go 呢?首先我我的很堅決地認爲,靜態語言擁有更強的生命力,更能跨越歷史的週期。你們也都很容易理解,語言是須要跨越週期的,語言的生命週期一般都很是長。咱們不能很侷限地說,當前在流行些什麼東西,我就如何決定語言的設計,實際上咱們要找到那些可以跨越週期的元素。
第二,爲何是 Go?我我的認爲,在靜態語言裏,Go 的語法設計最爲精簡,學習門檻也是最低的,哪怕你之前沒有學過靜態語言,也很容易學會 Go。咱們公司是最先招聘 Go 程序員的,但大部分招進來的人都不會 Go。咱們用 Go 的時候,世界上真沒多少人認爲 Go 是將來的流行語言。咱們本身實踐的經驗代表,Go 語言兩週的學習基本上夠了,是門檻很是低的一門靜態語言。
但從數據科學語言來說,Go 的門檻還不夠低,Go+ 雖然徹底兼容 Go,但咱們但願它比 Go 的門檻還要有更低。因此它形式上要比 Go 更像腳本,由於腳本每每更容易理解。咱們但願 Go+ 學習門檻和 Python 處於同一個層次。
去年 五、6 月份 Go+ 剛誕生,差很少 10 月份左右,我就開始讓 13-14 歲,六年級到初一這個階段的三個小孩嘗試學習 Go+。這個實踐證實,這個事情是可行的。他們能理解 Go+ 的設計,可以自如地使用 Go+ 寫代碼。這也證實了咱們在 Go 的基礎上作的全部簡化的努力是很是划算的。
我這裏簡單列了一些 Go+ 的語法,固然不是所有,只是一些我認爲仍是相對比較簡潔的表達。有理數 Python 裏面沒有,咱們認爲有理數在數據科學裏,尤爲在無損數值運算裏,仍是會很是常見。Go+ 內置了有理數的支持。固然 Map、Slice 基本上 Python 都有。
列表理解(List comprehesion)其實也是 Python 有的,但咱們對列表理解的支持很是的完整,基本上理解了 Go+ 中 for 循環怎麼寫也就理解了列表理解。更多的仍是數據科學的一些常規操做的簡潔表達。以上是一個大概語法示意,若是有朋友沒看過 Go+,但願能夠大概對 Go+ 有個理解。
Go+ 很是有意思的一點,它是惟一一個選擇了雙引擎的語言,既支持靜態編譯,也支持可解析執行。
爲何要作雙引擎呢?由於我認爲程序員和數據科學家的訴求是不同的,數據科學家喜歡單步執行,你們能夠在心中回想一下你見過的數學軟件,包括 SAS、MATLAB,數學軟件交互都是單步執行的方式。
這並非由於數據科學家懶。程序員理解程序邏輯是能夠放在腦子裏的,咱們腦子裏知道程序邏輯寫得對不對。但數據科學家作計算的時候,不能知道計算結果對不對,由於人的計算能力比計算機弱太多了,因此必定要單步執行看到計算結果,才能知道本身下一步應該怎麼辦,這是數據科學家和程序員工做模式徹底不一樣的一個點。
由於他是在作計算而不是在作一種程序邏輯,因此他很難不去作單步執行。
但當數據科學家建了一種模型,最終要使用了,這時他仍然但願最終交付的是最大化的執行效率,他必定不但願代碼運行很慢,因此這個時候他就又須要靜態編譯執行,這也是爲何 Go+ 但願設計成雙引擎,由於調試階段和生產使用階段,工做模式徹底不同。
聊完 Go+ 的設計理念,咱們進入最後一個 session,Go+ 實現上的迭代。當前 Go+ 作到了什麼份上?Go+ 雖然尚未推出 1.0 版本,可是語法目前支持百分之六七十確定有了,語法完成度仍是不錯的。
Go+ 的源代碼,經過掃描器轉成一個 Go+ 的 Token,再經過一個 parser 變成 Go+ 的抽象的語法數,常見語言都是這麼幹的。Go+ 的抽象語法樹轉化後有兩個分支,一個生成 Go 的代碼從而使其能夠靜態編譯,另一個分支生成字節碼解析執行,分支的多態是經過引入了一個叫執行規範(exec.spec)的東西,其實就是一個抽象的接口。
當前,我我的在迭代的過程當中發現了一個問題,對一個初步加入 Go+ 團隊的人來講,是須要一段時間熟悉整個業務的。Go+ 執行規範的部分,實際上是一種抽象的 SAX 接口,也就是基於事件驅動,我有一個事件發送給接受方,接受方按本身的須要處理這個事件,這在文本處理裏面比較常見。
咱們以前設計的接口基本上是用事件驅動的模式來把不一樣組件鏈接起來。編譯器把抽象語法數解析完發出一些事件,這些事件被兩個代碼生成的模塊接收,按照本身的需求去幹活。這個模式代碼仍是有點難理解,尤爲是編譯器裏面又作一些複雜的事情,讓代碼比較難理解。你們若是瞭解過 Go 背後的實現邏輯,類型推導在 Go 裏面比較複雜,其實咱們編譯器的複雜性大部分是由類型推導致使的。
我當前在試圖重構這個邏輯,想把執行規範部分變得再也不是一個抽象的接口,而是一個標準實現的 DOM,這個 DOM 自己包含了類型推導的能力,從而使得編譯器相對比較簡單。講實現我今天無法講的特別細,後面有機會再展開。
下面我想講一下 Go+ 下一步作的重心是什麼。
首先,最核心的邏輯,仍是但願今年可以發佈 1.0 版本,而 1.0 版本最重要的事情是把用戶的使用範式作最大化的確認,1.0 之後我但願和 Go 差很少,後面的語法變動是比較少的。當前最重要的工做,是明確 Go+ 須要哪些最核心的語法,而且在 1.0 版本就儘可能去支持,除非有一些特定的考量好比說像 Go 的範型這種特別複雜的語法特性,留到後續的版本去支持。Go+ 也是相似的,咱們可能會放棄一些特別複雜的語法特性,可是基本上儘量把大部分咱們須要的語法特性在 1.0 版本里肯定下來。
Go+ 1.0 咱們會先進行單引擎的迭代,先作好靜態編譯的引擎,等 1.0 發佈之後再迭代腳本的引擎。這也是基於上面咱們說的用戶的使用範式優先的理念下的一個決策。
最後,咱們但願用商業化的方式來運做 Go+,也會招聘 Go+ 的團隊成員,歡迎你們加入 Go+ 團隊!
我認爲 Go+的核心是首先統一了程序員和數據科學家的語言,讓雙方可以天然對話。另外我很是堅決地相信 Go+ 會是數據科學的下一個變革,我本身很是興奮可以作這樣一件事情,也很是歡迎承認這件事的人加入咱們。
這是聯繫咱們的方法,第一個是項目的地址(https://github.com/goplus),第二個投簡歷的郵箱(jobs@qiniu.com),第三個是我推特的地址(@xushiwei)。
本文做者許式偉是七牛雲創始人兼 CEO,Go 語言大中華區首席佈道師,Go+ 語言創造者,ECUG 社區發起人。他曾就任於金山、盛大,在搜索和分佈式存儲相關技術領域有十幾年的研發經驗。在金山,他以首席架構師的身份主導了 WPS Office 2005 的架構設計和開發。在創立金山實驗室後,做爲技術總監主導了分佈式存儲開發,後加入盛大創新院,併成功推出「盛大網盤」和「盛大雲」。許式偉在 2020 年被評選爲《2020 中國開源先鋒 33 人之心尖上的開源人物》。