潘石屹考了99分的Python,到底是一種什么存在?

原標(biāo)題:潘石屹考了99分的Python,到底是一種什么存在?

去年,當(dāng)?shù)禺a(chǎn)大佬潘石屹要把學(xué)習(xí)Python作為生日禮物送給自己的時(shí)候,微博上還多是一陣調(diào)侃之聲??赡苷怯∽C了Python程序員們常常掛在嘴邊的“人生苦短,就學(xué)Python”的口頭禪,時(shí)年56歲的小潘同學(xué)要再一次抓住“青春”的尾巴吧。

為督促自己學(xué)習(xí),小潘還在微博專門設(shè)置了一個(gè)#潘石屹用Python解決100個(gè)問題#的話題,鼓勵(lì)全民圍觀,監(jiān)督他的Python學(xué)習(xí)計(jì)劃。顯然,幾個(gè)月的堅(jiān)持,讓小潘同學(xué)的Python學(xué)習(xí)有了初步的成果。5月16號(hào),他在參加完NCT全國(guó)青少年編程能力等級(jí)測(cè)試 Python 編程一級(jí)考試后,曬出了99分的優(yōu)秀成績(jī)單。

至于為啥要學(xué)Python,樸實(shí)的潘總在接受媒體采訪時(shí)表示,人到50歲以后一定要學(xué)點(diǎn)新東西,以防止老年癡呆。

但為什么選擇要學(xué)一個(gè)自己完全不懂的Python語(yǔ)言,這還是他在請(qǐng)教了李開復(fù)之后得到的啟發(fā):Python語(yǔ)言是現(xiàn)在全世界使用最多的一個(gè)編程語(yǔ)言,也是非常成熟的一個(gè)語(yǔ)言。

最主要的呢?

未來社會(huì)是一個(gè)人工智能的社會(huì),學(xué)習(xí)Python是打開人工智能時(shí)代的鑰匙。

Python對(duì)于人工智能很重要,對(duì)很多關(guān)注AI的人們來說想必是個(gè)基本常識(shí),但是對(duì)于大部分并非專業(yè)從事編程的人,比如我來說,Python到底有多重要,其實(shí)還是一頭霧水的。

于是我默默地拿起了一本《Python編程:從入門到實(shí)踐》……

額,短期學(xué)會(huì)有點(diǎn)不太現(xiàn)實(shí)。我還是本著謙虛好學(xué)的態(tài)度,梳理下專業(yè)人士的觀點(diǎn),來盡可能地搞清楚“Python之于AI”是一種怎樣的存在吧?

Python為何能這么流行?

衡量一門編程語(yǔ)言受歡迎程度的重要指標(biāo),可以參考其在Stack Overflow(一家IT問答社區(qū))上面的標(biāo)簽數(shù)量。下圖是近10年來全世界最主要的幾種編程語(yǔ)言在社區(qū)平臺(tái)的問答帖子中的標(biāo)簽數(shù)量的趨勢(shì)圖。

從2012年之后,Python就一直處在穩(wěn)步上升的趨勢(shì),與此相對(duì)照的是其他主流編程語(yǔ)言,除了R語(yǔ)言一直處于停滯不前的狀態(tài),其他編程語(yǔ)言則是在不同程度地穩(wěn)步下降。

這一指標(biāo)確實(shí)很好地印證了Python的流行程度和普及度。根據(jù)專業(yè)人士的說法,Python具有以下優(yōu)點(diǎn):

一、Python的成熟和易用。

實(shí)際上,從1991年,van Rossum向全世界發(fā)布了第一個(gè)版本的Python至今已經(jīng)有30歲的高齡了。但Python卻沒有因?yàn)檫@種計(jì)算機(jī)時(shí)代略顯“古老”的年齡而走向衰敗,反而因?yàn)镻ython在可用性和功能性上面取得的平衡,讓越來越多的程序員開始使用這一語(yǔ)言。

一方面簡(jiǎn)單易用,一方面又可以用來開發(fā)大型的應(yīng)用程序,這兩個(gè)因素結(jié)合,正是 Python在上世紀(jì)90年代逐漸取得成功的原因?,F(xiàn)在,Python語(yǔ)言已經(jīng)形成一個(gè)龐大的成熟社區(qū),一旦人們?cè)诰帉慞ython代碼遇到任何問題,都可以從中找到有用的答案。

二、Python對(duì)于初學(xué)者非常友好。

從一開始,Python就提供了清晰而明確的語(yǔ)法,使得發(fā)人員更容易閱讀和理解代碼,這是眾多程序員喜歡上Python的主要理由。

