Java是不是一門簡(jiǎn)單易學(xué)的、易上手的編程語(yǔ)言?
作為一個(gè)超過(guò)10年以上工作經(jīng)驗(yàn)的Java開(kāi)發(fā)者,我覺(jué)得應(yīng)該可以來(lái)回答一下。
首先說(shuō)結(jié)論;Java絕對(duì)不是最容易學(xué)或者最容易上手的語(yǔ)言。
我們稍微觀察最近幾年開(kāi)始大規(guī)模進(jìn)入大家實(shí)現(xiàn)的幾門新興編程語(yǔ)言,包括Python,包括蘋果主推的Swift等等,它們?cè)谛麄鞒跗诙疾患s而同的喜歡懟一下Java,并且理由出奇一致:
我們只需要一句話就能寫出hello
world,但是Java需要定義類,定義方法,在方法內(nèi)寫輸出,然后創(chuàng)建類的對(duì)象,再調(diào)用方法,實(shí)現(xiàn)輸出。所以你看,我們這門語(yǔ)言多么簡(jiǎn)潔和高效。
我想這也是很多新人不喜歡Java的原因。但是我們不妨深究一下Java為什么在最初的時(shí)候就被設(shè)計(jì)成這樣,順便也能回答題主的問(wèn)題。
沒(méi)錯(cuò),Java最初的理念是脫胎于C++的。C++最大的成功之處是它是一門面向?qū)ο蟮恼Z(yǔ)言。什么是面向?qū)ο??萬(wàn)事萬(wàn)物皆對(duì)象。用面向?qū)ο蟮乃枷肽軌蛟谧畲蟪潭壬夏M真實(shí)的現(xiàn)實(shí)世界。如果我們把“人”看成一個(gè)“類”,那么你我他、小張小李、隔壁練腰的老王都是這個(gè)類的獨(dú)立“對(duì)象”。
身高膚色腿長(zhǎng)就全都是這些“對(duì)象”的“屬性”,而吃飯睡覺(jué)工作等等行為就都是這些“對(duì)象”的“方法”——方法用來(lái)操控對(duì)象的屬性,從而使對(duì)象做出一定的行為。眾多對(duì)象的行為相互影響,就能做出更加驚天動(dòng)地的事情——馬爸爸這個(gè)“人類”的“對(duì)象”,用“說(shuō)話演講”這一方法,成功影響了十八羅漢們的“工作”這一方法,并提升了他們的“努力值”屬性,最終造就了現(xiàn)在的阿里帝國(guó)。
這就和我們玩升級(jí)打怪的游戲一樣,對(duì)吧。
而C++又是來(lái)源于C語(yǔ)言的。C語(yǔ)言沒(méi)有面向?qū)ο蟮母拍?,是一門純粹的“面向過(guò)程”的編程語(yǔ)言。我相信很多新手對(duì)“面向過(guò)程”這個(gè)概念都不甚了解。實(shí)際上在早期,編程的世界全部都是面向過(guò)程的,人們用程序語(yǔ)言直接去處理業(yè)務(wù)邏輯。
你說(shuō)需要在寄存器里放進(jìn)去一個(gè)變量?好吧,我先看一下寄存器是否還有空間,如果沒(méi)有的話,要看看哪些不再使用了,可以取出來(lái),騰出空間,再把新變量放進(jìn)去。這些操作在面向過(guò)程的編程思想中,每一次操作都可以只對(duì)應(yīng)一條編程語(yǔ)句或是一小段簡(jiǎn)單的邏輯塊。
如何把大象放進(jìn)冰箱?打開(kāi)冰箱門,把大象放進(jìn)去,關(guān)上冰箱門——這就是面向過(guò)程的思維方式,更直接了當(dāng)。
C語(yǔ)言是面向過(guò)程的語(yǔ)言,C++提出了面向?qū)ο蟮母拍?,但是仍然保留了面向過(guò)程的設(shè)計(jì)思想,而Java是純粹的面向?qū)ο笳Z(yǔ)言,沒(méi)有面向過(guò)程的蹤影了,它封裝了它們,程序員不再那么容易看得到了。
這也是為什么C++和Java在面世之初,被人們稱為“高級(jí)編程語(yǔ)言”的原因之一。
而前面所提到的一些新興編程語(yǔ)言,它們所標(biāo)榜的高效和簡(jiǎn)潔,其實(shí)就是典型的面向過(guò)程的編程思想。這也是新手們更容易接受和喜聞樂(lè)見(jiàn)的東西——簡(jiǎn)潔——?jiǎng)e忘了推廣語(yǔ)言也是需要宣傳的,某些時(shí)候這真的只是宣傳口徑而已。
但是你會(huì)發(fā)現(xiàn)一個(gè)很有意思的地方,如果你去蘋果官方的Swift網(wǎng)站查看,會(huì)發(fā)現(xiàn)蘋果仍然將這門語(yǔ)言稱為面向?qū)ο蟮木幊陶Z(yǔ)言,事實(shí)上確實(shí)它也支持面向?qū)ο蟮木幊谭绞健M管你能在它的很多官方文檔里看到大量的面向過(guò)程的編程思想。
想想為什么這些語(yǔ)言一邊標(biāo)榜自己比Java更簡(jiǎn)潔,又要一邊說(shuō)自己是面向?qū)ο笳Z(yǔ)言呢,這不是左右互搏么。
其實(shí)是面向?qū)ο蟮姆绞诫m然看起來(lái)冗長(zhǎng)復(fù)雜,但是它更接近人類的自然思維模式,這一點(diǎn)如果不能深刻理解面向?qū)ο蟾拍畹脑?,是很難體會(huì)的。但是它確實(shí)在軟件領(lǐng)域能夠解決很多更大規(guī)模和復(fù)雜的事情——數(shù)一數(shù)有多少互聯(lián)網(wǎng)巨頭在發(fā)展之初都是使用更簡(jiǎn)潔的編程語(yǔ)言,但最后發(fā)展到一定的規(guī)模后,都不約而同在底層基礎(chǔ)架構(gòu)層面轉(zhuǎn)向了Java吧,他們應(yīng)該沒(méi)有串通好或者被Java收買。
其實(shí)編程只是軟件工程工作過(guò)程中的一個(gè)環(huán)節(jié),而語(yǔ)言又只是編程的工具,沒(méi)有好壞之分,只有合適不合適。
新人出于本能選擇更簡(jiǎn)單更容易上手的語(yǔ)言是很正常的,但是想要在這一行業(yè)內(nèi)做出成績(jī)來(lái)是需要巨大的付出的,但這已經(jīng)和語(yǔ)言無(wú)關(guān)了。
免責(zé)聲明:內(nèi)容來(lái)源于網(wǎng)絡(luò),若涉及侵權(quán)聯(lián)系盡快刪除!