简单聊聊为什么有些大公司技术弱爆了?
这是知乎的编程领域下面一个非常火的提问。昨天晚上看到之后比较感兴趣,这里分享一下自己的看法。相信这个大家看到这个话题一定很感兴趣。
问题地址:https://www.zhihu.com/question/32039226 。
提问内容
今年年初,到一家互联网公司实习,该公司是国内行业龙头。不过技术和管理方面,却弱爆了。那里的程序员,每天都在看邮件,查问题工单。这些问题,多半是他们设计不当,造成的。
代码写的一团糟,全是复制粘贴,连作者都没改,大家普遍不写注释,也不格式化,代码歪歪扭扭。
一个项目里,httpclient竟然出现了四种。一种是该公司研发部写的,一种是老版本的开源项目,一种是新版本的开源项目,还有一种是开发人员造的轮子。
打接口请求响应日志,竟然不知道用拦截器。打错误日志竟然不打上下文信息,每个人一种日志风格,千奇百怪。许多重要的中间流程,居然不打日志。
idea、eclipse、myeclipse的配置文件竟然全部传到项目里去了。
该公司混了两年的程序员,跟快递公司做查询接口,竟然不知道加密运单号。
所有服务间通讯,都没有设requestId,导致跟踪会话很困难。
一个没什么qps的边缘接口,居然做消费者生产者+阻塞队列的异步模式。显得你技术少是不是。不知道异步会增加维护成本,提高测试难度吗?而且,任务队里没有考虑持久化,赶上发布,丢了好多任务。
读取一个小小的xml和exc配置文件,居然用流式解析,没见过这么二逼的,真是醉了。
做优化全靠拍脑门拍大腿,难道不会用excel分析日志,用jprofile扫项目?一个100以内的常数集合遍历,他也要写个优化算法进去,算法跟业务还搅在一起,一团乱麻。每个人都在嚷嚷性能、算法、分布式计算……
几乎没有文档,全靠从代码反推逻辑。
有枚举他不用,非要在每个页面上,把枚举值挨个儿写死,知道后面改代码多么费劲吗?
欺骗性的变量名,里面存储的是AES加密的,变量名后缀却写成了DES;里面存的是小写字母,却写成upperStr。
一个方法十几个参数,有三分之一是极其简略的缩写,注释肯定也没有的。一个类写到三四千行是常事。
开发自测,居然要把代码全丢到公共机器上,而且都是走svn,他们把svn当ftp用。svn里面大量的无意义提交,一多半的提交连都编译不过去。我看到有个应届生,改了两句话,马上提交,说是怕代码丢失。
一个运行了两年的项目,spring的包扫描明显配错了,有些bean根本扫不进来,居然没有人发现。一半的bean在spring管理下,另一半的bean他们自己写单例模式来实例化。
他们用mysql来做审计系统,出报表,有个报表要跑8分钟。原来是有人用字符串来存多值(逗号分隔),sql里写了like,导致没有利用到索引。为什么不用pg,pg在sql编程方面,功能更丰富,更适合做统计,它本身就支持数组。
程序员们都是得过且过的态度,怎么把代码灌进去,跑的通测试,就算交差了。
为什么大型互联网公司,技术和管理这么差劲,是怎么形成的?(这家公司是卖机票的,没有明确说出公司名字,是怕给自己惹麻烦)
我的个人感受
我觉得其实这事情挺常见的,特别是那种已经做了很久很久的老项目(新起的项目应该很少存在说技术比较 Low的情况)。
我之前接手老项目的时候,也会经常抱怨代码写的是真特么难、分层是真的恶心、使用的框架版本是真特么的老!
但是,到后面自己做一个项目比较久的时候就会发现:很多事情,并不是像你平时写写 Demo 那么简单! 特别是像大公司的很多项目都比较复杂,项目的代码量也比较庞大。很多时候,你知道某个地方有问题,但是你没办法改,也不敢改啊!
为啥没办法改? 下面最可能的几个原因大家应该都感同身受吧!
没时间和精力(一个接一个的需求)。 向项目经历或者技术Leader提出优化需求之后被驳回。 涉及到的地方太多/工作量太大。
为啥不敢改? 我觉得很大一个原因是害怕背锅。万一改出了问题,那年终奖估计都没有了。
另外,就算是大公司,每个程序员的能力也千差万别,代码能力强的和代码能力差的可能不是一点两点。
最后,根据自己的经历给刚入职场或者即将入职场的小伙伴一个建议。如果你觉得你当前的项目技术很 Low 的话:
第一时间记得先换位思考一下,设想假如这个项目是我做的呢(存在即是有原因的)? 然后,你可以试着去找找这个项目的亮点。 最后,如果你想好说可以优化的话,可以找 Leader 和项目经理聊聊,在 Code Review 的时候把自己的想法告诉大家一下。记得一定要说清楚:
为啥要优化?能带来啥好处? 有没有什么风险?有风险的话怎么避免线上出问题? 涉及到哪些地方的改动? ......
热门回答
以下回答来自@陈萌萌。
题主你看到了很多槽点,但我认为你不能只看到槽点和大概怎么解决。有没有想过怎么改进,如果是你的话你怎么做,这些项目里面临的主要挑 战是什么,次要的挑战又是什么?
不要只告诉我技术A弱爆了,用B就可以完爆这个项目了。你知道用B的优劣,B的适用场景以及适用B的成本吗?对于一间公司来说,成本是很重要的。
我这里说的成本不是金钱。而是,假如你看不爽一份代码,你打算重构它,你觉得你需要投入多少时间,多少人力?重构之后,又要花费多少时间和人力去升级依赖这份代码的其他项目?不要以为开会无用,老板就只是在天天发邮件。如果你重构了一份代码,不能通过沟通说服其他组去升级他们的组件,又或者你只是重构了一份虽然很丑陋,但其实并没有多少程序依赖它的代码,又又或者你重构了代码只是让代码技术含量更高了,更好看了,却没给公司带来多少收入甚至KPI,那你的工作和成果就很尴尬了。
其实上述也解释了为什么你身边的同事都眼睁睁地看着这些丑陋的shit存在而无动于衷。因为他们也是需要投入成本的。先不论他们个人技术水平高低,试问谁愿意挑一个又艰难,又不能产生多少效益的任务去做?当然,你会说,写好代码是程序员的节操。抱歉,节操多少钱一斤,北京三环商品房多少钱一平?
编程高手都有真爱,但现实就是编程高手凤毛麟角。我们身边的大部分同事可能只是希望养家糊口,他们头上还挂着十几个bug等着修。我们数落他们没追求,但追求从来都不是嘴上说说,吐吐槽就能实现的。
人心如此,公司也如是。
矛盾分主次,公司的目标都是一样的:用最少的成本投入到最能产生效益的项目中去,或者投入大成本去解决公司最需要解决的问题,这间公司才能继续运作。
所以题主你想想,在你吐槽的个案中,有多少是公司真正关心的?有哪些是你的老板认为可以创造最大效益的?有哪些才是主要矛盾或者挑战需要最牛逼的人挺身而出第一时间解决?去辨别,解决这些关键的问题吧,骚年。必要时带上(忽悠)一队人马(同事)跟你一起干,苟富贵,勿相忘。 不要像祥林嫂一样,天天抱怨着生活,日日思考着辞职。得罪点说一句:“沦落”到要跟这样的人共事工作,难道自己身上就没有原因?
这个世界有更好的公司,有更牛逼的人。如果你认为解决这间公司的这堆问题不值得,又或者同事实在太不给力,就远走高飞吧。
我以前也跟题主一样,看我第一份正式工作的很多技术环节都相当不爽。这份代码写得丑,那个设计像大学生作品,重要的项目居然连单元测试都没有……但是我后来反观我自己,并没有发现比起那些丑陋代码和糟糕实现强悍多少。我跟我的同事没有质的区别。 我笑话他们代码混乱bug不尽,我何尝不是少处理了一个field,倒腾错了一个片段的数据搞到要翻工重跑?在我心底里艹了隔壁组那个“我的程序好像不能跑,你帮我debug下”的同事一千次之后,带我做ML让我倒腾数据并且被我的程序搞坏了几份数据(当然后来搞好了)的T9君在会议上说:“她已经很努力了,我承认我有时候也逼得她太紧,她应该有多些时间的。”
我不是长者,不能share多少人生经验,就留下最后一句话跟诸君共勉(好像有点怪)吧:
我观别人大傻逼,料别人观我亦如是!
最后
文章有帮助可以点个「在看」或「分享」,都是支持,我都喜欢!
我是Guide哥,Java后端开发,会一点前端知识,喜欢烹饪,自由的少年。一个三观比主角还正的技术人。我们下期再见!
往期推荐