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