前一段时间,产品经理与程序员打架的视频火了。

根据手机壳变主题颜色 https://www.zhihu.com/video/1046351618295111680

据说,当时的对话是这样的。

产品经理:这有个方案,老板已经拍板了,马上要做,就是APP的主题啊,可以根据手机壳颜色来改变。

开发人员:可以,那你给我个手机壳颜色的介面吧。产品经理:什么介面?

开发人员:你不给介面我怎么知道你现在是什么手机壳颜色?

产品经理:你不能自动识别吗?开发人员:怎么识别,你告诉我。产品经理:那我怎么知道,这是你们开发的事情,我现在要说的是这个功能....开发人员:等一下,这个手机壳,就是市面上随便都能买的手机壳?产品经理:是啊,不然呢?开发人员:不是什么官方开发的新型手机壳?系统能识别的那种?哪有那玩意啊,那这做不了。产品经理:怎么又做不了了?我还没说完功能你就做不了?开发人员:我要怎样才能让系统识别你TM现在手机壳的颜色?md有没有装手机壳都识别不了好吗?产品经理:都说了识别是你们开发的事,识别不了就开发一个让它识别啊。

开发人员:MD你当app是狗啊!你训一段时间它就能识别红色蓝色啊!

产品经理:行了行了,都说是你的事了,我不管这些,我就说这个功能要上!开发人员:那你找别人吧。产品经理:那行,我找总监去,说你完全不配合。开发人员:我配你ma!干架中……

当然,事后我们都知道,其实事件的真相跟APP识别手机壳颜色毫无关系,二人的确是平安产险科技中心外包人员,不过打架前根本不认识,之前网传原因系微博段子手编造。

但是,这个事件确实也说明了,产品经理懂技术是多么重要。如果你不是技术出身的产品经理,在技术这一点上踩过的坑应该不少。比如,项目中的沟通会出现问题,经常你说的是A,程序员理解的是B,搞得两个人说一样的语言,却像一个来自火星一个来自金星。

那产品经理的职责是什么?不就是充分理解需求并且精准描述输出需求嘛,自己明白没用,团队明白才是真的有用。而且长此以往会造成什么后果?程序员根本不care你,你还觉得为什么他们都不配合我,不都是为了项目嘛,甚至觉得别人是在针对你。

从这些角度讲,产品经理必须要懂技术!

但是,懂技术是要求产品经理能写代码或者是看懂代码,还是能开发项目?产品经理懂技术到底要懂到什么程度?我的回答是:我们是产品经理,不需要搞开发,结合产品经理的职责,我们只要在沟通中和文档中让程序员秒懂,就达到我们懂技术的目的了。

那么我下面就要展开来说一说,产品经理要懂哪些技术,懂到什么程度。

思维篇——产品思维vs技术思维

程序员:这个产品经理一点技术思维都没有,瞎提需求,不知道给开发带来多大成本,跟他解释他又听不懂。

产品经理:这个程序员怎么一点产品思维都没有,我都解释这么清楚了他还不懂,这流程简直反人类。

产品经理和程序员思考的侧重点不同。产品思维侧重于用户价值,同时能够达到商业目标,也就是找到功能和用户需求的结合点;技术思维侧重于问题的解决和功能的实现,要考虑技术的架构和开发成本,是一种工程思维。

我们来看一看,产品从抽象的想法到具体可用的产品,产品经理和程序员分别是如何分析产品的。

产品经理从战略层就切入了。我们在战略层思考某个需求有没有用户价值,市场是红海还是蓝海;在范围层思考我们要做什么业务,从哪里切入;在结构层分析我们手里的资源结构;在框架层梳理产品的业务流程、功能结构和信息结构;在表现层分析什么样的产品的交互和色彩搭配适合产品。

程序员则从框架层切入。在框架层思考资料库如何设计、介面如何设计;在表现层思考产品交互的动画及跳转的实现。

产品思维与技术思维的侧重点

