产品经理是否要懂技术?
懂技术的产品经理在设计产品方案时,能够在一定程度上预估技 术实现的可行性和实现成本,或至少能具备基本的认知,知道什么时候、什么情况下需要和技术人员提前沟通讨论,从而保证产品设计合 理可行,既能提升合作效率,也能赢得技术人员的尊重和信任。
产品经理懂技术有以下明显的好处。
避免产品过度设计
所谓产品过度设计,是指设计的某些产品功能价值不大,甚至没有意义,但是开发工作却很复杂、很耗时。产品过度设计的现象经常 发生,尤其是在前端交互设计上。很多初级产品经理会误以为界面设 计只是画几张图,而没有考虑背后实现逻辑的复杂性。
避免技术过度设计
所谓技术过度设计,是指技术人员设计了没有必要的代码灵活性 和复杂性,而后续的业务根本用不到这些特性,宝贵的时间和资源被浪费。产品经理有时需要和技术人员进行深入沟通,分析业务情况,帮助技术人员砍掉不必要的灵活性、扩展性设计。
与技术人员沟通顺畅
对于研发人员来讲,如果合作的产品经理能在同一个频道、用同一套语言进行沟通,是非常舒服惬意 的事情,可以增进好感和信任感。相反,如果产品经理对一些基本的 技术常识都不理解并且不愿意理解,只是一味地强调自己的设计多么 合理,就会非常容易和研发人员产生冲突。
预判需求的可行性
如果产品经理具备足够多的技术知识及经验,在接到一个需求后 就可以很快地判断技术实现的可行性和成本,并根据业务诉求快速给 出可行的解决方案。否则就需要拉着技术人员和业务人员一起来回讨论,降低效率。
评估工时合理性
完成产品方案设计后,在和开发人员沟通时,产品经理要站在业务人员的角度,和开发人员讨论工时评估是否合理。就像例子,有时开发人员对工时的预估不准确,甚至给出一个很夸张的开发周期。如果产品经理懂技术,则可以感觉出有问题;否则,工时评估对产品经理来说就是一个纯黑盒操作,无法进行判断和把控。
综上所述,产品经理,尤其是B端产品经理,如果具备技术知识,对工作将大有裨益。
了解程序设计的MVC范式
前端交互层
前端交互层负责绘制程序界面,完成前端程序和用户的交互互动,并实现一些简单的业务逻辑,例如数据校验。常见的负责绘制界面的编程语 言有JavaScript、HTML5(即H5,严格来讲不能算编程语言,只是一种记 号语言)、PHP等。
前端方向是升级迭代非常快的技术方向,例如针对移动端,有 JavaScript、Flex、Objective-C、Kotlin等前端语言;针对PC端,前端语言 也从曾经的HTML+JS+CSS,到流行一时的富客户端RIC(Rich Internet Client),再到ExtJS、Node.js等。前端工程师需要不断地刷新自己的技能树,来适应快速变化的前端需求。
业务逻辑层
业务逻辑层负责处理业务逻辑,例如在分销运营管理后台的门店列表页,点击“关联账号”按钮,前端交互层把指令发送给业务逻辑层,业务逻辑层要判断门店状态是否能够关联账号、是否有空闲账号可以进行关联等。
开发人员应该尽量将复杂的校验、判断、业务规则都封装在业务逻辑层,这样可以让前端交互层的负担更轻,更容易扩展,因此业务逻辑层是 MVC结构中最复杂的部分。
例如,假设分销运营管理后台除了PC版本,还打算做一套H5移动版 本,以方便审核人员操作。如果业务逻辑层代码和接口设计良好,则只需要前端工程师实现H5代码即可;但如果之前的前端交互层和业务逻辑层耦合紧密,那么实现H5版本就需要前后端工程师一起调整代码,非常麻烦。 业务逻辑层常用的编程语言有Java、C++、C#、PHP等。
数据层
数据层代表底层的数据存储。数据包括结构化数据和非结构化数据, 既可以存储在数据库中,也可以存储在文本文件中。数据存储操作一般由 程序来完成,例如通过程序对关系型数据库的数据进行增删改查处理。
熟悉接口与调用模式
在跨团队、跨模块的软件开发中,接口的设计规则需要在设计技术方 案时就协商好,然后各方团队各自开发,在约定的时间一起联调,进行集成测试。
同步调用模式
异步调用模式
什么时候用?数据查询耗时时。
理解软件工程的“搭积木”设计
程序设计思维:即模块之间松耦合,模块内部紧耦合。
软件的设计应该像搭积木那样,通过自由拼接组装来实现复杂的功能模块,这样既能保证系统的灵活性,又能避免重复开发,降低成本。如果不能将软件分解成像积木那样的小模块,而是焊死的一块铁板,那么系统将彻底丧失灵活性。
案例:
对第一版系统业务逻辑层的核心功能进行服务化处理, 即针对“注册账号”“禁用账号”“重置密码”“更新数据”等每一个目标很清晰 的功能,将它们抽象成接口,以便于给任何系统提供支持。
至此你应该感受到了软件工程“搭积木”的设计特点,一个个服务接口就像积木块,通过对这些积木块的重复组合利用,可以搭建组装出各种新 的功能和服务。我们常说软件工程就是在造轮子(服务接口和系统模 块),对于功能相同的轮子,大家共用一套就足够了,没有必要针对每个系统重复制造功能相同的轮子。
通过搭积木,看似复杂的系统关系被分解为一类类清晰的接口。