前端哪一個(gè)更好找工作?
關(guān)心這個(gè)問(wèn)題的伙伴還是太多的哈, 這里重點(diǎn)細(xì)說(shuō)一下:
首先在講解python的優(yōu)勢(shì)之前, 大家需要先將這里的語(yǔ)言進(jìn)行一個(gè)分類, 這里我們按照動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言來(lái)分類:
動(dòng)態(tài)語(yǔ)言:
python, javascript, php, ruby等
靜態(tài)語(yǔ)言:
java, c, c++, go等
【注】: 動(dòng)態(tài)語(yǔ)言也經(jīng)常被大家稱為腳本語(yǔ)言, 由于經(jīng)常被稱為腳本語(yǔ)言, 所以大多數(shù)時(shí)候大家都認(rèn)為一些簡(jiǎn)單的任務(wù)就用python來(lái)說(shuō), 大型的項(xiàng)目python就做不了或者做不好,實(shí)際上這是一個(gè)很大的誤區(qū)。 為了糾正大家對(duì)這個(gè)問(wèn)題的看法, 后面我們都以動(dòng)態(tài)語(yǔ)言來(lái)描述python。
1. 動(dòng)態(tài)語(yǔ)言的優(yōu)勢(shì)
大家要清楚: python是面向?qū)ο蟮膭?dòng)態(tài)語(yǔ)言。
為了清楚python的優(yōu)勢(shì), 大家首先需要理解的是動(dòng)態(tài)語(yǔ)言的優(yōu)勢(shì), 然后要明白python在眾多動(dòng)態(tài)語(yǔ)言中的優(yōu)勢(shì)。
a. 在靜態(tài)語(yǔ)言中的一些高級(jí)概念,如java中的反射以及基于反射實(shí)現(xiàn)的AOP, 這些概念對(duì)java初學(xué)者以及只有一兩年工作經(jīng)驗(yàn)的人來(lái)說(shuō),這幾個(gè)概念是很難理解的,更不用說(shuō)如何去自己實(shí)現(xiàn)。如果大家使用過(guò)AOP的話就會(huì)明白這幾個(gè)概念從理解到熟練使用是比較難的, 而且開(kāi)發(fā)效率會(huì)比較低,盡管同學(xué)可能會(huì)說(shuō)“其實(shí)使用起來(lái)還是很簡(jiǎn)單啊”, 那可能是因?yàn)槟銢](méi)有用過(guò)動(dòng)態(tài)語(yǔ)言中的裝飾器。
b. 動(dòng)態(tài)語(yǔ)言中對(duì)于java中的AOP這種概念直接使用裝飾器就可以完成而且是python語(yǔ)言本身的一部分。并不像java中還需要引入第三方來(lái)完成。
c. python能輕松完成這些正是由于python是一門(mén)動(dòng)態(tài)語(yǔ)言, 動(dòng)態(tài)語(yǔ)言的特性使得大家去自己控制整個(gè)類的初始化以及動(dòng)態(tài)去改變對(duì)象變的異常簡(jiǎn)單, 這些特性使得動(dòng)態(tài)語(yǔ)言的靈活性遠(yuǎn)遠(yuǎn)超過(guò)靜態(tài)語(yǔ)言。
d. 大家在學(xué)習(xí)和通過(guò)python開(kāi)發(fā)系統(tǒng)的時(shí)候首先要充分利用動(dòng)態(tài)語(yǔ)言的特性去完成自己的功能, 有時(shí)候在靜態(tài)語(yǔ)言中需要很多技巧和添加多個(gè)臨時(shí)變量才能完成的功能, 使用動(dòng)態(tài)語(yǔ)言的特性只需要一兩行代碼就完成了。
關(guān)于動(dòng)態(tài)語(yǔ)言的學(xué)習(xí)大家可以自己去學(xué)習(xí)一下, 但是大家一定要明白: 動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言編碼有很大的不同, 要適應(yīng)動(dòng)態(tài)語(yǔ)言特性去開(kāi)發(fā), 不要拿著舊有的靜態(tài)語(yǔ)言編碼思維去用python,要不然大家就會(huì)覺(jué)得python好像也沒(méi)有什么特別之處,只能處理一些簡(jiǎn)單的事情。 這種觀念是不對(duì)的。等到你充分體驗(yàn)到動(dòng)態(tài)語(yǔ)言的特性,你就會(huì)發(fā)現(xiàn):以前很多一定要用設(shè)計(jì)模式來(lái)實(shí)現(xiàn)的功能,在動(dòng)態(tài)語(yǔ)言中竟然不需要也能輕松實(shí)現(xiàn)。
2. 方便而且性能高基本用法
上面我只是簡(jiǎn)答的說(shuō)了一下動(dòng)態(tài)語(yǔ)言,大家就可以感受到python作為一個(gè)動(dòng)態(tài)語(yǔ)言比java等靜態(tài)語(yǔ)言的優(yōu)勢(shì)。但是實(shí)際上并不止這些, python內(nèi)置的一些函數(shù)和用法更加使得python比java等靜態(tài)語(yǔ)言編碼更加快速和高效。
大家如果學(xué)習(xí)過(guò)python基礎(chǔ)就會(huì)知道數(shù)組、字典、字符串等這些基本概念的操作是遠(yuǎn)遠(yuǎn)比java方便的多, 而且大家要知道這里面的很多用法的實(shí)現(xiàn)底層是用c來(lái)實(shí)現(xiàn)的, 所有這些基本用法的性能都是很高的。大家不要小看這些基本用法,這些用法才是我們平時(shí)編碼過(guò)程中寫(xiě)的最多的, 這些用法的簡(jiǎn)化會(huì)大大提高我們的開(kāi)發(fā)效率。
3. 代碼優(yōu)美和易讀性
python代碼是通過(guò)強(qiáng)制縮進(jìn)來(lái)完成的, 如果大家是java轉(zhuǎn)過(guò)來(lái)學(xué)習(xí)的最開(kāi)始會(huì)不適應(yīng), 但是很快就會(huì)適應(yīng), 因?yàn)榭s進(jìn)使得代碼很規(guī)范,而且代碼可讀性會(huì)很強(qiáng), 而且python的各種代碼規(guī)范如pep8規(guī)范會(huì)讓我們的代碼很規(guī)范。
4. 已有的強(qiáng)大的生態(tài)
python的生態(tài)有多豐富, 大家了解一下就知道了:
不管是已有的python庫(kù)還是其他語(yǔ)言開(kāi)發(fā)的框架首先支持的語(yǔ)言都包括python。
當(dāng)然這里的生態(tài)還不只是已有的框架和庫(kù)還包括諸如stackoverflow上的問(wèn)題回答等
一般開(kāi)發(fā)過(guò)程中大家會(huì)經(jīng)常遇到兩種問(wèn)題: 1. 需要一個(gè)已有的解決方案來(lái)加速自己的開(kāi)發(fā)。 2. 遇到問(wèn)題需要快速找到解答
python經(jīng)過(guò)多年的發(fā)展,不管是已有框架和庫(kù)還是問(wèn)題和答案在網(wǎng)上都有非常多的資料了。
這里說(shuō)到了生態(tài)就需要說(shuō)到go了。 go語(yǔ)言是一門(mén)比較新的語(yǔ)言,隨著近幾年docker的快速流行, go語(yǔ)言也越來(lái)越受到關(guān)注。 go語(yǔ)言從誕生之初就是奔著高并發(fā)去的, 所以作為高并發(fā)的系統(tǒng)開(kāi)發(fā)go語(yǔ)言會(huì)比java,python,php更好, 但是由于go語(yǔ)言太新了, 所有不管是框架還是問(wèn)題答案都遠(yuǎn)比Python少很多, 所有大家如果開(kāi)發(fā)中遇到問(wèn)題很容易卡住, 而且go語(yǔ)言還處于一個(gè)快速發(fā)展期,語(yǔ)言本身特性變化也會(huì)比較快而且不穩(wěn)定, 所以不建議初學(xué)者來(lái)學(xué)習(xí)。
5. 全棧開(kāi)發(fā)語(yǔ)言
我這里要說(shuō)的全棧開(kāi)發(fā)語(yǔ)言是廣義上的。
目前可以前端和后端都能完成的語(yǔ)言最流行的應(yīng)該就是javascript了, 其他語(yǔ)言幾乎都只能完成服務(wù)端開(kāi)發(fā)。
但是大家要明白:實(shí)際上并沒(méi)有一門(mén)語(yǔ)言是完全的全棧開(kāi)發(fā),即使是使用javascript的人在平時(shí)開(kāi)發(fā)中也只能側(cè)重于后端開(kāi)發(fā)或者前端開(kāi)發(fā)。
所以這里首先要讓大家對(duì)全棧的理解有一個(gè)觀點(diǎn):
全棧不是說(shuō)能同時(shí)開(kāi)發(fā)移動(dòng)端,pc端就叫全棧。
真正的全棧應(yīng)該是有能力去快速學(xué)習(xí)和使用現(xiàn)有的解決方案而不是去學(xué)習(xí)所有語(yǔ)言。因?yàn)榧夹g(shù)和框架太多。沒(méi)有人能學(xué)習(xí)到所有的語(yǔ)言和框架, 但是如果一個(gè)人能很好的解決遇到的各種問(wèn)題才是真正的全棧, 比如系統(tǒng)數(shù)據(jù)庫(kù)有瓶頸了, 能快速的去找到問(wèn)題和找到解決方案, 比如系統(tǒng)需要適應(yīng)移動(dòng)端, 你能快速的去學(xué)習(xí)某一門(mén)解決方案去加速開(kāi)發(fā), 比如系統(tǒng)并發(fā)遇到問(wèn)題了,你能快速的去學(xué)習(xí)和解決并發(fā)問(wèn)題。這樣的人才是全棧
那為什么我這里要說(shuō)python是一門(mén)全棧語(yǔ)言呢? 前面我們提到的快速學(xué)習(xí)能力都是要基于大家有時(shí)間去學(xué)習(xí), 所以如果一門(mén)語(yǔ)言或者工具能讓你快的完成已有系統(tǒng)的開(kāi)發(fā), 讓你空出更多的時(shí)間去學(xué)習(xí)解決方案, 那這么語(yǔ)言就可以讓你把他成為全棧語(yǔ)言, 大家試想一下,對(duì)于一個(gè)會(huì)python的人來(lái)說(shuō),如果能找到對(duì)應(yīng)的python的解決方案對(duì)你來(lái)說(shuō)肯定比找到的java解決方案更加容易讓你接受,python的生態(tài)可以讓我們幾乎能找到所有python已經(jīng)實(shí)現(xiàn)的解決方案。
大家如果學(xué)習(xí)java就會(huì)知道, java的概念和要學(xué)習(xí)的知識(shí)點(diǎn)非常多, 不管是開(kāi)發(fā)效率上還是學(xué)習(xí)時(shí)間上都會(huì)遠(yuǎn)比python多很多, 所以很多人用java的人一直都致力于如何去把java本身弄清楚而沒(méi)有時(shí)間去學(xué)習(xí)其他解決方案(這里當(dāng)然對(duì)大牛除外)。
6. 開(kāi)發(fā)領(lǐng)域多, 開(kāi)發(fā)效率高
python能使用的開(kāi)發(fā)領(lǐng)域, 相信我不說(shuō)大家也非常清楚了:
運(yùn)維
爬蟲(chóng)
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)勢(shì)了, php在web系統(tǒng)開(kāi)發(fā)中有很大的優(yōu)勢(shì),因?yàn)閜hp最初就是致力于web系統(tǒng)開(kāi)發(fā), 使得php在web系統(tǒng)開(kāi)發(fā)中具有了很大的生態(tài)優(yōu)勢(shì)。 但是python的web開(kāi)發(fā)領(lǐng)域也很強(qiáng)大, 已有的很多框架入django, flask, tornado等等,不管大家是需要一個(gè)靈活的框架還是需要一個(gè)全棧的web開(kāi)發(fā)框架還是需要一個(gè)性能高的web框架都可以滿足大家的要求。
當(dāng)然python的開(kāi)發(fā)效率是非常高的, python中面向?qū)ο蟮母拍钍潜萷hp的面向?qū)ο蟾拍顝?qiáng)的, 而且大家也會(huì)發(fā)現(xiàn)es6的語(yǔ)言也和python有很大的相似之處, 所有大家學(xué)會(huì)了python去理解javascript的話也會(huì)有很大好處。
最后說(shuō)明一下
一個(gè)高級(jí)的程序員需要學(xué)習(xí)的知識(shí)遠(yuǎn)不止語(yǔ)言本身, 還包括很多基礎(chǔ)知識(shí),這些基礎(chǔ)知識(shí)加上語(yǔ)言和框架本身才會(huì)讓我們走的更遠(yuǎn)更久, 但是學(xué)習(xí)這些知識(shí)是需要時(shí)間的,所以如何有更多的時(shí)間去學(xué)習(xí)也就成為我們領(lǐng)先別人的優(yōu)勢(shì)了。
上面只是列出了python的幾個(gè)大的優(yōu)勢(shì), 實(shí)際上還有很多細(xì)節(jié)用一篇文章或者一個(gè)問(wèn)題是無(wú)法描述清楚的。大家在熟悉python開(kāi)發(fā)后自然就會(huì)明白
開(kāi)發(fā)效率!開(kāi)發(fā)效率!, python的開(kāi)發(fā)效率比java高很多,同樣的功能代碼量應(yīng)該是java的1/3左右, 這個(gè)開(kāi)發(fā)效率可以讓大家有更多的時(shí)間陪家人和學(xué)習(xí), 知乎上有人說(shuō)過(guò):如果你要讓一個(gè)pythoner加班, 你需要和他談情懷, 談加班工資, 談股票期權(quán)才行。 如果你需要一個(gè)javaer加班你只需要告訴他編碼規(guī)范就行了。
我周圍已經(jīng)有好些朋友或者同事是c++或者java轉(zhuǎn)python開(kāi)發(fā)的, 然后打算一直就用python了。
人工智能時(shí)代的火熱, 相信會(huì)讓python越來(lái)越流行
以上只是回答了python的優(yōu)點(diǎn)并沒(méi)有否定其他語(yǔ)言, 其他語(yǔ)言的伙伴不要引起混亂哈!
----------------河南新華