
后端会常熬夜,前端经常被后端嘲笑。
选择的公司和行业很重要。比如银行,很舒服啦。然后,熬夜不可怕,可怕的是失去生活呀。程序员的仪式感大概就是在深夜里戴上耳机,抽着烟,敲着我们看不懂的代码。
程序员是比较忙一些,特别是上新项目的时候,程序需要改动变化的事情是非常多的,这些都是需要加班熬夜来做的,那么简单分类来看,前端后端还有测试相对来说谁会加班少一点儿呢,一般是测试会少一点儿,因为测试就是找毛病的,它需要有一定的间断性,所以测试的程序员相对会好一点儿,只是相对而言哟。正常来说,前后端都很忙的情况下,测试也不会好到那儿去的。
详细介绍:
对于前端和后端程序员来说,研发的中后期是加班比较多的时候。因为在前期时,产品经理自以为用户的需求已经挖掘得比较透彻了,研发基本就是按部就班的照着既定的计划研发,即使出现需求的变化,由于研发才刚刚开始,所以需求变化的代价很少,所以加班时候不多。
到了中期和中后期,需求变化的代价越来越大,研发过程中可能发现需求中的一些不合理之处,从而产生了大量的沟通成本和调整成本,这时加班就开始越来越多,这个过程会一直延续到测试阶段。
程序员这个概念在现今这个社会已经很司空见惯了,是时代造就的,也是趋势——科学技术是第一生产力嘛,因为这份职业中包含了太多一个人深处这个社会中的很多技能,并不单单是写代码,思维能力,行为模型等等。从楼主提问中,大概能预测楼主不太了解这份职业。
那么我从赚钱的维度(这个可能是大多数人最关心的)分一下四种情况回答一下前端和后端的优劣。
坐标:北京(因为我只了解这,个人也建议年轻的时候在一线城市从事程序员的工作性价比高些)
1、芸芸众生型——不是那么努力,也没有太高的天赋:
从入行到改行,基本处于中级水平之前(也可能初级),程序员职业生涯的薪资在8~15K之间(不算福利),在这个水平的同学,前后台区分不大,多数都是写业务或者叫应用,面试运气成分占多数,运气好了,低水平高薪水,运气不好,反之;
2、积极进取型——很努力,也没有太高的天赋:
在这里我给“努力”下个定义,即贯穿整个程序员职业生涯的持续学习;
在这个区间,基本都会达到准高级的阶段,成为高级也是很有可能的。薪水差不多在25~30K,能坚持到这个阶段的人,多数都会有坚持的理由,有喜欢,有热爱,有生活所迫等等,这样的情况下,后端重于前端,因为无论何时,物以稀为贵总是没错的,一间公司衡量一个人的薪水,总会以稀缺性和不可替代性的角度作为出发点就考量付出报酬的多寡;
3、别人家的孩子——既有天赋,又很努力:
这个阶段薪水在30~50K左右,在这里就不能单纯的以前后端这个维度去看待这个职业了,基本都是全栈的,是在默认你写业务完全没有问题的基础上,偏架构方面,面试主要以算法、优化、兼容、底层等等方面。所以到这个阶段,要有一专多能的实力;
4、剩下的一部分——原谅我没有特别的总结这类人群,因为想不太出来用什么的词汇描述:
略过吧。。我也不太熟,他们和我在代码的世界里基本平行;
简单总结下,简单的混口饭吃的话,看哪个上手容易就干哪个,个人推荐前端,毕竟门槛低,前期单位时间内加速度高。如果是想有长远打算,现在这个时代一专多能已经是必然,不论是专前端还是专后端,到了一定程度都是神。
我刚开始做Web开发的时候,根本没有前端,后端之说。
原因很简单,那个时候服务器端的代码就是一切: 接受浏览器的请求,实现业务逻辑,访问数据库,用JSP生成HTML,然后发送给浏览器。
即使后来Javascript在浏览器中添加了一些AJAX的效果,那也是锦上添花,绝对不敢造次。因为页面的HTML主要还是用所谓“ 套模板 ”的方式生成:美工生成HTML模板,程序员用JSP,Veloctiy,FreeMaker等技术把动态的内容添加上去,仅此而已。
那个时候最流行的图是这个样子:
在最初的J2EE体系中,这个 表示层 可不仅仅是浏览器中运行的页面,还包括Java写的桌面端,只是Java在桌面端太不争气, 没有发展起来。
每个程序员都是所谓 “全栈”工程师 ,不仅要搞定HTML, JavaScript, CSS,还要实现业务逻辑,编写访问数据库的代码。等到部署的时候,就把所有的代码打成一个WAR包,往Tomcat指定的目录一扔,测试一下没问题,收工回家!
不差钱的公司会把程序部署到Weblogic,Websphere这样的应用服务器中,还会用上高大上的EJB。
虽然看起来生活“简单”又“惬意”,但实际上也需要实现那些多变的、不讲逻辑的业务需求,苦逼的本质并没有改变。
随着大家对浏览器页面的 视觉和交互 要求越来越高,“套模板”的方式渐渐无法满足要求,这个所谓的表示层慢慢地迁移到浏览器当中去了,一大批像Angular, ReactJS之类的框架崛起,前后端分离了!
后端的工程师只负责提供接口和数据,专注于业务逻辑的实现,前端取到数据后在浏览器中展示,各司其职。
像Java这样的语言很适合去实现复杂的业务逻辑,尤其是一些MIS系统,行业软件如税务、电力、烟草、金融,通信等等。 所以剥离表示层,只做后端挺合适的。
但是如果仅仅是实现业务逻辑,那后端也不会需要这么多技术了,搞定SSH/SSM就行了。
互联网,尤其是移动互联网开始兴起以后,海量的用户呼啸而来,一个单机部署的小小War包肯定是撑不住了,必须得做分布式。
原来的单个Tomcat得变成Tomcat的 集群 ,前边弄个Web服务器做请求的 负载均衡, 不仅如此,还得考虑状态问题,session的一致性。
(注:参见文章《小白科普:分布式和集群》)
业务越来越复杂,我们不得不把某些业务放到一个机器(或集群)上,把另外一部分业务放到另外一个机器(或集群)上,虽然系统的计算能力,处理能力大大增强,但是这些系统之间的通信就变成了头疼的问题, 消息队列 (MQ), RPC框架 (如Dubbo)应运而生,为了提高通信效率,各种 序列化的工具 (如Protobuf)也争先空后地问世。
单个数据库也撑不住了,那就做数据库的 读写分离 ,如果还不行,就做 分库和分表 ,把原有的数据库垂直地切一切,或者水平地切一切, 但不管怎么切,都会让应用程序的访问非常麻烦,因为数据要跨库做Join/排序,还需要事务,为了解决这个问题,又有各种各样“ 数据访问中间件 ”的工具和产品诞生。
为了最大程度地提高性能,缓存肯定少不了,可以在本机做缓存(如Ehcache),也可以做 分布式缓存 (如Redis),如何搞 数据分片 ,数据迁移,失效转移,这又是一个超级大的主题了。
互联网用户喜欢上传和文件,还得搞一个 分布式的文件系统 (如FastDFS),要求高可用,高可靠。
数据量大了,搜索的需求就自然而然地浮出水面,你得弄一个支持全文索引的 搜索引擎 (如Elasticsearch ,Solr)出来。
林子大了,什么鸟都有,必须得考虑 安全 ,数据的加密/解密,签名、证书,防止SQL注入,XSS/CSRF等各种攻击。
前面提到了这么多的系统,还都是分布式的,每次上线,运维的同学说:把这么多系统协调好,把老子都累死了。
得把持续集成做好,能自动化地部署,自动化测试(其实前端也是如此),后来出现了一个革命化的技术 docker , 能够让开发、测试、生成环境保持一致,系统原来只是在环境(如Ngnix, JVM,Tomcat,MySQL等)上部署代码,现在把代码和环境一并打包, 运维的工作一下子就简化了。
公司自己购买服务器比较贵,维护也很麻烦,又难于d性地增长,那就搞点虚拟的服务器吧,硬盘、内存都可以动态扩展(反正是虚拟的), 访问量大的时候多用点,没啥访问量了就释放一点,按需分配,很方便,这就是 云计算 的一个场景。
随着时间的推移,各个公司和系统收集的数据越来越多,都堆成一座大山了,难道就放在那里白白地浪费硬盘空间吗?
有人就惊奇地发现,咦,我们利用这些数据搞点事情啊, 比如把数据好好分析一下,预测一下这个用户的购买/阅读/浏览习惯,给他推荐一点东西嘛。
可是这么多数据,用传统的方式计算好几天甚至好几个月才能出个结果,到时候黄花菜都凉了,所以也得利用分布式的技术,想办法把计算分到各个计算机去,然后再把计算结果收回来, 时势造英雄, Hadoop 及其生态系统就应运而生了。
之前听说过一个大前端的概念,把移动端和网页端都归结为“前端”,我这里造个词“大后端”,把那些用户直接接触不到的、发生在服务器端的都归结进来。
现在无论是前端还是后端,技术领域多如牛毛,都严重地细分了,所以 我认为真正的全栈工程师根本不存在,因为一个人精力有限,不可能搞定这么多技术领域,太难了 。
培训机构所说的“全栈”,我认为就是前后端还在拉拉扯扯,藕断丝连,没有彻底分离的时候的“全栈”工程师。
那么问题来了, 后端这么多东西,我该怎么学?
之前写过一篇文章叫做《上天还是入地》,说了学习的广度和深度,在这里也是相通的。
往深度挖掘,可以成为某个技术领域的专家,如搜索方面的专家、安全方面的专家,分布式文件的专家等等,不管是哪个领域,重点都不是学会使用某个工具和框架, 而是保证你可以自己的知识和技术去搞定这个领域的顶尖问题。
往广度发展,各个技术领域都要了解,对于某种需求,能够选取合适的软件和技术架构来实现它,把需求转化成合适的技术组件,让这些组件以合适的方式连接、部署、运行,这也需要持续地学习和不断的经验积累。
最后,以一张漫画来结束吧!
C/C++高级工程师学习路线图:
我喜欢这样的问题。
如果是问“什么是正确的前后端分离”,我还真不敢回答,生怕自己的理解有什么偏差;但是问怎么“理解前后端分离”,那我可以结合自身的工作,谈谈我对前后端分离的理解,也欢迎大家提出不同的理解。
我07年参加工作就是做企业级项目的开发,那时候的一些项目都只有一个包,没有什么代码规范,业务逻辑散落在各处,甚至是JSP中直接访问数据库并做业务处理。
后来逐渐有了一些规范,页面就是页面,代码就是代码,很多项目开始使用Ajax框架。
发展的更进一步,后端代码有了分层,cotroller/service/dao,可能每个项目分层策略不同(三层和两层居多),每层的叫法不同(cotroller还是action),数据从页面到最后访问数据库,需要走到多个分层中。
不过到了此阶段,在企业级项目的开发过程中,Java程序员依然要兼顾前后端的开发,所以前端页面的样子嘛,达不到美观的程度,也就是能用。
继续发展,很多项目开始变成了前后端分离。对于前后端分离的定义我是这样理解的:
页面是页面,代码是代码,但是他们在一个包中,这个肯定不能算前后端分离;
前端页面一个程序包,后台代码一个程序包,两个包都需要部署到Tomcat上,前端调用后台的接口;我认为这个也不是严格的前后端分离,但是我觉的这样做也没有问题;
如果前端只有HTML文件,放到>
前后端分离有很多的好处:前端开发和后端开发可以各司其职,约定好接口之后就可以并行开发;后端接口可以复用,如果项目同时有电脑网页端、移动网页端、APP端等多个入口的时候,后端可以只有一个;
带来好处的同时,也会有一些缺点,例如:增加了架构的复杂性,如果技术能力不足的团队,可以考虑半分离(例如我们部门都是企业级应用,都没有前端开发人员);如果是面向互联网的应用,需要搜索引擎抓取,就需要服务器端渲染;另外前后端交互的接口,也需要花时间和精力设计。
最后,是否需要使用前后端分离,还需要根据项目的实际情况决定。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
前端和后端都是一样的,就业情况好不好,取决于你能力所达到的层次。
不论是前端还是后端,最差的程序员都是不缺的,越高级的程序员就越缺。能力才是决定“前景”最重要的因素。建议根据自己的兴趣来选择比较好,这对你长久的发展是很有帮助的。
只要它是一个Internet客户端接口,就需要前端来完成生产。前端开发的编程量很小,但是需要一些编程。开始很容易,但需要一个深入学习的过程。与前端开发相比,后端开发人员在业务逻辑上有更高的要求,因此如果之前没有相关基础,则相对较难选择前端开发。
Web前端和后端的区别:
1、展示方式
前端是用户可见的界面,网站前端页面也就是网页的页面开发,比如网页上的特效、布局、、视频,音频等内容。前端的工作内容就是将美工设计的效果图的设计成浏览器可以运行的网页,并配合后端做网页的数据显示和交互等可视方面的工作内容。
后端用户看不见的东西,通常是与前端工程师进行数据交互及网站数据的保存和读取,相对来说后端涉及到的逻辑代码比前端要多的多,后端考虑的是底层业务逻辑的实现,平台的稳定性与性能等。
2、技术实现
前端开发用到的技术包括但不限于html5、css3、javascript、jquery、Bootstrap、Nodejs 、Webpack,AngularJs,ReactJs,VueJs等技术;后端开发以java为例主要用到的是包括但不限于Struts spring springmvc Hibernate >
首先,软件开发几乎包括了一切,不仅包括前端后端还包括嵌入式都是软件开发。
前端开发跟后端开发,都很累,全看个人。
前端目前更赚钱,因为前端正在蚕食其他桌面领域的份额,因为前端现在任何界面都可以跑(Linux、Win、Mac、Andriod、iPhone),这些领域的价值正在被转移到前端(特指网页前端),也就是说目前前端是能做事情最多的,至少是看上去。
往高级技术讲,后端会比前端要难,也要更累,工资也更高。
所以,理论上,初级程序员前端工资高,高级程序员后端工资高。
但是,实际上,初级才会分前后,高级程序员啥都要。
以上就是关于前端和后端哪个常熬夜全部的内容,包括:前端和后端哪个常熬夜、程序员是做前端开发好,还是后端开发好呢、程序员分前端与后端,那么后端程序员都做些什么看完就知道了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)