我们可以看到,产品思维与技术思维都是产品实现过程中必不可少的思维方式。所以,我们只能说这两种思维的侧重点不同,并没有孰优孰劣之分。产品经理要学习技术思维,程序员也要学习产品思维,两者相辅相成才能做出一款好的产品。

我们都学习过英语,知道学习一门语言需要学习辞汇、语句和语法。学习「技术语言」也是一样的,我们要学习各控制项的名称、代码的逻辑。这样在程序员使用「技术语言」跟我们说话的时候,我们才能明白他说的是什么;在我们提需求或写需求文档的时候,才能将「产品语言」翻译成「技术语言」。这样看来,好产品经理同时还是一个好翻译官。ヽ( ̄▽ ̄)?

接下来我就把「技术语言」的辞汇、语句和语法来给大家讲一下。

基础篇——资料库、伺服器、客户端

我们都有过去银行取钱、转钱、存钱的经历。你到了银行营业厅,跟营业厅的服务人员说,我要存钱,然后把100块钱给银行柜员,然后银行柜员就存到了你的个人账户上,你的个人账户就多了100块钱。

这个过程中,你就是客户端,你说要存钱,并给出100块钱(提交一个表单),接著营业厅帮你处理存储业务(伺服器就给你处理信息),最后你的钱就被存到了银行中你的账户上(这条信息就被存储到了伺服器某个表中)。

举个栗子,一个app的登录过程:

  1. 客户端发送用户名和密码数据
  2. 伺服器接受并解析客户端发送的请求,然后从资料库中比对信息是否正确
  3. 伺服器响应客户端的请求,并发送反馈

客户端与伺服器之间是通过介面来传递数据的,介面的形式一般有JSON和XML。大家只要能够阅读介面文档,知道介面中包含哪些数据内容就好。

这个就是JSON介面的代码。从中可以看出传递的信息有国家、省份和城市。

var country =
{
name: "中国",
provinces: [
{ name: "黑龙江", citys: { city: ["哈尔滨", "大庆"]} },
{ name: "广东", citys: { city: ["广州", "深圳", "珠海"]} },
{ name: "台湾", citys: { city: ["台北", "高雄"]} },
{ name: "新疆", citys: { city: ["乌鲁木齐"]} }
]
}

下面是包含相同信息的XML介面的代码。

<?xml version="1.0" encoding="utf-8" ?>
<country>
<name>中国</name>
<province>
<name>黑龙江</name>
<citys>
<city>哈尔滨</city>
<city>大庆</city>
</citys>   
</province>
<province>
<name>广东</name>
<citys>
<city>广州</city>
<city>深圳</city>
<city>珠海</city>
</citys>   
</province>
<province>
<name>台湾</name>
<citys>
 <city>台北</city>
 <city>高雄</city>
</citys> 
</province>
<province>
<name>新疆</name>
<citys>
<city>乌鲁木齐</city>
</citys>
</province>
</country>

你知道介面数据之后就再也不会发生以下情况了。

产品经理:这里有个bug,用户登录成功后,提示的文字有错误。

前端工程师:这个文案是后端返的,不管我们的事(心里:找错人了吧)。后端工程师:产品设计时没说啊,那我改一下(有点小抱怨)。

移动篇——控制项与页面

不知道你有没有经历过下面的场景。

与IOS工程师沟通的时候,开发:这里的提示,是toast还是dialog。

你(内心):toast和dialog是什么鬼...面试中:你了解IOS和安卓吗?IOS和安卓有什么不同?你(内心):好像有不同,又说不出来...

下面我们就来看看安卓和IOS的在开发中的区别,首先是平台及应用的区别。

然后我们再来看UI控制项的区别,UI控制项是构成app页面的基本元素,可以理解为盖房子用的砖和瓦。当安卓说TextView或者IOS说UILabel,你要知道这是一个东西,只是安卓和IOS的叫法不同而已,都表示文本展示框。下面就是安卓和IOS控制项的区别。

