点击↑上方↑蓝色“编了个程”关注我~
这是Yasin的第 58 篇原创文章
今年没回老家过年,留在杭州了。杭州过年这两天也比较冷清,门店基本都关门了,只有商场还有一些店在正常营业。不过楼下的超市每天还开着,还能买到菜,挺好。
这是第一次没回老家过年,给家人打了电话,送了祝福。也和朋友发了点红包,领了点红包,在朋友圈顺手点了点赞。
春晚也看了,还行。
今天又下雪了,如果有机会,我想去断桥看看残雪。
这是虎年的第一篇文章,想写一点专业性不那么强的,轻松一点,也受众广一点的。这篇文章是写给刚入行或即将入行,或者对互联网和软件感兴趣的朋友看的,主要是对团队中各个角色有个比较基础的认知。
以前过年回家,亲戚朋友老问我在干什么,我一句话也解释不清楚,就说是”写代码的“、”开发软件的“。但软件开发过程中,其实会涉及到很多角色,写代码的也分为好几种。
其实这要看软件的规模,比如我个人网站那种小规模的软件,一个人其实就可以搞定所有的事情了。既是用户,也是开发者,也是维护者。
但稍微大一点规模的软件,是需要各种各样的角色去一起合作开发出来的。接下来就大概介绍一下,在一个软件开发中,都有哪些角色吧。
用户是对软件产生需求的角色。用户有很多种类型,从大的分类来看,主要分为B端(Business)和C端(Customer)。B端一般是后台管理系统,面向的是企业员工或公司内部人员。C端即个人用户,比如我们平时用的微信、淘宝、抖音等,都是面向C端用户的软件。
C端软件的逻辑比较简单,但用户数量非常大,迭代也很快,所以在性能、稳定性上面会有比较大的挑战。而B端软件的逻辑比较复杂,功能比较多,上下游链路长,需要处理的是软件开发效率、可扩展性。
产品经理,有些公司也叫产品,也有的叫业务分析师(BA)。
产品需要把控好一个产品具有什么样的功能。对于B端软件来说,用户的主要需求一般是在软件开发前就客观存在的,产品经理需要做的就是发掘用户需求,然后用软件实现这个需求,帮助用户提效或者帮助业务发展。
对于C端来说,在功能上往往需要更多的创新,来吸引用户,转化用户,所以C端产品会更看重迭代速度和用户的各种数据,不断尝试、灰度,然后根据用户的行为数据来做出产品上的发展决策。
产品一般产出的是需求说明、需求文档。一些产品同学为了更直观的表达产品意图,还会产出一些流程图、简单的产品界面设计。
设计有很多种类,UI、UX、UE,统称为UED。其实我也不太清楚它们之间具体的区别。一般来说,UI指的是用户界面,在软件设计过程中一般指的是软件的图形界面。而UX和UE都指的是用户体验,会关注用户在整个使用过程中的感受,它包含了用户界面,但不止是用户界面,可能还有操作动线、交互设计方面的东西。
在我了解到的团队,产品一般会不画图或者画一些比较简单的图,再交给设计润色和丰富细节,最终产出完整的设计图给到开发人员。
前后端统一称为RD (Research and Developer)或者Dev
前端指的是用代码把设计图写出来的人,主要负责软件的界面、交互、从后端读写数据等工作。
传统的软件很多都是需要下载下来安装到客户端的,目前手机上的APP也是这种形式。而近年来WEB端开始越来越流行,用户不需要安装软件,只需要在浏览器输入一个网址,就能使用系统中的软件进行工作。比较典型就是知乎、b站,都是从WEB端开始做的。而面向toB的软件,就更广泛地基于浏览器来开发了,这主要是出于开发效率上的考虑,以及用户无感知地更新迭代。
所以其实web前端,移动端包括安卓开发,ios开发,还有基于reactive navtive、Flutter等技术的跨平台开发,以及基于小程序的开发,都统称为前端,也有人叫他们”大前端“。但一般术业有专攻,前端技术栈更新很快而且很多,大多数前端都只精通一部分平台的前端开发。
其实在很早很早以前,是没有专门的前端的,后端顺便就把前端写了。不过后面前端技术栈变得越来越复杂,就有了”前后端“分离的说法,慢慢就有了专业做前端的角色。
em,这就是我的工作了。
如果说前端负责的是用户在界面上能看到的代码。那后端负责的就是所有用户”看不见的“代码和逻辑。
前端接收用户的输入和点击行为,然后通过调用后端提供的接口。后端负责逻辑的校验、处理和数据的存储。
比如用户在某电商APP上点击”确认下单“的操作,后端会去校验库存是否不足,拉取商品信息,生成订单和支付单,处理优惠券的计算等等各种逻辑。
前面提到B端的逻辑会比较复杂,链路长。可能后端会有很多个开发团队,彼此之间也可能会有接口的对接,所以沟通能力和统筹能力也很重要。当然了,服务的设计和代码设计也比较重要。
在面向C端的软件,后端也要负责性能问题和数据一致性的问题。因为前端一般算力在用户的电脑上和手机上。目前硬件发展很快,基本上机器资源都是绰绰有余的。但后端是部署在服务器上,要同时处理成千上万甚至上亿的请求,如何承载这么大的并发量,让数据不出错,本身就是一件比较难的事。
测试是产品质量的把关人,简称QA。其实开发人员一般会自测,但为什么还要测试呢?
一方面是术业有专攻,自动化测试、用户界面测试等等,都需要专业的测试去做,效率会更高一些。所以现在诞生了很多叫”测开“的角色,也就是测试开发,会写一些自动化测试的,在测试界也比较吃香。但小公司一般测开比较少,更多的还是人手工在点点点,说好听点叫”回归“,说不好听点叫重复劳动。
另一方面测试的视角和产品理解也不一样,开发人员虽然会自测,但只会按照自己理解的产品逻辑去自测,永远测不到自己认知以外的产品逻辑。但测试人员的视角不同,可以站在更完善的产品链路视角去测,也能测到一些开发人员可能没想到的边界和场景,这样形成交叉检查,就能够保证产品更完善,bug更少。
数据和算法一般是体量稍大的公司才会有。
用户使用过程中会产生大量的数据,这些数据非常有价值,可以用来分析用户行为,进而可以指导产品设计甚至是影响商业决策。
但用户产生的数据,一般都是开发直接存储在各种各样的数据库中,是最原始的数据。需要把这些数据同步到数据仓库,进行进一步加工和使用。
数据简称DA (Data Analytics)或BI (Business Intelligence)
算法会根据用户产生的数据,训练合适的算法模型,最终产出一个适合业务的算法接口。由后端开发去调用这些算法接口,形成比较强大的功能,比如商品推荐、抖音视频推荐、知乎文章推荐等,背后就有数据和算法的支撑。
算法工程师需求量也没有前后端那么大,但人才也比较稀少,尤其是顶级的算法工程师,基本上也是科学家了。算法比较看重学历和学术上的研究成果,但工资也是真的高,有条件的同学可以冲。
开发一个软件的过程,其实也是一个复杂的工程项目。
这个过程需要有一个人来把控整个时间节奏、人员安排,保证产品能够如期顺利开发完成,功能按时迭代上线。
这个角色一般叫项目经理,简称PM。
但互联网行业,管理其实是不需要花太多的时间的,所以一般很少有专职的项目经理,甚至没有项目经理。有时候是产品主要负责在推动整个进程。而有时候,是开发。这里就不得不提一下,互联网公司似乎都比较看重开发人员去推动整个项目过程,阿里称它为”主观能动性“,”此时时刻,非我莫属“,字节称它为”追求极致,务实敢为,多元兼容"。所以也就会有技术PM、技术Owner这种角色,一般是比较有经验的开发人员去担任。
在敏捷开发过程中,项目经理也管理迭代,所以也有叫Scrum Master,Iteration Master等。
运维主要负责的是服务器部署、自动化流水线搭建等工作。
在云时代以前,服务器是一台台实体机,运维可能还要负责服务器的上架、巡检、维护等工作,以及一些简单的服务器分配、网络分配等工作。
而软件部署、自动化流水线的搭建,一般是后端开发兼职的。
但随着云服务的发展和软件机器规模的不断扩大,运维也需要大量的自动化工作。也就诞生了运维开发(也有的叫开发运维)DevOps这种角色,负责系统架构,服务容器化,自动化开发等。这种角色一般广泛存在于中等规模的公司,他们依赖云服务,但公司内部没有成熟的基建团队,所以需要这么一种角色。而大型企业一般有专门的团队做这件事,业务开发团队是不需要这个角色的。
运营其实也算是一种B端用户,所以很多对于很多B端的团队来说,运营就是我们的“业务方”。
运营通过数据、和各种业务操作来促进公司业务上升。运营也分很多种类,有商家运营、广告运营、用户运营、活动运营等等。
运营有时候也要为产品负责,主要是为产品的结果数据负责,比如用户量、订单量等等。
有时候运营也可以是产品,于是有些团队也有“产运”和“产研”这两种区别。
以上差不多是开发一个软件中主要涉及到的角色了。其实还是要看软件和业务的规模,有时候一个角色需要身兼多职。特别是小公司,需要“多面手”,说白了其实是老板为了降低人力成本。而大公司就需要“术业有专攻”,专业的事情交给专业的人,使整个团队的效率最大化,人人都是螺丝钉。
最后祝大家虎年快乐,虎虎生威,如虎添翼~
关于作者
我是Yasin,一个爱写博客的技术人
微信公众号:编了个程(blgcheng)
个人网站:https://yasinshaw.com
往期推荐
Golang之context
业务代码和技术代码