深入浅出之技术知识PM到底要懂些什么?

发布日期:2020-08-15 15:07

首页-亚博电竞|电竞体育赛事竞猜官网 非技术出身的产品经理和初创公司的CXO们都需要懂点技术知识,这个应该已经是大家的共识。若是不懂,下一次被坑/被忽悠的就是你了。那到底需要懂些什么,又要懂到何种地步呢?我

  非技术出身的产品经理和初创公司的CXO们都需要懂点技术知识,这个应该已经是大家的共识。若是不懂,下一次被坑/被忽悠的就是你了。那到底需要懂些什么,又要懂到何种地步呢?我们从这么几点去分析:

  在实际工作中,除了 APP主题随手机壳颜色自适应 这种“高级”需求爆发武力战斗外,大部分产品经理与研发哥哥们还是比较和谐的。当然以下几种真实工作场景大家应该都不会陌生:

  要想避免这些问题,让项目顺利上线,我们需要从PM和RD的工作习惯、看待功能的角度、心中的优先级标准来看出现这些矛盾的原因是什么。也就是产品思维和技术思维的差异化。

  拿车来做一个不太准确但较为形象的比喻(可能跟汽车专业名词有出入,此处仅为类比方便大家理解)。当开发工程师使用技术思维审视一辆车时,他们的内心活动是:

  车应该是分为几个大业务单元的,不同的单元模块由不同的人开发。如底盘及悬挂系统、动力系统、传动系统、刹车系统等,这叫做

  子系统应该封装好,对外提供具体的能力即可:油门踏板不需要了解发动力内部怎么运转,只要保证踏下时有动力输出;这叫做

  某个零配件损坏要更换时,不需要把车大拆一番,而是拧下几个螺丝就能换好。我们这叫做

  底盘系统重新研发太耗时间,有没有现成的直接拿来就能用的呢?这叫做第三方

  前大灯、尾灯、车内音响、车窗升降都需要电力,能不能整合成一个公共的单元来控制呢,比如就叫它电子系统。这叫做

  所以技术思维其实一种工程化的思维,也就是流程和逻辑。他们看待产品功能时更多的是从实现的角度衡量。比如:

  理解上面描述的工程师的思考方式后,便更好的理解产品经理的技术能力具备到的程度了:

  我们现在就对产品对一次技术分解(同上,非专业分解,仅为类比方便大家理解)。

  根据平台,又可以分Web(PC端网页)、H5(移动端网页)、APP前端。他们需要的能力便是将UI设计师的设计稿做成前端代码,通俗的说法叫做切图。

  他们主要做两件事,一是具体业务的代码实现、二是部分数据库的设计和数据读写传输。

  根据语言的不同,会分为Java、PHP、Ruby、Java、Python等,也就是常说的技术栈不同。那么精通很多语言和能力的也就是牛逼的全栈工程师了。

  数据是基于数据库的,根据数据存储的方法(数据之间的关联关系)不同,分为关系型数据库(MySQL)和非关系型数据库(NoSQL)。

  一是数据库开发工程师(Database Developer),主要职责是设计和开发数据库管理系统和数据库应用软件系统,侧重于软件研发,在公司中高级后端工程师可以同步做这部分工作;

  二是我们常说的数据库管理员(Database Administrator,简称DBA),主要职责是运维和管理数据库管理系统,侧重于运维管理。

  代码和数据库都需要运行在服务器上的,更确切的是服务器的操作系统环境上,应用服务器和数据库安装在上面。

  这部分也有专门的工程师,叫做运维工程师,主要负责服务器、操作系统、网络环境的管理和优化,如我们常说的服务器集群管理。

  说到这里不就能不提著名的网站架构方案LAMP了。从流量上来说,70%以上的访问流量都是LAMP来提供的:LAMP指的Linux(操作系统)、Apache(Web应用服务器)、MySQL(有时也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)。正好对应着上面讲的那四层。

  了解了这几层的逻辑关系和职能分工后,我们就能更容易理解工程师们的工作流程是如何了,专业术语也都是在流程场景下产生的。

  完全掌握了PM们的业务实现要求,研发同学们才能动手开工,即项目中的最重要一环:需求PRD评审。

  研发同学带着工程思维去解构PM经过多次调研、分析、返工的文档中描述的功能,想着这个该如何实现、开发的前后顺序是什么、为什么工期又这么紧张...两种思维方式多人面前开始了第一次的大规模交锋。(后续中我们会讲到PM如何做好各类评审)。

  同产品经理需要用 Axure/Sketch/Xmind 等一样,工程师编写代码肯定得有得心应手的吃饭家伙-编码工具。

  这里要了解一个名词IDE。即集成开发环境(IDE,Integrated Development Environment),它是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的利器,你可以理解成是开发软件的一套操作系统,上面有开发用的各种工具集合。

  另一个叫做SDK,英文全称Software Development Kit,中文意思就是软件开发包。这个开发包通常都会包含API函数库、帮助文档、使用手册、辅助工具等资源。意思就是,SDK事实上是开发所需资源的一个集合。

  两者的关系就像操作系统和软件的关系,操作系统给应用程序提供平台,你用软件实现你想用的功能。Xcode 给 SDK 提供平台,你用 SDK 来编程,Xcode只是一个 IDE,用于开发的一个工具而已,你也可以不用 Xcode 来开发。只是它是苹果官方比较提倡的,而且相对来说最大众,最好用而已。而SDK才是开发的灵魂,也就是说你所正真要用的东西。

  首先要有图纸(架构方案),然后分拆业务模块由不同的工程师开发,以加快速度,不同的模块之间需要互相传输交换数据。最后大家汇总在一起提交给测试。

  API 通常代表了一个系统的某一项能力。你可以把它看成是一扇门、窗或杠杆,程序和程序之间的沟通协作就是由API定义的。SDK中一般封装了很多API,这些API就对应着系统或平台的能力。

  为了更早的下班,减少通宵频次,单个工程师会在效率上想更多的办法,比如能不能直接复用之前的代码或者找一下别人已经写好的呢。也就是有没有现成的第三方框架可直接使用。

  软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。

  Vue.js:Vue的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。在国内使用的公司还是蛮多的,像百度外卖、饿了么、头条等等:

  React:起源于Facebook的内部项目,是一个用于构建用户界面的Java库:

  Bootstrap:美国Twitter公司的设计师MarkOtto和JacobThornton合作基于HTML、CSS、Java开发的简洁、直观、强悍的前端开发框架,使得Web开发更加快捷:

  微信的SDK就是 微信开发者工具,集成了公众号网页调试和小程序调试两种开发模式。然后微信提供了自己的视图层描述语言 WXML 和 WXSS ,以及基于 Java 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。

  框架提供丰富的微信原生 API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等。更多信息大家可以移步微信公共平台/小程序开发文档。

  最后,前端和后端肯定也是需要传输数据的。这里通常大家会用JSON,是一种轻量级的数据交换格式。易于人阅读和编写。JSON最常用的格式是某个数据串的键和值匹对,如:{firstName:Json},这表示在这条数据库firstName=Json。

  一个项目中大部分是由多个工程师协作开发的,他们写的代码最后会合并在一起提交测试。如何保证整个开发过程中代码的上传、合并和管理是顺利的呢,这里要讲一个持续(Continuous)的理念。

  如果说等到所有东西都完成了才向下个环节交付,导致所有的问题只能再最后才爆发出来,解决成本巨大甚至无法解决。

  而所谓的持续,就是说每完成一个完整的部分,就向下个环节交付,发现问题可以马上调整,使得问题不会放大到其他部分和后面的环节。即工程师们常说的 持续集成 (Continuousintegration,简称CI)和持续交付(ContinuousDelivery,简称CD)。

  通常大家说的集成是指软件个人研发的部分向软件整体部分交付,以便尽早发现个人开发部分的问题;部署是代码尽快向可运行的开发/测试节交付,以便尽早测试;交付是指研发尽快向用户上线交付。

  这种做法的核心思想在于:一小块一小块的做,并且加快交付的速度和频率,使得交付物尽早在下个环节得到验证,早发现问题早返工。

  另外集成的过程也是多个工程师一起提交代码,也就是代码合并的过程。每个工程师自己编写的这部分叫做分支,在不同的时间点代码是不同的,也就是版本。合并后的代码集合叫做主干,也就是分支需要往主干上提交汇总代码。

  一个项目可能有非常多的分支,每个分支有不同的版本,这里便用到了代码的分布式管理,也就是大家说的Git,读音为/gɪt/。是一个开源的分布式版本控制系统,强调个体,任意两个开发者之间可以很容易的解决冲突,支持离线工作,比较灵活。

  还有不得不提的GitHub,它是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。其中不乏知名开源项目RubyonRails、jQuery、Python等。

  GitHub牛逼的地方在于商业模式很好的平衡了开源和付费。如果你公开托管你的代码,你可以一直免费地使用GitHub。如果你想使用私有存储库或专有的代码托管服务,你需要付费。所以在GitHub,工程师可以十分轻易地找到海量的开源代码。

  开发完成后也就要提交给QA进行测试了,也就开始了改BUG的光辉历程,然后部署上线给用户使用。产品经理开始请辛苦了一段时间的项目组大哥大姐吃饭,并在饭后提出了新项目要开始了,可能有几个需求要推倒重来...

  了解了工程师的工作流程和专有名词只能保证你和他们的话术体系在同一个水平线上(还有个前提是你要认真搜集了解这些流程和名词)。要想达到技术方案和功能体验之间的优先级判断和取舍,还是有很多技术点的背后原理需要大家研究,重要的有:

  篇幅的关系,关于第5和6部分,即测试、部署和更多技术原理这部分我们留在后面的环节单独讲。

  或大家直接报名新开的线月份小班制产品培训课程安排),我都会一对一面授时讲解细节,并告诉大家通过何种方式积累这些知识。

  按照自己的心意设计课程还是蛮幸福的事情,而且周五当天便有6名同学缴费,数十名同学咨询,再次感谢大家的信任和再次各位老大、朋友们不辞辛苦的朋友圈转发。感恩!

  最后还有 3-4个名额,如果你觉得本文对你有帮助,喜欢这种课程安排,就与我联系吧。附上正课的课表和我的微信二维码。