有了UI控制项,各个控制项按一定规则排列组合在一起,就可以组成一个独立的页面了。,接下来我们说说页面布局。

各控制项布局的时候,我们要考虑两个问题。

  1. 每一个控制项的边界限制,比如文本最长的展示范围和不同屏幕尺寸的适配问题;
  2. 内容型控制项的对齐方式,比如文本框中,文字的对齐方式。

因此,在写需求文档的时候,遇到如下的列表页,一定要说明这个列表中栏位的展示规则。

各控制项在页面布局的时候,安卓和IOS也是有区别的。

在安卓中,页面布局是按照相对位置来布局的。比如,一个TextView确定位置后,另一个TextView在上一个TextView的哪个方位。

IOS界面布局原理

在IOS中,页面布局是按照绝对位置来布局的。UI控制项的位置,是用左上角的坐标来表示的。

前端篇——Web、Html5和Hybrid

html是骨架,css是内容,二者结合设计静态页面。

对于用户而言,最直观的东西无非就是可以肉眼看到的东西,而html/css就是用来干这个的。html 指的是超文本标签语言,说白了就是一堆标签,标签中定义了网页中展现的各种元素,比如网页的标题、正文中的文字、图片、视频等等;CSS 指层叠样式表(Cascading Style Sheets),说白了就是定义html中元素的表现形式,比如字型大小、颜色、对齐方式等等。

JavaScript、jQuery实现交互效果。

JavaScript用来实现交互效果,让html、css展示的静态页面动起来。比如当滑鼠悬浮到分享按钮上方,则会弹出分享渠道的一个小窗口,这个就是用JavaScript实现出来的。

在了解一些基础的JavaScript概念之后,则可以继续学习jQuery,其实就是一个JavaScript代码库,通过jQuery能够显著降低我们编写交互效果的难度。

Html5可以更好地适配移动端,做响应式设计。

在 iPhone 出现之前,大家访问 Web 的主要方式还是通过桌面浏览器,所以设计网页时只要考虑桌面浏览器的显示效果就足够了。但是在 iPhone 和 iPad 出现之后,就需要考虑同一个网页在不同设备上的显示效果,第一个问题的答案就是响应式,响应式的核心就是让同一个网页可以在不同设备上呈现出不同的显示效果,主要是通过CSS来实现的。

除了响应式设计,HTML 在移动端遇到的另外两个问题就是如何利用移动设备的各种感测器,比如 GPS,摄像头等等;以及性能问题。为了解决这些问题,HTML5中添加了地理位置,拍照,3D 动画加速等等 API,可以部分的利用手机设备的一些新硬体,并且新的 API 还在不断的加入进来,这也是为什么现在的 HTML5 应用可以越来越炫酷的原因。但是,HTML5 并不是专为移动设备设计的,它是由 HTML5,CSS3 以及大量的 Javascript API 共同组成的一个标准合集,微信中的 HTML5 应用只是 HTML5 应用场景中的很小一部分。

我们知道在移动端,原生(native)app的体验非常好,但是native app更新的时候需要发版本,不能够热更新。这时候 Hybrid app就解决了这个问题。Hybrid app大的框架是原生的,但是其他的详细内容就是网页封装的了,好处是方便更新又在大的体验上保持优秀。下面微信理财通和支付宝饿了么页面都是Hybrid。

产品经理能了解基础的前端知识即可,如果你想更多的了解前端的知识,可以推荐去这个网站:w3school 在线教程。

代码逻辑篇——条件判断、循环

之前有产品经理问我在设计功能的时候总是有一些问题考虑不全。我告诉他,多积累、多总结。

这固然是一种方法,但是后来我想到产品经理考虑不全的这些问题都会在开发的过程中就会暴露出来,这是因为开发工程师是产品实际实现的人,他们会遍历每一个问题。那我们为什么不能从技术的角度遍历一下每一个点呢。

