为什么做 Java 开发的公司需要那么多程序员?

本来没想太认真回答这个问题,但是经过不断补充完善,现在已经超一万两千字了。有些描述不当的地方,还有拼音输入引起的错字,都请及时指正。有些文字可能比较偏激和悲观,但我的本意是希望能够唤醒那些做企业应用的公司和里面的Java程序员。

作为一个41岁的老码农,确实需要给刚入行的新人或者正在项目组迷茫的程序员交代点什么了。

本文的主要内容:

领导层的梦想,以及九大特点。

程序员的梦想,以及三大谎言。

三个不愿分离,三个不愿统一。

正是上面这些原因造成公司觉得程序员永远不够用。

科学技术是第一生产力,人不是!如果非要说人也是,那么只有掌握科学技术的人才是。

科学技术是第一生产力,管理不是!如果非要说管理也是,那么只有适应当前技术并能解放生产力的管理制度才是。

透过现象看本质。

Java是企业应用市场的王者,如果一家非互联网公司用Java,那么十有八九是做企业应用的。

所以,这个问题本质上是:为什么做企业应用的公司需要那么多Java程序员。

开发企业应用的公司和程序员都有其自身的特点,我们分别展开说一下。

我们先说说做企业应用的公司

下面9点不一定在所有公司身上都存在,但肯定是大同小异。

  1. 相对于互联网来说,企业应用不是一个公平竞争的市场。互联网公司创业之初往往是因为有好想法好技术,企业应用公司创业之初是因为老板有人脉有关系。大部分做企业应用的公司都是靠老板的人脉关系活着,靠在某个领域的关系垄断霸占着这块业务。而且也因为老板和高层习惯于人脉和关系,公司也会形成官僚国企文化,而不是工程师文化。所以这些公司技术老旧薄弱,技术人员也从来不会被重视。很多公司虽然有个高新技术认证,但根本没有任何技术含量可言。
  2. 客户是甲方是老板的上帝,老板得罪不起,因为得罪了就自毁人脉和关系,就没有在这个行业立足之本。特别是行业圈子有限,客户之间都是有联系的,得罪一个就会传到别人拿去。所以甲方可以蛮横的在需求、设计、技术方案等各种环节上提出自己的修改要求。而绝大多数甲方都是自以为是,什么都不懂,仅仅是为了表明自己懂或向领导证明自己懂。在项目实施过程中,和客户对接的程序员完全处于弱势。心中几万匹草泥马奔腾着,却要点头称是,敢怒不敢言。
  3. 有些甲方其实根本就不懂自己的行业,或者根本不能代表最终用户,不知道自己的需求到底是什么。往往就是一句话:你先做出来再说。所以无意义的需求变更过于频繁,甚至有可能彻底推翻重来。而且这些甲方都是恨不能XP用一辈子的人,他们见不得任何新颖的设计。比如你用了现代化的前端,他们反而不买账,就觉得老界面舒服。你用Spring Boot了,他们认为你连Tomcat都不知道,反而觉得你太Low。这就更进一步助长了公司内部一些不思进取的人,他们拿着尚方宝剑说:用户不认可这样!
  4. 项目招标同质化竞争,明着互相压价、暗着陪标围标等各手段都上。一家公司提出免费维护三年,另一家就可能提出免费维护五年。反正不管将来怎么样,先要把这个项目拿下来再说。最后项目工期可能是合同上的两倍,而且还要面临着验收后好几年的维护期。维护期往往就需要搭一个人进去,没有任何利润可言。最后造成项目整体式亏本,能收支平衡就不错了。
  5. 不像互联网应用那样,客户是网民,没有地域限制。企业应用的客户很可能不在公司本地。客户需要人员驻场开发才放心,我花了钱了就要见到你们的人,否则我怎么控制进度,我怎么知道你们是不是用最后两个月突击完成的。所以差旅住宿成本飙升。为了能有新项目收入,就必然不惜血本继续拿新项目。然后新项目又不断压价,造成恶性循环。
  6. 公司成立之初,可能有几个骨干技术人员。随着公司慢慢发展,他们就成了技术副总、技术总监、技术经理什么的技术管理层。但是这些人基本不会自我提升,而是想着如何继续把公司的技术把控在自己手里,让自己永远坐在过去的功劳簿上。所以他们就禁止技术升级,禁止他们不会的任何技术出现。这样他们才有用,他们才能管理新入职的程序员。
  7. 公司不重视技术,也就不重视技术人员。技术人员永远是三等公民,远没有销售的地位高,也不如财务、行政等职能部门那些会拍马屁的。程序员在项目的投标、实施的整个生命周期中没有话语权。投标时,销售为了中标就胡乱承诺功能和时间进度,根本不会和实际开发的技术人员商量。往往只是给技术总监打个招呼,而技术总监不会考虑底层程序员的利益。实施中,面对客户的需求变更,销售和技术管理层不会和用户讨论需求变更的原因和合理性,而是会配合用户软硬兼施让程序员去实现。
  8. 在企业应用的公司里,除了程序员以外,所有人对软件开发的理解就是堆代码搬砖头,人月神话在他们这里一次一次真实上演。一堆砖头,4个人6个月能搬完,6个人4个月也可以,上12个人就可以用2个月完成!所以从老板到销售到技术总监,一遇到进度问题首先想到加人。不管是需求的原因还是技术上的困难,能给你加人就是对你最大的恩赐。
  9. 为了降低人力成本,也为了让客户看到自己公司人多,所以就招聘低水平的研发。本来应该招聘一个两万四的,但更愿意招聘两个一万二的,最后招聘的是三个八千的。这些人谈不上架构水平、代码质量、自测什么的,造成项目交付质量极差,往往让客户充当了测试的角色。这就进一步让客户对公司产生怀疑,认为公司没有全力投入,就要求你驻场开发。

