0x00 前言
曾经和一位不做技术、但与技术人员有合作的朋友聊天,他作为一名小领导,常和外包程序员打交道。我问他:你觉得做程序员最忌讳什么?他的回答是:
不要让脑袋里只剩下是与非、零和一。
作者:孙伟喆/2017-10-15
0x01 问题
那时候不懂这句话的我一心只顾钻研技术,于是追问:何出此言?
好多程序员做久了技术,习惯了面对代码,有时候可以明显感觉到他(们)缺乏了一些基本的感性思维。比方说,客户提出的需求,给出的答复总是:我只想要你明确的逻辑,不要跟我讲太多;又或是对于产品经理口中的某个效果,只有两条路:可以实现/实现不了;这让我难以接受。
是啊!世界上的事情怎么会有明确的分界线,人的思维是曲线的,最怕思维固化、一根筋。
0x02 分析
回到朋友提出的两个例子:
客户构想的需求
- 首先要明白,客户是普通人,不懂代码。
- 其次,客户提出的需求永远只是脑袋中的构想,如何把构想变成现实是你的事情,而不是客户需要思考的东西。
- 作为乙方,我们应该主动协助不懂代码的“小白”客户确定他想要的是什么,客户思维所及只能停留在与技术无关的层次上,那么接下来就需要你带领客户去分析,理清他的逻辑,同时也要思考在技术层面上如何实现。客户不了解在软件行业此类“构想”是如何实现,而我们不懂客户行业内的规则,在你主动带领客户分析需求、对需求“具体化”的时候,客户可以跟得上你的思维,及时修正你所说的是否有所偏差,甚至有可能打开了思路,主动说出某一模块的细节;而这时候,疯狂的记笔记就好了。
关于上面这条理论,有个很典型又类似的例子:
People don’t know what they want until you show it to them. - Steve Jobs
消费者并不知道自己想要什么,直到我们拿出自己的产品。——史蒂夫·乔布斯
有兴趣可以看看《乔布斯传》。
上级布置的任务
- 领导要什么?
结果
。 - 领导要你干什么?
实现结果的过程
。
常有人和我说:我已经尽力了啊,但是有时候我真的不会,真的完不成,他(Boss)怎么还是训我。
的确,做开发难免遇到实在解决不掉的“坑”,但你有没有想过是自己的问题?我们不妨换个角度,用医生和病人来描述这件事。
假设你是一名患者,来医院经过一系列的诊断,医生只告诉你:你没救了。你会转头就走,放弃治疗么?
同样,老板安排你去做一件事情,你遇到问题只反馈一句:这个我们做不了。那老板是不是也该反问一句:所以我们这个项目就这样不做了?
作为患者,你一定会继续追问:为什么没救了?医生做了哪些诊断?有没有其他方案可以缓解?……
而作为医生,也同样有义务提供完善的诊断报告,至少让不懂医学的你,知道自己身体是哪里出了毛病。
回到现实。
老板想要的是结果,你没有达到 Boss 的预期,难道还要他反过来询问你事情的详细经过吗?你是不是应该给出一份报告(哪怕是口头形式),用以说明:
- 做了哪些尝试?
- 遇到怎样的困难?
- 是否还有其他方案?
- ……
当有了这样详细的报告,或许老板、甚至团队中的同事,就可以通过你没有的资源、人脉等方方面面,解决掉你尝试过、但行不通的方案。
若是依旧解决不掉,那你也应该提出“缓解”方案。这时候,就需要你明确老板给你安排的工作,背后想要达到的目的是怎样的、他的“刚需”是什么。
所谓条条大路通罗马,目标是死的,人是活的;从“刚需”的角度出发,思考是否有其他“通向罗马”的路。
通常,此时的解决方案目标已经不再是圆满达到预期,而不得不有一定的舍弃,只要舍弃的不是影响大局、刚需、核心利益的东西,都可以列在你的报告里:
- 是否有“圆滑”的解决方案?
- 能达到怎样的效果?
- 所带来的成本多少?代价如何?
- ……
至于如何选择,决策权已经全部在老板手里,他只要做个简单的选择题即可,而不是问答题。
此时,优劣代价已经全部在 Boss 心中有数,接下来你所做的,就是执行老板选择的方案就好。
这才是真正的:“我尽力了”。
有兴趣可以看看《说话的艺术》。
0x03 拓展
由此,又回到了我平时常常挂在嘴边的理论:
立足程序员,眼界高于程序员。
**立足程序员**指的是着手当下,把自己应该做的事做好、所要承担的责任承担起来,保证自己写的代码不出问题。
**高于程序员**指的是放眼全局,在做程序员的同时多思考:
- 从同事角度想,自己的代码和别人对接是否方便?有没有可能产生的误会?
- 从高级程序员角度想,某条代码是不是可以再优化得更完善、更优雅?
- 从架构师角度想,某块代码是不是可以进行快速重构使其具有更高的扩展性、健壮性、可维护性等等?
- 从老板角度想,这套系统有没有潜在风险、额外成本或是不确定因素?
- 从客户角度想,我们的产品是否好用?细节体验是否完美?有没有解决目前核心问题?
这样,才有机会从程序员中脱颖而出,成为受到老板、甚至客户青睐的佼佼者。
0x04 思考
为什么会出现这样的问题?
是国内死板的开发流程造就了这样一批不会动脑筋的程序员?
还是从最初的模板式教育就固化了孩子原本多彩多样的思维。
文采有限,欢迎批评指正。