Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?
聲明:這是一篇容易引起撕逼的文章,為了祖國和諧,人民安康,請各位看官盡量理性討論。同時,這篇文章是面向一些初入行的朋友進(jìn)行一些相對中肯一點的分析和建議而已,雖然有濃厚的個人色彩,但我還是盡量以事實說話,以代碼說話,大牛們就不要拿自己的牛逼經(jīng)驗來這里裝逼了,當(dāng)然,你如果非得來跟我撕,哥們兒我奉陪。另外,由于文中以自己所在的機構(gòu)蝸牛學(xué)院所做的一些事情來舉例,如果你認(rèn)為這是軟文廣告,請止步于此。強哥打廣告,都是硬的,軟的不來(做了**還要立**的事哥不屑)。好吧,咱們進(jìn)入正題。
我先問大家一個問題,為什么中國人用刀叉是很容易上手的一件事情,而外國人用筷子,應(yīng)該是他們在中國吃飯時最痛苦的一件事情吧。為什么會這樣呢?
其實原因非常簡單,當(dāng)我們學(xué)會了一門技術(shù)難度要求更高的技能以后,再去降級學(xué)習(xí)難度更低的技能是非常容易的一件事情,反之則不然。
這個道理同樣適用于我們的學(xué)習(xí),對Java和Python都有較為豐富的使用經(jīng)驗,當(dāng)然,Java的應(yīng)用經(jīng)驗更豐富,代碼量比Python更多一些。
那到底是Python值得學(xué)習(xí)還是Java呢?
這里面有三點我必須說破,卻很少有人從這個角度來給大家做分析:
如果一個不懂2-3門編程語言的人,或者很少使用到Java或者Python,來告訴你Java好還是Python好,這是赤裸裸的不負(fù)責(zé)任。如果這個人用Python并且混得還稍微可以,他一定會告訴你Python好,如果這個人用Java,他一定會告訴你用Java好。如果兩個語言都沒有用過的鍵盤俠,他會告訴你語言都是相通的,不要糾結(jié)。每一個人都說得好有道理的樣子,于是讓你無從選擇。強哥熟練使用8種以上的編程語言,所以才稍微感覺有點資格,來說一說這兩門編程語言。雖然,從我個人的角度在我心目中,編程語言只有兩種,第一種是Java/C,第二種是其它。但是我不能通過這種偏激的方式來誤導(dǎo)大家。我們必須要明白Java和Python的各自定位。Java源自C和C++的技術(shù)體系,于1995年推出,定位于給專門的程序員設(shè)計大型的復(fù)雜分布式應(yīng)用而設(shè)計。
而Python是1991年推出(比Java還早)主要面向于系統(tǒng)管理,科研,教育和非程序員群體等。大家一定要理解清楚一個現(xiàn)實,這個世界上并不是只有程序員才需要寫程序,還有很多群體需要寫程序。比如蝸牛學(xué)院在這方面的定位就很清楚:Java開發(fā)全棧方向的學(xué)生學(xué)習(xí)Java編程和JavaScript編程,軟件測試方向的就業(yè)班學(xué)員學(xué)習(xí)Python(因為他們并非專業(yè)的程序員群體),而軟件測試方向下屬的自動化測試開發(fā)高級研修班,是Java/Python兩個方向同時存在。那你說你覺得哪個更好呢?Python比Java早4年出身,但是在國內(nèi)為什么幾乎到2010年之后,Python才逐漸火起來呢?原因很簡單,因為我們都太現(xiàn)實了。
由于大數(shù)據(jù)的盛行,由于自動化測試方面的人才需求,以及對于互聯(lián)網(wǎng)的一些基礎(chǔ)應(yīng)用系統(tǒng)的的開發(fā),企業(yè)加大了對Python人才的招聘力度(當(dāng)然,與Java比還有較大的差距),由于有一門感覺很簡單又能賺大錢的編程語言出現(xiàn)了,簡直是人類的福音啊,所以火起來了。這一點與近幾年虛火很旺的Web前端開發(fā)很像,其實絕大部分人沒什么技術(shù)能力,但是工資卻拿得不錯。這不是個人的原因,企業(yè)也很浮躁,僅此而已,一旦虛火泄了,誰能撐到最后?請各位自行腦補。
也不知道大家從哪里得來的一些“誤導(dǎo)”,覺得Python簡單,Java很難,所謂'人生苦短,我用Python'之類的。一方面,Python上手的確相對要快一點而已,僅此而已。解決復(fù)雜問題時,沒有人會覺得難點在使用哪門編程語言上,而是解決這個具體問題的算法思路上。這一點各位務(wù)必要拎清這個思路。另外一方面,由于Python近幾年的火爆,不排除一些人故意散播一些言論,來誤導(dǎo)大家使用Python。
這件事情就像這么多年,一直有人覺得學(xué)習(xí)軟件測試要容易一些一樣,很多人也是報著通過軟件測試進(jìn)入這個行業(yè),選擇了一個自己認(rèn)為沒有難度的領(lǐng)域進(jìn)入。但是,強哥發(fā)現(xiàn),當(dāng)3,5年過去了,很多測試人員目前最焦慮的就是,自己技術(shù)不夠深,在企業(yè)當(dāng)中越來越?jīng)]有競爭力了。所以最終,還是得硬著頭皮研究深層次的測試技術(shù),無論是編程,網(wǎng)絡(luò),數(shù)據(jù)庫,協(xié)議,還是自動化測試,性能測試等。
但是這個過程非常痛苦,就像我說的那樣,這個世界上99%的人都會選擇一條容易走的大路,因為懶惰,因為恐懼。而成功是屬于那1%的人一樣。這句話同樣適用于編程語言或者技術(shù)功底的訓(xùn)練上。
其實大家如果有過實際的編程經(jīng)驗,我們不妨認(rèn)真想想,當(dāng)我們研發(fā)一個系統(tǒng)的時候,究竟會用到哪些技術(shù)?
那些什么需求分析,跟測試撕逼,跟客戶撕逼,跟老板撕逼的那些爛事我們就不提了。我們就來看看純技術(shù)層面的一些基本要求:數(shù)據(jù)庫,Linux命令,網(wǎng)絡(luò)協(xié)議,接口設(shè)計,算法思路,框架,改BUG,編程,前端交互。你應(yīng)該懂我,利用不同的編程語言編寫程序只是研發(fā)過程中眾多你需要掌握的技術(shù)當(dāng)中的一塊而已。
其它,與你用哪們編程語言無關(guān),這一點如果你都理解不了,覺得強哥在忽悠你的話,那請自便吧?;蛘邠Q一個角度,會一門編程語言,而不是完整技術(shù)體系,就能當(dāng)技術(shù)大牛的情況,我覺得可能只有在你們家村里可以行得通,因為就你一個人懂。
當(dāng)然,以上我們討論是的純粹的基于技術(shù)定位,你也許可以反駁我說,難道做測試的都得懂編程,難道做Python的都不行?
這當(dāng)然不是這樣的,任何一個領(lǐng)域都有大神,隨著經(jīng)驗的豐富都能夠解決很多難題。但是,那是很久以后的事了,我們現(xiàn)在討論的是,你還在糾結(jié)Java還是Python的這件事,毫無疑問,這個時候,你仍然還是一個菜鳥,甚至連門都沒入。強哥建議大家,不要因為什么事情簡單,所以我要去做,無論是學(xué)習(xí)編程語言,還是其它,這是最要命的一個出發(fā)點,會毀了你的未來。
下面我給大家列出一段我分別使用Java和Python寫的發(fā)送一個HTTP協(xié)議的一段代碼。這段代碼收錄在強哥今年年底即將出版的一本自動化測試開發(fā)的高級教程里面,全書均采用Java進(jìn)行代碼演示,明年,我會有一本幾乎一模一樣的但是是使用Python進(jìn)行代碼實現(xiàn)的書。之所以能夠這樣,原因很簡單,Java能解決的基本問題,Python也能解決,當(dāng)然,Python能解決的,Java一樣可以。但是在干重活兒方面呢,Java更成熟一些。
Java的代碼,實現(xiàn)Agileone系統(tǒng)的需求提案新增功能:
// 實現(xiàn)需求提案的新增public void doAdd() { // 先發(fā)送POST請求實現(xiàn)登錄 String postUrl1 = 'http://localhost/agileone/index.php/common/login'; String postData1 = 'username=admin&password=admin&savelogin=true'; String resp1 = hr.sendPost(postUrl1, postData1); System.out.println(resp1); // 對sendPost()方法進(jìn)行了額外的封裝,一次封裝,處處使用 // 再發(fā)送POST請求完成新增 String postUrl2 = 'http://localhost/agileone/index.php/proposal/add'; String postData2 = 'type=Enhancement&importance=Medium&' + 'headline=&' + 'content=這是用于Java代碼測試的內(nèi)容-10009&processresult='; String resp2 = hr.sendPost(postUrl2, postData2); System.out.println(resp2);}
我們再來看看Python實現(xiàn)同樣功能的代碼:
# 導(dǎo)入urllib和http庫 import urllib import http.cookiejar # 利用cookiejar自動管理整個過程中的Cookie cj = http.cookiejar.CookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) # 利用urllib構(gòu)造POST請求并處理登錄 logindata = { 'username' : ’admin’, 'password': ’admin’, 'savelogin' : 'true' } data_encoded = urllib.parse.urlencode(logindata).encode(’utf-8’) login = opener.open('http://localhost/agileone/index.php/common/login/', data_encoded) print(login.read()) # 發(fā)送Post請求提交新增需求提案 proposaldata = {'type':'Requirement', 'importance':'medium', 'headline':'Headline from Python - 10010', 'content':'Content from Python - 10010', 'scope':'1', 'processresult':''} data_encoded = urllib.parse.urlencode(proposaldata).encode(’utf-8’) proposal = opener.open('http://localhost/agileone/index.php/proposal/add', data_encoded) print(proposal.read())
相信大家很難區(qū)分所謂的簡單與難。因為代碼幾乎都很類似,這種情況發(fā)生在很多場景,解決很多問題時都是一樣的。其實很多人之所以宣傳Python簡單易學(xué),我們拋開某些可能的商業(yè)目的或者社會心理的原因之外,Python是最好的編程語言,沒有之一,Java都是垃圾,都是落伍了的,這種睜眼說瞎話的還少嗎?
因為你很懶,懶得去求證真相而已。社會心理就是我自己是搞Python的,我怎么能說自己做的技術(shù)很Low逼呢,我自己是搞Java的,Java必然是最牛的啊)。
讓我們單純從事實出發(fā),Python簡單的原因只是因為,我們使用Python時,我們可能跟個傻子一樣,在直接調(diào)用別人給我們寫好的代碼接口而已,而Java的很多處理相對要原生一點,我們寫的代碼要稍微多一點。
但是只要完成封裝,代碼就很難說誰更簡單了。而這個封裝的過程,其實才是編程最重要的部分,如果這一部分我們都不愿意親自參與,也不想知道個中實現(xiàn)原理,你想想,你怎么可能成長為一個優(yōu)秀的程序員,還有天理嗎?讓那些勤奮的人,情何以堪。
這一點就像C語言,由于C語言更原生,更底層,幾乎沒有提供太多封裝好的代碼接口,很多問題的解決都需要我們自己寫代碼,所以這也是為什么很多人覺得C語言很難,道理是一樣的。但是,牛逼的人,都更喜歡自己創(chuàng)造。相比起C語言來說,Java和C#之類的,為我們提供的代碼接口要豐富得多,我們使用起來其實也要容易得多,結(jié)論就是,在C語言面前,其它高級語言都太簡單了,因為封裝了太多可以直接用的類庫和接口。所以,要成長為一個高級程序員,一定不是寫寫簡單的應(yīng)用而已,比如Java的源代碼是必須要去學(xué)習(xí)的,我們一定要知道這些封裝好的代碼接口的實現(xiàn)細(xì)節(jié)。否則,跟使用Python封裝好的東西,又有何本質(zhì)區(qū)別呢?
所以,請不要再糾結(jié)了。如果你把Java作為你的人生的第一門用心學(xué)習(xí)的語言,那么你只需要花極短的時間,就可以基本學(xué)會C++,JavaScript,PHP, Python,R,C#,Objective-C,Swift,Go(是的,每一門語言都可以在極短的時間學(xué)會,只是具體的問題解決和一些坑需要多積累一些實戰(zhàn)經(jīng)驗而已)。但是反過來,如果你把Python作為你的第一門語言,問題就回到外國人使用筷子這件事情上了,答案不言而喻。
所以,你未來如果要立志成為一個專業(yè)的程序員,建議先學(xué)習(xí)Java(或者C#也行,兩者有很多原理上很像,實在不行,C/C++也可以哦),那是給程序員的專屬語言,是有門檻的,所以你才能夠建立自己的競爭力。如果你只是想玩玩,感受一下,或者是把編程語言作為一個工作中的工具而已,Python是個不錯的選擇。這是面向?qū)W習(xí)的建議,如果是在企業(yè)中真實做項目,那就不要糾結(jié)了,項目需要什么,咱們就學(xué)什么,不需要那么多理由,干,才是真理。
錘子好用還是榔頭好用?
Java好還是Python好?
為什么非得二選一?
浮躁,一個吃飯的工具而已,搞技術(shù)的,通吃它們不就完了嗎,你再也不會糾結(jié)了,這,才是一個技術(shù)人員該有的狀態(tài)。難道不是嗎?
到此這篇關(guān)于Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?的文章就介紹到這了,更多相關(guān)Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
