前端,后端,全栈分别是做什么的,如何选择?

大家好,我常常收到小伙伴们的提问,例如“前端程序员、后端程序员和全站程序员之间的区别是什么?”、“找工作的时候,应该选前端还是后端?”、“为什么美国很多公司都更倾向于全栈程序员?”今天的视频就为大家一一解答。如果你是第一次看我的视频,欢迎订阅我的频道哦!

首先,我们来看一下什么是前端开发。简单来说,前端开发就是开发网页上的内容展示和与用户的交互。这里的内容展示指的是你在网页上能看到的图片、文字、视频、数字等信息,而与用户的交互则指的是用户在页面上通过点击按钮、输入文字等动作对网站提供数据输入,然后前端对用户的输入进行响应,例如更新页面上的内容。举一个更具体的例子,如果你在我的视频下面点个赞,那么页面对你的点赞这个动作做出了响应。在后台数据库里面,把我的点赞量加1,并且在页面上显示视频点赞量加1之后的数量。

前端开发用到的基础技术就是HTML、CSS和JavaScript,分别用来控制网页里面的内容、视觉效果和用户交互。HTML并不是一门编程语言,它是一种用来定义结构化数据的标记语言。你在浏览器上看到的网页其实就对应一个HTML文件,这个文件里装的就是HTML的代码。而浏览器的职责之一就是通过你输入的网址从网站上下载对应的HTML代码,并且把代码渲染成你肉眼看到的样子。那么前端工程师的工作内容之一就是编写HTML代码,或者使用一些技术来为页面动态生成HTML代码。任何一个网页,你都可以通过浏览器的开发者工具看到它对应的HTML代码。如果你仔细查看一段HTML代码,你会发现,它其实就是由一堆各种类型的标签组合嵌套而成的。

CSS的代码则是用来指定每个HTML的标签以什么样的外观和风格来展示,比如长宽位置颜色居中还是分散、字体显示属性等等。CSS的代码也是被浏览器读入并且渲染成你肉眼所看到的效果。有时候,PM会想把页面里面一个按钮的大小和颜色进行微调,而这个微调就是由前端工程师去改动这个按钮对应的CSS代码来实现的。

前端开发中真正编程的部分是JavaScript。网页如何与用户交互,如何与后端交互,都是通过JavaScript的代码实现的。页面里面的JavaScript代码也是交给浏览器来执行。

前端开发中常用的library有React和Vue。React是目前比较流行的library,也是我在工作中做前端的时候会用到的。React这个library不仅可以用来实现与用户的交互逻辑和事件响应,事实上页面上几乎全部的HTML代码都可以通过React来生成。这种在浏览器端生成HTML代码进行渲染的方式称为client rendering。除了React,另外一种比较流行的library就是Vue,在国内用得比较多。以上介绍的这些就是前端开发的一些常规技术,包括HTML、浏览器和前端服务器的工作原理、CSS、JavaScript以及React和Vue等library。对于这些技术,你可以在学校里面的计算机网络课里面进行学习。

接下来,我们来看一下后端开发。相当一部分的后端开发工作就是开发数据访问服务,使得前端可以通过调用后端的服务来对数据进行增删查改。而后端服务往往需要通过查询数据库来完成对前端请求的响应。在这个过程中,后端工程师通常需要设计后端服务的API、架构、数据库以及写代码实现后端服务的业务逻辑。你还需要保证你设计的后端服务highly available,也就是访问量很大的时候仍然不当机,并且对客户请求的响应时间很短,或者说吞吐量高,单位时间内能处理的请求数量多。

对于后端工程师来说,平时一般需要与Java、JavaScript、Python、PHP等编程语言以及Web Frameworks打交道。主流的Web Frameworks有Spring Boot和Dropwizard基于Java、Express基于JavaScript、Flask基于Python等。每个公司具体选择哪种框架,一定程度上取决于实际情况。另外,后端工程师也需要掌握系统设计的技能。系统设计是后端工程师面试的时候会考到的一个重要技能。在分享CS学习资源的视频中,我也介绍了一些系统设计的学习资源。另外,后端工程师也需要与数据库打交道,例如MySQL、MongoDB、Redis等等。

类比一下,前端通常需要通过调用后端服务来完成对用户的请求响应,而后端服务往往需要通过查询数据库来完成对前端请求的响应。从这个类比可以看出前端和后端的共性,都是通过调用一个比自己靠后的服务来对前方客户的请求进行响应。后端工程师的工作范畴很广,主要包括设计后端服务的API、设计后端服务的架构图、设计后端服务的数据库、写代码实现后端服务的业务逻辑。同时,你还需要保证你设计的后端服务highly available,也就是访问量很大的时候仍然不会当机,并且对客户请求的响应时间很短或者吞吐量高,单位时间内能处理的请求数量多。

如果要从头搭建一个新的后端服务,那么整个过程需要进行大量的系统设计。也就是后端工程师面试的时候会考到的system design。做CCND站非常考察平时知识的积累。我在分享CS学习资源这个视频里面也介绍了一些系统设计的学习资源,感兴趣的可以看一下哦。

那么后端工程师平时一般需要与哪些技术和工具打交道呢?首先就是后端服务器了。和前端服务器一样,后端服务器也可以由几乎任何一种编程语言实现,只要能把正确的数据返回给调用者就可以了。主流的编程语言也有各自流行的web framework也就是现成的轮子来帮助大家站在框架的肩膀上,快速的实现一个后端服务。比如基于Java的web framework有Spring Boot和Drop Wizard,基于JavaScript有Express,基于Python的有Flask。这几个web framework每一个都有大厂在使用,不同的公司具体选择哪种框架一定程度上是看创始的程序员们最喜欢哪种语言、哪种框架用的最溜。还有一些后端服务的框架可以支持你用多种编程语言来开发,而不是绑在一门特定的语言上。比如gRPC这个远程调用框架支持你用Java、Python、C++、Go等各种语言来开发。

