【转】我离开了 Coverity
我离开了 Coverity
在写这篇博文的时候,我已经不再是 Coverity 的员工了,我已经在今天下午向公司正式辞职。
走出公司的大门,我觉得一身的轻松。这是我几个月以来第一次感受到加州美丽的阳光,AT&T Park 到处是欢笑的人群,他们是来看巨人队的棒球赛的。我第一次发现他们的面庞是那么的美,那么的友善。湾里的海水也格外的蓝,水面上船帆招展,一幅恬静自然,其乐融融的景象。我就像是一个刚从 Alcatraz(恶魔岛)释放出来的囚犯。我已经很久没有欣赏过这样的风景了,虽然我每天都从这风景中走过。
进入 Coverity 之前,我就在 Glassdoor(一个让员工评价自己公司的网站)上面看过给它的评价,只有 3.2 颗星,只有 44% 的员工愿意推荐朋友去那里工作。评价者们写到:“管理队伍非常不成熟”,“不重视自己的员工”,“高层总是互相打架”,“每个星期都有人莫名其妙的被炒鱿鱼”,“过劳工作,工资太低”,“工程师非常聪明,可是不受尊重”,“你不再是一个人,你是一个数字”,“对新人不友好”……
可是就在六个月以前,我认定了 Coverity 拥有我想要探索的技术,而且想当然地对自己说,也许给差评的都是销售人员,或者他们自己有问题?而且往加州飞一趟面试也不容易啊,单程就是 7 个小时。所以尽管如此的恶评如潮,还是加入了这个公司。现在我如愿以偿了,Coverity 的产品里确实有一些不错的地方,我很快的把它们都“偷学”过来了(他们压根没教过我)。Coverity 实现了几个我设想中的点子,从而让我的直觉得到了免费的证明。
然而我也逐渐地看到,Glassdoor 的评价者们对公司的每一条批评,都一一的兑现了。管理层的高压,以及对自己的身心健康的考虑,是我离开 Coverity 的真正原因。就在离职之前,我因为过度劳累紧张引起的头痛,请了两天假。回到公司的时候,领导很不高兴,把我叫去办公室,说:“你请假两天。我想起这两天还付给你工资,那个心痛哟……” 我的 PTO 之前一天都没有用过,从早忙到晚紧紧张张的,给你们创造了多少价值。现在身体不适请了两天假,理所应当的事,你居然说心痛那几百块钱!
这是一个既有高技术含量,却又极其吝啬而压榨的公司。Coverity 的软件技术难度非常高,工程师必须到很高的水平才可以胜任这里的工作。有多少人会做这样高级的静态分析软件呢?极其稀少的。好些员工都有博士学位。可是这些聪明人,却并没有得到他们应该得到的待遇和尊敬,他们过着非常不轻松的生活。他们的工资并不比其它公司打酱油的普通程序员高。而且每个人的头顶上,都仿佛有一双眼睛在随时盯着,督促着你干活。
你一天工作了多少个小时,每个任务的“估计时间”,你花在任务上的“实际时间”,全都使用一种叫做 Jira 的软件进行记录。正如评价上说的,你确实只是一个数字。你的工作效率按照(实际花费时间 / 任务估计时间)这个比例来简单的判断。这个数字越大,那么你的效率就越低。看你工作效率的时候,领导才不会管你到底做的是什么事情,也根本不看你的代码,所以就算你水平很高,他们也完全不知道你代码的质量。开会时 manager 会不断地提醒你,这个用来衡量你工作效率的黄金公式,暗示你要做“top performer”,因为他们只愿意留下 top performer……
言下之意就是在警告你,如果超出时间过多,你随时会有被解雇的危险!我发现每个任务的“估计时间”都被故意设置得非常短,它是由完全不写代码的 manager 和 architect 设定的。有些问题本来需要好多天的,也被设成4个小时,8个小时的样子,所以几乎每个任务都无法在估计时间之内完成。那怎么办呢?为了不显得笨,你就只有加班加点。每个人都工作到很晚,然而为了显得自己是称职的员工,几乎没有人敢把实际花费的时间记录在 Jira 里面,因为这样按照公式,你的 performance 就下去了。所以就算你熬夜完成任务花了14个小时,你也只敢记录8个小时作为“实际时间”,跟估算时间扯平。甚至记录比8个小时还少的时间,这样显得自己很聪明…… 殊不知,这正好中了管理层让大家拼命干活,尽可能免费压榨劳动时间的诡计。
曾经有一个人就是精确地记录了时间,最后他被解雇了。Mark 是一个波兰来的同事,是个 senior engineer,人非常友善而且聪明,同事们都喜欢他。可是这个人太敬业了一点,他桌上摆着一个国际象棋对弈用的那种计时器,上面有两个钟,用两个按钮来切换计时。Mark 用它把每个任务的时间都兢兢业业地记下来。在交替处理两个问题的时候,甚至还利用这个计时器的切换功能,分别记录时间…… 忽然有一天,他从公司人间蒸发了。我们收到一封来自 manager 的 email:“今天是 Mark 的最后一天。如果你们对此有什么问题,来问我好了!” 看这口气,我们哪里敢问问题。后来同事们议论说,显然他被炒了鱿鱼,连跟我们说再见的机会都没有。我想跟 Mark 保持联系,也许还可以打听一下到底发生了什么事情,发了一封 email 询问他的个人联系方式,结果无法投递,因为他的内部 email 立即就被停掉了。
Coverity 就是用如此野蛮的方式开除员工的。不但立即让你走人,而且不让其他员工知道,不留下任何让你可以跟同事通风报信的渠道。这种做法近乎于杀人灭口。
这个公司一星期一大会,一天一小会,要你报告前一天完成了什么,今天准备做什么。仿佛生怕你就偷懒了。这就是他们所谓的“Agile”管理模式,其原理就像是操作系统一样,把人作为可以任意调用和替换的“进程”,并发执行。很可惜,这种管理模式,加上过劳赶工,无法清晰地思考,造成了软件质量的低下,bug 多得不计其数,等测试出现 bug 可以长达 20 分钟,而且难以修复。人的无知,导致了工作越来越艰难和痛苦。
最令我惊奇的其实是 manager 的言语里随时透露出来的威胁口气,仿佛随时都在质疑员工的工作态度和积极性,随时都在检查员工是否工作够了时间,随时都在琢磨要炒谁的鱿鱼。这是极度的不自信,仿佛他们不相信有人真的愿意为他们工作,随时都在对员工察言观色,生怕一下子走人了没人来给他们修补 bug。所以公司里总是感觉一种人人自危的气氛。感觉这怎么不像是一个高科技公司,而是麦当劳呢?比麦当劳还小气。
我经常发现好几个工程师晚上工作到八,九点。一个同事因为住的远,6点就冲去坐 Caltrain,可是过不久我就发现他屏幕上的 VNC 在动,我能清晰地看到他在继续工作,直到很晚…… 呵呵,我为什么知道这些呢?因为我也工作到很晚!
整个公司处于一种压抑的气氛之中,很少见到人们的笑脸。有少数的人总是嘻嘻哈哈,可是那些都是 HR,Sales,…… 我不觉得他们的笑声中存在真诚的喜悦。
当我辞职的时候,HR 对我说:“随便你到湾区哪一家公司,都是差不多的情况。” 但我不相信这就是整个软件行业的情况,否则软件行业就是新的奴隶社会。我相信,世界上还存在有良心的公司。
2015年更新
有人看了这篇写于 2013 年的文章,质疑我的说法,说自己用过 Coverity 的产品,质量其实不错,哪有那么多 bug。确实 Coverity 有相当不错的 C 和 C++ 分析产品,然而那些都是很多年以前慢慢的,静心积累起来的技术。在 2012-2013 年为了拓宽市场,我们工作的重心是 Java 分析产品。这个产品是在我加入之前,由其它工程师在近一年时间之内,在 manager 的高压,威逼甚至咆哮之下赶制出来的,所以留下许许多多的 tech debt 和 bug。我工作的那几个月,完全就是在修补前人留下来的各种让人头痛的 bug。
另外,Coverity 的创始人 Andy Chou 这个人对我其实不错,可惜即使作为创始人,他当时似乎并没有掌握公司的实权。据公司早期员工口述,Coverity 本来是个不错的公司,自负盈亏。可是在一次经济危机的时候遇到了困难,所以第一次引入了 VC 投资,随后就被 VC 控制了。VC 进入之后,公司的 VP Engineering 被忽然的,非常不人道的解职。在新上任的 VP 领导下,公司完全变了样,最后成了我所描述的样子。
现在 Coverity 已经被 Synopsys 收购,然而据我调查,工程团队的领导班子并没有变,还是原来那两个 manager。不过我还是祝愿在 Synopsys 的领导下,这个公司的管理会有所改善。创始人 Andy Chou 赚了点钱,已经不再管理这个公司,开始做天使投资人。在被 VC 控制的日子里,他应该也没少忧虑,我希望他在将来的日子里快乐自在的生活。在 Coverity 我遇到了实行高压的 manager,非常讨厌的自大狂,但也遇到了一些友好的同事:Aaron,Dzin,Eric,…… 我希望他们一切都好。
【转】我离开了 Coverity的更多相关文章
- 基于JQuery的获取鼠标进入和离开容器方向的实现
做动画时,需要判断鼠标进入和退出容器的方向.网上找到的基于JQuery的实现方法,用函数封装了一下,写了一个示例.注意绑定鼠标事件用的是on(),所以JQuery版本需高于1.7. <!DOCT ...
- 离开Autodesk,开启新篇章
我已经离开了Autodesk,开启新篇章.在过去7年多时间中,我先后支持Autodesk 基础设施相关产品的开发,包括MapGuide/AIMS,Map3D,Civil 3D,Infraworks等, ...
- jquery自定义滚动条 鼠标移入或滚轮时显示 鼠标离开或悬停超时时隐藏
一.需求: 我需要做一个多媒体播放页面,左侧为播放列表,右侧为播放器.为了避免系统滚动条把列表和播放器隔断开,左侧列表的滚动条需要自定义,并且滚动停止和鼠标离开时要隐藏掉. 二.他山之石: 案例来自h ...
- jquery 离开页面提示信息
<script> $(window).bind('beforeunload', function () { return '您输入的内容尚未保存,确定离开此页面吗?'; });</s ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- 怎么使用jquery阻止页面的离开或卸载
//绑定beforeunload事件$(window).bind('beforeunload',function(){return '您输入的内容尚未保存,确定离开此页面吗?';});//解除绑定,一 ...
- winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色
winform中dataGridView隔行显示不同的背景色,鼠标移动上显示不同颜色,离开后变回原色 先设置奇数行颜色,这个有个自带的属性AlternatingRowsDefaultCellStyle ...
- Ouibounce – 在用户离开你网站时显示模态弹窗
Ouibounce 是一个微小的库,用于实现在用户离开你的网站的时候显示一个模式窗口.这个库可以帮助你增加着陆页的转换率. Ouibounce 会在当鼠标光标移动到接近(或通过)视口(viewport ...
- 【原】js离开页面执行函数 onbeforeunload与onunload事件
在最近的项目中,需要做到一个时间,就是用户离开页面的时候,我需要缓存页面其中一部分的内容,但是我不需要用户刷新的时候也缓存,我只希望在我用户离开的时候 执行这个函数.百度之,有onbeforeunlo ...
随机推荐
- Visual Studio 开始支持编写 Android 程序并自带 Android 模拟器【转载】
原文地址 本文内容 为什么需要一个 Android 模拟器 针对 Visual Studio Android 模拟器的调试 Visual Studio Android 模拟器的传感器模拟和其他功能 A ...
- IDEA 之 “There is no configured/running web-servers found!...”
首次配置 IDEA 2017.1.1 与 Tomcat9.0 的 java 开发环境. 在配置成功并创建第一个 Web Application(3.1) 项目后,运行或调试正常运行. 直接在 jsp ...
- IPC's epoch 6 is less than the last promised epoch 7
一.错误起因 Active NameNode日志出现异常IPC‘s epoch [X] is less than the last promised epoch [X+1],出现短期的双Active ...
- Webview跨域访问风险
漏洞原理:WebView对象的行为是通过WebSettings类进行设置的,如果配置不当,攻击者就可以利用该漏洞可以打破Android沙盒隔离机制,从而通过某个应用来攻击其它应用,盗取其它应用本地保存 ...
- Android学习笔记二:activity的理解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7513290.html 一:activity定义了app的页面 一个app有很多个页面组成,一个页面其实就是一个 ...
- linux 命令行cd dvd iso操作
1 . 制作ISO: $ mkisofs -V LabelName -J -jcharset=utf8 -r -o /home/TargetImage.iso /home/my-data-dir 参数 ...
- Linq to Entity 求最大小值Max/Min返回null的处理方法
var maxId=db.user.Select(u=>u.CId).DefaultIfEmpty() 如果maxId返回null则maxId.Max()的值为0
- Flash Actionscript 多线程Worker 压缩图片
package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; impor ...
- Java之创建对象>5.Avoid creating unnecessary objects
String s = new String("stringette"); // DON'T DO THIS! The improved version is simply the ...
- Linux内核中的软中断、tasklet和工作队列具体解释
[TOC] 本文基于Linux2.6.32内核版本号. 引言 软中断.tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的"下半部"(bottom ...