3分钟搞懂前后端开发的区别

上周末见了好多开发的年轻朋友,问了我一个问题:“前后端的区别和要求是什么?”分不清前后端开发的区别和要求,一种是因为前后端都了解,号称“全栈工程师”,但又什么都不是很精通;另一种是前端的不理解后端,后端的不理解前端。那前后端的区别到底在哪里呢?

一、前后端开发岗位的区别

1、对于初学者来说

(1)前端:入门简单,先易后难,能看到自己做出来的展示界面,有成就感;

(2)后端:入门难,深入更难,枯燥乏味,没有太大成就感,看一堆业务逻辑代码。

2、对于程序员来说

在实际的开发过程中,这个阶段对前后端的要求还是蛮低的,尤其是后端,新员工经过培训之后都可以参与到后端开发中,这些都是比较浅的技术层面,没有太高的技术门槛,唯一需要做的是先编码成为熟练工种。

(1)前端开发人员精通HTML、CSS和JS,能熟练使用JQuery,并能熟练应用于页面布局、页面样式和屏幕分辨率自适应以及交互效果的开发等工作;

(2)后端开发人员熟练使用一门编程语言(比如:Java、C#、Python、C++等)和懂一些设计模式,会编写SQL语句并懂数据库设计。

3、对于工程师来说

(1)对于有了一定经验的前端软件工程师来说,这个阶段需要懂Node.js、Vue.js、React.js等前端框架,涉及到前端开发架构和开发效率(比如:组件、模版和验证/解析方法封装等等)等一系列问题。

(2)对于有了一定经验的后端软件工程师来说,这个阶段需要懂Spring/MVC、iBatis等框架,涉及到数据结构、设计模式、后端开发架构和开发效率(比如:业务功能和方法封装等等)等一系列问题。

4、对于技术经理或者架构师来说

这个阶段编程已经不是主要工作了,但必须具备上面的技能,还需要具备架构能力,跟开发者已经不在一个level上了,主要区别在于技术领导力,本文只探讨前后端开发,就不再往下延伸了。

二、前端和后端开发内容的区别

1、运行环境不同

(1)Web前端代码主要在客户端(PC、手机、pad)运行;

(2)Web后端的代码主要在服务端运行,服务器可以在提供服务厂家的数据中心,也可以在云端。

2、与用户紧密关系不同

(1)前端重用户体验,主要是考虑怎样能让用户觉得用起来更舒服,考虑界面布局、交互效果、大数据量页面加载速度等等,主要是偏向用户看得见的部分,客户端(pc、手机、pad)上浏览web页面,处理各个浏览器平台的兼容和对界面的渲染差异,对UI库的依赖较强;

(2)后端更多是考虑业务逻辑、数据库表结构设计、数据的事务操作、跨平台API设计、负载均衡、应用和服务部署等等,更多的是考虑用户看不到的部分,保证业务逻辑处理数据的严谨,保证用户访问数据吞吐的性能。

3、需求变更带来的影响不同

(1)前端主要怕系统原型的频繁变更,布局样式、交互效果的需求变更;

(2)后端主要怕业务逻辑变更,或者当使用规模增大之后对稳定性带来的影响。

4、前后端通吃的全栈工程师

作为一个前端开发人员,如果它懂得后端,那他可能会很容易理解为什么要通过多个后端接口获取数据后,才能组装上它所需要的数据?

而作为一个后端开发人员,如果它懂得前端,那他可能会很容易理解为什么后端接口都设计得如此完整,而前端还要求我再定义一个接口来返回一部分的数据呢?

这两种情况下如果大家相互理解,如果全栈工程师就不需要大量沟通提高了开发效率;而为了解决这个问题,很多开发架构分离出数据操作的职责给ViewModel,它是由MVC框架演变为MVP和MVVM框架而来的,在MVP框架中View 与 Model 不发生联系,由后端实现通过 Presenter 传递;而MVVM框架中ViewModel 只关心数据和业务的处理,不关心 View 如何处理数据,在这种情况下,View 和 Model 都可以独立出来,由前端实现双向数据绑定。

三、前后端开发业务应用的区别

很多开发者跟我交流,大多数开发人员认为:做后端开发天生是有优越感的。因为与前端相比,后端更加接近业务本质,数据结构基本上都是后端来设计的,对公司的业务后台开发也更加了解,所以在很多人眼中或者潜意识里:后端比前端要重要。这也是很多人选择做后台开发的原因。然而事实真的如此吗?

如果非得下个结论的话,就从软件项目和软件产品两个维度说一下侧重点:

如果是做项目的思路:初期以功能为主,更侧重后端开发,后期功能稳定后更侧重前端开发,做得好可以把项目软件提升档次;

如果做产品的思路:更多的是采用MVP(minimum viable product,最小化可行产品)不断迭代的开发方式,而MVP方式更注重在前端界面等涉及到用户体验方面的模块开发,当然相对应的后端功能开发也必须跟上。

总体来说,不管是前端还是后端,大家都是为了把项目或者产品做好,通过项目或者产品实现其用户或社会价值,都是朝着这样一个共同的目标努力。

想学好任何一门技术,还要看自己对这门技术的兴趣度,如果是想从事软件开发又不喜欢的朋友,真得想好了是不是要保护自己的发际线位置和头发的颜色

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-4 螺旋方阵 (20 分)

所谓“螺旋方阵”&#xff0c;是指对任意给定的N&#xff0c;将1到NN的数字从左上角第1个格子开始&#xff0c;按顺时针螺旋方向顺序填入NN的方阵里。本题要求构造这样的螺旋方阵。 输入格式&#xff1a; 输入在一行中给出一个正整数N&#xff08;<10&#xff09;。 输出格…

基于 Kubernetes 的微服务部署即代码

在基于 Kubernetes 的基础设施即代码一文中&#xff0c;我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的&#xff0c;以及它的自动化执行过程。如果要查看基于 Kubernetes 的基础设施即代码架构全图&#xff0c;…

使用Arduino开发ESP32开发环境搭建

1.打开Arduino IDE&#xff0c;选择文件->首选项->设置 复制下方的ESP32板管理网址&#xff0c;添加到附加开发板管理器中&#xff1a; https://dl.espressif.com/dl/package_esp32_index.json 2.选择&#xff1a;工具->开发板->开发板管理器 在弹出的对话框中搜索…

.NET ORM FreeSql 第一个正式版本发布 v1.0.0

一、简介FreeSql 是 .NET 平台下的对象关系映射技术(O/RM)&#xff0c;支持 .NetCore 2.1 或 .NetFramework 4.0 或 Xamarin。从 0.0.1 发布到今历时整整一年的迭代更新&#xff0c;现在终于敢发布第一个正式版。本文内容从简&#xff0c;介绍项目的主要功能框架&#xff0c;以…

Windows上搭建EMQTT服务器

1.官网下载EMQ 2.复制如图文件路径 3.打开终端cmd&#xff0c;输入&#xff1a; 再输入&#xff1a; 4.打开浏览器&#xff0c;进入&#xff1a;http://192.168.1.25:18083/* (localhost可打开终端输入ipconfig查看) 用户名&#xff1a;admin 密码&#xff1a;public

.NET解所有相机RAW格式照片

再聊.NET解相机RAW格式照片上次我发了一篇文章《用.NET解索尼相机ARW格式照片》&#xff0c;提到通过安装 SonyRawFileDecoder的方式&#xff0c;然后调用 WindowsImagingComponents来解析 RAW格式文件。后来我经过进一步研究、探索&#xff0c;发现还有更简单的办法。新的方法…

6-3 查找子串 (20 分)

本题要求实现一个字符串查找的简单函数。 函数接口定义&#xff1a; char *search( char *s, char *t );函数search在字符串s中查找子串t&#xff0c;返回子串t在s中的首地址。若未找到&#xff0c;则返回NULL。 裁判测试程序样例&#xff1a; #include <stdio.h> #d…

6-4 建立学生信息链表 (20 分)

本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。 函数接口定义&#xff1a; void input();该函数利用scanf从输入中获取学生的信息&#xff0c;并将其组织成单向链表。链表节点结构定义如下&#xff1a; struct stud_node {int num; /*学号*/…

AspNetCore结合Redis实践消息队列

这是年中首发在博客园上的文章&#xff0c;个人觉得是AspNetCore结合Redis做的一次比较优秀的消息队列重构&#xff0c;其中对于点对点/发布-订阅的思路应该也是面试必考题。引言.Net TPL Dataflow是一个进程内数据流管道&#xff0c;应对高并发、低延迟的要求非常有效&#xf…

数据结构:链表(c语言)

1.链表简介&#xff1a; 链表和数组一样&#xff0c;都是存储数据&#xff0c;链表是非连续&#xff0c;非顺序的存储结构 链表是灵活的内存动态管理&#xff08;随机分配空间&#xff09;&#xff0c;删除创建结点非常方便 链表组成&#xff1a;由一系列结点组成 链表结点&…

提升Azure App Service的几个建议

本文介绍了6个技巧&#xff0c;这些技巧可以改善Azure App Service托管应用程序的性能。其中一些技巧是你现在就可以进行的配置变更&#xff0c;而其他技巧则可能需要对应用程序进行一些重新设计和重构&#xff0c; 本文的几个技巧对于常规企业部署依旧有指引作用。长话短说开发…

单向链表的逆转(数据结构)(c语言)

逆转单向链表的意思是&#xff1a;给定你一个单向链表&#xff0c;一个整数n&#xff08;n为要逆转的结点数&#xff09;&#xff0c;要求你把链表从头结点到第n个结点给逆转过来 图示&#xff1a; 给出一个单向链表&#xff0c;一个整数n4。也就是要求把该链表从头结点&#x…

广东职业教育信息化研究会2019年会暨区块链专题研讨会

兹定于2019年12月28日&#xff08;星期六&#xff09;上午9:30召开广东职业教育信息化研究会2019年会暨专题研讨会&#xff0c;本次会议由广东职业教育信息化研究会主办&#xff0c;华南师范大学网络教育学院协办。会议地址&#xff1a;广州市天河区中山大道西55号华南师范大学…

Serial.println()和Serial.print() (Arduino编程)

Arduino的输出基本就用到两个函数&#xff1a;print和println 区别是后者比前者多了回车换行 Serial.println(data)从串行端口输出数据&#xff0c;跟随一个回车&#xff08;ASCII 13或’r’&#xff09;和一个换行符&#xff08;ASCII 10或’n’&#xff09;&#xff0c;这个…

如何快速融入一个团队?

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区特邀嘉宾&#xff01;一我们难免需要离开一个圈子&#xff0c;加入一个陌生的集体。毋庸置疑&#xff0c;离开熟知的圈子&#xff0c;走向未知的圈子难免会产生许多畏惧甚至情怯&#xff0c;这都…

使用Arduino开发ESP32:wifi基本功能使用

1.建立网络&#xff08;AP&#xff09; 2.连接网络&#xff08;STA&#xff09; 3.扫描网络 1.建立网络&#xff08;AP&#xff09; 只需两步&#xff1a;1.引用WiFi库include<WiFi.h> 2.启动AP网络WiFi.softAP(ssid) 将下面代码上传到模块中&#xff1a; #include &l…

关于C#异步编程你应该了解的几点建议

前段时间写了一篇关于C#异步编程入门的文章&#xff0c;你可以点击《C#异步编程入门看这篇就够了》查看。这篇文章我们来讨论下关于C#异步编程几个不成文的建议&#xff0c;希望对你写出高性能的异步编程代码有所帮助。注&#xff1a;本文的很多内容都是学习《Effective C#》的…

数据库分区

一、分区原理分区并不是生成新的数据表&#xff0c;而是将表的数据均衡分摊到不同的硬盘&#xff0c;系统或是不同服务器存储介子中&#xff0c;实际上还是一张表。要实现这一功能&#xff0c;首先要了解数据库对水平分区表进行分区存储的原理。数据库分区和分表相似&#xff0…

(Arduino编程)Serial(串行通信)函数

串行端口用于Arduino和个人电脑或其他设备进行通信。所有Arduino控制器都有至少一个串行端口&#xff08;也称为UART或者USART&#xff09;。个人电脑可以通过USB端口与Arduino的引脚0(RX)和引脚1(TX) 进行通信。所以当Arduino的引脚0和引脚1用于串行通信功能时&#xff0c;Ard…

Arduino_esp32_WiFi代码

#include<WiFi.h>const char* ssid"BlackWalnut"; const char* password"blackwalnut";void setup() {Serial.begin(115200);while(WiFi.status()!WL_CONNECTED){delay(2500);WiFi.begin(ssid,password);Serial.println("正在连接...");}S…