前端程序员,后端程序员,全栈程序员分别都是什么?找工作到底选前端还是后端?为什么美国很多都是全站程序员呢?带着这些疑问,本文来给大家一一解答,保证让你对这些概念搞的明明白白!
首先什么是前端开发?
简单来说,前端开发就是开发网页上的“内容展示”,和与用户的交互;
这里的“内容展示”:指的是你在网页上能看到的,图片文字、视频、数字等信息。
那么与用户的交互指的就是,用户在页面上通过点击按钮、输入文字等动作对网站提供数据输入,然后前端对用户的输入进行响应。
比如更新页面上的内容,举一个更具体的例子就是,如果你在我的文章下面进行评论,那么页面对你评论这个动作就会做出响应,比如会在后台数据库里面,把我的评论量加一。
并且在页面上显示文章评论后的数量等,如下图。
前端开发用到的基础技术就是 html
、css
和 javascript
,分别用来控制网页里面的内容、视觉效果和用户交互。
下面分别简单介绍一下。
html 并不是一门编程语言,他是一种用来定义结构化数据的标记语言,你在浏览器上看到的网页,其实就对应一个 html 文件,这个文件里装的就是 html 代码,而浏览器的职责之一,就是通过你输入的网址,从网站上下载对应的 html 代码,并且把代码渲染成你肉眼看到的样子。
那么,前端工程师的工作内容之一,就是编写 html代码,或者使用一些技术来为页面动态的生成 html 代码,任何一个网页,你都可以通过浏览器的开发者工具,看到他对应的 html 代码。
如果你仔细查看一段 html 代码,你会发现他其实就是由一堆各种类型的尖括号标签组合嵌套而成的,比如某视频在 youtube 页面上,视频的标题,对应于代码里面一个title
类型的标签,那视频的播放器就对应于一个video
类型的标签;其头像图片,对应于一个嵌套在超链接标签里的 image
标签;而评论里的文字又对应于一个 yt formatted-string
类型的标签,这里的 yt 应该只带的是youtube,那么这个标签,应该就是 youtube 自定义的标签,然后 css 的代码,则是用来指定每个 html 的标签,以什么样的外观和风格来展示,比如长宽、位置、颜色居中还是分散字体显示属性等等。
css的代码也是被浏览器读入,并且渲染成你肉眼所看到的效果,有时候pm会想把页面里面一个按钮的大小和颜色进行微调,而这个微调就是由前端工程师去改动;这个按钮对应的 css代码来实现的,前端开发中真正编程的部分是javascript,网页如何与用户交互,如何与后端交互,都是通过 javascript 的代码实现的,就像html代码和 css代码是被浏览器执行一样,页面里面的 javascript 代码也是交给浏览器来执行。
这里插一句,javascrip与java并没有什么关系,两者之间的特性差的很远,这就好比是印度跟印度尼西亚差的很远,熊猫跟小熊猫差的很远,雷峰和雷峰塔差的很远。
说回正题,大家在写程序的时候,不管用什么语言,通常都不会重复的造轮子,而是会调用该语言现成的 library来实现一些常见的功能,让开发过程更加高效。
对于前端javascript的开发,react
是目前比较流行的library,也是我在工作中,做前端的时候会用到的。react这个library,不仅可以用来实现与用户的交互逻辑和事件响应,事实上页面上几乎全部的 html 代码,都可以通过 react来生成,这种在浏览器端生成 html代码进行渲染的方式,叫做 client-side rendering
,与之相反的就是 service-side rendering
,也就是页面完整的 html代码,是全部由网站的前端服务器生成好了之后,再发给浏览器的。
这里提到了前端服务器,就顺便说一下,前端服务器的逻辑,可以通过任何编程语言来实现,比如 java、javascript、php 甚至是Scheme,只要服务器的行为遵守 http 的协议就可以了,client-side rendering
和 silver-side rendering
两种方式各有优缺点,因此前段工程是在开发网页的时候,需要结合实际情况,选择最合适的页面渲染方式;
除了 react,另外一种比较流行的 javascript library就是vue
,在国内用的比较多,如果你去查看 b 站的html代码,你会发现 b 站的前端也用到了vue。
以上介绍的这些,就是前端开发的一些常规技术,html、浏览器和前端服务器的工作原理,一般会在学校里面的《计算机网络》课里面介绍,css、javascript、react就主要靠自学了。
javascript和react学习课程感兴趣的可以去看《javascript高级教程》哦!
讲完了前端,现在来讲讲后端。
什么是后端开发呢?
相当一部分的后端开发工作,就是开发数据访问服务,使得前端可以通过调用后端的服务,来对数据进行增删查改,也就是大家经常听到的 curd,从而实现前端对用户的请求响应。
比如你在一个大型网站注册的时候,这个网站的前端就会调用他的后端,把你的用户信息写入数据库。一个后端服务其实不局限于只被前端调用,他还可以被 mobile app 调用,还可以被其他的后端服务调用。
类比一下,前端往往需要通过调用后端服务,来完成对用户的请求响应,而后端服务往往需要通过查询数据库。
来完成对前端请求的响应,从这个类比你可以看出,前端和后端的共性,都是通过调用一个比自己靠后的服务,来对前方客户的请求进行响应,后端工程师的工作范畴很广,几个比较常见的就是,设计后端服务的api,设计后端服务的架构图,设计后端服务的数据库且代码实现后端服务的业务逻辑,同时你还需要保证你设计的后端服务,highly available
,也就是访问量很大的时候仍然不宕机,并且对客户请求的响应时间很短,或者说吞吐量高,单位时间内能处理的请求数量多。
如果要从头搭建一个新的后端服务,那么整个过程需要进行大量的系统设计,也就是后端工程师面试的时候,会考到了System Design,做System Design非常考察平时知识的积累。
那么后端工程师平时一般需要与哪些技术和工具打交道呢?
首先就是后端服务器了,和前端服务器一样,后端服务器也可以由几乎任何一种编程语言实现,只要能把正确的数据,返回给调用者就可以了。
主流的编程语言,也有各自流行的 Web Framework,也就是现成的轮子,来帮助大家站在框架的肩膀上,快速的实现一个后端服务,比如基于 PHP的 Web Framework有thinkphp
和laravel
(插一句“PHP是世界上最好的语言”),基于 javascript 有 express
,基于 java 的 Web Framework有Spring Boot
和 Drop wizard
,以及基于python有flask
这几个Web Framework,每一个都有大厂在使用,不同的公司具体选择哪种框架,一定程度上,是看创始的程序员们最喜欢哪种语言,哪种框架用的最6,还有一些后端服务的框架,可以支持你用多种编程语言来开发,而不是绑在一门特定的语言上。
说了这么多的语言和框架,如果你想去某个公司做后端开发,一定需要对他们使用的语言和框架很熟练吗?
一般来讲不会,我找工作的时候看到岗位描述,里面有我不会的语言和框架,也无所谓,照样投,对公司来说你会其中一部分就够了,很多东西都是在工作里面学的,而且事实上,两周内上手一门新的编程语言,是一名职业程序员的基本素养,除了开发和维护后端服务器,后端工程师还会花大量的时间,在数据库上,不管是为你的后端服务创建数据库,还是为数据库的性能调优或者是分析里面的数据。
目前最常用到的数据库是关系型数据库,比如在工业界被广泛使用的MySQL
和PostgreSQL
。
如何设计一个关系型数据库,如何使用SQL query来访问数据,以及如何依靠 index 来为数据查询加速,这些知识点,在学校的数据库课程里面也会介绍的,然而学校数据库课程里面介绍的比较少,但是近年来用的又越来越多的是非关系型的数据库,也就是大家常说的No-SQL数据库。
比如基于JSON文档的MongoDB
,比如基于LSM tree
的LevelDB
,这些数据库在某些特定的情况下,可能会比关系型数据库更适合你的业务需求,
大家一般也是在工作中去学习他的原理和特性,数据库往往是一个后端系统里面的性能瓶颈,也就是最慢的一环,因此后端工程师在进行系统设计的时候,会用很多办法来使得后端的性能,比如响应的时间,尽量的少被数据库拖后腿,比如使用MemCached这种缓存系统,来加速读取数据的速度,比如用Kafaka把数据写入异步化,提升后端写数据的性能,后端开发就大致介绍到这里。
后端开发里的其他重要环节,比如性能监视,比如 DevOps
这里就略过不讲啦!
下面来讲讲全栈,全栈就是全干,要能够自己构建和部署一个完整的,可以工作的Web App,能够独立编写前端,后端代码能够配置服务器,还能够设计数据库。
我参加工作以来前端和后端都做,大概80%时间都是在做后端,对于要找程序员工作的你,有很多小伙伴问我,前端和后端哪个的发展前景好转,专业选哪个比较容易入行,或者女孩子适合做哪个?这里我推荐大家看看这篇文章《零基础学编程应该从哪入手?推荐2021年适合学习的编程语言》
选前端还是后端区别只在于使用的技术和考虑的方面不同,前端主要考虑用户体验,后端主要考虑底层业务逻辑,平台稳定和性能,最主要是看你喜欢做什么,你是喜欢做用户看得见的部分,还是去考虑用户看不见的部分呢?
很多人觉得女生审美好适合做前端,可是公司里面有统一的界面规格,做什么都直接调用,library 里面现存的 component,按钮字体边框长啥样,内容排序都不是我决定是 pm 和 ui设计师决定,我的审美也肯定没有设计师专业。
最后即使你选择了某一个方向,你在工作中也会实际了解到其他是做什么的,自己喜欢什么想做什么,如果你想转前端或者是后端,可以看看组里公司里有没有机会,也可以自学寻找其他的机会,你之前的工作经验不会白费,公司也总是喜欢技能比较多的员工嘛!
全栈程序员岗位比较多,可能是因为技术比较全面,花一份工资请会两个岗位技术的人,对于求职者来讲,全栈程序员有几年工作经验的会高的