前端/客户端/中间件/后端/核心开发—方向选择

前端开发 指只做过HTML、CSS、JavaScript以及具备使用在此基础上构建的各种Web类型的UI框架开发的能力,例如React、Vue、Elm等Web框架,同时对NodeJS生态下的Gulp、Webpack等打包工具链、有所熟悉。前端开发人员还需要对PC端网页渲染、移动端网页渲染,或响应式渲染有所熟悉。必要的,前端开发人员还需要熟悉微信开发、微信环境的H5开发、以及各种小程序的开发等。

客户端(偏业务)开发 指完整的开发过PC端程序、移动端(Android、iOS、或者ReactNative等跨平台开发框架)程序的开发人员。客户端开发要处理的复杂度指数比上述前端开发人员高。客户端开发一般也会对UI层、逻辑层、数据层分离的构架有所理解,并能主动做此分类。客户端开发也可能需要处理多线程、本地文件读写、网络通信、多进程构架等问题。

相对来说,一个前端开发的熟手可能对Web的各种框架和工具链有熟练上的优势能力。但是另一个方面,前端开发相对于客户端开发来说,可能对端内的分层构架没有什么意识,对常见的OOP封装也没有什么概念,因为他们大量的精力都消耗在了如何调整Web组件、如何做好样式、如何写交互上。因此他们对如何做分层、如何做封装、如何做规约的经验增长的比较慢。

客户端(偏组件)开发 只不过它更倾向于技术架构,而不是业务、UI。在这里还是单独说明一下。之所以要单独说明,因为它蕴含着很高的技术含量。它的客户端往往要支持高并发、保证消息传输的可靠性、链接的稳定性。对开发人员素质相对于偏向于业务开发的客户端开发人员来说要求高一些;另外,对于出去面试大厂,单纯的业务开发简历上面项目写起来自然没有什么说服力。它一般是存在于一些中的大型的互联网公司的技术中台部门,属于公司的基础服务。每个公司技术方向根据业务不同会有差异:如好多大厂自研的音视频SDK,腾讯微信的消息服务Mars,好未来的课堂实时消息服务(也是基于微信Mars的)。

后台(偏业务)开发 需要掌握Linux上的各种基本命令,并以此为基础掌握这些系列的能力:网关配置,例如nginx,需要熟悉网关的服务路由配置策略、反向代理策略等;静态路由导向静态网站,反向代理则可能导向内部的Web服务,例如Java、NodeJs等内部起的Web服务;Web服务背后可能就是一系列Rest接口的实现或者RPC接口的实现;进一步背后可能有缓存层、数据库CRUD读写层。但这只是最基本的形式,后台构架会一步步演化,演化到最后又会变成开发人员只需要写业务代码,通过工具链一件部署等。

后台(偏组件)开发 区别于业务后端往往要支持动态快速多机房伸缩,百万级在线,分布式,高可用,强一致,低延迟等特性。

业务逻辑层面的技术需求和基础组件的技术需求并不相同。基础组件部分,需要的是做云资源的资源抽象、虚拟化组件的掌握、调度、消息中间件等等分布式组件的技术(这里主要是轮子,无需进行二次开发),而面向业务,最常规的来说就是要对缓存、数据库的设计有良好的把握,以及一条完整业务流程全过程中,所有端的时序、事件、数据流的把握。

核心开发 其实核心两个字具有骗人的作用,好像其他开发都显得无足轻重,其实不然。核心开发一般是指开发某种Kill级别的底层技术,例如Google的QUIC网络协议设计和开发、一种满足特定需求的存储系统/数据库、一个车辆识别系统、一个RPC中间件等等。一个典型例子是Microsoft的浏览器团队能开发独立的浏览器核心引擎,但是生态没构建好,原版Edge浏览器并没有获得成功,反之,基于Chromium版本的Edge则反而有跟原版Chrome在市场上一争的潜力,本文就是在基于Chromium版本的Edge浏览器上编写的。

理解和区别这些不同类型的开发,对于一个项目的人员安排和调度是必要的。我深刻理解到一个项目的延期时间基本上是由耗时最长的那个端决定的。能不能某些端放的人靠谱,某些端放的人不靠谱呢?有风险。基本上来说,要想做出高质量的项目,就需要在合适的端放上合适的人。

如果人上面没有办法满足,意味着那个人在那个端上没办法独立Hold住一面,这个时候就一定要在整体上对那个端有一个经过设计的构架,把风险规约到构架里面,我想构架的作用在这个时候就会本质的显露出来必要性,而不是装饰性。

从项目业务构架的角度来说,理解和区分不同类型的开发也是必要的,你能识别和区分不同类型的开发,也就有了识别和区分不同端的业务边界的基础,这对业务构架的设计和理解是有必要的。

       全栈是一个谎言,双拳难敌四手,TeamWork不应该是一个人把所有的事情都做了,这是不对的。好的软件开发过程,如果出现了一个人做了过多角色工作,一定是这个软件过程的警告信号,不是什么好事。技术人员可以拥有很多个技术栈的能力,随着项目的锻炼和经验的丰富,也会有这样一个自然而然的过程。但是还是要从角色上区分不同位置需要的不同能力,这是思维方式的问题。

        但是,如果想要纯做技术,或者对技术有着骨子里的热爱。个人认为,在一定程度上精进现有技术维度的前提下,可以考虑扩充知识的广度。所谓的 “搞得多搞得乱到最后啥都不精” 这句话本身不能适用于所有个体、所有情况,同时每个人经历不同对这句话的理解也不同。最后,没有最好的选择,只有最适合自己的选择。

参考:写给那些傻傻的,想做服务器开发的应届生_likika2012的专栏-CSDN博客

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值