「深度剖析」程序员因为奇葩需求暴打pm,然后被双双开除
想必大家都听说了,这两天关于中国平安一个产品经理因奇葩需求和程序员爆发肢体冲突的事件在朋友圈被刷屏,更有现场打架视频在技术群里疯传。
在这里先带大家简单文字回顾下事情经过,N次打架视频和截图就不给大家放出来了,相信大家都在技术群和朋友圈里亲眼目睹过了(当然,没看过的朋友可以找我微信私聊),最重要的一点是为了社会和谐。
「 肢体冲突的起因 」
以下是网上流传的本次打架事件的文字叙述:
「 事件的处理结果 」
事情的起因大概就是这样,先不讨论本次事件中pm提出的需求是否合理,程序员能否实现,本身这起办公室冲突事件的发生,引起了圈内很大的热议,“成功地”推上了互联网热点头条,同时也给中国平安公司的名誉带来了负面影响,最后涉事的两位外包人员惨被双双开除。
很多看过现场视频的网友是这样分析的,秃头的是程序猿,没秃头的是产品,假装劝架的是运营和设计,看戏的是测试,拍这个视频的应该是商务,pm下次记得戴安全帽提需求。
分析地头头是道,活脱脱一个国内社会看热闹不嫌事儿大的缩影,也是厉害。
「 如何向外行解释内情 」
可能一些非软件行业内的吃瓜群众,想不通为什么程序员和产品经理要干架?我完全可以通过一张表情图合集,来生动形象地告诉你,一家软件公司的项目是如何上线的。
「 打架是不对的 」
看完这张图,我们再来说说pm和coder打架的事儿
年轻人血气方刚,一言不合就互怼,借用孙红雷在电视剧《征服》里的一句台词:不气盛,还叫年轻人吗?
但是,以暴制暴是不对的,朋友,毕竟就算打赢了也是真的疼啊。
在乱提需求的前提下,至少得练得跟我一样吧。
不然,还真不一定打得过我,说一下我三大项的数据吧:
卧推:90kg
深蹲:140kg
硬拉:160kg
「 冲突的根源是什么 」
先来说说很多公司的现状:产品经理和“老板们”关起门来开了个会,赶出原型和UI图,之后交给程序员们的就是“圣旨”,“反正我们就这么定了,你照着开发吧。
程序员说:目标是需求,技术只是手段。
产品经理说:目标是用户,需求是方式。
立场不同,定位不同,矛盾就来了。
产品经理永远是用户需求的代名词,自以为是研发人员的上帝,动不动就要改需求,他们觉得好像很简单的事情,殊不知给程序员添了多大的麻烦。
技术和产品撕逼,无非就是以下几个原因:
1,产品没有想明白,然后来来回回的改;
2,开发没有理解清楚需求,开发东西和产品的要求有出入
3,产品的需求有问题
4,技术的时间不够用
所以说,一个不懂项目管理的程序员不是好程序员,一个不懂软件开发的产品经理,不是一个好的产品经理。
程序员和产品经理似乎天生就有不可调和的矛盾,和平共处很难么?
「 说点掏心窝儿的话 」
就这次事件,土叔我不站队,也不说谁对谁错,抱着一颗同理心,我分别来站在程序员、产品经理,以及项目管理层的角度,给coder、pm,以及manager分享几点我的小想法。
「 给程序员的建议 」
程序员和产品经理干架其实需要理性,查查他的经历,要分析下他懂不懂技术,懂的话有多懂。
一般很懂技术的产品经理是不和程序员干架的。
懂一点,但是就拿出来说事的这种,一般和程序员关系不好。
一点都不懂的产品经理有的谦卑,有的不懂装懂乱说一通。
对于懂一点,就拿出来说事的这种,就要想法设法在技术上反问他,让他觉得自己其实真的知道的很少。
这时候再动之以情,说明自己做这个的难度。
对于不懂装懂的产品经理,就俩字:你来。
还剩下一种是不讲理的,对于这种不讲理的就只有一句话,我他娘的意大利炮呢?
玩笑归玩笑,土叔在这里分享几点走心又走肾的建议:
做好需求更改的准备,提高代码的扩展性和可维护性;
预留出修改bug和需求的时间;
对需求理解透彻再开始写代码;
代码不要写死,防止需求变动。
「 给产品经理的建议 」
好多pm搞不懂,为什么产品经理频繁更改需求会令程序员小哥哥们烦恼不堪?我想,大多时候是因为你们pm平时在工作中的这些口头禅吧:
1.「先做出来看看吧」
2.「我就要这种效果,怎么实现是你的问题」
3.「这应该很简单吧,不就是XXX,然后XXX吗」
4.「这个需求,先这样这样,再那样那样,用XX技术很快就搞定了」
5.「你就说能不能做吧」
6.「我有一个绝妙的idea,什么都准备好了,就差一个写代码的了」
7.「这个需求老大已经同意了,你照着做就是了」
产品经理频繁的需求变更,和程序员有限的工时是存在矛盾的,除非让程序员加班。特别是上次的变更刚刚改完,这时又提出再次修改,朝令夕改,一步一步很巧妙地惹恼了程序员。
程序员最讨厌朝三暮四的产品经理了。
如何与单纯的程序员共处,土叔的走心建议要不要听一下:
1. 不要随时打扰,尤其在他们戴着耳机的时候;
2. 传达「要做什么(What)」,还有「为什么这么做(Why)」;
3. 学习基础开发知识(比如 HTML/CSS),方便彼此沟通;
4. 不要让他们成为最后知道的人,一起讨论可以少走弯路;
5. 尽可能用数据说话;
6. 配合工具(哪怕是纸笔)来表达你的想法;
7. 提供有用工具给他们参考(比如 AniCollection);
8. 做好设计规范(个人很喜欢 Mavel 的 Styleguilde);
9. 尽可能和他们坐在一起;
10. 他们可能羞于/不善于表达,多给一些耐心;
11. 不要不好意思发问,其实他们都很热心解决问题;
12. 不要问那些 Google 一下就能找到答案的问题,节约双方时间;
13. 缕清用户流程,不要让他们来处理你的工作内容;
14. 想清楚产品可能出现的各种状态(404、零数据、极端用例、转场……);
15. 该你决策就由你来决策,不要分担责任;
16. 相信他们的技术水准(如果他们确实不会,他们会学);
17. 勇敢承认你的错误;
18. 记得给他们展示用户/客户的反馈;
19. 改需求不要超过 3 次,再改就先跪下;
20. 就算月饼被抢了,也要友爱和睦相处。
「 给项目管理层的建议 」
其实,谁都有想不到的地方,和想不明白的东西。但是自己都没有搞懂之前就觉得只有自己是对的,那就只能撕了。
在我们公司的团队里,程序员和PM一起讨论需求,勾画原型,提出自己不同角度的不同理解,让程序员更接触“原始需求”,能参与到产品的生命线里会更好,毕竟每个人都有思考能力,不是机器,一张需求甩过来就照做的程序员不是好的程序员。
在产品需求会议上,允许程序员参加并发表意见,这样可以从技术的角度及早发现产品功能中存在的问题,从而避免后期需求的频繁改动。
这也是大多数比较有经验的互联网公司的常规做法。
「 结尾 」
身在江湖,谁都不易,只要换个角度思考,互相多点体谅,这种矛盾自然就可以化解。
文章最后,如果想彻底解决pm和coder的矛盾冲突,土叔有个不成熟的终极方案,朋友们不妨一听:
产品/UI每天给程序员提任务,程序员每天给产品做任务。
如果同一个人可以分饰产品/UI和程序员两角,那么他就会变成永动机。
这款永动机有个广为人知的名字,叫做独立开发者。
更多文章我会第一时间更新在公众号<闰土大叔>里面,欢迎关注~
「深度剖析」程序员因为奇葩需求暴打pm,然后被双双开除的更多相关文章
- 作为程序员,再也不想和PM干架了
上周,又看见有程序和PM(产品经理)吵了起来,大致是因为晚上就要上线了,下午的时候PM来说要改点需求,但程序不愿意.兴许是天气热了,大家都很烦躁,于是一言不合就发飙了,最终还是程序老大介入才解决了问题 ...
- 删除OSX中第三方的「偏好设置」程序(.prefPane)
打开Finder,按Command+Shift+G,输入 /Library/PreferencePanes ~/Library/PreferencePanes 前一个是全局的配置项目录,第二个是当前用 ...
- 你的程序员女孩「GitHub 热点速览 v.22.09」
本周最火的项目要数上周推荐的开源项目 How to Cook,火到一周涨了 18k+ star,但网友对它的定量烹饪方法褒贬不一.在本人看来,烹饪本就是一门"玄学",萝卜青菜各有所 ...
- GPT-2,吓坏创造者的「深度造假写手」
简评: 今年二月份刷屏的 GPT-2 着实厉害,那个生成续写故事的例子更是效果好到吓人一跳,它到底有多厉害,本文略微讲讲.更详细的信息可参考文末 OpenAI 的博客链接. 你能从下面这两段文字里品味 ...
- Java程序员从笨鸟到菜鸟全部博客目录
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主 ...
- 《Java程序员由笨鸟到菜鸟》
<Java程序员由笨鸟到菜鸟> 在众多朋友的支持和鼓励下,<Java程序员由菜鸟到笨鸟>电子版终于和大家见面了.本电子书涵盖了从java基础到javaweb开放框架的大部分内容 ...
- 好程序员带你了解一下HTTPS和SSL/TLS协议的背景与基础
>> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 TCP 的关系(尤其 ...
- iOS程序员如何提升核心竞争力,防止自己被裁员?
前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异,说白了就是你的优势,而且最好是独一无二的的优势,这就是核 ...
- iOS程序员 如何提升核心竞争力,防止自己被裁员?
前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异, 说白了就是你的优势,而且最好是独一无二的的优势,这就是 ...
随机推荐
- 强大的Resharp插件(转)
使用VS有段时间了,一直深深的折服于其强大的功能.之前一直听说有Resharp这个工具,小猪一直也没有太在意.直到今天…… 下载安装: http://www.jetbrains.com/resharp ...
- pwnable.tw silver_bullet
产生漏洞的原因 int __cdecl power_up(char *dest) { char s; // [esp+0h] [ebp-34h] size_t new_len; // [esp+30h ...
- LeetCode 13. Roman to Integer(c语言版)
题意: Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value ...
- mysql 与 oracle 的时间查询
关于时间区间查询 1.mysql select * from t_date a where date_format (a.delete_time,'%Y-%m-%d') <date_format ...
- 论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)
论文原址:https://arxiv.org/pdf/1904.02701.pdf github:https://github.com/OceanPang/Libra_R-CNN 摘要 相比模型的结构 ...
- Linq中类型转换
var BusDebts = db1.BusDebts.Where(s => s.BusOpt >= dts && s.BusOpt < dte && ...
- PHP删除目录及目录下所有文件
/** * 删除目录及目录下所有文件或删除指定文件 * @param str $path 待删除目录路径 * @param int $delDir 是否删除目录,1或true删除目录,0或false则 ...
- React使用Mobx管理数据
React 和 Vue一样都属于单向数据流,为了更好的进行状态和数据管理官方和第三方也有配套的Redux等插件,本文介绍一个个人觉得更易用使用的组件 Mobx 核心概念 MobX 处理你的应用程序状态 ...
- python第十五天
什么是模块? 一系列功能的集合 定义模块? 创建一个py文件就是一个模块,该py文件名就是模块名 怎么使用模块? 在要是用的模块文件中通过import 模块名 来导入模块 模块的四种方式? 1.编译执 ...
- macof python攻击脚本
#!/usr/bin/python import sys from scapy.all import * import time iface="eth0" if len(sys.a ...