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