軟件開發(fā)是一種特殊的職業(yè),特殊到有點(diǎn)匪夷所思,行業(yè)從業(yè)人員的工種分類非常的不穩(wěn)定, 比如說(shuō)古時(shí)候有C工程師、C++工程師、VB工程師,后來(lái)有了Java工程師、.net工程師、php工程師, 再后來(lái)又有了前端開發(fā)工程師、nodejs工程師、 golang工程師、python工程師什么的, 反正每隔個(gè)幾年就會(huì)莫名其妙的蹦出來(lái)幾種新的軟件開發(fā)職業(yè),讓一批又一批的人趨之若鶩。然后這些不同的職業(yè)卻又干著一些相互重疊的事情, 比如說(shuō)網(wǎng)站,Java、.net、php工程師都可以做;比如客戶端軟件,C++、VB、Java、.net也都可以做;比如說(shuō)服務(wù)器程序,C、C++、nodejs、golang又都可以做
而且這些使用不同語(yǔ)言做不同類型軟件的工程師相互之間還具有排它性, 除了少數(shù)情況以外, 假如你想讓一個(gè)Java網(wǎng)站工程師去開發(fā)和維護(hù).net或者php技術(shù)開發(fā)的網(wǎng)站, 不好意思 ,沒(méi)門! 反過(guò)來(lái)也一樣。至于理由,用的最多的應(yīng)該就是“不會(huì)”“沒(méi)興趣”“學(xué)習(xí)成本太高”之類的,總而言之,就算這些不同的技術(shù)是用來(lái)做相同事情的,就算它們?cè)谧鲞@些相同的事情時(shí)總會(huì)用到一些相似的技巧,但它們之間總是有差異的,除非不同的技術(shù)在做某些相同的事情時(shí)用到的相似的技巧非常的多而且抹平它們之間差異的成本非常的低,否則想要在不同的技術(shù)之間平滑的過(guò)渡總是很困難的。就拿使用不同的技術(shù)做網(wǎng)站這個(gè)例子來(lái)講, 技術(shù)間相同之處有http相關(guān)的內(nèi)容、數(shù)據(jù)庫(kù)使用、服務(wù)器原理等,不同之處反正逃不出語(yǔ)言、類庫(kù)、框架,其實(shí)語(yǔ)言就可以把這三項(xiàng)內(nèi)容給囊括了, 因?yàn)樗鼈兌紝儆谡Z(yǔ)言的范疇。語(yǔ)言對(duì)于很多開發(fā)人員來(lái)說(shuō)就是一坐不可逾越的大山, 或許因?yàn)闆](méi)能力,或許因?yàn)闆](méi)興趣,或許因?yàn)闆](méi)精力,但是反正就是過(guò)不去。
再?gòu)牧硪粋€(gè)角度來(lái)分析。 像C++、Java、.net、JS這樣可以適應(yīng)各種應(yīng)用場(chǎng)景的語(yǔ)言又能派生出許多種職業(yè),如C++客戶工程師、C++服務(wù)器工程師、Java android 工程師、 Java網(wǎng)站工程師、http://asp.net網(wǎng)站工程師、.net windows客戶端工程師、JS前端開發(fā)工程師、nodejs服務(wù)器工程師,看看這架勢(shì), 光一種語(yǔ)言就能造出N種工程師,恐怖。上面我們講到, 使用不同的技術(shù)做同樣的事情 ,而這里正好相反, 使用相同的技術(shù)做不同的事情。 以這種方式劃分的不同種類的工程師,相互之間也具有一定的排它性,但總體來(lái)說(shuō)沒(méi)有根據(jù)技術(shù)來(lái)劃分種類的方式來(lái)顯有敵意,主動(dòng)想在不同種類之間過(guò)渡的程序員數(shù)量也更多,然而,相互之間過(guò)渡的成本卻一點(diǎn)也不比在不同技術(shù)之間過(guò)渡來(lái)的低。就拿現(xiàn)在最火爆的JavaScript語(yǔ)言來(lái)說(shuō), 它原來(lái)是一種網(wǎng)頁(yè)腳本語(yǔ)言, 是用來(lái)編寫網(wǎng)頁(yè)特效的, 隨著互聯(lián)網(wǎng)的火熱發(fā)展, JavaScript語(yǔ)言也開始大行其道, 近年來(lái)還發(fā)展出一種叫nodejs的服務(wù)器編程技術(shù),主打高并發(fā)高性能, 高并發(fā)和高性能啊,逼格多高的技能,掌握了就好像得到了全世界,因此無(wú)數(shù)開發(fā)人員為之瘋狂。原本使用JavaScript的前端開發(fā)工程師自然也不例外,而且這種技術(shù)使用的還是他們看家的語(yǔ)言, 仿佛占盡了先天優(yōu)勢(shì)。 然而, 事實(shí)上, 真正從網(wǎng)頁(yè)前端開發(fā)過(guò)渡到nodejs服務(wù)器開發(fā)的工程師數(shù)量寥寥無(wú)幾,因?yàn)橐ㄆ絻烧咧g差異的成本非常高,換言之它們雖然用的都是JS, 但是實(shí)現(xiàn)差異卻非常的大。 JS網(wǎng)頁(yè)特效和nodejs服務(wù)器程序的相似之處, 無(wú)非就是JavaScript語(yǔ)言, 然而除此之外卻再?zèng)]一絲重疊了。做前端頁(yè)面時(shí)使用的html、css、jquery等等和其它各種框架在寫nodejs程序時(shí)完全沒(méi)有一絲用武之地,而且寫nodejs時(shí)需要掌握的http較深層次的原理、網(wǎng)絡(luò)通信、數(shù)據(jù)庫(kù)技術(shù)等每一項(xiàng)技術(shù)都不是省油的燈、好啃的軟骨頭,而這些正是大多數(shù)前端程序