人工智能時代,是時候?qū)W點Python了
“是時候?qū)W點Python了”。作為一名不怎么安分的程序員,你或許覺得,產(chǎn)生這樣的想法并不奇怪,但學習Python卻是出于自己對工作現(xiàn)狀以及如何應對未來挑戰(zhàn)所作出的思考。
讀過我以前博客的朋友,可能都知道,我推崇軟件領(lǐng)域中的匠人精神,將軟件開發(fā)也視為一種制作,并將優(yōu)秀的產(chǎn)品歸納為功能性與美感的結(jié)合。這在過去或許是普遍適用的優(yōu)秀產(chǎn)品準則,然而,今天當我們已經(jīng)站到人工智能時代的大門前時,我卻發(fā)現(xiàn)過去對于軟件產(chǎn)品的理解,已顯得有些狹隘且過時了。
未來所有的優(yōu)秀產(chǎn)品都應該是功能、美感與智能的有機結(jié)合。而這種新的智能特性無疑會給我們每一個人帶來巨大的機遇,不僅僅是我們程序員,也包那些括醫(yī)生、教師、金融從業(yè)人員亦或是學生,或正在為孩子想著學些什么的家長,每個人都有機會通過將智能引入自己的工作、產(chǎn)品、生活中,去獲得新的成功。而今天我們放眼整個軟件開發(fā)領(lǐng)域,Python無疑是那個最能為我們帶來這一智能特性的編程語言。
那么,又是什么原因使Python能在眾多編程語言中脫穎而出,它又具有哪些迷人的特性呢?
數(shù)據(jù)科學基因帶來的智能特性
Python在今天變得如此重要,一個重要的原因便是它能更方便地為我們的工作以及生活創(chuàng)造智能的特性。人工智能在最近幾年得到突飛猛進的發(fā)展,其根本原因并不在于其理論基礎(chǔ)發(fā)生了根本性的變化。
而恰恰在于,互聯(lián)網(wǎng)飛速發(fā)展之后,積累的大量可供分析的數(shù)據(jù),以及對這些數(shù)據(jù)進行處理、分析以及預測的能力的顯著提升(包括云計算提供的強大分布式運算能力,摩爾定律下每一個計算單元成本的持續(xù)降低,加之以神經(jīng)網(wǎng)絡(luò)為代表的深度學習算法的應用),使我們得到了超乎想象的人工智能。
在很多領(lǐng)域,比如被視為人類智慧最***的棋類游戲——圍棋,過去只有讀過那些名校才能得到的投行工作,甚至是需要豐富經(jīng)驗的醫(yī)生、律師、飛行員,這些專業(yè)性要求極高的工作,都越來越多地受到來自人工智能的挑戰(zhàn),有的甚至已被完全超越。
雖然有人對此表示擔憂,但我卻持樂觀的態(tài)度,并相信這是加速回歸定律(技術(shù)的不斷加速是加速回歸定律的內(nèi)涵和必然結(jié)果,這個定律描述了進化節(jié)奏的加快,以及進化過程中產(chǎn)物的指數(shù)增長?!镀纥c臨近》、《機器之心》等書中,都將此理論作為對未來預測的基礎(chǔ))作用下的必然結(jié)果。
況且就目前而言,那些可預見的人工智能,更多取代的是那些需要基于復雜模式進行精確識別與處理的工作,這返過來將會解放更多人力,使我們可以在人工智能的協(xié)助下,將更多時間和精力投入到更具創(chuàng)造性和情感價值的有趣工作中。
而Python正是以數(shù)據(jù)科學而聞名,它擁有著極其豐富且穩(wěn)定的數(shù)據(jù)科學工具環(huán)境,從而助推其成為大數(shù)據(jù)和云計算中***的語言之一。而它的這種數(shù)據(jù)科學基因,也自然地延伸到了機器學習領(lǐng)域,今天,我們非常熟悉的眾多機器學習庫,如scikit-learn、Tensorflow等都基于或支持Python語言開發(fā)。我們可以很方便地使用它們,去構(gòu)建自己的智能應用。
令人著迷數(shù)據(jù)分析與處理能力
Python被設(shè)計為有著廣泛通用性的編程語言,你幾乎可以利用它來做任何事情,包括創(chuàng)建Web應用或桌面應用、編寫程序腳本、配置服務器等等。但最令我著迷的還是它的看家本領(lǐng)——數(shù)據(jù)的分析與處理。我已經(jīng)用JAVA寫了十多年代碼,也早已習慣使用它,處理工作中遇到的各種問題。但當我開始接觸Python之后,便立刻為它在數(shù)據(jù)處理與分析方面的強大功能與便利性而感到著迷。
雖然還只能算是個新手,但我已經(jīng)嘗試著使用Pandas(全稱:Python Data Analysis Library,是一個基于 Numpy 構(gòu)建的含有更高級數(shù)據(jù)結(jié)構(gòu)和工具的數(shù)據(jù)分析包),寫了不少簡單的數(shù)據(jù)處理程序,這些程序都很短小,有的甚至才十幾行代碼,然而它們所能達到的效果,卻是以前用JAVA需要3倍,甚至更多的代碼量才能實現(xiàn)的。
而且這些程序在運行速度和效率上,也絲毫不落下風,這點令我頗為驚喜。現(xiàn)在凡涉及到數(shù)據(jù)處理的工作,我都會優(yōu)先選擇Python。雖然只是換了一種編程語言,但這一改變卻已著實大大提升了我的工作效率。
這不禁又讓我想到最近讀到的一篇非常有趣的文章,說的是一個醫(yī)生如何通過自學Python,將一些智能分析算法應用于病人診斷數(shù)據(jù)比對,以及超聲圖像分析,使自己從過去復雜而重復的工作中解放出來,變得效率倍增的故事。
我暗想,這應該是個頗有遠見的醫(yī)生,利用Python賦予的數(shù)據(jù)處理能力,將智能引入到自己的工作和生活中,一切便隨之發(fā)生了改變。其實,和這位醫(yī)生一樣,我們很多人的工作都是與數(shù)據(jù)或圖像打交道,并基于一定的模式去處理它們,何不學學那位醫(yī)生,也學點Python,然后嘗試著去改變一下自己的工作和生活呢?
簡單、可靠、高效
還是讓我們回到語言本身,很多人會將Python稱為一門優(yōu)雅的編程語言。關(guān)于編程語言的美學問題,不在這篇文章的探究范圍內(nèi),但Python留給我這個老程序員的印象,概括起來便是:簡單、可靠、高效。打個可能不太恰當?shù)谋确剑駱O了紅樓夢中的經(jīng)典人物形象:王熙鳳,雷厲風行,三下五除二便把一件復雜的事情處理得干干凈凈,毫不拖泥帶水。這可能也正是我越來越喜歡它的原因吧。
簡單
我前后接觸過不少編程語言,對我來說開發(fā)語言的語義都大致相同,而在語法上,Python無疑是簡單而精煉的,它似乎生來就是為程序員編碼效率而考慮的編程語言。這一點可能也與Python本身是一門解釋型語言有關(guān)。很多在其他編程語言編譯階段,需要給出的類型限制或約束,在Python中都可以省略。從下面兩個簡單的Python與Java對比的例子中,你也一定能看出Python語言簡潔的特點。
另外,Python語言也被設(shè)計得更接近于自然語言,比如:在Python中并沒有使用很多編程語言中用的”{}”來限定代碼塊,而完全采用縮進的方式加以限制。雖然很多程序員一開始會覺得不太習慣,但這卻在不經(jīng)意間,使Python代碼更為整潔、一致,也就提供了更加良好的可讀性。
可靠
Python非常可靠,你可以將它使用在任何場景中,比如網(wǎng)頁開發(fā)、PC應用程序、數(shù)據(jù)處理、移動應用程序、硬件等等。
而且在幾乎每一個領(lǐng)域,Python都提供了非常穩(wěn)定且可靠的框架或第三方庫,從用于構(gòu)建Web應用的Danjo,科學計算領(lǐng)域的NumPy,Pandas和SciPy,機器學習領(lǐng)域大名鼎鼎的scikit-learn,以及用于自然語言處理的nltk,你可以利用它們,輕松地構(gòu)建不同用途的應用。并且,由于Python本身便是跨平臺的,你也不必擔心兼容性的問題。
高效
高效似乎一直與Python這樣的解釋型語言無關(guān),然而,Python卻有其獨到之處。由于Python本身能夠非常方便地調(diào)用更底層的第三方庫,而那些底層庫大多又是用C或C++語言編寫的,因此借助Python的這種粘合劑能力,許多著名的第三方庫包括Python本身都能以更好的性能運行。即使在不同的平臺,你也不必擔心性能損失。
Google的支持以及一個強大的社區(qū)
Python并不是一個很新的編程語言了,它誕生于1991年,由于是免費的,你可以很方便地獲得它。Google從2006年起開始大力資助Python的發(fā)展。這對Python非常重要,因為這意味著,像Google這樣的科技巨頭,在很多優(yōu)秀的項目中都會優(yōu)先選擇Python,而在此過程中,Google創(chuàng)建了大量的Python指南和教程以及支持工具。這也反過來幫助更多小企業(yè)以及它們的開發(fā)人員加入到Python開發(fā)者的陣營中。
另一個使Python如此快速發(fā)展的重要原因是,它的背后有著一個健康、活躍的開發(fā)者社區(qū)。他們不但貢獻了大量文檔、指南、教程。還創(chuàng)建并維護著很多知名的Python第三方庫,開發(fā)人員可以非常方便的利用PIP下載這些第三方庫,并在自己的項目中使用。另外,無論你是一個新手還是一個有經(jīng)驗的開發(fā)人員,當你遇到任何Python有關(guān)的問題,都可以在社區(qū)中提問并獲得幫助。
適合教、容易學
如果讓我選擇一門編程語言用于教學的話,我首先會想到Python。不僅因為它簡單,更重要的原因是,它能更好地貼近于人工智能時代對于開發(fā)者新的編程技能要求。Python有很好的數(shù)據(jù)分析處理以及機器學習的工具包,能幫助學習者方便地將它們應用到實際的工作中。而如果教學對象是年紀更小的中小學生,那么,Python在數(shù)據(jù)科學方面的優(yōu)秀特性,又能夠很好地啟發(fā)孩子們的數(shù)感,促進他們在數(shù)學方面的發(fā)展。
當然,Python語言本身具有清晰、簡潔的語法結(jié)構(gòu),更貼近于自然語言,運行高效,以及不需要構(gòu)建、編譯便可以直接運行的特點也都非常適合于初學者學習。如果你正在考慮學習一門對未來有用的編程語言,那么Python無疑會是你的***選擇。
如何開始
如果和我一樣,你也已經(jīng)決定學習Python,那么一個良好的開始無疑會幫助你獲得成功。關(guān)于如何起步,我相信每個人都有自己不同的偏好。
有些喜歡買書,比較系統(tǒng)地進行學習,比如:《笨辦法學編程》、《和孩子一起學編程》是針對成人或孩子不錯的Python入門書籍。有些則喜歡通過網(wǎng)上視頻學習,比如慕課網(wǎng)、網(wǎng)易云課堂、騰訊課堂等等,也都有不錯的Python入門課程,而且大多是免費的。還有一些喜歡用App以交互的方式學習,比如codedemy。
而最近,我一直在用,也給我的孩子使用的學習平臺是sololearn。它以簡練的文字說明與代碼示例為主,配合每個知識點的問答測試,很適合初學者起步。
此外,它還設(shè)計了一些很有特色的功能,比如:一個提供問答與討論的社區(qū),可供代碼執(zhí)行測試的PlayGround,發(fā)布代碼并接受他人的點評,編程能力挑戰(zhàn),以及達到每一項成就便可獲得的獎章等等,這些都能激勵初學者們?nèi)ゲ粩嗵嵘约旱木幊棠芰?,并鼓勵他們將所學到的東西應用到實踐中。
在Python領(lǐng)域,我還只能算是個初學者。我將Python視為自己的第二編程語言,去解決工作中經(jīng)常遇到的數(shù)據(jù)處理、分析問題。我還希望通過學習那些優(yōu)秀的機器學習庫,將智能引入到自己的工作中。相信我,你也不用成為這些方面的專家,只需要學一點Python,然后嘗試著去運用,它們便會像魔法一樣改變你的工作和生活。
【本文是51CTO專欄作者“陳逸鶴”的原創(chuàng)文章,如需轉(zhuǎn)載請聯(lián)系作者本人(微信公眾號:techmask)】