说了这么多的语言和框架,如果你想去某个公司做后端开发,一定需要对他们使用的语言和框架很熟练吗?一般来讲不会。我找工作的时候,看到岗位描述里面有我不会的语言和框架也无所谓,照样投。对公司来说你会其中一部分就够了,很多东西都是在工作里面学的。而且事实上,两周内上手一门新的编程语言是一名职业程序员的基本素养。

除了开发和维护后端服务器,后端工程师还会花大量的时间在数据库上。不管是为你的后端服务创建数据库,还是为数据库的性能调优或者是分析里面的数据,目前最常用到的数据库是关系型数据库,比如在工业界被广泛使用的MySQL和PostgreSQL。如何设计一个关系型数据库,如何使用SQL来访问数据,以及如何依靠index来为数据查询加速,这些知识点在学校的数据库课程里面也会介绍的。然而,学校数据库课程里面介绍的比较少的是近年来用的越来越多的非关系型数据库,也就是大家常说的NoSQL数据库。比如基于JSON文档的MongoDB,比如基于LSM Tree的LevelDB。这些数据库在某些特定的情况下可能会比关系型数据库更适合你的业务需求。大家一般也是在工作中去学习它的原理和特性。

数据库往往是一个后端系统里面的性能瓶颈,也就是最慢的一环。因此后端工程师在进行系统设计的时候会用很多办法来使得后端的性能(比如响应的时间)尽量的少被数据库拖后腿。比如使用Memcache这种缓存系统来加速读取数据的速度,比如用Kafka把数据写入,一步化提升后端写数据的性能。

后端开发就大致介绍到这里。后端开发里的其他重要环节,比如性能监视、DevOps这里就略过不讲啦。

下面来讲讲全栈。全栈就是全干,要能够自己构建和部署一个完整的可以工作的外部APP,能够独立编写前端后端代码,能够配置服务器,还能够设计数据库。

我参加工作以来前端和后端都做,大概80%的时间都是在做后端。对于要在美国找程序员工作的你,不管是申请哪种岗位,面试的时候都会考算法,所以是都要刷题的。如何高效刷题准备算法面试,我在分享CS学习资源这个视频里面有详细的介绍。

那么选哪个比较好呢?有很多小伙伴问我,前端和后端哪个的发展前景好,转专业选哪个比较容易入行,或者女孩子适合做哪个。首先我是开了频道之后才从观众小伙伴的留言那里了解到,国内是分的比较细的,基本上是前后端分开。我毕业找工作的时候也投过几个前端和后端的岗位,但是我看到的岗位大多数还是全站,所以我没有思考过选前端还是后端,恐怕不能很好的给大家建议。

其次参加工作了以后前端后端都做,也没有觉得哪个更容易或者是哪个更好,区别只在于使用的技术和考虑的方面不同。前端主要考虑用户体验,后端主要考虑底层业务逻辑、平台稳定和性能。最主要是看你喜欢做什么。你是喜欢做用户看得见的部分,还是去考虑用户看不见的部分呢?很多人觉得女生审美好适合做前端,可是公司里面有统一的界面规格,做什么都直接调用library里面现成的component,按钮字体边框长啥样、内容排序都不是我决定,是PM和UI设计师决定,我的审美也肯定没有设计师专业。最后即使你选择了某一个方向,你在工作中也会实际了解到其他是做什么的,自己喜欢什么想做什么。如果你想转前端或者是后端,可以看看组里公司里有没有机会,也可以自学寻找其他的机会,你之前的工作经验不会白费,公司也总是喜欢技能比较多的员工嘛。

最后为什么美国全站的岗位多?美国这边的职位也是有分前后端的,要看公司具体的设置。全站程序员岗位比较多可能是因为技术比较全面,花一份工资请会两个岗位技术的人。对于求职者来讲,在美国做全站程序员朝九晚五,应届毕业生的工资哪怕不是在湾区也是10万美元起步,有几年工作经验的会高的更多,所以大家基本上都冲着全站程序员去了。工作后再根据个人兴趣和擅长的领域慢慢发展成主前端、主后端、全站或者是管理。

给大家看一下Stack Overflow 2019年的开发者报告。世界各地一共9万开发者填写了问卷。Stack Overflow是程序员们用的最多的一个技术打印平台,这个平台上全是英文吗?因此,问卷中填写者的分布主要集中在北美、欧洲和印度。在岗位分类方面,全栈工程师占了51.9%。同时,报告中还提到了美国劳工统计局的数据,显示软件开发者中女性占20%。接下来,我们来看看这些马龙们都是在几岁的时候写下了自己的第一行代码。最多的区间是14-15岁,但也有很多人在11-12岁就开始写代码了。对于那些转专业的小伙伴们,我想告诉你们,计算机科学专业的学生只占到了62.4%。所以,很多人都和你们一样,在学习的过程中经历了挣扎和努力,最终成功地熬了过来。加油!接下来,我们可以看到大部分人的工作时间是朝九晚五,一周五天,每天工作8小时,一周工作40多个小时。最后,我们还可以了解一下各种岗位的薪资水平。好了,大家看到这里了,你们更喜欢前端、后端还是全栈呢?

你可能感兴趣的:(前端,javascript,html)