人工智慧時代,是時候學點Python了

weixin_33751566發表於2017-09-13

“是時候學點Python了”。作為一名不怎麼安分的程式設計師,你或許覺得,產生這樣的想法並不奇怪,但學習Python卻是出於自己對工作現狀以及如何應對未來挑戰所作出的思考。讀過我以前部落格的朋友,可能都知道,我推崇軟體領域中的匠人精神,將軟體開發也視為一種製作,並將優秀的產品歸納為功能性與美感的結合。這在過去或許是普遍適用的優秀產品準則,然而,今天當我們已經站到人工智慧時代的大門前時,我卻發現過去對於軟體產品的理解,已顯得有些狹隘且過時了。未來所有的優秀產品都應該是功能、美感與智慧的有機結合。而這種新的智慧特性無疑會給我們每一個人帶來巨大的機遇,不僅僅是我們程式設計師,也包括那些醫生、教師、金融從業人員亦或是學生,或正在為孩子想著學些什麼的家長,每個人都有機會通過將智慧引入自己的工作、產品、生活中,去獲得新的成功。而今天我們放眼整個軟體開發領域,Python無疑是那個最能為我們帶來這一智慧特性的程式語言。

1399853-954ca379191c4967.jpeg

那麼,又是什麼原因使Python能在眾多程式語言中脫穎而出,它又具有哪些迷人的特性呢?

資料科學基因帶來的智慧特性

Python在今天變得如此重要,一個重要的原因便是它能更方便地為我們的工作以及生活創造智慧的特性。人工智慧在最近幾年得到突飛猛進的發展,其根本原因並不在於其理論基礎發生了根本性的變化。而恰恰在於,網際網路飛速發展之後,積累的大量可供分析的資料,以及對這些資料進行處理、分析以及預測的能力的顯著提升(包括雲端計算提供的強大分散式運算能力,摩爾定律下每一個計算單元成本的持續降低,加之以神經網路為代表的深度學習演算法的應用),使我們得到了超乎想象的人工智慧。在很多領域,比如被視為人類智慧最頂尖的棋類遊戲——圍棋,過去只有讀過那些名校才能得到的投行工作,甚至是需要豐富經驗的醫生、律師、飛行員,這些專業性要求極高的工作,都越來越多地受到來自人工智慧的挑戰,有的甚至已被完全超越。

雖然有人對此表示擔憂,但我卻持樂觀的態度,並相信這是加速回歸定律(技術的不斷加速是加速回歸定律的內涵和必然結果,這個定律描述了進化節奏的加快,以及進化過程中產物的指數增長。《奇點臨近》、《機器之心》等書中,都將此理論作為對未來預測的基礎)作用下的必然結果。況且就目前而言,那些可預見的人工智慧,更多取代的是那些需要基於複雜模式進行精確識別與處理的工作,這返過來將會解放更多人力,使我們可以在人工智慧的協助下,將更多時間和精力投入到更具創造性和情感價值的有趣工作中。

而Python正是以資料科學而聞名,它擁有著極其豐富且穩定的資料科學工具環境,從而助推其成為大資料和雲端計算中最流行的語言之一。而它的這種資料科學基因,也自然地延伸到了機器學習領域,今天,我們非常熟悉的眾多機器學習庫,如scikit-learn、Tensorflow等都基於或支援Python語言開發。我們可以很方便地使用它們,去構建自己的智慧應用。

令人著迷資料分析與處理能力

Python被設計為有著廣泛通用性的程式語言,你幾乎可以利用它來做任何事情,包括建立Web應用或桌面應用、編寫程式指令碼、配置伺服器等等。但最令我著迷的還是它的看家本領——資料的分析與處理。我已經用JAVA寫了十多年程式碼,也早已習慣使用它,處理工作中遇到的各種問題。但當我開始接觸Python之後,便立刻為它在資料處理與分析方面的強大功能與便利性而感到著迷。

雖然還只能算是個新手,但我已經嘗試著使用Pandas(全稱:Python Data Analysis Library,是一個基於 Numpy 構建的含有更高階資料結構和工具的資料分析包),寫了不少簡單的資料處理程式,這些程式都很短小,有的甚至才十幾行程式碼,然而它們所能達到的效果,卻是以前用JAVA需要3倍,甚至更多的程式碼量才能實現的。而且這些程式在執行速度和效率上,也絲毫不落下風,這點令我頗為驚喜。現在凡涉及到資料處理的工作,我都會優先選擇Python。雖然只是換了一種程式語言,但這一改變卻已著實大大提升了我的工作效率。

這不禁又讓我想到最近讀到的一篇非常有趣的文章,說的是一個醫生如何通過自學Python,將一些智慧分析演算法應用於病人診斷資料比對,以及超聲影像分析,使自己從過去複雜而重複的工作中解放出來,變得效率倍增的故事。我暗想,這應該是個頗有遠見的醫生,利用Python賦予的資料處理能力,將智慧引入到自己的工作和生活中,一切便隨之發生了改變。其實,和這位醫生一樣,我們很多人的工作都是與資料或影像打交道,並基於一定的模式去處理它們,何不學學那位醫生,也學點Python,然後嘗試著去改變一下自己的工作和生活呢?

簡單、可靠、高效

