“是時(shí)候?qū)W點(diǎn)Python了”。作為一名不怎么安分的程序員渊抽,你或許覺得蟆豫,產(chǎn)生這樣的想法并不奇怪,但學(xué)習(xí)Python卻是出于自己對(duì)工作現(xiàn)狀以及如何應(yīng)對(duì)未來挑戰(zhàn)所作出的思考懒闷。讀過我以前博客的朋友十减,可能都知道栈幸,我推崇軟件領(lǐng)域中的匠人精神,將軟件開發(fā)也視為一種制作帮辟,并將優(yōu)秀的產(chǎn)品歸納為功能性與美感的結(jié)合速址。這在過去或許是普遍適用的優(yōu)秀產(chǎn)品準(zhǔn)則,然而由驹,今天當(dāng)我們已經(jīng)站到人工智能時(shí)代的大門前時(shí)芍锚,我卻發(fā)現(xiàn)過去對(duì)于軟件產(chǎn)品的理解,已顯得有些狹隘且過時(shí)了。未來所有的優(yōu)秀產(chǎn)品都應(yīng)該是功能、美感與智能的有機(jī)結(jié)合坤溃。而這種新的智能特性無疑會(huì)給我們每一個(gè)人帶來巨大的機(jī)遇,不僅僅是我們程序員逃魄,也包括那些醫(yī)生、教師澜搅、金融從業(yè)人員亦或是學(xué)生嗅钻,或正在為孩子想著學(xué)些什么的家長(zhǎng),每個(gè)人都有機(jī)會(huì)通過將智能引入自己的工作店展、產(chǎn)品、生活中秃流,去獲得新的成功赂蕴。而今天我們放眼整個(gè)軟件開發(fā)領(lǐng)域,Python無疑是那個(gè)最能為我們帶來這一智能特性的編程語言舶胀。
那么概说,又是什么原因使Python能在眾多編程語言中脫穎而出,它又具有哪些迷人的特性呢嚣伐?
數(shù)據(jù)科學(xué)基因帶來的智能特性
Python在今天變得如此重要糖赔,一個(gè)重要的原因便是它能更方便地為我們的工作以及生活創(chuàng)造智能的特性。人工智能在最近幾年得到突飛猛進(jìn)的發(fā)展轩端,其根本原因并不在于其理論基礎(chǔ)發(fā)生了根本性的變化放典。而恰恰在于,互聯(lián)網(wǎng)飛速發(fā)展之后基茵,積累的大量可供分析的數(shù)據(jù)奋构,以及對(duì)這些數(shù)據(jù)進(jìn)行處理、分析以及預(yù)測(cè)的能力的顯著提升(包括云計(jì)算提供的強(qiáng)大分布式運(yùn)算能力拱层,摩爾定律下每一個(gè)計(jì)算單元成本的持續(xù)降低弥臼,加之以神經(jīng)網(wǎng)絡(luò)為代表的深度學(xué)習(xí)算法的應(yīng)用),使我們得到了超乎想象的人工智能根灯。在很多領(lǐng)域径缅,比如被視為人類智慧最頂尖的棋類游戲——圍棋掺栅,過去只有讀過那些名校才能得到的投行工作,甚至是需要豐富經(jīng)驗(yàn)的醫(yī)生纳猪、律師氧卧、飛行員,這些專業(yè)性要求極高的工作兆旬,都越來越多地受到來自人工智能的挑戰(zhàn)假抄,有的甚至已被完全超越。
雖然有人對(duì)此表示擔(dān)憂丽猬,但我卻持樂觀的態(tài)度宿饱,并相信這是加速回歸定律(技術(shù)的不斷加速是加速回歸定律的內(nèi)涵和必然結(jié)果,這個(gè)定律描述了進(jìn)化節(jié)奏的加快脚祟,以及進(jìn)化過程中產(chǎn)物的指數(shù)增長(zhǎng)谬以。《奇點(diǎn)臨近》由桌、《機(jī)器之心》等書中为黎,都將此理論作為對(duì)未來預(yù)測(cè)的基礎(chǔ))作用下的必然結(jié)果。況且就目前而言行您,那些可預(yù)見的人工智能铭乾,更多取代的是那些需要基于復(fù)雜模式進(jìn)行精確識(shí)別與處理的工作,這返過來將會(huì)解放更多人力娃循,使我們可以在人工智能的協(xié)助下炕檩,將更多時(shí)間和精力投入到更具創(chuàng)造性和情感價(jià)值的有趣工作中。
而Python正是以數(shù)據(jù)科學(xué)而聞名捌斧,它擁有著極其豐富且穩(wěn)定的數(shù)據(jù)科學(xué)工具環(huán)境笛质,從而助推其成為大數(shù)據(jù)和云計(jì)算中最流行的語言之一。而它的這種數(shù)據(jù)科學(xué)基因捞蚂,也自然地延伸到了機(jī)器學(xué)習(xí)領(lǐng)域妇押,今天,我們非常熟悉的眾多機(jī)器學(xué)習(xí)庫姓迅,如scikit-learn敲霍、Tensorflow等都基于或支持Python語言開發(fā)。我們可以很方便地使用它們队贱,去構(gòu)建自己的智能應(yīng)用色冀。
令人著迷數(shù)據(jù)分析與處理能力
Python被設(shè)計(jì)為有著廣泛通用性的編程語言,你幾乎可以利用它來做任何事情柱嫌,包括創(chuàng)建Web應(yīng)用或桌面應(yīng)用锋恬、編寫程序腳本、配置服務(wù)器等等编丘。但最令我著迷的還是它的看家本領(lǐng)——數(shù)據(jù)的分析與處理与学。我已經(jīng)用JAVA寫了十多年代碼彤悔,也早已習(xí)慣使用它,處理工作中遇到的各種問題索守。但當(dāng)我開始接觸Python之后晕窑,便立刻為它在數(shù)據(jù)處理與分析方面的強(qiáng)大功能與便利性而感到著迷。
雖然還只能算是個(gè)新手卵佛,但我已經(jīng)嘗試著使用Pandas(全稱:Python Data Analysis Library杨赤,是一個(gè)基于 Numpy 構(gòu)建的含有更高級(jí)數(shù)據(jù)結(jié)構(gòu)和工具的數(shù)據(jù)分析包),寫了不少簡(jiǎn)單的數(shù)據(jù)處理程序截汪,這些程序都很短小疾牲,有的甚至才十幾行代碼,然而它們所能達(dá)到的效果衙解,卻是以前用JAVA需要3倍阳柔,甚至更多的代碼量才能實(shí)現(xiàn)的。而且這些程序在運(yùn)行速度和效率上蚓峦,也絲毫不落下風(fēng)舌剂,這點(diǎn)令我頗為驚喜。現(xiàn)在凡涉及到數(shù)據(jù)處理的工作暑椰,我都會(huì)優(yōu)先選擇Python霍转。雖然只是換了一種編程語言,但這一改變卻已著實(shí)大大提升了我的工作效率一汽。
這不禁又讓我想到最近讀到的一篇非常有趣的文章谴忧,說的是一個(gè)醫(yī)生如何通過自學(xué)Python,將一些智能分析算法應(yīng)用于病人診斷數(shù)據(jù)比對(duì)角虫,以及超聲圖像分析,使自己從過去復(fù)雜而重復(fù)的工作中解放出來委造,變得效率倍增的故事戳鹅。我暗想,這應(yīng)該是個(gè)頗有遠(yuǎn)見的醫(yī)生昏兆,利用Python賦予的數(shù)據(jù)處理能力枫虏,將智能引入到自己的工作和生活中,一切便隨之發(fā)生了改變爬虱。其實(shí)隶债,和這位醫(yī)生一樣,我們很多人的工作都是與數(shù)據(jù)或圖像打交道跑筝,并基于一定的模式去處理它們死讹,何不學(xué)學(xué)那位醫(yī)生,也學(xué)點(diǎn)Python曲梗,然后嘗試著去改變一下自己的工作和生活呢赞警?
簡(jiǎn)單妓忍、可靠、高效
還是讓我們回到語言本身愧旦,很多人會(huì)將Python稱為一門優(yōu)雅的編程語言世剖。關(guān)于編程語言的美學(xué)問題,不在這篇文章的探究范圍內(nèi)笤虫,但Python留給我這個(gè)老程序員的印象旁瘫,概括起來便是:簡(jiǎn)單、可靠琼蚯、高效酬凳。打個(gè)可能不太恰當(dāng)?shù)谋确剑駱O了紅樓夢(mèng)中的經(jīng)典人物形象:王熙鳳凌停,雷厲風(fēng)行粱年,三下五除二便把一件復(fù)雜的事情處理得干干凈凈,毫不拖泥帶水罚拟。這可能也正是我越來越喜歡它的原因吧台诗。
簡(jiǎn)單
我前后接觸過不少編程語言,對(duì)我來說開發(fā)語言的語義都大致相同赐俗,而在語法上拉队,Python無疑是簡(jiǎn)單而精煉的,它似乎生來就是為程序員編碼效率而考慮的編程語言阻逮。這一點(diǎn)可能也與Python本身是一門解釋型語言有關(guān)粱快。很多在其他編程語言編譯階段,需要給出的類型限制或約束叔扼,在Python中都可以省略事哭。從下面兩個(gè)簡(jiǎn)單的Python與Java對(duì)比的例子中,你也一定能看出Python語言簡(jiǎn)潔的特點(diǎn)瓜富。
另外鳍咱,Python語言也被設(shè)計(jì)得更接近于自然語言,比如:在Python中并沒有使用很多編程語言中用的"{}"來限定代碼塊与柑,而完全采用縮進(jìn)的方式加以限制谤辜。雖然很多程序員一開始會(huì)覺得不太習(xí)慣,但這卻在不經(jīng)意間价捧,使Python代碼更為整潔丑念、一致,也就提供了更加良好的可讀性结蟋。
可靠
Python非掣校可靠,你可以將它使用在任何場(chǎng)景中嵌屎,比如網(wǎng)頁開發(fā)挠将、PC應(yīng)用程序胳岂、數(shù)據(jù)處理、移動(dòng)應(yīng)用程序舔稀、硬件等等乳丰。而且在幾乎每一個(gè)領(lǐng)域,Python都提供了非常穩(wěn)定且可靠的框架或第三方庫内贮,從用于構(gòu)建Web應(yīng)用的Django产园,科學(xué)計(jì)算領(lǐng)域的NumPy,Pandas和SciPy夜郁,機(jī)器學(xué)習(xí)領(lǐng)域大名鼎鼎的scikit-learn什燕,以及用于自然語言處理的nltk,你可以利用它們竞端,輕松地構(gòu)建不同用途的應(yīng)用屎即。并且,由于Python本身便是跨平臺(tái)的事富,你也不必?fù)?dān)心兼容性的問題技俐。
高效
高效似乎一直與Python這樣的解釋型語言無關(guān),然而统台,Python卻有其獨(dú)到之處雕擂。由于Python本身能夠非常方便地調(diào)用更底層的第三方庫,而那些底層庫大多又是用C或C++語言編寫的贱勃,因此借助Python的這種粘合劑能力井赌,許多著名的第三方庫包括Python本身都能以更好的性能運(yùn)行。即使在不同的平臺(tái)贵扰,你也不必?fù)?dān)心性能損失仇穗。
Google的支持以及一個(gè)強(qiáng)大的社區(qū)
Python并不是一個(gè)很新的編程語言了,它誕生于1991年戚绕,由于是免費(fèi)的仪缸,你可以很方便地獲得它。Google從2006年起開始大力資助Python的發(fā)展列肢。這對(duì)Python非常重要,因?yàn)檫@意味著宾茂,像Google這樣的科技巨頭瓷马,在很多優(yōu)秀的項(xiàng)目中都會(huì)優(yōu)先選擇Python,而在此過程中跨晴,Google創(chuàng)建了大量的Python指南和教程以及支持工具欧聘。這也反過來幫助更多小企業(yè)以及它們的開發(fā)人員加入到Python開發(fā)者的陣營(yíng)中。
另一個(gè)使Python如此快速發(fā)展的重要原因是端盆,它的背后有著一個(gè)健康怀骤、活躍的開發(fā)者社區(qū)费封。他們不但貢獻(xiàn)了大量文檔、指南蒋伦、教程弓摘。還創(chuàng)建并維護(hù)著很多知名的Python第三方庫,開發(fā)人員可以非常方便的利用PIP下載這些第三方庫痕届,并在自己的項(xiàng)目中使用韧献。另外,無論你是一個(gè)新手還是一個(gè)有經(jīng)驗(yàn)的開發(fā)人員研叫,當(dāng)你遇到任何Python有關(guān)的問題锤窑,都可以在社區(qū)中提問并獲得幫助。
適合教嚷炉、容易學(xué)
如果讓我選擇一門編程語言用于教學(xué)的話渊啰,我首先會(huì)想到Python。不僅因?yàn)樗?jiǎn)單申屹,更重要的原因是绘证,它能更好地貼近于人工智能時(shí)代對(duì)于開發(fā)者新的編程技能要求。Python有很好的數(shù)據(jù)分析處理以及機(jī)器學(xué)習(xí)的工具包独柑,能幫助學(xué)習(xí)者方便地將它們應(yīng)用到實(shí)際的工作中迈窟。而如果教學(xué)對(duì)象是年紀(jì)更小的中小學(xué)生,那么忌栅,Python在數(shù)據(jù)科學(xué)方面的優(yōu)秀特性车酣,又能夠很好地啟發(fā)孩子們的數(shù)感,促進(jìn)他們?cè)跀?shù)學(xué)方面的發(fā)展索绪。
當(dāng)然湖员,Python語言本身具有清晰、簡(jiǎn)潔的語法結(jié)構(gòu)瑞驱,更貼近于自然語言娘摔,運(yùn)行高效,以及不需要構(gòu)建唤反、編譯便可以直接運(yùn)行的特點(diǎn)也都非常適合于初學(xué)者學(xué)習(xí)凳寺。如果你正在考慮學(xué)習(xí)一門對(duì)未來有用的編程語言,那么Python無疑會(huì)是你的最佳選擇彤侍。
如何開始
如果和我一樣肠缨,你也已經(jīng)決定學(xué)習(xí)Python,那么一個(gè)良好的開始無疑會(huì)幫助你獲得成功盏阶。關(guān)于如何起步晒奕,我相信每個(gè)人都有自己不同的偏好。有些喜歡買書,比較系統(tǒng)地進(jìn)行學(xué)習(xí)脑慧,比如:《笨辦法學(xué)編程》魄眉、《和孩子一起學(xué)編程》是針對(duì)成人或孩子不錯(cuò)的Python入門書籍。有些則喜歡通過網(wǎng)上視頻學(xué)習(xí)闷袒,比如慕課網(wǎng)坑律、網(wǎng)易云課堂、騰訊課堂等等霜运,也都有不錯(cuò)的Python入門課程脾歇,而且大多是免費(fèi)的。還有一些喜歡用App以交互的方式學(xué)習(xí)淘捡,比如codedemy藕各。
而最近,我一直在用焦除,也給我的孩子使用的學(xué)習(xí)平臺(tái)是sololearn激况。它以簡(jiǎn)練的文字說明與代碼示例為主,配合每個(gè)知識(shí)點(diǎn)的問答測(cè)試膘魄,很適合初學(xué)者起步乌逐。此外,它還設(shè)計(jì)了一些很有特色的功能创葡,比如:一個(gè)提供問答與討論的社區(qū)浙踢,可供代碼執(zhí)行測(cè)試的PlayGround,發(fā)布代碼并接受他人的點(diǎn)評(píng)灿渴,編程能力挑戰(zhàn)洛波,以及達(dá)到每一項(xiàng)成就便可獲得的獎(jiǎng)?wù)碌鹊龋@些都能激勵(lì)初學(xué)者們?nèi)ゲ粩嗵嵘约旱木幊棠芰ι叮⒐膭?lì)他們將所學(xué)到的東西應(yīng)用到實(shí)踐中蹬挤。
在Python領(lǐng)域棘幸,我還只能算是個(gè)初學(xué)者焰扳。我將Python視為自己的第二編程語言,去解決工作中經(jīng)常遇到的數(shù)據(jù)處理误续、分析問題吨悍。我還希望通過學(xué)習(xí)那些優(yōu)秀的機(jī)器學(xué)習(xí)庫,將智能引入到自己的工作中蹋嵌。相信我育瓜,你也不用成為這些方面的專家,只需要學(xué)一點(diǎn)Python欣尼,然后嘗試著去運(yùn)用,它們便會(huì)像魔法一樣改變你的工作和生活。