产品架构设计的公式
我经常推荐身边的产品经理们多多关注技术领域的动态,没事折腾和体验一下各类开源程序,学习一些技术知识和原理,感受一下技术的魅力。像BBS、Usenet、IRC、Mailing List这些互联网最初的产品形态,其实最应该是产品经理们回过头去仔细看看并学习的东西。现在有些非常优秀的产品,倒是从这些老产品里吸取了不少灵感。比如Slack就从IRC中继承了很多优点,微信公众号就继承了Mailing List的原理,中国互联网缺少产品层面的创新,其实也跟不少人没有那个早期网络传承有关。
基于这样的初衷,所以在写《杰出产品经理》书籍的时候,我特地将“产品架构设计”纳入到知识体系中,希望能以一个通俗易懂的方式给大家分享一些技术方面的知识。
互联网产品的本质是程序,而程序有一个非常著名的公式“算法+数据结构=程序”,这是由Pascal之父“Nicklaus Wirth”提出的,凭借这一句话获得了1984年的图灵奖,这个公式对计算机科学的影响程度足以类似物理学中爱因斯坦的“E=MC^2”。
想要做好互联网产品的架构设计就必须充分的理解这个公式的含意,它能够帮助我们在技术层面上架设起一个产品观。
一、数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。产品编程时用的每一个数据都是根据需求按照一定的结构组织起来的,比如数组、堆栈等等。
数据结构由元素和关系两个组成,元素则是各个表和字段的信息内容,关系则是它们之间的前后件关系(逻辑)。数据关系分别有集合、线性(一对一的相互关系)、树形(一对多的相互关系)、图形(多对多的相互关系)这四种关系。
想要理解数据结构就必须要了解数据库的知识,比如关系型数据库,或者数据模型,但是对于产品经理来说,这就太偏向于技术层面了,所以在这里我总结了一套方法,让没有学过技术的产品经理也能充分理解数据结构。
上图就是以茅庐舍的用户信息为示例的一组数据元素,当我们不了解数据库知识的时候,我们可以采用思维导图的方式用信息结构图罗列信息内容。除了图中罗列的一些信息之外,实际产品中用户的信息结构还有收藏、消息通知等等其他内容,如果我们还想要知道用户的行为,还会有用户行为的数据。
基于上图的示例,我们再来理解数据结构,用户的各个信息就是数据元素,用户的所有信息就是一个集合关系。集合下面的各个细分信息,比如身份信息的各个分支信息和用户的数据关系是线性关系,因为它们是一对一的关系,身份信息是绝对的只属于某一个用户。
数据层是我们做产品的基础层面,只有掌握了数据,我们才能更好的规划和设计功能。
二、算法
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
算法是解决问题的方法,也可以说是思想。产品的每一个功能都有业务逻辑,程序按照我们设置的逻辑来操作数据结构的信息,比如注册用户、加好友、发消息、删除文章等等,都是通过算法逻辑来执行增加、删除等数据的操作。
算法就是基于数据结构,根据你想要的结果,然后制定一个或一套的逻辑公式,通过执行这套逻辑公式来获得结果。比如我想要的结果是删除用户A,那么程序的逻辑公式就是执行数据删除指令,删除用户A的数据结构中相关信息。删除的指令可以是全部,也可以是指定的某些信息。
微信朋友圈有一个算法,该算法实现的功能就是判断某条信息是否在该用户的信息流中显示过,以及显示的频次,根据算法计算出来的结果决定同样信息是否还要显示。这种算法大大降低了信息的同质化,减少重复信息带来的用户骚扰。
某个UGC模式产品的信息内容是由用户发表并又由用户审核,为了避免不符合标准的信息内容通过审核,所以该产品有一套审核算法,用户逐条审核信息,当某条信息达到了20个人的审核数量,算法就开始计算,这20个人当中,审核通过、保持中立以及审核拒绝这三种状态分别占比率是多少,当值达到了系统设定的某个要求则通过,没达到则直接拒绝。
上面的例子都是一些简单的业务逻辑,看懂了数据结构,算法也就比较好理解,但是某些领域的算法就相当复杂了,比如电商行业(购物车结算)、广告行业(CPD、CPC、CPM、CPA,DSP、DMP)、金融行业等等,这些行业就需要我们不仅仅有互联网知识,还要懂这些领域的知识。
三、程序
程序它是指为了得到某种结果而可以由电脑、手机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。
每一个算法都是指令,一个产品会有多个算法,因此一个产品就会有多个指令,而指令是通过代码编写出来的,最终打包在一起就是程序。
互联网产品的本质是程序,桌面系统和手机系统也都是程序,我们使用的软件工具、手机应用也是程序,它们是运营在程序上的程序。
谌大师
2017年1月8日 11:40
我没看明白您要表达的意思,您是想说产品架构时在技术的架构之上搭建的吗?能分享一些您这边的方法论吗
邱春龙
2016年1月5日 11:07
赞