产品经理需要了解学习哪些技术?

首先强调一下,产品经理需要掌握一些技术点这事不是必备项,但却是大大的加分项,从我目前的经验来看,不懂技术的产品经理很难做产品,但可能会有一些天马行空的想法,只不过大多数都会被同行或者技术开发人员说实现不了。

有些产品经理是有研发背景的,即在转行做产品经理之前,有从事过开发工作,这样就非常的有优势,如果之前的开发工作与现在产品所需的技术语言是一样的话,就比较完美了,可以在设计的时候就进行一定程度的实现性和可行性考虑,评估所设计的功能是否可以在现有条件和资源下实现,也能在开发人员的系统设计说明书评审会上听懂,可以大致了解是否符合要求。

我本身并不擅长技术,对设计相关的内容也仅限于了解一些基础概念,避免出现低级错误,所以这个章节算是对沟通部分的补充,并不是很专业地技术/设计入门推荐,只希望了解一些常识有助于和设计人员、开发人员的交流。

先说技术,这些都是纸上谈兵,我属于编程能力比较弱的那种人,只不过比较喜欢关注技术领域的一些新闻,只是简单说一说技术相关的内容。

从我目前的经验来看,以下这些技术点是产品经理应该掌握的,这里不说“必须掌握”,确实是因为有例外存在。

1、产品经理为何要学习技术

技术开发人员都比较喜欢和同行交流的,就像我们自己喜欢和产品经理同行交流一样,因此做过开发的产品经理在和开发人员的沟通上有优势,但需要注意的是,千万不能不懂装懂,不要以为自己做过开发了不起,就指手画脚的参与系统设计,这样反而会令人反感。

要记住:你的技术背景只能停留在产品设计阶段和PRD沟通阶段,不要过多的给出技术方面的意见或建议,术业有专攻,况且你都转行了,说不定你所知道的东西已经过时了(具体可查看《》的相关介绍)。

没有研发背景的产品经理就需要修炼了,其实也不需要去学习开发技术,但是要知道一些专业术语,比如要知道缓存、JS脚本、Ajax、数据库、存储过程、BI等等名词到底是什么东西?否则你会发现你在和开发人员沟通的时候会一愣一愣的,因为他们说的你听不懂。

产品经理在学习的时候要有针对性,比如公司产品都是采用JAVA开发的,那就去了解一下JAVA相关的基础知识,数据都都是采用MYSQL的,那就去简单了解一下这个数据库相关的知识,我们的目标是能听懂开发人员说的话,以免陷于被动。

如果让开发人员发现他说了半天,你都没有听明白,如果要他讲第二遍或者一一解释一下,估计首先会有点不耐烦,其次会有点嫌弃你了,呵呵。

2、技术的两大分类

技术分类两类,一类是开发技术,分为前端和后端技术;一类是产品技术,包括本产品经理必须要掌握的技术。

(1)、前端开发技术

我个人认为html、css和ajax等前端技术应该很懂,最好能写一些前端页面,如HTML5、jquery等新的技术也应该懂一些,这对于自身策划页面有着重要的帮助,对于竞争对手的观察也能够知其然知其所以然,对于提升产品的品质有着重要的作用。

(2)、后端技术

php可以不会,但编程的逻辑关系要知道,自己可以尝试学习python这样的入门比较容易的语言,多试试用编程的逻辑考虑问题,产品和技术沟通更容易,这对于产品迭代及效率的提升来说,有着莫大的帮助(具体可查看《》的相关介绍)。

而学会了Python,对于下面要将的数据分析能力方面也是一个显著的提升,对于数据分析方面,有时候你可能需要各种Excel表格,各种公式罗列,甚至当数据量过大的时候,对于数据的分析还会造成阻碍,而通过Python,只需要简单的做一些基础的命令行,便可以轻松获取相关的数据,对于工作效率的提高无可言语。

(3)、架构和数据库

一个好的产品经理常常是有机会参与一个产品数据库构建的,对数据库字典、数据逻辑和架构关系有一看便知的了解。

3、基础的技术名词

如前面最开头所提到的那些,如缓存、Cookie、Ajax、中间件、数据库等等名词,需要去了解一下其所表示的意思,开发人员在沟通的时候会经常提到这些,如果你听不懂,就会比较杯具。

另外,掌握如缓存、Cookie的使用,还可以在产品后端逻辑中添加一些功能,比如让Cookie记录用户填写的用户名,下次再来登录时不要重复输入;用缓存记录用户的登录验证信息,在一段时间内不需要用户重新登录等等。

还有就是要区分学习一下产品实现的开发语言,比如Java、PHP、.Net等,了解一些基本的知识点,如部署方式,运行载体等,比如常说的LAMP是指Linux+Apache+Mysql+PHP的组合;了解一些脚本语言,如JS脚本、CSS等。这里需要提一下的是,产品经理最好懂HTML,注意不是HTML5,当然要是懂H5就更好了,HTML是最基本的网页脚本语言,有时候看不懂某个页面的逻辑时,可以点击右键属性—“查看网页源代码”来看一看。