還是讓我們回到語言本身,很多人會將Python稱為一門優雅的程式語言。關於程式語言的美學問題,不在這篇文章的探究範圍內,但Python留給我這個老程式設計師的印象,概括起來便是:簡單、可靠、高效。打個可能不太恰當的比方,它像極了紅樓夢中的經典人物形象:王熙鳳,雷厲風行,三下五除二便把一件複雜的事情處理得乾乾淨淨,毫不拖泥帶水。這可能也正是我越來越喜歡它的原因吧。

簡單

我前後接觸過不少程式語言,對我來說開發語言的語義都大致相同,而在語法上,Python無疑是簡單而精煉的,它似乎生來就是為程式設計師編碼效率而考慮的程式語言。這一點可能也與Python本身是一門解釋型語言有關。很多在其他程式語言編譯階段,需要給出的型別限制或約束,在Python中都可以省略。從下面兩個簡單的Python與Java對比的例子中,你也一定能看出Python語言簡潔的特點。

1399853-e3c4d762ddf42a68.png

另外,Python語言也被設計得更接近於自然語言,比如:在Python中並沒有使用很多程式語言中用的"{}"來限定程式碼塊,而完全採用縮排的方式加以限制。雖然很多程式設計師一開始會覺得不太習慣,但這卻在不經意間,使Python程式碼更為整潔、一致,也就提供了更加良好的可讀性。

可靠

Python非常可靠,你可以將它使用在任何場景中,比如網頁開發、PC應用程式、資料處理、移動應用程式、硬體等等。而且在幾乎每一個領域,Python都提供了非常穩定且可靠的框架或第三方庫,從用於構建Web應用的Django,科學計算領域的NumPyPandasSciPy,機器學習領域大名鼎鼎的scikit-learn,以及用於自然語言處理的nltk,你可以利用它們,輕鬆地構建不同用途的應用。並且,由於Python本身便是跨平臺的,你也不必擔心相容性的問題。

高效

高效似乎一直與Python這樣的解釋型語言無關,然而,Python卻有其獨到之處。由於Python本身能夠非常方便地呼叫更底層的第三方庫,而那些底層庫大多又是用C或C++語言編寫的,因此藉助Python的這種粘合劑能力,許多著名的第三方庫包括Python本身都能以更好的效能執行。即使在不同的平臺,你也不必擔心效能損失。

Google的支援以及一個強大的社群

Python並不是一個很新的程式語言了,它誕生於1991年,由於是免費的,你可以很方便地獲得它。Google從2006年起開始大力資助Python的發展。這對Python非常重要,因為這意味著,像Google這樣的科技巨頭,在很多優秀的專案中都會優先選擇Python,而在此過程中,Google建立了大量的Python指南和教程以及支援工具。這也反過來幫助更多小企業以及它們的開發人員加入到Python開發者的陣營中。

另一個使Python如此快速發展的重要原因是,它的背後有著一個健康、活躍的開發者社群。他們不但貢獻了大量文件、指南、教程。還建立並維護著很多知名的Python第三方庫,開發人員可以非常方便的利用PIP下載這些第三方庫,並在自己的專案中使用。另外,無論你是一個新手還是一個有經驗的開發人員,當你遇到任何Python有關的問題,都可以在社群中提問並獲得幫助。

適合教、容易學

如果讓我選擇一門程式語言用於教學的話,我首先會想到Python。不僅因為它簡單,更重要的原因是,它能更好地貼近於人工智慧時代對於開發者新的程式設計技能要求。Python有很好的資料分析處理以及機器學習的工具包,能幫助學習者方便地將它們應用到實際的工作中。而如果教學物件是年紀更小的中小學生,那麼,Python在資料科學方面的優秀特性,又能夠很好地啟發孩子們的數感,促進他們在數學方面的發展。

當然,Python語言本身具有清晰、簡潔的語法結構,更貼近於自然語言,執行高效,以及不需要構建、編譯便可以直接執行的特點也都非常適合於初學者學習。如果你正在考慮學習一門對未來有用的程式語言,那麼Python無疑會是你的最佳選擇

如何開始

如果和我一樣,你也已經決定學習Python,那麼一個良好的開始無疑會幫助你獲得成功。關於如何起步,我相信每個人都有自己不同的偏好。有些喜歡買書,比較系統地進行學習,比如:《笨辦法學程式設計》、《和孩子一起學程式設計》是針對成人或孩子不錯的Python入門書籍。有些則喜歡通過網上視訊學習,比如慕課網、網易雲課堂、騰訊課堂等等,也都有不錯的Python入門課程,而且大多是免費的。還有一些喜歡用App以互動的方式學習,比如codedemy

而最近,我一直在用,也給我的孩子使用的學習平臺是sololearn。它以簡練的文字說明與程式碼示例為主,配合每個知識點的問答測試,很適合初學者起步。此外,它還設計了一些很有特色的功能,比如:一個提供問答與討論的社群,可供程式碼執行測試的PlayGround,釋出程式碼並接受他人的點評,程式設計能力挑戰,以及達到每一項成就便可獲得的獎章等等,這些都能激勵初學者們去不斷提升自己的程式設計能力,並鼓勵他們將所學到的東西應用到實踐中。

1399853-5404fd8c28bb112c.png

在Python領域,我還只能算是個初學者。我將Python視為自己的第二程式語言,去解決工作中經常遇到的資料處理、分析問題。我還希望通過學習那些優秀的機器學習庫,將智慧引入到自己的工作中。相信我,你也不用成為這些方面的專家,只需要學一點Python,然後嘗試著去運用,它們便會像魔法一樣改變你的工作和生活。

相關文章