对于互联网应用开发来说,前端开发和后端开发是工程师的两大工作领域,这点已经是很多同学的常识。于是,经常有人会问,前端工程师和后端工程师都是做什么的?薪资如何?未来的行业发展前景怎样?相信这些对于很多现有的软件从业人员,或是准备入行的门外汉们来说,都是模糊不清的。下面我们就首先来介绍一下二者对技术的要求和职责的范围。从根本上区分它们。
前端工程师主要负责面向用户界面的处理。
在一个网页或者App的页面上,用户能够看到的内容、图片、段落布局、链接、图标以及按钮等等,都属于前端的范畴。在互联网应用出现的早期,并没有所谓前端工程师的岗位细分。这些工作有些是由美工负责, 有些是由程序员负责。那时候,完成页面设计,所需要的技术无非是HTML、CSS和JavaScript脚本语言,也就是俗称的“三剑客”。
后来随着硬件的发展,客户端的能力被不断提升。更伴随着Web2.0的普及,以及移动互联网的兴起,人们不再满足于让客户端仅仅负责应用内容的展示,更会把一部分运算迁移到客户端来完成。我们会将一些原来服务器端处理的功能迁移到客户端。比如状态管理,以减轻后端的数据吞吐量,提高后端的数据处理效率。再比如路径管理,在传统的多页应用程序开发中,一般都是后端来返回某个页面,前端只负责显示。而现在的应用开发中,一般都是单页应用开发,这样路径的处理就在前端进行了,提高前端应用的处理效率,增强用户体验。
同时在手机端,因为不同的终端设备在显示方式、显示能力上的差异,更是有了诸如屏幕适配、自适应布局等新的需求。于是,HTML5技术族系就诞生了,相应的,也出现了专注于完成此类工作的程序员群体,于是,前端开发领域应运而生。
当然,前端工程师手中最有力的武器,依然是升级版的“三剑客”。
但是仅仅使用“三剑客”,开发效率和代码数量都是惊人的,而面对应用的爆炸式增长,以及需求的频繁更迭,各种的框架、工具也就越来越多,以提升开发的效率。
前几年前端开发用到的技术,除了HTML5、CSS3、JavaScript之外,无非是Jquery、Bootstrap、Node.js 、AngularJs等技术。从开始的切页面,到复杂的前端单页应用,Node服务端应用,移动端React-Native等。
而苦逼的是,这个领域的开发技术迟迟无法稳定下来,不仅工具、框架的迭代速度很快,而且大的技术体系和新的技术族系,也在不断的发生变革,甚至是颠覆式的革命。于是,前端工程师,一直在疲于应付,疲于追赶。
近10年间前端技术经历了3次大的变化。2010年--2015年前端主要使用的技术是Android和IOS。2016--2019年使用的技术是HTML5、CSS3、ES6、JavaScript、Vue、RN等。2019年中Google在全球移动者开发大会上,推出了新的前端技术Flutter。这三次变化可以说是翻天覆地的。核心编程语言改了又改,变了又变。比如,Android用的是Java、IOS用的是Objective-C,后面都变成了JavaScript。最后到了Flutter又换成了Dart。这对于前端工程师简直是毁灭性的打击。甚至有些前端工程师在GitHub上公开留言老子学不动了。
另一方面,前端开发因为涉及的领域比较片面。只负责进行数据展示,不负责核心业务开发,创造的价值有限。所以在后续晋升通道上,天花板也会较低,局限性较大。比如,大神尤宇希(前端著名框架VUE的作者)在加盟阿里巴巴时,只拿到了P9(阿里的技术职级体系)。很多前端工程师为他们的领袖打抱不平。
于此同时,由于前端开发的工作目标,是让用户在PC或手机屏幕上,看到的产品内容更棒,更吸引人,因此,前端工程师要有一些美学的天赋和产品的感觉。这对于很多理工科出身的同学来说,也是不太容易建立的。
后端工程师主要是开发服务器端运行的代码,是用户不可见的。
打个比方,后端的工作就像盖楼房的地基部分和框架部分。通常,后端工程师需要搭建后端的支撑服务容器;针对于不同行业进行相应的功能接口设计;完成具体的业务逻辑实现。在具体的功能实现部分可以采用Java、Python等编程语言来实现。
后端开发使用的Java编程语言,主要用到的是包括但不限于JVM、高可用、高并发、Spring、SpringMVC、Hibernate、Mybatis、Http协议、Tomcat服务器等技术。而Python编程语言同样擅于开发后端应用,所使用的主要技术有Django、Flask、爬虫、Numpy、Pandas、Nginx、Matlab、Ternado等。随着云计算、大数据、人工智能的发展,又涌现了Docker容器技术、Serverless、Hadoop、Flink、Pytorch、Tensorflow等新型架构。后端开发的比重、重要性又有了大幅度提高。
后端开发主要负责系统核心业务实现,是一个系统的灵魂。所使用的编程语言Java(1995年诞生)、Python(1989年诞生),都非常稳定(甚至比好多同学们岁数都大)。随着大数据、人工智能的发展,作为主力编程语言的Java、Python。他们更加会大放异彩。
最后由于项目开发过程中,往往后端的功能模块比较多,业务也较为重要,所以相应的所需要的开发人员数量也会较多。而前端工程师,主要负责数据显示,所以需求量较少。一个公司前后端人员比例大概为1:5。而后端工程师往往能够接触到系统的核心业务和核心数据流程,因此,对项目组的重要性也会相应大一些。
当然,做一个好的后端工程师,也是会有很多的技术、框架需要掌握和学习。只是和前端相比,技术的变化不那么大,也不易发生颠覆性的技术革新,程序员只需要随着技术的发展,对现有的知识体系进行迭代和更新就好了。
从后端工程师的任职要求来看,除了需要掌握必要的技术之外,对程序员的算法能力、数据建模能力、逻辑能力要求比较高,而这些,正是理工类学生所擅长的。
一般来说,由于工作内容的复杂性和多样性,对于初级前端工程师的工资相对来说要低于后端工程师的工资,但是这个差距并不是很大。但随着工作年限的增加,后端工程师的上升空间要比前端要高。此外由于前端技术更新的频率,给程序员积累提升的周期比较短,这方面也限制了前端工程师的发展。下面统计了北京,深圳,上海,杭州几个软件行业比较发达城市的薪资数据,可以看到后端方向的工程师薪资普遍比前端要高。
前端工程师是在技术的发展中所产生的一个细分的领域。其实对于很多企业来讲,这种细分的界限并不十分清晰。例如,最近企业中流行的所谓“全栈工程师”,就是要求后端工程师也要有一定的能力,去承担前端开发的任务;前端工程师,也要了解后端应用开发的细节。在这个融合的过程中,前端工程师的地位略显尴尬,毕竟,专业的互联网美工,也会具备一定的编码能力,而后端工程师,由于他们的技术知识体系相对完善,对公司业务的底层核心更为了解,也有能力分担前端的一部分工作。因此,前端的“领地”也就不断的被蚕食和侵占。
前端和后端哪个更重要,哪个更有价值,一直众说纷纭。也许这样的争论还会持续下去,直到这两个领域彻底融合统一,形成共识。
对于有志于从事软件开发的同学来说,前端和后端只是企业中两个不同职能的岗位,无论从事哪个岗位,只要你技术过硬,项目开发能力突出,都能有所发展。只是我们建议,对于编程的初学者,还是应该从后端入手,毕竟无论是Java还是Python,都是成熟而完整的编程体系,对于同学们打好编程基础,训练编程最基本的技能,都能起到事半功倍的作用,在未来的职业发展中,也会有更广阔的用武之地。