软件开发是一种特殊的职业,特殊到有点匪夷所思,行业从业人员的工种分类非常的不稳定, 比如说古时候有C工程师、C++工程师、VB工程师,后来有了Java工程师、.net工程师、php工程师, 再后来又有了前端开发工程师、nodejs工程师、 golang工程师、python工程师什么的, 反正每隔个几年就会莫名其妙的蹦出来几种新的软件开发职业,让一批又一批的人趋之若鹜。然后这些不同的职业却又干着一些相互重叠的事情, 比如说网站,Java、.net、php工程师都可以做;比如客户端软件,C++、VB、Java、.net也都可以做;比如说服务器程序,C、C++、nodejs、golang又都可以做

而且这些使用不同语言做不同类型软件的工程师相互之间还具有排它性, 除了少数情况以外, 假如你想让一个Java网站工程师去开发和维护.net或者php技术开发的网站, 不好意思 ,没门! 反过来也一样。至于理由,用的最多的应该就是“不会”“没兴趣”“学习成本太高”之类的,总而言之,就算这些不同的技术是用来做相同事情的,就算它们在做这些相同的事情时总会用到一些相似的技巧,但它们之间总是有差异的,除非不同的技术在做某些相同的事情时用到的相似的技巧非常的多而且抹平它们之间差异的成本非常的低,否则想要在不同的技术之间平滑的过渡总是很困难的。就拿使用不同的技术做网站这个例子来讲, 技术间相同之处有http相关的内容、数据库使用、服务器原理等,不同之处反正逃不出语言、类库、框架,其实语言就可以把这三项内容给囊括了, 因为它们都属于语言的范畴。语言对于很多开发人员来说就是一坐不可逾越的大山, 或许因为没能力,或许因为没兴趣,或许因为没精力,但是反正就是过不去。

再从另一个角度来分析。 像C++、Java、.net、JS这样可以适应各种应用场景的语言又能派生出许多种职业,如C++客户工程师、C++服务器工程师、Java android 工程师、 Java网站工程师、网站工程师、.net windows客户端工程师、JS前端开发工程师、nodejs服务器工程师,看看这架势, 光一种语言就能造出N种工程师,恐怖。上面我们讲到, 使用不同的技术做同样的事情 ,而这里正好相反, 使用相同的技术做不同的事情。 以这种方式划分的不同种类的工程师,相互之间也具有一定的排它性,但总体来说没有根据技术来划分种类的方式来显有敌意,主动想在不同种类之间过渡的程序员数量也更多,然而,相互之间过渡的成本却一点也不比在不同技术之间过渡来的低。就拿现在最火爆的JavaScript语言来说, 它原来是一种网页脚本语言, 是用来编写网页特效的, 随着互联网的火热发展, JavaScript语言也开始大行其道, 近年来还发展出一种叫nodejs的服务器编程技术,主打高并发高性能, 高并发和高性能啊,逼格多高的技能,掌握了就好像得到了全世界,因此无数开发人员为之疯狂。原本使用JavaScript的前端开发工程师自然也不例外,而且这种技术使用的还是他们看家的语言, 仿佛占尽了先天优势。 然而, 事实上, 真正从网页前端开发过渡到nodejs服务器开发的工程师数量寥寥无几,因为要抹平两者之间差异的成本非常高,换言之它们虽然用的都是JS, 但是实现差异却非常的大。 JS网页特效和nodejs服务器程序的相似之处, 无非就是JavaScript语言, 然而除此之外却再没一丝重叠了。做前端页面时使用的html、css、jquery等等和其它各种框架在写nodejs程序时完全没有一丝用武之地,而且写nodejs时需要掌握的http较深层次的原理、网络通信、数据库技术等每一项技术都不是省油的灯、好啃的软骨头,而这些正是大多数前端程序