热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sdk是什么意思_深入浅出之技术知识,PM到底要懂些什么?

写在前面非技术出身的产品经理和初创公司的CXO们都需要懂点技术知识,这个应该已经是大家的共识。若是不懂,下一次被坑被忽悠的就是你了。那到底需要懂些什么&



写在前面


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


1)产品和工程师撕的是什么


2)技术同学看到产品功能时想的是?


3)软件开发的流程是如何的


4)一些重要技术思想和方案说明


91c1674eedd86253b3d1f960b7eb929b.png


产品和工程师撕的是什么


7edc767a297c096520d4f3927e21a089.png


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


这个功能这么简单,1-2天你应该可以搞定吧!


别人的可以,到我们这就没法做了?


没有这个接口我怎么做啊?你找XX要接口去!


评审时没说这个需求啊,也没有写到PRD里!


数据库不支持,根本就没有这个字段,做不了!


今天上不了线了,刚才部署失败了


靠,又Crash/空指针/异常/奔溃了...


1a792c63c426e26651d92b9f985f88b6.png


0eac34491250c1df75a1bc23f62f9e5d.png


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


560582207f5b6ae17a591c4f646cd487.png


技术同学看到产品功能时想的是?


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


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


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


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


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


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


能不能在这个车的基础上顺利改造出SUV或MPV呢?这叫做扩展性;


cdf680a4e11496d7f25a8d2712351429.png


大众汽车MQB平台架构


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


这个功能是前端还是后端开发,还是一起开发;


用户操作这个功能时,需要往数据库同步记录什么数据;


这个功能是自己重新开发还是在第三方框架基础上二次开发;


这个功能在没网的情况下如何开发才能保证不出错等等。


f1a99b225517a8cd8289ba0b8db24328.png


5f8d23b6d57bb424b6fd7934fa021b60.png


产品经理需要了解到什么程度


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


产品经理需要懂得技术术语并保证大家沟通时信息对称而不是自说自话,南辕北辙;


听清工程师说的意思后,才能更好地换位理解工程师说法背后原因和推导思路;


需要在了解技术思路后完成对技术方案和功能体验之间的优先级判断和取舍;


产品经理不需要动手写代码和读懂代码,否者就是缘木求鱼,会进入到误区了;


e6aa7a4a976f4002eb46229872f61e8a.png


ac5c9d4b192eadcd5eddb2ce8a63dc29.png


如何更容易的理解工程师的分工?


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


首先,产品或者软件都可以分为展示业务数据硬件这么几层:


922a05c77772ddf904d2880e2075c091.png


----------     一、展示层    ----------


即产品外在”衣服”,包括颜色、布局、弹窗、交互、表单等。


这部分是由前端工程师(FE)开发的。


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


----------     二、业务层    ----------


即产品的功能逻辑实现,包括功能的代码开发、数据传输、接收和存储。


这部分是由后端工程师(RD)开发的。


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


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


----------     三、数据层    ----------


即业务数据的存储、传输和管理等。


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


对于数据库方面的工程师,又可以分为两种。


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


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


----------     四、服务器层    ----------


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


常见的操作系统便是著名的 Windows Server 和 Unix 及 Linux。


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


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


小知识-几大著名网站的架构


5cdb4eb6ce002eba929eaa0c3e355026.png


a4fe48f06a5db58c5078ddacce908336.png


软件开发的通用流程和专有名词


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


通常,软件开发流程有这么几大步:


----------     1、了解业务需求    ----------


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


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


b0bf0993d9d86453a4b43dc28d031eff.png


----------     2、代码编写工具和环境    ----------


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


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


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


在 Android 平台上开发Android App,我们必须从官网下载Android SDK,然后利用这套 SDK 提供的 API 来调用系统能力。开发 iOS 项目我们一般都会用到Xcode,那么 SDK 与 XCode 又是什么关系呢?


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


----------     3、加班熬夜地编写不止    ----------


代码编写其实是一个”盖房子”的过程。


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


43f3f4bb512776b2cd6807de3b019fb4.png


模块之间的是用 API 通讯的。API(Application Programming Interface 的简写),中文称为「应用程序编程接口」。


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


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


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


这么几种比较流行的前端框架大家应该听说过:


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


React:起源于Facebook的内部项目,是一个用于构建用户界面的Javascript库:https://www.reactjscn.com


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


微信小程序


微信小程序为了方便大家开发,也提供了 SDK 和 框架 。


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


c7baf093273f893b225d90823d6899d8.png


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


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


----------     4、代码的合并和管理    ----------


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


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


5ad820f0ec2669728b1a7c0286e52293.png


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


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


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


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


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


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


fe2532abf949aee179991d48870001e7.png


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


----------     5、提交测试和上线    ----------


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


b90d986e978086a3c830cb86609fa27d.png


----------     6、还有更多你要懂    ----------


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


小程序的框架和API能力


APP开发中Native和H5的优劣势


Android和iOS运行和后台机制的区别


Push通知的推送和APP唤醒机制


缓存Cache/COOKIE/Session的区别和应用


第三方登录OAuth的原理和注意事项


还有很多...


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


45fd7f4e6ef2e5f64a2aae543d826062.png


163c9a5855925e68a5c162186fff5841.png


本篇总结


啰啰嗦嗦讲这么多,现在稍微总结一下:


每个职能都是有自己的工作流程和工作方法的;


这些流程和方法代表了大家用不同的思维方式看待产品;


我们常说的换位思考,也就是站在对方的立场用对方的思维方式看待问题;


了解对方更多,才能在项目管理中更好地沟通说服和协调资源;


产品经理需要不断积累储备自己对技术方案原理的总结;


d09363bf2808d0a35090bd1ee2f16fdc.png


eeaa7c4371a9b9a8dd92cf03dfe429b7.png





推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • 为了向用户提供虚拟应用程序,通常会在基础架构中部署StoreFront或Web Interface。为了确保安全的远程访问,通常需要在DMZ中配置Secure Gateway或Access Gateway。本文详细对比了这两种界面工具的功能特性,包括用户管理、安全性、性能优化等方面,为企业选择合适的解决方案提供了全面的参考。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 如何创建和使用快捷链接:掌握打开链接的快捷方式技巧 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • C盘无法格式化的原因及解决方法
    本文探讨了C盘无法格式化的原因,并提供了详细的解决方案,帮助用户顺利进行系统维护。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
author-avatar
,,,,,,,,,,,,,,,
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有