首先大家要清楚:主流的編程語言(C/C ,java,js,python,C#,sql,Golang、OC和swift等)都是很不錯(cuò)的,都有他的優(yōu)勢(shì)和用武之地,直白點(diǎn)說就是“沒有一個(gè)不能打”。
C/C 是嵌入式開發(fā)、內(nèi)核開發(fā)幾十年的王者,java是web業(yè)務(wù)開發(fā)的王者,js在前后端用的很多,C#是微軟的主打,sql是數(shù)據(jù)庫領(lǐng)域的王者,golang是谷歌強(qiáng)推的后端開發(fā)新秀,OC和swift是蘋果的主打,都是神一般的存在,沒有弱者。
然后和python的熱火一比,都差一截。python簡直是神一般的存在,搞AI的學(xué)python,做辦公弄excel的也學(xué)python,做web開發(fā)的用python,搞嵌入式開發(fā)還有個(gè)micropython,甚至做地震預(yù)測(cè)研究的也用python。你就感覺就沒有python搞不了的事兒,why?
我就舉一個(gè)小小的栗子,大家就能明白python的特殊之處了。
假設(shè)你要做一個(gè)典型的數(shù)據(jù)處理,譬如說你有1萬個(gè)數(shù)據(jù)要排序,怎么做?用不同編程語言的人,思路是完全不同的。
譬如用C/C 的人,就會(huì)考慮這些問題:該用什么數(shù)據(jù)類型,什么數(shù)據(jù)結(jié)構(gòu)(數(shù)組、鏈表、哈希表?),什么算法,時(shí)間復(fù)雜度和空間復(fù)雜度是多少?怎樣提升處理效率?
而用python的人,定義數(shù)據(jù)結(jié)構(gòu)只需要
a = [10, 7, 4, 2, 8, 5, 1, 3]
根本不用考慮什么數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)。
排序呢,只需要
a.sort()
完了,得到結(jié)果了(當(dāng)然了,如果追求效率也可以進(jìn)一步指定細(xì)節(jié)算法,但是不關(guān)注是可以的)。
總結(jié)下。上面這個(gè)例子告訴我們python的一大特征:
python關(guān)注的是“業(yè)務(wù)邏輯”,而不是“計(jì)算機(jī)實(shí)現(xiàn)”。在python的世界里,你只需要頭腦清醒,知道自己想干嘛,并且用python表達(dá)出來去運(yùn)行就行了。你根本不需要考慮python是怎么去實(shí)現(xiàn)的,映射到計(jì)算機(jī)層面怎么做的,用了多少內(nèi)存,用了什么數(shù)據(jù)類型和算法。
python的這個(gè)特點(diǎn),使得python非常適合“非職業(yè)程序員”。什么叫非職業(yè)程序員?就是那些不是靠“編程”這件事吃飯的。程序?qū)λ麄儊碚f只是為了自己的本職工作而服務(wù)的工具,就好像我們開車去上班時(shí)車對(duì)我們來說是工具一樣。而且python的語法簡單,強(qiáng)調(diào)邏輯而不是計(jì)算機(jī)內(nèi)部原理,這使得“非職業(yè)程序員”非常適合學(xué)習(xí)和使用python來干活。譬如研究AI的數(shù)學(xué)家用python來研究驗(yàn)證自己的AI模型,譬如地震學(xué)家用python來編程研究驗(yàn)證自己的地震預(yù)測(cè)模型。
python同樣適用于職業(yè)程序員。在那些關(guān)注業(yè)務(wù)邏輯而不是計(jì)算機(jī)實(shí)現(xiàn)效率的地方,python就非常適合?,F(xiàn)在很多公司的軟件開發(fā)都是分層的,涉及到設(shè)備終端的接近硬件、注重效率的部分就用C/C ,而上層業(yè)務(wù)邏輯和應(yīng)用很多就用python。
前段時(shí)間特斯拉起訴他的工程師,就是因?yàn)楣こ處煴I取了特斯拉的6千多個(gè)python腳本,而特斯拉認(rèn)為有人拿到這些python腳本就能短時(shí)間“再造特斯拉一樣高效的管理流程”。這個(gè)新聞里你就能看出python的用武之地。
最后:寫這篇不是讓大家都趕緊去學(xué)python,更不是制造焦慮。只是想從技術(shù)分析角度告訴大家,為什么python這么火。確實(shí)不純粹是炒作因素。
做C/C 的童鞋不用著慌,還是先搞好你的C/C ,python后面找機(jī)會(huì)去擴(kuò)展下就行了。其實(shí)python主要針對(duì)的還是非底層開發(fā)領(lǐng)域,尤其對(duì)“非職業(yè)程序員”是巨大福音,重要性和matlab相仿甚至以后會(huì)遠(yuǎn)遠(yuǎn)超越matlab。