关于产品是否需要会写代码一直是个比较有争议的问题,早期的产品经理基本都是从开发岗位转成的,最近几年随着移动互联网的飞速发展,产品经理也变得十分热门,吸引了越来越多的人的加入,也有不少应届生进入这个岗位。我常看到一些人问,从事产品经理是否需求懂得写代码?如果要懂,又需要了解哪些?笔者我科班出生,建过网站也做过系统,还从事过一段时间andorid开发的工作,这次我尝试着用3w分析法则对这个问题做出回答。
What:产品设计是什么?
目前的产品经理一般可以根据公司岗位侧重点不同分为产品策划和产品运营。在一些大公司还会为产品经理配上交互设计师来完成产品策划/设计的工作。目前产品设计的准确形容还不统一,广义上可以把交互设计,用户体验设计等产物为产品原型的统一成为产品设计。
产品/交互设计目前来看,是一项门槛相对较低又富有灵活创造性的工作。一些不曾学过美术,开发的新人也能凭借自己对市场上一些APP的分析和原型优化快速上手进入这一行。当然,这并非不可,市场需求决定了价值,但如何提升自己的价值还需要很长的路要走。
Why:产品设计为什么要懂得开发?
以下是产品设计中可能会遇到的一些场景:
场景1:
产品:“我希望能在这里加个动画过度,让用户觉得更加有趣,提高粘度”。
研发则会想:如果是网页,如何能保证动画加载顺利?如果是APP,会不会对流畅有影响?以及等等。也许研发还会进一步思考,到底有没有必要加动画,我该找什么理由让这小子把动画这事先放开?
场景2:
产品:“这个地方需要加入搜索框”。
研发则会想:是要求搜索什么,用户?标题?内容关键字(关键字是否需要分类)?还是所有的字段都能搜索?
场景3:
产品:“这里我希望用户进度页面就能够对热门动态点赞收藏”。
研发则会想:这个操作是不能实现的,因为用户还没注册,我们并不知道他是谁。
这样的次数越来越多之后,研发很容易就会在暗中吐槽,产品经理什么都不懂,跟他交流特别费力,总给我制造麻烦。
长久之后,便会失去研发的信任,让工作变得不那么融洽,甚至让产品经理对产品的主导权开始动摇。
曾经听过很多的人说,产品经理不需要懂得技术,只需要关注业务及需求就好。诚然,在不少公司,现有产品比较成熟,不需要开发新产品,对技术的要求当然会降低,产品经理的工作更多的在于如何通过市场盈利而不是做好产品,这部分的人这次暂时不做讨论,以后便见分晓。还有另一部分不了解技术的产品,容易对研发产生崇拜,降低自己的价值。
另外研发最头疼的有两类产品,一类是不懂装懂的,一类是只懂一点又乱吹的。前者设计的产品很容易出现逻辑问题,后者则容易让研发工期困难。(前者的举例说明可以参照我列出的场景)
经历过多次迭代我明白一个道理,做一个产品出来容易,做好一个产品难。让一个人能用的产品和让10万个人能用的产品不是一个级别的,同样的需求满足一次和同时满足10万次也不是一个级别。
笔者曾经做过一个Android端的相册功能,(早期的设想是通过SD卡路径来访问图片,但问题出现在不同的手机图片存储路径不同只能作罢。)其原理是通过读取系统相册的ContentProvider图像数据,该功能的实现只用了一下午就完成了,直接使用了开源框架ImageLoader,加载一千张图像十分流畅,堪比原生相册。但是,在测试的时候问题来了,在运存只有1G的手机上,加载二千多张,大小总计2G左右的图片时,该APP变得非常卡,甚至容易崩溃,对其的优化花了一个星期。
当产品经理质疑我为什么一个简单的相册需要一周时,我需要花费大量精力解释,并非我有偷懒。。。
也听说过其他一些产品,加需求加太多,代码重构耽误产品上线日期的。
产品经理是项目的推动者,很多人把沟通能力看的格外重要,但如果一个产品经理是懂得开发,那么他和研发的沟通将会顺畅许多。
当然,也有很多不懂技术的产品经理是踏着一个个坑成长起来的,被研发指导得多了,也能慢慢成长起来,那么他的成长期,对大家会不会是个灾难呢?
产品经理是个对综合能力要求很高的岗位,这也常是优秀的产品经理和产品汪的区别,现在入门做产品经理也许很容易,但成长为优秀的产品经理还有很多高台阶要上。我也觉得这是件公平的事情。研发写代码虽然门槛较高,但是入门后台阶相对较低,努力2-3年也许就能成为优秀的研发。优秀的产品经理则需要更久去沉淀。
How:要做产品经理,需要懂哪些技术呢?
对产品经理来说,掌握一门计算机语言是不必要的。不需要了解到具体的代码如何编写,但一定要懂数据间是如何传递的。我推荐多虚心向研发请教,了解不同研发不同语言负责的工作,会比较容易快了解。
目前在软件开发中有几种常见模式
MVC(Model-View-Controller)
MVP(Model-View-Presenter)
MVVM(Model-View-ViewModel)
目前大部分的WEB开发和移动开发也是采用MVC模式
WEB和移动应用运行的流程:
如图,一般网页的工作是需要前端工程师来完成,这时候写好的页面称之为静态页面,可以被浏览器直接解释执行。这时候的页面还不具备动态的功能。拿注册功能举例,当用户进入注册页面后,在输入框输入自己的用户名、密码等数据,数据会传递到后台,后台再存到数据库相应的表中,存储的结构一般为字段名+值,存储成功后,后台再会返回相应的数据告诉页面,页面这个时候再提示用户注册成功。
如图,移动端的流程和网站大致相同,不同的是移动端(安卓和IOS)如果不是混合开发,大多数时候不需要前端工程师参与。
也许看完这些你仍旧对技术缺少概念,那么可以尝试自己做个天气预报APP或者个人的简单网站出来,并没有太高难度,程序入门还是比较轻松的。在研发忙不过来时,一些小的改动自己就可以完成,必会让研发更加高看你一眼。
更何况,编程这么酷的事情,为什么不试试呢?