注:文章转载自知乎

透过现象看本质。

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

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

开发企业应用的公司有其自身的特点。下面9点不一定在所有企业应用的公司身上都存在,但肯定是大同小异。

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

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

多说两句:

我毕业20年,一半时间在开发企业应用的公司,经历过几百上千人的国企,经历过十几个人的小私营公司,现在还在给多家企业做技术咨询顾问。我从未见上面的恶性循环趋缓,而是还在不断恶化下去。

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

为了能够实现产品化,但又要面对现有技术水平太差的现状,很多公司就采用项目养产品的策略。就是成立一个产品部门或团队,从其他项目组抽调技术还可以的,或者新招聘几个所谓的高手,集中力量研发产品。产品研发是一个周期长高成本风险大的工作,而且在真正出来满意产品前是不挣钱的,只能靠项目赚的钱来输血。这种策略往往都是失败的,因为没有一个公司有实力、有耐心去长时间养着一个不挣钱的团队。所以,几乎没有公司能实现这个梦想,都在继续摊大饼。

这几年一线城市生活、租房等成本飙升,而且必然会传导到程序员的薪资上。所以,最近几年会有大批做企业应用的公司完蛋。因为研发人力成本是公司经营成本中最大的一部分,这部分成本会加速上升。原来活的好的公司会面临巨大压力,原来活不好的公司会面临死亡。

下面咱们谈谈技术。

对企业的负责人,我经常描述一个场景:

有一个工地,几百号人在用铁锹铲子挖坑。我找上门去,问工头:你们知道有一种设备叫挖掘机吗?有的不知道,有的知道。有的以前在别的工地见过或开过,只是来这边以后没机会用了。如果我开一辆挖掘机来,用一天时间干的活就相当于你们这一个工人一个月的工作量,你相信吗?而更重要的是这个挖掘机是免费开源的,仅仅需要学习一下如何操作。

这几百号人的工地就是企业应用项目团队。而我说的挖掘机就是Spring Boot + 前端(Angular/React/Vue)。

正像我上面场景里描述的那样,有很多技术负责人和普通Java程序员都知道Spring Boot和前端框架。但是对于他们来说有点遥远了,可望不可即。有的Java程序员自己在偷偷学,跃跃欲试,但是这种技术氛围的公司不可能给你机会。有的技术负责人也认识到了新技术能够为公司技术带来的提升,但是自己也不会,更没有能力对下属培训和指导。如果新招聘会的人,自己连面试问什么问题都不清楚,又怕找来个水货。总之这些所谓的“新技术”对企业应用市场造成了一定的冲击,但企业自身却有各种困难无法把新技术转换成真正的生产力。

针对上述的这些情况,我特意整理了一下,里面的技术不是靠几句话就能讲清楚,所以干脆找朋友录制了一些视频,很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习Java工程化、高性能及分布式、深入浅出。性能调优、Spring,MyBatis,Netty源码分析的朋友可以加我的Java后端技术群:537775426,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频和文档资料免费分享给大家。

为什么做java开发的公司需要那么多程序员?的更多相关文章

  1. java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?)

    java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?) 很多人做Java开发2.3年之后,都会觉得自己遇到了瓶颈.什么都会又什么都不会,如何改变困境,为什么很多人写了7. ...

  2. 大学同学做Java开发比我多5K,八年老Android只会crud该转Java吗?

    最近在网上看到这样一个帖子: 做了八年Android开发,感觉这块做着也挺没意思,日常工作就是做一些架构优化,质量数据监控,改一改构建脚本,最主要的是业务负责人没有一个是做客户端的,都是后端的人. 最 ...

  3. 所有做java开发的都是些垃圾

    所有做java开发的都是些垃圾,再垃圾的框架,只要有人用,对java程序员来说那就是高性能,高可用,解耦的,非常优秀的一款框架.属于吃屎都吃的津津有味.java里的框架都是垃圾,连一个不错的都没有.比 ...

  4. 使用Eclipse-Maven-git做Java开发(3)--Eclipse的安装和配

    使用Eclipse-Maven-git做Java开发(3)--Eclipse的安装和配 https://my.oschina.net/songxinqiang/blog/474530

  5. 转载:做Java开发这一年 (火龙果软件)

    转载:http://www.uml.org.cn/success/201410205.asp 从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了. ...

  6. 一个老牌程序员说:做Java开发,怎么可以不会这 20 种类库和 API

  7. 回复《我要阻止做java开发的男朋友去创业型公司工作吗?》园友问题

    真的非常开心能收到这么多园友的关心,看到这么多的回复顿感身边处处充满爱.也非常感谢大家踊跃的帮我出谋划策,小女子在此有礼了! 我先来回答一下性别的问题(前面已经暴露了……),我是前端程序媛.大三时和男 ...

  8. 我要阻止做java开发的男朋友去创业型公司工作吗?

    命这样的标题,我没有瞧不起创业型公司,我只是有点急了,因为男朋友今天晚上就要回复招聘公司了.我先来说说来由吧. 前段时间男朋友离职了,从毕业到现在在公司呆了2年多,因为资金不足导致他做的项目被迫停止了 ...

  9. 做JAVA开发的同学一定遇到过的爆表问题,看这里解决

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由净地发表于云+社区专栏 记一次Java线上服务器CPU过载问题的排查过程,详解排查过程中用到的Java性能监测工具:jvisualvm ...

随机推荐

  1. Ubuntu软件安装与卸载

    ubuntu软件安装与卸载 更新Ubuntu软件下载地址 1. 寻找国内镜像源 所谓的镜像源:可以理解为提供下载软件的地方,比如Android手机上可以下载软件的91手机助手:iOS手机上可以下载软件 ...

  2. WIN10远程计算机不支持所需的FIPS安全级别解决

    win10系统的电脑在远程xp系统或者其他系统的电脑时,提示错误,远程计算机可能不支持所需的FIPS安全级别,如果出现一以下2种错误,可以解决!   1 第一步:打开win10下的,控制面板 2 第二 ...

  3. jquery弹窗插件layer:layer.layui.com

    这两天在做抽奖转盘功能,浏览器自带的alert弹出框太low,本人又基本不会前端, 于是借鉴前人用fancybox插件做的效果 结果没看懂其写法(http://www.0101shop.com/goo ...

  4. racket安装

    https://www.cnblogs.com/scige/p/3379447.html

  5. Mac下StarUML的安装以及破解

    1.下载地址:http://staruml.io/ 2. 打开 /Applications/StarUML.app/Contents/www/license/node/LicenseManagerDo ...

  6. Typescript基础

    参数类型新特性: ​类型声明 变量/函数:类型(string.any.number.boolean.void五种基本类型) 例如:var age:number=19; function test(na ...

  7. msmq访问格式

    //集群测试,以下格式不行(应是Host映射之类没配置OK) //_MSMQPath = @"FormatName:DIRECT=TCP:msmq496-ha\private$\496-10 ...

  8. 初识springboot

    一.springboot简介: 1.简化spring应用开发框架 2.把spring所有技术整合在了一起 3.J2EE开发的一站式解决方案 我曾经学习springMVC时候,那许许多多的配置文件的配置 ...

  9. AIX修改密码

    grid@DB01:/home/grid>su - oracleoracle's Password: 3004-303 There have been too many unsuccessful ...

  10. Windows环境下安装Oracle数据库

    Windows环境 1.解压文件 1)Oracle下载官网地址: http://www.oracle.com/technetwork/cn/database/enterprise-edition/do ...