炼金术(5): 区分前端开发/客户端开发/后端开发/核心开发
前端开发,指只做过HTML、CSS、JavaScript以及具备使用在此基础上构建的各种Web类型的UI框架开发的能力,例如React、Vue、Elm等Web框架,同时对NodeJS生态下的Gulp、Webpack等打包工具链、有所熟悉。前端开发人员还需要对PC端网页渲染、移动端网页渲染,或响应式渲染有所熟悉。必要的,前端开发人员还需要熟悉微信开发、微信环境的H5开发、以及各种小程序的开发等。
客户端开发,指完整的开发过PC端程序、移动端(Android、iOS、或者ReactNative等跨平台开发框架)程序的开发人员。客户端开发要处理的复杂度指数比上述前端开发人员高。客户端开发一般也会对UI层、逻辑层、数据层分离的构架有所理解,并能主动做此分类。客户端开发也可能需要处理多线程、本地文件读写、网络通信、多进程构架等问题。
相对来说,一个前端开发的熟手可能对Web的各种框架和工具链有熟练上的优势能力。但是另一个方面,前端开发相对于客户端开发来说,可能对端内的分层构架没有什么意识,对常见的OOP封装也没有什么概念,因为他们大量的精力都消耗在了如何调整Web组件、如何做好样式、如何写交互上。因此他们对如何做分层、如何做封装、如何做规约的经验增长的比较慢。
后台开发,需要掌握Linux上的各种基本命令,并以此为基础掌握这些系列的能力:网关配置,例如nginx,需要熟悉网关的服务路由配置策略、反向代理策略等;静态路由导向静态网站,反向代理则可能导向内部的Web服务,例如Java、NodeJs等内部起的Web服务;Web服务背后可能就是一系列Rest接口的实现或者RPC接口的实现;进一步背后可能有缓存层、数据库CRUD读写层。但这只是最基本的形式,后台构架会一步步演化,演化到最后又会变成开发人员只需要写业务代码,通过工具链一件部署等。
实际上后台这部分混合着基础组件的开发和业务逻辑的开发。业务逻辑层面的技术需求和基础组件的技术需求并不相同。基础组件部分,需要的是做云资源的资源抽象、虚拟化组件的掌握、调度、消息中间件等等分布式组件的技术,而面向业务,最常规的来说就是要对缓存、数据库的设计有良好的把握,以及一条完整业务流程全过程中,所有端的时序、事件、数据流的把握。
最后一个是核心开发。其实核心两个字具有骗人的作用,好像其他开发都显得无足轻重,其实不然。核心开发一般是指开发某种Kill级别的底层技术,例如Google的QUIC网络协议设计和开发、一种满足特定需求的存储系统/数据库、一个车辆识别系统等等。一个典型例子是Microsoft的浏览器团队能开发独立的浏览器核心引擎,但是生态没构建好,原版Edge浏览器并没有获得成功,反之,基于Chromium版本的Edge则反而有跟原版Chrome在市场上一争的潜力,本文就是在基于Chromium版本的Edge浏览器上编写的。
理解和区别这些不同类型的开发,对于一个项目的人员安排和调度是必要的。我深刻理解到一个项目的延期时间基本上是由耗时最长的那个端决定的。能不能某些端放的人靠谱,某些端放的人不靠谱呢?有风险。基本上来说,要想做出高质量的项目,就需要在合适的端放上合适的人。如果人上面没有办法满足,意味着那个人在那个端上没办法独立Hold住一面,这个时候就一定要在整体上对那个端有一个经过设计的构架,把风险规约到构架里面,我想构架的作用在这个时候就会本质的显露出来必要性,而不是装饰性。
全栈是一个谎言,双拳难敌四手,TeamWork不应该是一个人把所有的事情都做了,这是不对的。好的软件开发过程,如果出现了一个人做了过多角色工作,一定是这个软件过程的警告信号,不是什么好事。
技术人员可以拥有很多个技术栈的能力,随着项目的锻炼和经验的丰富,也会有这样一个自然而然的过程。但是还是要从角色上区分不同位置需要的不同能力,这是思维方式的问题。例如一个常见的问题是「做UI太头疼,审美是硬伤」。
首先,这就是思维方式的问题,不要自己做设计,做UI开发,纯界面技术上需要掌握的是如何布局(基于坐标的布局或者基于排版的布局)、如何配置样式(直接绘制方式的或者CSS调整样式的方式)、如何模块化UI(组件化、组合方式)、如何路由(跳转、前进、后退)、如何处理事件等。进一步的是如何做UI层、逻辑控制层、数据层的分离等。
而美工方面,你应该放心的交给美工设计师去设计,你需要做的只是把美术设计师设计的原型,通过你掌握的上述技术呈现出来。你只要思考一下,美术设计师做不了你的工作,但TA做的也是【UI】的一部分。
其次,审美是会随着经验的增加而一点点改变的,它不是静态的,所以也不必妄自菲薄,审美并非仅仅意味着「好看」,还包含「合理」、「用户友好」...等等。
--end--