有個(gè)Java程序員小伙伴跟我說(shuō),他之前是做MES系統(tǒng)開(kāi)發(fā)的,現(xiàn)在感覺(jué)做MES開(kāi)發(fā)前景不太好,所以想轉(zhuǎn)上位機(jī),他覺(jué)得,上位機(jī)程序不就是一個(gè)PC端程序嘛,Java的GUI開(kāi)發(fā)框架像Swing、JavaFX、SWT等等也可以開(kāi)發(fā)PC端程序,因此,他覺(jué)得使用Java做上位機(jī)開(kāi)發(fā)一點(diǎn)問(wèn)題都沒(méi)有,那事實(shí)是怎么樣的呢?
如果只是從程序員的角度簡(jiǎn)單得說(shuō)功能實(shí)現(xiàn)的話,的確,Java能做上位機(jī)程序!但是,這么想有些簡(jiǎn)單粗暴了!
目前,用來(lái)做上位機(jī)開(kāi)發(fā)的主流編程語(yǔ)言就C++、C#這兩種,原因很簡(jiǎn)單,那就是C++和C#在上位機(jī)開(kāi)發(fā)上有生態(tài)優(yōu)勢(shì)!
打個(gè)比方吧,現(xiàn)在大部分的Java開(kāi)發(fā)者所從事的開(kāi)發(fā)領(lǐng)域是什么呢?是不是后端開(kāi)發(fā)?而就是因?yàn)榇蟛糠諮ava程序員所從事的開(kāi)發(fā)領(lǐng)域都是后端開(kāi)發(fā),所圍繞的開(kāi)發(fā)生態(tài)也都是基于后端、服務(wù)器的,而上位機(jī)開(kāi)發(fā)的生態(tài)資源基本上都是圍繞下位機(jī)的,不是說(shuō)Java不能對(duì)接下位機(jī),只不過(guò)大部分情況下都需要“手搓”才行,因此,開(kāi)發(fā)速度是要低于C++和C#這些已經(jīng)在上位機(jī)開(kāi)發(fā)領(lǐng)域使用了多年的開(kāi)發(fā)語(yǔ)言的!
這就像C++和C#在后端生態(tài)上干不過(guò)Java是一個(gè)道理,最典型的就是C#,作為一個(gè)發(fā)展了20多年的編程語(yǔ)言,C#在游戲領(lǐng)域、網(wǎng)站開(kāi)發(fā)、后端開(kāi)發(fā)、PC端軟件開(kāi)發(fā)方面,只要是用過(guò)C#的人都知道,C#的開(kāi)發(fā)能力是要優(yōu)于Java的,推出的很多東西也是被很多面向?qū)ο蟮木幊陶Z(yǔ)言學(xué)習(xí)的。
但是,C#在后端開(kāi)發(fā)領(lǐng)域的劣勢(shì)在于初期不跨平臺(tái),因此后端開(kāi)發(fā),尤其是在移動(dòng)互聯(lián)網(wǎng)火了以后,被Java生態(tài)全面碾壓,即使是微軟后來(lái)推出了WindowsPhone想要在移動(dòng)互聯(lián)網(wǎng)領(lǐng)域和Java抗衡,但是最終也只能以失敗告終,WindowsPhone也因此銷(xiāo)聲匿跡。
這跟Java現(xiàn)在的境遇很像,現(xiàn)在Java介入上位機(jī)開(kāi)發(fā)領(lǐng)域,我覺(jué)得結(jié)果會(huì)和當(dāng)初C#想要介入移動(dòng)互聯(lián)網(wǎng)領(lǐng)域是一樣的,最終很大概率也是會(huì)以失敗告終的!
從開(kāi)發(fā)生態(tài)上來(lái)說(shuō),工業(yè)領(lǐng)域幾乎所有的硬件SDK,基本上只會(huì)提供C#版本和C++的cpp版本,甚至有很多對(duì)通信速度要求很高的硬件,只提供C++版本,偶爾會(huì)看到有硬件廠商提供Python的版本,但是我?guī)缀鯖](méi)有看到過(guò)有硬件廠商提供Java版本的SDK,Java的處境只能用一個(gè)“大寫(xiě)的尷尬”來(lái)形容了!
此時(shí),如果有公司執(zhí)意要使用Java作為上位機(jī)開(kāi)發(fā)語(yǔ)言,那面臨的結(jié)果就只能是“手搓”了,“手搓”的后果那就只能是遇到問(wèn)題需要先對(duì)照SDK先把SDK從其他編程語(yǔ)言翻譯成Java版本,然后再去找問(wèn)題,如此以來(lái)開(kāi)發(fā)速度則遠(yuǎn)低于C++和C#這種硬件通訊“源生”支持的編程語(yǔ)言了!
另外一個(gè)生態(tài)就是人!
在一個(gè)公司,大家都使用C++和C#做上位機(jī)開(kāi)發(fā),即使一個(gè)Java程序員是個(gè)頂尖“大?!保词故窃谏衔粰C(jī)開(kāi)發(fā)領(lǐng)域干了十幾二十年,但是,公司在招聘人才的時(shí)候首先考慮的就是人才的可持續(xù)性還有代碼的可延續(xù)性。
一個(gè)公司用兩套編程語(yǔ)言做開(kāi)發(fā),帶來(lái)的直接后果就是當(dāng)使用某個(gè)編程語(yǔ)言的程序員離職了,那剩下的人將無(wú)從接手!
所以,目前在上位機(jī)開(kāi)發(fā)這塊,要么公司主技術(shù)棧就是Java,否則,一般不會(huì)單獨(dú)招聘Java程序員來(lái)做上位機(jī)開(kāi)發(fā)的。
但不可否認(rèn)的是,Java現(xiàn)在的人才生態(tài)是巨大的,我曾經(jīng)統(tǒng)計(jì)過(guò)招聘網(wǎng)站上公開(kāi)的數(shù)據(jù),Java程序員的的數(shù)量至少是C#程序員的20倍!人才基數(shù)在那,而且,招聘Java程序員的難度相對(duì)招聘Java程序員的難度,也是呈倍數(shù)的!
這么多年,既做開(kāi)發(fā)、又做招聘者,在這塊我是深有體會(huì)的!
結(jié)語(yǔ)
我不敢說(shuō)Java一定就會(huì)像當(dāng)年的C#一樣,被C#在上位機(jī)開(kāi)發(fā)領(lǐng)域全面碾壓,但是,Java想要替代或者和C++還有C#在上位機(jī)開(kāi)發(fā)領(lǐng)域平分秋色,甚至是再次在上位機(jī)開(kāi)發(fā)領(lǐng)域碾壓C#,我覺(jué)得還需要一段時(shí)間,可能是五年,也可能是十年。
但是,我看到現(xiàn)在很多Java程序員實(shí)際上已經(jīng)等不及了,我在公司是負(fù)責(zé)招聘的,我都不知道收到過(guò)多少份Java程序員來(lái)應(yīng)聘上位機(jī)開(kāi)發(fā)崗位的簡(jiǎn)歷了,但是,很遺憾,不行就是不行,至少現(xiàn)在不行!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.