写代码是一种非常严谨的工作,强调遍历与穷举,要考虑到所有情况,否则产品流程上就会产生错误或bug。下面我们就来讲一下代码的判断与循环。

首先是条件判断结构if else语句和条件选择结构switch case语句,伪代码如下。这种语句适用于可以枚举的情况。

登录判断逻辑(if)与选购商品逻辑(switch)

下面是循环结构,while语句和do while语句,伪代码如下。这种语句适用于不可枚举,但有规律,可循环的情况。

从10数到1

沟通篇——需求文档

看到这里,对你来说可能并没有什么大的作用,只是了解了一些技术基础而已。学了东西如果用不上的话,那就是浪费时间了。学了很多道理,仍旧过不好这一生,就是因为你没把学到的东西用起来。

下面我就来说说,我们学到的东西如何用上。在写需求文档的时候,我们的工作是把需求描述清楚,让开发人员能够明白怎么做。

我们的理想状态就是,我写出文档,交给设计和开发,设计和开发能够按照我文档中的效果实现功能,而我中间不用费太多的精力去沟通调和。那为什么事实总是与我们的理想状态相反呢,是开发故意整我们?不是的,是我们用「产品语言」来告诉开发应该怎么做,开发将其用「技术语言」翻译出来的时候,产生了歧义。

那问题就明了了,我们只要用技术语言写文档,那我们的意思就会原本呈现给开发,这样就不会产生误解了。下面我们就来看一看用「伪代码」写产品逻辑的时候应该怎么写,其实这一点都不难,还有利于我们培养自己的逻辑思维,提高思维的严密性。

举个栗子,我们点击登录界面的登录按钮的时候,如何描述逻辑。

之前我是这样描述的。

那我们学了技术思维之后,我们应该怎么描述?大家看一下下面的描述。

这样我们就学到了2个方法:

1.用「伪代码」来表达产品逻辑。

  • 判断逻辑用if else;
  • 选择逻辑用switch case;
  • 循环逻辑用while或者do while;

2.用技术化语言来表达交互动作。

  • 安卓带按钮提示框用dialog,显示一会就消失用toast
  • IOS中带按钮的提示框用Alertdialog等

我们再来举个栗子。

假设你们产品触发某一个条件之后需要给用户发送一条简讯:尊敬的XXX,您的订单编号是XXXXXXXX,您可以用手机号XXXXXXXXXXX登录我们的网站查询。

你应该如何写这个需求呢?

这个简讯模板取到的数据是从资料库中来的,我们可以使用资料库中对应的栏位来表达模板的取值。可以这样写:尊敬的#userName#,您的订单编号是#orderNumber#,您可以用手机号#phoneNumber#登录我们的网站查询。

这样我们就学到了第3个方法,用资料库中的栏位,来填充动态参数。

尾篇——小鱼碎念

产品经理为什么非得学习技术?

我也不会技术,不会写代码,但我想成为一个更好的产品经理。技术的短板必然会妨碍你跟工程师的沟通,这就是我要学技术的原因。

技术学到什么程度?

产品经理学习技术的目的不是写代码,而是沟通,文档的本质也是沟通。所以,只要能跟工程师交流没有阻碍,那就达到了我们的目的。所以学到什么程度?——你跟工程师日常沟通无障碍即可。如果你不学技术你的沟通也无障碍,那你可以不学。

技术思维会不会阻碍我们对产品的思考?

产品经理策划产品不是天马行空的想就行了,技术的局限性也需要考虑到。产品思维和技术思维并不是相互冲突的两端,在产品从抽象到具象的过程中,这两种思维是相辅相成的。学习技术思维不但不会妨碍我们对产品的思考,还会训练我们思维的严密性和逻辑性,让我们设计出更好更棒的产品。

如果我想认识小鱼,我应该怎么办?

(`?ω?′)加微信好友呀,还能怎么办!微信:CPJLxiaoxiaoyu,备注知乎哦。

点个赞再走呗!


推荐阅读:
相关文章