用三種語(yǔ)言來顯示“Hello World!”為例,相比起C語(yǔ)言和Java,Python更符合人類直覺的語(yǔ)言形式,對(duì)新手而言也更加友好,只需要一句“print”(發(fā)布)就可以了。

用van Rossum的原話來說就是,一門編程語(yǔ)言不僅要告訴計(jì)算機(jī)該做什么,還要便于在開發(fā)者之間傳遞思想。那還有什么比使用一種 “符合人性”的編程語(yǔ)言來實(shí)現(xiàn)更好的思想交流呢?

第三,Python的功能足夠強(qiáng)大。

經(jīng)過如此久的迭代開發(fā),Python早已擁有各種各樣的支持庫(kù)。用一個(gè)形象的比喻來說,Python就像是編程界的“瑞士軍刀”,可以在各種各樣的場(chǎng)合里用到。比如處理矩陣和向量數(shù)據(jù)的NumPy、做技術(shù)和工程方面的計(jì)算的SciPy、數(shù)據(jù)處理和分析的Pandas以及支持?jǐn)?shù)據(jù)可視化的Matplotlib等等支持庫(kù)。

需要注意的是,正是Python在支持庫(kù)上面的功能擴(kuò)展,與AI技術(shù)發(fā)展息息相關(guān)。這些正是我們接下來要討論的問題。

為什么Python更適合人工智能?

我們知道第三次人工智能浪潮的興起得益于機(jī)器學(xué)習(xí),特別是深度學(xué)習(xí)算法的成功。而訓(xùn)練一個(gè)AI算法模型就需要為其喂養(yǎng)大量的數(shù)據(jù)。在前期的AI發(fā)展中,“有多少智能就有多少人工”就是這一AI訓(xùn)練過程的典型描述。在這一過程中,Python因其有強(qiáng)大的數(shù)據(jù)處理的生態(tài)庫(kù),因而能夠?yàn)槠涮峁?shù)據(jù)的訪問和轉(zhuǎn)換,實(shí)現(xiàn)AI算法的快速“喂養(yǎng)”。

舉個(gè)例子,機(jī)器學(xué)習(xí)或者深度學(xué)習(xí)的算法模型所要處理的數(shù)據(jù)實(shí)際上都是矩陣和向量。而NumPy則正好支持維度數(shù)組與矩陣運(yùn)算,結(jié)合Python內(nèi)置的math和random庫(kù),可以輕松通過簡(jiǎn)單代碼實(shí)現(xiàn)矩陣的轉(zhuǎn)置、求逆、求和、叉乘、點(diǎn)乘和分解等功能。

而且,NumPy在實(shí)現(xiàn)層對(duì)矩陣運(yùn)算做了大量的并行化處理,通過數(shù)學(xué)運(yùn)算的精巧,而不是讓用戶自己寫多線程程序,來提升程序效率。有了Python這種強(qiáng)大的數(shù)據(jù)計(jì)算和處理能力,開發(fā)者就可以把工作重心放在模型和算法上,不用操心運(yùn)行的問題了。

就像上面所說,Python其實(shí)也是AI技術(shù)的“瑞士軍刀”。對(duì)于AI訓(xùn)練所需要的數(shù)據(jù)獲取、分析、建模等流程也都可以通過Python的各類支出庫(kù)來解決。

(用Python訓(xùn)練和使用一個(gè)logistic Regression模型)

比如,像requests、scrapy這類網(wǎng)絡(luò)爬蟲庫(kù),可以從網(wǎng)絡(luò)上獲得源源不斷地海量數(shù)據(jù);像scipy、pandas、matplotlib以及剛剛介紹的NumPy,幫助開發(fā)者進(jìn)行科學(xué)計(jì)算、數(shù)據(jù)處理、繪圖以及矩陣計(jì)算等操作;而像nltk、keras、sklearn這類用于建模的支持庫(kù),即可用于NLP、DL的模型搭建,實(shí)現(xiàn)一個(gè)完整的AI算法模型。

此外,Python也可以用于處理高效的C/C ++算法,以及CUDA/cuDNN的包裝語(yǔ)言,這讓現(xiàn)有的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)庫(kù)可以在Python中高效運(yùn)行的原因之一。

總體而言,Python成為一門理想的集成語(yǔ)言,可以讓開發(fā)者關(guān)注真正的問題,而不是花很多時(shí)間在細(xì)節(jié)實(shí)現(xiàn)上。

Python語(yǔ)言十全十美嗎?

當(dāng)然不是,像任何一門編程語(yǔ)言一樣,Python也會(huì)有自身的缺陷。