总之,所有的这些因素都在不断恶性循环。循环的结果就是:做企业应用的公司可能会发展变大,但是不会变强。变大是因为研发和后期维护人员摊大饼式扩展。不会变强是因为技术常年不会有任何变化,人员层次常年不会有任何提升。没有人从提升技术水平和开发效率的方向去考虑问题,都在想如何拿更多的项目、如何跟客户玩游戏。

多说两句:

我毕业19年,一半时间在开发企业应用的公司。经历过几百上千人的国企,也经历过十几个人的小私营公司。面对的行业有政府、电网、电信、民航等等。09年以前是Weblogic平台国内专家,后来主要是Spring+前端。现在还在给多家企业做技术咨询顾问,帮助他们整体技术提升。这19年,我从未见上面的恶性循环趋缓,而是还在不断恶化下去。

我目前是在职Java开发,如果你现在也在学习Java,在入门学习Java的过程当中有遇见任何关于学习方法,学习路线,学习效率等方面的问题,你都可以申请加入我的Java新手学习交流群:798844620,这里面聚集了很多正在学习Java的初学者,非常活跃,里面还有最新的Java基础精讲视频教程,群文件里面还有我做Java技术这段时间整理的一些学习手册,面试题,开发工具,PDF文档书籍教程。

每一个有点理想的做企业应用的公司或老板都有一个梦,就是产品化。说白了就是能把产品刻成光盘卖(当然这是传统的做法,现在方网上下载也行)。因为只有这样才能突围出怪圈,走上由大变强之路。这需要公司有非常深厚的行业经验,了解用户的想法,抓住用户的痛点,从中总结和归纳出通用需求。需要有非常强的架构和设计能力,让产品可以按需裁剪、灵活定制。需要有非常强大的编码和测试水平,让产品能够稳定顺畅。

为了能够实现产品化,但又要面对现有技术水平太差的现状,很多公司就采用项目养产品的策略。就是专门成立一个产品部门或团队,从其他项目组抽调技术人员,或者新招聘几个所谓的高手,集中力量研发产品。

产品研发是一个周期长、成本高、风险大的工作,而且在真正出来满意产品前是不挣钱的,只能靠项目赚的钱来输血。这种策略往往都是失败的,因为没有一个公司有实力、有耐心去长时间养着一个不挣钱的团队。所以,几乎没有公司能实现这个梦想,都会重新回到摊大饼的老路上。

这几年一线城市生活、租房等成本飙升,而且必然会传导到程序员的薪资要求上。原来社保福利能不上的不上,必须上的按最低标准上。以后社保由税务部门统一征缴(现在暂缓实施),那就逃不掉了。所以,最近几年会有大批做企业应用的公司裁员或完蛋。因为研发人力成本是公司经营成本中最大的一部分,这部分成本在加速上升。原来活的好的公司会面临巨大压力,原来活不好的公司会面临死亡。

你可能感兴趣的:(java,编程语言,人工智能,大数据,软件开发)