5 月 13 日,由 thoughtworks 主辦的 2017 技術雷法峰會在北京召開。
正如官方宣傳提到的:“thoughtworks 技術雷達” 并非一個客觀的行業分析或者報告,也無意成為一份權威的官方文檔。由各行各業諸多頂尖技術專家組成的 thoughtworks 全球技術委員會(tab)每年定期讨論全球熱門技術的發展現狀,并以雷達形式對各類技術的成熟度進行評估并給出建議,為從程式員到 cio/cto 的利益相關者提供參考。而這也是大會名稱之是以叫 “雷達” 的意義所在。
13 日上午,thoughtworks 進階咨詢師,中國區資料團隊資深技術專家佟達,在大會上發表了題為《無處不在的python》的主題演講。
python 已經有将近 30 年的曆史,在過去 30 年中,python 在運維工程師和資料科學家群體中受到廣泛歡迎,然而卻極少有企業将 python 作為生産環境的首選語言。在最近幾年,這一情況有所改變。随着雲計算、大資料以及人工智能技術的快速發展,python 及其開發生态環境正在受到越來越多的關注,技術雷達上和 python 相關的技術也越來越多。為什麼 python 成為了 “被選中的語言”?這一趨勢将給企業 it 帶來怎樣的變化?
以下為演講全文(雷鋒網(公衆号:雷鋒網)做了不改變原意的修改):
剛才我們的幾位同僚已經給大家介紹了我們在過去一段時間看到的一些技術趨勢,這些趨勢怎麼樣落地到實際呢?今天我們給大家看一看用什麼樣的語言比較合适。是以我的主題是無所不在的 python。
我今天不會講怎麼樣用 python 程式設計式,我今天主要給大家講的是 python 的無所不在。在我們最新的一期技術雷達上面關于無所不在的 python 是這麼說的:python,這門語言總是不斷的出現在有趣的地方。這句話讓我想起來我上學的時候,我的注意力不是很集中,好奇心特别強,到處什麼事情都想參與一下。老師經常誇我,怎麼哪兒都有你?天天不務正業!今天我發現不務正業的說法可以有這樣一個說法,就是總是出現在有趣的地方。
我們看一下 python 這門語言到底是怎麼不務正業的?說起不務正業讓我想起來這麼一個大人物,他十幾歲的時候先進入了一個印刷廠工作作為印刷工,後來成立了自己的印刷公司,再後來發行了報紙,他在上面開始發表文章。當所有人都以為這個人要他要投身在,把自己的餘生都投身在印刷行業的時候,他去幹嘛了呢?他去成立了北美第一個志願者組成的消防隊。後來他又成立了北美的第一家醫院。這個時候他不務正業停不下來了,有一天他到雷雨天放風筝,然後發明了避雷針,對我們的氣象事業做出了貢獻。後來他成為美國駐歐洲的代表,作為一個非常出色的外交官,在北美獨立的過程中又起到了非常大的作用。後來他起草了《獨立宣言》,現在他的頭像印在美鈔上。這個人一生都在不務正業中,這個人在美國最偉大人物排名第五,他就是富蘭克林。在他墓碑上刻的是,他說自己是一個印刷工。然後他在印刷工外做了很多不務正業的事情。
python 在各大排行榜也能排在前五位,python 之前是作為系統管理工具的開發語言出現的。在上世紀八十年代末,九十年代初的時候 python 剛剛發明的那個年代,實際上是處在什麼時候呢?各種科學家,工程師都在嘗試着不同的作業系統,python 認為要給程式員們提供一個更好的管理系統的工具,是以為了這樣一個目标而發明了 python。過了二十多年我們發現,可能當年有幾百個作業系統在同步開發,到現在是什麼情況?可能隻剩下了幾十個作業系統還活着,而 python 内置在大部分這些主流的作業系統之内的。為什麼 python 對系統管理工具是非常合适的語言呢?因為它的執行效率遠高于 shell,而且開發效率遠高于 c。現在我們聽到比較著名的作業系統上面都是基于 python 開發的。當我們發現我們管理任務越來越複雜的時候,我們系統的配置越來越複雜的時候,我們又有了配置管理的概念。而在配置管理領域 python 也占據了非常多的份額,比如說曾經在技術雷達上也出現過一些系統管理工具裡非常著名的技術。當把這些基礎設施變成代碼管理的時候,我們發現我們其實還希望對這些代碼,像我們寫業務代碼一樣做單元測試,做自動化測試。在最新的一期技術雷達裡,我們持續關注着這樣的趨勢,基于前面我們說的系統管理工具技術,像一些專門對基礎設施即代碼的測試工具,比如 molecule、testinfra 也越來越流行。
除了在系統管理工具領域, python 很自然的就平滑地過渡到了軟體開發工具領域。從系統管理工具到軟體開發領域 python 一直都在幫助着程式員,幫助着工程師提高效率。在軟體開發工具無論是版本控制還是版本評審,python 進入的都是比較早的,應該說是比較先驅的一波。python 不僅在早期進入了軟體開發工具領域,在新一期技術雷達裡也出現了,一種老樹開新花的感覺,即使在持續傳遞領域也是一枝新秀,netflix 開源的 spinnaker。它主要利用了雲技術對一些應用更适合的搭建,它利用了很多雲平台以及容器技術,可以和我們現有的架構非常好的融合在一起。
實際上,在軟體開發工具領域裡的後來者們可能看起來都比先驅們——比如 python ——更出色一些,或者接受度更廣泛一些。這種情況也給了 python 去做其他事情的理由,python 至此就走上了跨界這條路,而且越走越遠。
python 首先嘗試的領域是web開發。我們說 python 做web開發,大家也都聽說過,但是web開發并不是 python 的主要标簽。比如曾經在我們技術雷達上出現的一門技術,它可以基于 python 開發一些web的網站,還有不少更小巧的、基于python 的網站,比如 youtube 等等網站。但是 python 語言本身和其他語言相比,尤其就是和網際網路泡沫同一年出生的語言,python 在外部開發上的專注度看起來總是心不在焉。
在這個時候 python 社群把注意力都放在哪兒了呢?都放到了科學計算領域。那個時候科學計算領域已經有了幾個比較著名的軟體,那麼 python 憑什麼在這個領域裡占有一席之地呢?實際上在 1995 年,也就是大家都開始研究網際網路的時候,python 的作者就參加了一個由一些科學家組成的小組,唯一目标就是使 python 在科學計算領域廣泛使用起來。為了使 python 符合科學家的直覺并讓他們使用,python 的作者甚至改了一些python 本身的文法去讨好科學家,讓科學家能更平滑使用 python 做一些科學計算。是以到了今天我們發現 python 在科學計算領域已經是一個非常重要的分支。就在python 科學計算小組成立的同一年有一個軟體庫釋出出來,就是 maple。
在 2007、 2008 年這個時期,我們進入了雲計算時代,基于過去一段時間 python 在系統管理工具的積累,以及其本身具備了非常好的系統內建能力,python 在雲計算領域可以說大放異彩。最著名的就是大家都應該都聽說過的 openstack,它裡面最著名的開發語言就是 python。不僅在私有雲領域,在公有雲領域,包括 aws,包括 google 雲,當這些公有雲提供出 sdk 的時候,它們首選的技術路線依然是 python。現在在阿帕奇基金會下面有一個項目,它是用來評各個不同雲之間異構性的,也是基于 python 做的。在雲計算後期興起的容器技術也是基于 python 做的。
當雲計算技術發展起來後,發現還需要大資料技術。其實python 并不是一門開發語言,但是因為 python 很早就在科學計算領域占據了一席之地,是以當我們希望能夠讓資料分析師使用大資料工具的時候,python 變成了一個不可忽視的因素。是以很多開源工具或者是大資料主要使用的工具都會提供一個 python 的接口給資料分析師使用。在 spark 剛剛釋出的時候,它也帶了一個 python 接口,這都是曾經在技術雷達出現的技術。雖然底層實作不以 python 為主,但是上層的接口一定會有 python 存在。除了本身主要的資料分析工具以外,我們還有什麼呢?比如 data pipeline,最新一期雷達裡介紹的 airflow可以讓工程師将 data pipeline 更好的可視化出來,可以知道資料怎麼樣一步一步處理的。這個工具相比于之前的 hadoop 的生态環境它的可視化效果更酷炫一些,可用性更高。
最近這兩年最火的詞就是人工智能。python 過去多年積累在人工智能到來的時候出現了大爆發。在傳統概念中,我們認為人工智能主要談到的是感覺層的技術,比如圖像處理、自然語言識别等等這些技術。盡管像 opencv 等工具,底層工具不一定以 python 實作的,但是它真正用到最廣泛的地方卻是以 python 接口提供出來的這部分内容。在做圖像識别的時候,盡管用的是 opencv,但是用的都是 python opencv庫。最近兩年人工智能火起來,非常重要的一個原因是深度學習火了,深度學習被證明非常有效,尤其在資料量特别大的情況下去洞見一些特征的時候,比人工尋找更有效一些。在深度學習領域幾乎沒有任何其他語言可以跟 python 相提并論的,比如 caffe,theano,tesnorflow,keras 這些非常流行的深度學習架構,都是以 python 為主要開發語言。還有一個有趣的現象,就是 fb 深度學習的工具 torch,最早它的前端工具是 lua,在2017 年釋出了一個新的版本叫做 pytorch,它發現如果不提供 python 接口的話,它好像沒有辦法流行起來。這再次證明了在深度學習領域目前 python 是處于非常主導的地位。
你以為就是這些了?并不是。
在影視制作裡大家知道哪一門語言是最流行的嗎?其實也是 python。這方面的工具也許大家不一定熟悉,但這些工具都是在做電影行業裡能夠經常用到的。這裡的每一個工具裡都提供了 python 作為嵌入式腳本的接口。實際上,在好萊塢做很多大型的特效電影的時候,裡面很重要的就是用 python 編寫特效腳本,然後再用它的渲染引擎去渲染。除此之外,還有算法交易和量化投資領域,python都是最流行的語言,桌面開發 python 也能做。嵌入式程式設計也有選擇 python 作為程式設計接口,比如樹莓派。在 iot 領域,以前大家不會想到 python 在 iot 作為主要語言出現的,但技術雷達上出現的 platformio 和 masquitto,都是基于 python 的。借用現在網際網路流行流行的一句話,python 你這麼厲害,你咋不上天呢?事實上 nasa 确實是在用python,做地面的資料仿真和資料處理等等工具。用 python 确實能讓你上天!
這裡我們再回顧一下前面提到的各個領域,python 在早期是以系統管理工具作為目标來出現的。後來到了開發工具,以及 web 開發等等,python 都起到了至關重要的作用。還有什麼呢?還有雲計算,大資料,科學計算,人工智能,這些技術的發展讓 python 更加廣泛的被認識,被使用。還有一些我們可能都不是那麼了解的領域,以及今天可能還沒有談到的領域,等等,python 都會有一定的作用在裡面。
為什麼選擇 python?這要從現在行業的變化說起,前兩年當我們談到o2o 的時候我們也許還覺得是一個新潮的詞,而今年談 o2o 的時候發現,現在的業務已經沒有線上線下之分,隻有已經數字化和即将數字化的業務。這帶來的是什麼變化呢?是我們業務上的界限,行業的界限越來越模糊。比如說有的視訊網站,開始去做汽車了;有的做手機的公司也開始做空氣淨化器了;自行車現在都能連網際網路。我們發現曾經難以想象去數字化的這些東西都開始跟軟體、 it、網際網路結合。
在座的各位可能都是公司的決策層,各位上司在拍腦袋想要做一些創新業務的時候,它對開發團隊有什麼要求呢?我們會需要更快的傳遞速度。因為我們的業務有更快的變化,是以我要有更快的傳遞速度去嘗試,去驗證我們的想法是否正确。是以有了 devops 的興起,可以讓開發、測試、運維緊密合作。還有平台的興起讓工程師可以專注在業務上。還有新一輪人工智能浪潮讓軟體有可能自我學習,自我進化。當大家在給開發團隊提這些需求的時候,我們有更多的業務并且需要更快的傳遞速度。當把這些訴求提給自己的傳遞團隊的時候,我們會發現傳遞團隊非常頭疼。現在的技術已經細分到每一個技術可能都會非常大且非常深入,我們需要了解 devops,需要知道雲計算等等,可能一個業務會把所有的技術全都利用起來,全都串起來,全都使用。對于工程師來說,每一項學習的時候,這個成本是非常高的。而對于決策層來說,也沒有辦法接受開發團隊的所有東西都是從零開始。但是幸好有了 python,我們發現 python 在各個領域都可以做一點事情。這就是 python 現在變得如此流行的一個很重要的原因。
對于在座的企業家來說該怎麼做呢,對開發團隊應該有什麼樣的改變呢?在這裡我把下一代的企業分成兩個主要的方向:一類是以企業和其他開發者為使用者,深入做垂直領域,将細分領域的方向作為主營業務的公司。這類公司可能是做雲平台的公司,做 paas 的公司,做運維的公司,做監控的公司,還有我給保險行業提供報價算法的公司。這些都是我們所謂的去專注在一些細分領域的公司。對于這樣的公司,它們面臨的挑戰就是如何讓使用者更願意使用自己的産品。還有一類是直接面向最終消費者,我們希望能夠讓消費者有更統一的體驗。現在任何一家網際網路公司都希望能夠把對于消費者的各個點上的服務穿成線,貫穿消費者所有的體驗以至于所有生活中的方方面面。
還有一些巨無霸公司,比如 google 和微軟,可能兩方面都提供,但是對于規模不那麼大的中小型公司,這兩個可能是二選一的一個選擇。而對于這兩個企業 python 帶來的是什麼呢?對于面向企業和開發者的來說,我建議大家給自己的産品加上 python 的接口,因為 python 本身能跟其他行業的東西很容易內建在一起,也是為我們很多的使用者所喜歡的。從使用者體驗角度,從開發者角度來講,python 是更好的語言,也是更好的接口語言,值得我們以 python 作為接口提供出去。另一類,對于消費者提供跨界服務的公司來說,可以考慮用 python 內建各種各樣的服務,這樣能夠降低成本,同時也能夠減輕自己開發團隊的壓力,讓開發團隊能夠減少一些學習成本。
最後要提一件事,當我們考慮給自己産品加上 python 接口或者考慮用 python 內建各種各樣服務的時候,我要提醒一句話:python3 現在已經成熟了,希望大家還是使用 python3,python3 是 python 的未來。如果在座有 cto,請回去跟自己的開發團隊說,新開發的應用,請使用 python3。
====================================分割線================================
本文作者:ai研習社