4、编程语言

编程语言是用来定义计算机程序的形式语言,它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。

想要成为产品经理的同学可以学习一些前端相关的知识或者学习一些脚本类语言,比如Python,前端相关知识相对来说注重前端呈现,不像后端特别追求性能,并且前端有自身的设计规则(类似的,iOS/Android/WindowsPhone也都有各自的人机界面指南),对产品设计有很大的帮助,与C/JAVA相比,不需要那么多的数理知识和算法要求,而脚本类语言相对更为友好,没有那么抽象,编译器/IDE也较轻,适合入门。

在此,马海祥也跟大家简要介绍一些编程语言相关的内容:

(1)、HTML/CSS/JavaScript

前端相关,HTML算是比较熟悉的,毕竟是简单的标记语言,相对来说对逻辑的要求没那么高;CSS没深入学过,能改一改;JS简单用过框架,没深入了解过框架源码和架构,前面说过,我认为这部分应该是最应该了解的,马海祥感觉C系列的编程语言以及脚本类编程语言都比较偏向技术实现,而前端类的编程语言比较注重呈现的效果,这一点在产品设计阶段需要关注到。

从另一个角度来说,随着HTML5在移动领域的表现越来越好,学习web相关的知识,对移动端也有很大的帮助。

(2)、Basic

BASIC是一种直译式的编程语言,在完成编写后不须经由编译及连结等手续即可执行,但如果需要单独执行时仍然需要将其建立成执行档。

不过,我现在是没接触过,据说更加类似搭积木,没有那么抽象,如果一点没有接触过编程,推荐先玩一玩Small Basic,类似很久之前的LOGO语言,很有意思,英文官网疑似被墙,我这里现在无法访问。

(3)、C/C++/C#

C还算好点,最好的时候能弄懂一点指针的概念,很久不写也就忘记了。C++/C#有个好处,可以使用MS的IDE——VS2013。

C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛;C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言,它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承),C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

(4)、JAVA

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群,有意从事安卓相关职业的同学可以学习。

(5)、Python/Ruby

Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。

脚本类语言,Python入门,Ruby没学过,相对,Python的免费电子书比较多,推荐大家可以看下《》的相关。

(6)、Linux

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

5、数据库

在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件,数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

数据的逻辑结构是从逻辑的角度(即数据间的联系和组织方式)来观察数据,分析数据,与数据的存储位置无关;数据的物理结构是指数据在计算机中存放的结构,即数据的逻辑结构在计算机中的实现形式,所以物理结构也被称为存储结构。

数据库方面无法推荐,图形化操作还可以,SQL没有认真学习,数据库只了解一些概念性的东西。

相对来说,了解一些技术性的概念有很大帮助,比如“高内聚低耦合”等,适当熟悉一些简单的编程语言,对产品设计时的思路有所帮助;从另一个角度,也有利于估算产品的开发进度。

数据模型是数据库系统的核心和基础,各种DBMS软件都是基于某种数据模型的。所以通常也按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类。

严格来说,软件工程专业的学习对我帮助最大的并不是编程语言的课程,而是《软件工程》《软件项目管理》两门课程,虽然最后终于确认自己没有编程上的天赋和耐心,与其吐槽自己Hello World级别的编程能力,倒不如讲讲一些其他的体会更好。

6、SQL的读和写

在大数据时代,产品经理几乎天天都要和数据打交道,数据的来源有很多,但大部分肯定都是存储在数据库里面的,这时要做分析数据的话,数据分析能力是体现在拿到数据之后的,前提是你要拿到数据,这时就和SQL有关系了。

大公司数据仓库建设比较完备,有较为完善的数据管理系统,且有专门的数据维护人员,俗称BI或者DA,即做商业智能和数据处理加工的,在这种条件比较优越的公司,常规的取数需求都可以提交给这些专业人士处理,如日常的分析报表、项目开展所需要的基础数据等,只要说明清楚取数逻辑和所需要的字段就可以了。

但平时的一些产品分析所需数据的获取,以及一些指标考核项的数据就需要你自己动手了。好一点的情况下,你可以央求BI给你写一个SQL语句出来,然后根据需要你自己改改;次一点的情况下,BI会将一些表结构说明给到你,然后你自己去组织表关联取数;最差的情况就是啥都没有,你自己去取数系统里面摸索着取数。

而在小公司,产品经理可以让开发人员帮你取数,但你要是频繁需要取数的,我想你也不好意思老开口,毕竟会影响开发人员的本职工作。自己动手丰衣足食,而且因为小公司数据系统建设不完善,最好的情况就是上面说的第二种,有表结构说明给你参考。

