Python的優(yōu)勢
我們先將常見的語言進(jìn)行一個(gè)分類,這里按照動(dòng)態(tài)語言和靜態(tài)語言來分類:
| | | |||
| ------- |: ----:|: ----:|: ----:|: ----:|
| 動(dòng)態(tài)語言|python|javascript|php|ruby|
|靜態(tài)語言|Java|C|C++|||
**注: 動(dòng)態(tài)語言也經(jīng)常被大家稱為腳本語言, 由于經(jīng)常被稱為腳本語言, 所以大多數(shù)時(shí)候大家都認(rèn)為一些簡單的任務(wù)就用python來說青伤, 大型的項(xiàng)目python就做不了或者做不好膘壶,實(shí)際上這是一個(gè)很大的誤區(qū)灭红。 **
動(dòng)態(tài)語言的優(yōu)勢
python是面向?qū)ο蟮膭?dòng)態(tài)語言
為了清楚python的優(yōu)勢为肮, 首先需要理解的是動(dòng)態(tài)語言的優(yōu)勢, 然后要明白python在眾多動(dòng)態(tài)語言中的優(yōu)勢罢缸。
在靜態(tài)語言中的一些高級(jí)概念篙贸,如java中的反射以及基于反射實(shí)現(xiàn)的AOP, 這些概念對(duì)java初學(xué)者以及只有一兩年工作經(jīng)驗(yàn)的人來說枫疆,這幾個(gè)概念也是很難理解的爵川,更不用說如何去自己實(shí)現(xiàn)。
如果大家使用過AOP的話就會(huì)明白這幾個(gè)概念從理解到熟練使用是比較難的息楔, 而且開發(fā)效率會(huì)比較低寝贡,盡管同學(xué)可能會(huì)說“其實(shí)使用起來還是很簡單啊”, 那可能是因?yàn)槟銢]有用過動(dòng)態(tài)語言中的裝飾器值依。動(dòng)態(tài)語言中對(duì)于java中的AOP這種概念直接使用裝飾器就可以完成而且python中是語言本身的一部分圃泡。并不像java中還需要引入第三方來完成。
python能輕松完成這些正是由于python是一門動(dòng)態(tài)語言, 動(dòng)態(tài)語言的特性使得大家去自己控制整個(gè)類的初始化以及動(dòng)態(tài)去改變對(duì)象變的很簡單愿险, 這些特性使得動(dòng)態(tài)語言的靈活性遠(yuǎn)遠(yuǎn)超過靜態(tài)語言颇蜡。
大家在學(xué)習(xí)和通過python開發(fā)系統(tǒng)的時(shí)候首先要充分利用動(dòng)態(tài)語言的特性去完成自己的功能, 有時(shí)候在靜態(tài)語言中需要很多技巧和添加多個(gè)臨時(shí)變量才能完成的功能辆亏, 使用動(dòng)態(tài)語言的特性只需要一兩行代碼就完成了风秤。
關(guān)于動(dòng)態(tài)語言的學(xué)習(xí)大家可以自己去學(xué)習(xí)一下, 但是大家一定要明白: 動(dòng)態(tài)語言和靜態(tài)語言編碼有很大的不同扮叨, 要適應(yīng)動(dòng)態(tài)語言特性去開發(fā)缤弦, 不要拿著舊有的靜態(tài)語言編碼思維去用python,要不然大家就會(huì)覺得python好像也沒有什么特別之處彻磁,只能處理一些簡單的事情碍沐。
這種觀念是不對(duì)的。等到你充分體驗(yàn)到動(dòng)態(tài)語言的特性衷蜓,你就會(huì)發(fā)現(xiàn)累提,以前很多一定要用設(shè)計(jì)模式來實(shí)現(xiàn)的功能,在動(dòng)態(tài)語言中竟然不需要也能輕松實(shí)現(xiàn)恍箭。
方便而且性能高基本用法
上面簡單的說明下什么是動(dòng)態(tài)語言刻恭,大家就可以感受到python作為一個(gè)動(dòng)態(tài)語言比java等靜態(tài)語言的優(yōu)勢瞧省。
但是實(shí)際上并不止這些扯夭, python內(nèi)置的一些函數(shù)和用法更加使得python比java等靜態(tài)語言編碼更加快速和高效鳍贾。
如果學(xué)習(xí)過python基礎(chǔ)就會(huì)知道數(shù)組、字典交洗、字符串等這些基本概念的操作是遠(yuǎn)遠(yuǎn)比java方便的多骑科, 而且要知道這里面的很多用法的實(shí)現(xiàn)底層是用c來實(shí)現(xiàn)的, 所有這些基本用法的性能都是很高的构拳。
不要小看這些基本用法咆爽,這些用法才是我們平時(shí)編碼過程中寫的最多的, 這些用法的簡化會(huì)大大提高我們的開發(fā)效率置森。
代碼優(yōu)美和易讀性
python代碼是通過強(qiáng)制縮進(jìn)來完成的斗埂, 如果大家是java轉(zhuǎn)過來學(xué)習(xí)的最開始會(huì)不適應(yīng), 但是很快就會(huì)適應(yīng)凫海, 因?yàn)榭s進(jìn)使得代碼很規(guī)范呛凶,而且代碼可讀性會(huì)很強(qiáng), 而且python的各種代碼規(guī)范如pep8規(guī)范會(huì)讓我們的代碼很規(guī)范行贪。
已有的強(qiáng)大的生態(tài)
python的生態(tài)有多豐富漾稀, 我們了解一下就知道了。
不管是已有的python庫還是其他語言開發(fā)的框架首先支持的語言都包括python建瘫。
當(dāng)然這里的生態(tài)還不只是已有的框架和庫還包括諸如stackoverflow上的問題回答等一般開發(fā)過程中大家會(huì)經(jīng)常遇到兩種問題:
- 需要一個(gè)已有的解決方案來加速自己的開發(fā)崭捍。
- 遇到問題需要快速找到解答python經(jīng)過多年的發(fā)展,不管是已有框架和庫還是問題和答案在網(wǎng)上都有非常多的資料了啰脚。這里說到了生態(tài)就需要說到go了饵骨。
go語言是一門比較新的語言笼蛛,隨著近幾年docker的快速流行, go語言也越來越受到關(guān)注。
go語言從誕生之初就是奔著高并發(fā)去的来吩, 所以作為高并發(fā)的系統(tǒng)開發(fā)go語言會(huì)比java,python囊卜,php更好耍铜, 由于go語言太新了, 所有不管是框架還是問題答案都遠(yuǎn)比Python少很多泪勒, 所有大家如果開發(fā)中遇到問題很容易卡住昼蛀, 而且go語言還處于一個(gè)快速發(fā)展期,語言本身特性變化也會(huì)比較快而且不穩(wěn)定圆存, 所以不建議初學(xué)者來學(xué)習(xí)叼旋。
全棧開發(fā)語言
我這里要說的全棧開發(fā)語言是廣義上的。
目前可以前端和后端都能完成的語言最流行的應(yīng)該就是JavaScript了沦辙, 其他語言幾乎都只能完成服務(wù)端開發(fā)夫植。
但是我們要明白,實(shí)際上并沒有一門語言是完全的全棧開發(fā),即使是使用javascript的人在平時(shí)開發(fā)中也只能側(cè)重于后端開發(fā)或者前端開發(fā)详民。
所以這里首先要對(duì)全棧的理解有一個(gè)觀點(diǎn): 全棧不是說能同時(shí)開發(fā)移動(dòng)端延欠,pc端就叫全棧。
真正的全棧應(yīng)該是有能力去快速學(xué)習(xí)和使用現(xiàn)有的解決方案而不是去學(xué)習(xí)所有語言沈跨。
因?yàn)榧夹g(shù)和框架太多由捎。沒有人能學(xué)習(xí)到所有的語言和框架, 但是如果一個(gè)人能很好的解決遇到的各種問題才是真正的全棧饿凛。
比如系統(tǒng)數(shù)據(jù)庫有瓶頸了狞玛, 能快速的去找到問題和找到解決方案, 比如系統(tǒng)需要適應(yīng)移動(dòng)端涧窒, 你能快速的去學(xué)習(xí)某一門解決方案去加速開發(fā)心肪, 比如系統(tǒng)并發(fā)遇到問題了,你能快速的去學(xué)習(xí)和解決并發(fā)問題纠吴。
這樣的人才是全棧蒙畴。那為什么我這里要說python是一門全棧語言呢?
前面我們提到的快速學(xué)習(xí)能力都是要基于大家有時(shí)間去學(xué)習(xí)呜象, 所以如果一門語言或者工具能讓你快的完成已有系統(tǒng)的開發(fā)膳凝, 讓你空出更多的時(shí)間去學(xué)習(xí)解決方案, 那這么語言就可以讓你把他成為全棧語言恭陡。
試想一下蹬音,對(duì)于一個(gè)會(huì)python的人來說,如果能找到對(duì)應(yīng)的python的解決方案對(duì)你來說肯定比找到的java解決方案更加容易讓你接受休玩,python的生態(tài)可以讓我們幾乎能找到所有python已經(jīng)實(shí)現(xiàn)的解決方案著淆。
開發(fā)領(lǐng)域多, 開發(fā)效率高
python能使用的開發(fā)領(lǐng)域拴疤, 相信我不說大家也非常清楚了
- 運(yùn)維
- 爬蟲
- web系統(tǒng)
- 大數(shù)據(jù)
- 人工智能
- 云計(jì)算(openstack)
- 桌面應(yīng)用
想到的領(lǐng)域基于python都可以完成永部。
當(dāng)然即使這樣大家也需要去學(xué)習(xí)各個(gè)領(lǐng)域的框架, 但是有了python基礎(chǔ)去學(xué)習(xí)這些框架會(huì)讓高效的多呐矾。
這一點(diǎn)就比php有很大的優(yōu)勢了苔埋, php在web系統(tǒng)開發(fā)中有很大的優(yōu)勢,因?yàn)閜hp最初就是致力于web系統(tǒng)開發(fā)蜒犯, 使得php在web系統(tǒng)開發(fā)中具有了很大的生態(tài)優(yōu)勢组橄。
但是python的web開發(fā)領(lǐng)域也很強(qiáng)大, 已有的很多框架如django罚随, flask玉工, tornado等等,不管大家是需要一個(gè)靈活的框架還是需要一個(gè)全棧的web開發(fā)框架還是需要一個(gè)性能高的web框架都可以滿足大家的要求淘菩。
當(dāng)然python的開發(fā)效率是非常高的遵班, python中面向?qū)ο蟮母拍钍潜萷hp的面向?qū)ο蟾拍顝?qiáng)的, 而且大家也會(huì)發(fā)現(xiàn)es6的語言也和python有很大的相似之處, 所有大家學(xué)會(huì)了python去理解javascript的話也會(huì)有很大好處狭郑。
最后
一個(gè)高級(jí)的程序員需要學(xué)習(xí)的知識(shí)遠(yuǎn)不止語言本身腹暖, 還包括很多基礎(chǔ)知識(shí),這些基礎(chǔ)知識(shí)加上語言和框架本身才會(huì)讓我們走的更遠(yuǎn)更久愿阐, 但是學(xué)習(xí)這些知識(shí)是需要時(shí)間的,所以如何有更多的時(shí)間去學(xué)習(xí)也就成為我們領(lǐng)先別人的優(yōu)勢了趾疚。
上面只是列出了python的幾個(gè)大的優(yōu)勢缨历, 實(shí)際上還有很多細(xì)節(jié)用一篇文章或者一個(gè)問題是無法描述清楚的。大家在熟悉python開發(fā)后自然就會(huì)明白
開發(fā)效率糙麦!開發(fā)效率辛孵!, python的開發(fā)效率比java高很多赡磅,同樣的功能代碼量應(yīng)該是java的1/3左右魄缚, 這個(gè)開發(fā)效率可以讓大家有更多的時(shí)間陪家人和學(xué)習(xí), 知乎上有人說過:如果你要讓一個(gè)pythoner加班焚廊, 你需要和他談情懷冶匹, 談加班工資, 談股票期權(quán)才行咆瘟。 如果你需要一個(gè)javaer加班你只需要告訴他編碼規(guī)范就行了嚼隘。
我周圍已經(jīng)有好些朋友或者同事是c++或者java轉(zhuǎn)python開發(fā)的, 然后打算一直就用python了袒餐。
人工智能時(shí)代的火熱飞蛹, 相信會(huì)讓python越來越流行