首先,Python的執(zhí)行速度不夠快。由于Python是一門解釋型語(yǔ)言。編程語(yǔ)言和機(jī)器語(yǔ)言之間需要解釋器的翻譯,而Python是一次執(zhí)行一個(gè)任務(wù),因而需要每翻譯一行程序敘述就立刻運(yùn)行,然后再翻譯下一行再運(yùn)行,這樣就導(dǎo)致Python要比像C、Java這類編譯型語(yǔ)言執(zhí)行速度慢的原因。

但對(duì)于現(xiàn)在的服務(wù)器算力來說,Python速度的劣勢(shì)幾乎沒有什么影響,因?yàn)閷?duì)于開發(fā)者而言根本察覺不到明顯的延時(shí)。此外,還可以通過和C語(yǔ)言的結(jié)合,將需要優(yōu)化速度的應(yīng)用轉(zhuǎn)換為編譯好的擴(kuò)展語(yǔ)言,并在系統(tǒng)中使用Python腳本將這部分應(yīng)用連接起來,以提高程序的整體效率。

其次,Python源代碼加密困難。Python不像編譯型語(yǔ)言的源程序會(huì)被編譯成目標(biāo)程序,而是會(huì)直接運(yùn)行源程序,因此對(duì)源代碼加密比較困難。

此外,Python不太適用于移動(dòng)開發(fā)。Python在設(shè)計(jì)時(shí)并沒有考慮到移動(dòng)開發(fā),因而還不支持在非x86硬件平臺(tái)上編譯代碼,而且Python的測(cè)試套件很容易在移動(dòng)平臺(tái)崩潰。隨著移動(dòng)設(shè)備的數(shù)量和流量開始遠(yuǎn)遠(yuǎn)超過PC設(shè)備,Python也應(yīng)該要努力進(jìn)化以支持移動(dòng)平臺(tái)了。

盡管Python在未來幾年內(nèi)會(huì)依然興盛,但是一些潛在的競(jìng)爭(zhēng)對(duì)手也正在成長(zhǎng)——Rust、Go以及Julia。這些語(yǔ)言都各自超過Python的優(yōu)點(diǎn),也能修補(bǔ)Python的薄弱環(huán)節(jié),正在成為Stack Overflow近幾年受歡迎趨勢(shì)上升很快的三種語(yǔ)言,但是零點(diǎn)幾的份額還不足以挑戰(zhàn)Python。

然而總體上,Python因其開放的開源社區(qū)以及全球最多的開發(fā)者生態(tài),使其成為近十年來最成功的編程開發(fā)語(yǔ)言之一。

如果列舉Python的廣泛應(yīng)用,我們可以列舉出一系列的名單。包括人工智能學(xué)習(xí)框架如Google的TensorFlow?、Facebook的PyTorch、開源社區(qū)的神經(jīng)網(wǎng)絡(luò)庫(kù)Karas以及云計(jì)算開源平臺(tái)OpenStack等使用python實(shí)現(xiàn)。此外,Python還在Web開發(fā)、操作系統(tǒng)運(yùn)維、金融大數(shù)據(jù)分析和圖形GUI上面都是強(qiáng)大的支持工具。

(MIT研究員在通過Python代碼跑出黑洞圖片后,沒有報(bào)錯(cuò)時(shí)的小興奮)

如果這些領(lǐng)域還是離我們的日常生活太過遙遠(yuǎn)的話,我們不妨就記住Python這樣的一個(gè)小應(yīng)用吧。

還記得去年媒體瘋傳的那張黑洞照片嗎?這張據(jù)說用了2年時(shí)間拍攝而成的黑洞照片,其實(shí)并不是一個(gè)望遠(yuǎn)鏡拍攝到的,而是采用了遍布全世界的望遠(yuǎn)鏡連接起來,共同拍攝而成的。那么來自多個(gè)望遠(yuǎn)鏡拍攝的數(shù)據(jù)的處理就需要用到Python。

簡(jiǎn)單來說,人類看到的第一張真實(shí)的黑洞照片,其實(shí)是用Python合成的。如果今后有人問起Python能做什么,你還能記得這個(gè)知識(shí)點(diǎn)就可以了。

極客網(wǎng)企業(yè)會(huì)員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2020-05-26
潘石屹考了99分的Python,到底是一種什么存在?
但為什么選擇要學(xué)一個(gè)自己完全不懂的Python語(yǔ)言,這還是他在請(qǐng)教了李開復(fù)之后得到的啟發(fā):Python語(yǔ)言是現(xiàn)在全世界使用最多的一個(gè)編程語(yǔ)言,也是非常成熟的一個(gè)語(yǔ)言。

長(zhǎng)按掃碼 閱讀全文