上面这些场景就要求产品经理需要懂SQL语言,这里首先是要能看懂SQL,比方说你是求别人帮你取数的,但看了数据总感觉不对,这时你就需要去看看人家写的SQL对不对,毕竟你自己才最清楚取数需求是什么,看懂了发现有错误的地方,还要会改,特别是别人给你一段有相似取数功能的SQL语句时,要能手动改改之后适合你自己的取数需求。其次是要知道怎么写SQL,这就要求产品经理懂得SQL语言的语法和一些常用的函数,比如日期函数、格式转换函数、数学函数、字符串函数等等,最常见和最基本的都要掌握和灵活运用。

在此,马海祥强烈建议产品经理同行们都学习一下SQL,这样在日常工作当中会方便很多,需要注意的是,SQL语言有T-SQL(Transact-SQL)和PL/SQL(Procedural Language/SQL)两种,需要根据不同的数据库类型,有针对性的去学习。

比如说产品采用的是SQLServer数据库,那就需要学习T-SQL;如果采用的是Oracle或者Mysql数据库,就需要学习PL/SQL,两种语言在语法上差别比较大,大部分情况下都不能混用。

另外,Oracle和Mysql数据库在应用PL/SQL的时候,会有一些函数有使用上的差异,需要注意一下,有人会说现在还有一些非关系型数据库,如MangoDB之类的,这种数据库基本不支持SQL语言去查询,而且里面存储的都是非关系型的数据,也不需要查询出来做分析。

7、UML和E-R图

早些年,产品经理这个名词还没有流行的时候,做类似行当的人一般称为“需求分析师”,传统的软件需求分析师的一项必备技能就是用UML画用例图,当然这个现在也适用,用例图对于说明需求来说,作用还是很明显的,至少开发能看的比较明白。

现在随着思维导图和原型的星期,用例图逐渐的有点被淘汰的意思,但很多开发人员还是会用UML来画系统设计图,如活动图、状态图、协作图等,产品经理需要了解一下这些,以便能在设计评审上看懂这些图。

E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,在数据表关系设计上应用比较多。一个产品的数据存储,肯定不会只有一张数据表,而是由多张数据表通过关系关联起来的,相互之间的这种关系就可以用E-R图来表示,可以从中看出各表之间关联的主键和外键分别是什么,哪些字段值唯一等。

UML图和E-R图在系统设计当中经常出现,产品经理要能看懂其所表达的意思,你和开发人员讲需求设计的时候需要面面俱到,每个细节都会讲到,但开发人员跟你讲系统设计的时候,可是能简则简,你看不懂是你的事情,他们可是按这个开发的。

8、关于软件工程

软件工程里对我帮助最大是“软件生存周期模型”,其次是需求分析的一些方法和文档,UML图等更偏向详细设计,并不十分适合互联网产品快速迭代的开发模式。

我们可以看一些软件生存周期模型和产品研发流程的示意图:

瀑布模型

快速原型模型

产品研发流程

又一个产品研发流程

两者虽然不尽相同,但是却有着某种共性:需求——设计——开发——运营。

互联网产品由于其特性,不断循环这样一个流程;而快速迭代,实质上也就是将每一个这样的流程缩短,尽快推给用户,得到反馈,继续下一个这样的流程,也因为跟传统软件公司的不同,没有甲方的存在,必须要从用户中获取反馈,所以产品经理必须要有一定的数据分析和用户调研能力,辨别真需求和伪需求,也就是经常说的,找准用户的痛点(具体可查看《》的相关介绍)。

有些产品经理的入门书籍中说过产品经理和项目经理的区别,网上也有一些回答。一般大公司分得比较细,两个职位都有专职人员,小公司很多都是一人兼两个职位。即便如此,学习《软件工程》相关的知识绝对对成为产品经理有所帮助,像刚才所说的,最基础意义上的,理解软件的生命周期,对理解快速迭代、理解产品的开发流程非常有帮助。

因为大学期间在图书馆的兼职经历,对图书的分类比较敏感,相当多的产品经理书籍都分到了F类——即经济管理,这本书也属于F类。从管理的角度上来说,《软件工程》就属于对软件(产品)的管理。

虽然说产品经理不一定要会设计,但是有必要了解一些设计相关的知识,避免出现一些低级的错误。

9、移动端的设计规范

这里包含产品设计规范和编码规范,无论是Android还是IOS都有自己特定的规范,移动端的产品经理在设计产品的时候就需要先了解清楚这些规范的内容和一些技术实现的方式(具体可查看《》的相关介绍)。

移动端的技术实现相对比较可控和有限,多了解一些技术有助于进行有效的产品设计,盲目的设计要么实现不了,要么最终无法通过审核,是不可取的。

在此,马海祥提醒各位产品经理,移动端的一些特效也需要清楚,如拖拽、滑动、下拉、手势等,产品经理如果不了解这些,都设计不出操作体验很好的产品来,另外诸如不能获取用户的某些敏感数据等注意事项,都需要在产品设计时就考虑到,这块具体的还是要看场景来决定。

点评:

我认为互联网上本质依然是技术驱动的,开发人员才是核心,所以,一个高级的产品经理应该尊重技术,不迷信产品。

当然,产品经理最重要的能力仍是用户需求把握能力并把它也产品结合,协调管理好开发人员。