后端程序员都做些什么?

后端程序员都做些什么?

2017-12-25 刘欣 程序猿

来自:码农翻身(微信号:coderising)

这个问题来自于QQ网友,一句两句说不清楚,索性写个文章。

我刚开始做Web开发的时候,根本没有前端,后端之说。

原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库,用JSP生成HTML,然后发送给浏览器。

即使后来Javascript在浏览器中添加了一些AJAX的效果,那也是锦上添花,绝对不敢造次。因为页面的HTML主要还是用所谓“套模板”的方式生成:美工生成HTML模板,程序员用JSP,Veloctiy,FreeMaker等技术把动态的内容添加上去,仅此而已。

那个时候最流行的图是这个样子:

在最初的J2EE体系中,这个表示层可不仅仅是浏览器中运行的页面,还包括Java写的桌面端,只是Java在桌面端太不争气, 没有发展起来。

每个程序员都是所谓“全栈”工程师,不仅要搞定HTML, JavaScript, CSS,还要实现业务逻辑,编写访问数据库的代码。等到部署的时候,就把所有的代码打成一个WAR包,往Tomcat指定的目录一扔,测试一下没问题,收工回家!

不差钱的公司会把程序部署到Weblogic,Websphere这样的应用服务器中,还会用上高大上的EJB。

虽然看起来生活“简单”又“惬意”,但实际上也需要实现那些多变的、不讲逻辑的业务需求,苦逼的本质并没有改变。

1前后端的分离

随着大家对浏览器页面的视觉和交互要求越来越高,“套模板”的方式渐渐无法满足要求,这个所谓的表示层慢慢地迁移到浏览器当中去了,一大批像Angular, ReactJS之类的框架崛起,前后端分离了!

后端的工程师只负责提供接口和数据,专注于业务逻辑的实现,前端取到数据后在浏览器中展示,各司其职。

像Java这样的语言很适合去实现复杂的业务逻辑,尤其是一些MIS系统,行业软件如税务、电力、烟草、金融,通信等等。  所以剥离表示层,只做后端挺合适的。

但是如果仅仅是实现业务逻辑,那后端也不会需要这么多技术了,搞定SSH/SSM就行了。

2后端技术

互联网,尤其是移动互联网开始兴起以后,海量的用户呼啸而来,一个单机部署的小小War包肯定是撑不住了,必须得做分布式。

原来的单个Tomcat得变成Tomcat的集群,前边弄个Web服务器做请求的负载均衡,不仅如此,还得考虑状态问题,session的一致性。

(老刘注:参见文章《小白科普:分布式和集群》)

业务越来越复杂,我们不得不把某些业务放到一个机器(或集群)上,把另外一部分业务放到另外一个机器(或集群)上,虽然系统的计算能力,处理能力大大增强,但是这些系统之间的通信就变成了头疼的问题,消息队列(MQ),RPC框架(如Dubbo)应运而生,为了提高通信效率,各种序列化的工具(如Protobuf)也争先空后地问世。

单个数据库也撑不住了,那就做数据库的读写分离,如果还不行,就做分库和分表,把原有的数据库垂直地切一切,或者水平地切一切, 但不管怎么切,都会让应用程序的访问非常麻烦,因为数据要跨库做Join/排序,还需要事务,为了解决这个问题,又有各种各样“数据访问中间件”的工具和产品诞生。

为了最大程度地提高性能,缓存肯定少不了,可以在本机做缓存(如Ehcache),也可以做分布式缓存(如Redis),如何搞数据分片,数据迁移,失效转移,这又是一个超级大的主题了。

互联网用户喜欢上传图片和文件,还得搞一个分布式的文件系统(如FastDFS),要求高可用,高可靠。

数据量大了,搜索的需求就自然而然地浮出水面,你得弄一个支持全文索引的搜索引擎(如Elasticsearch ,Solr)出来。

林子大了,什么鸟都有,必须得考虑安全,数据的加密/解密,签名、证书,防止SQL注入,XSS/CSRF等各种攻击。

3“大后端”

前面提到了这么多的系统,还都是分布式的,每次上线,运维的同学说:把这么多系统协调好,把老子都累死了。

得把持续集成做好,能自动化地部署,自动化测试(其实前端也是如此),后来出现了一个革命化的技术docker, 能够让开发、测试、生成环境保持一致,系统原来只是在环境(如Ngnix, JVM,Tomcat,MySQL等)上部署代码,现在把代码和环境一并打包, 运维的工作一下子就简化了。

公司自己购买服务器比较贵,维护也很麻烦,又难于弹性地增长,那就搞点虚拟的服务器吧,硬盘、内存都可以动态扩展(反正是虚拟的), 访问量大的时候多用点,没啥访问量了就释放一点,按需分配,很方便,这就是云计算的一个场景。

随着时间的推移,各个公司和系统收集的数据越来越多,都堆成一座大山了,难道就放在那里白白地浪费硬盘空间吗?

有人就惊奇地发现,咦,我们利用这些数据搞点事情啊, 比如把数据好好分析一下,预测一下这个用户的购买/阅读/浏览习惯,给他推荐一点东西嘛。

可是这么多数据,用传统的方式计算好几天甚至好几个月才能出个结果,到时候黄花菜都凉了,所以也得利用分布式的技术,想办法把计算分到各个计算机去,然后再把计算结果收回来, 时势造英雄,Hadoop及其生态系统就应运而生了。

之前听说过一个大前端的概念,把移动端和网页端都归结为“前端”,我这里造个词“大后端”,把那些用户直接接触不到的、发生在服务器端的都归结进来。

4怎么学?

现在无论是前端还是后端,技术领域多如牛毛,都严重地细分了,所以我认为真正的全栈工程师根本不存在,因为一个人精力有限,不可能搞定这么多技术领域,太难了

培训机构所说的“全栈”,我认为就是前后端还在拉拉扯扯,藕断丝连,没有彻底分离的时候的“全栈”工程师。

那么问题来了, 后端这么多东西,我该怎么学?

之前写过一篇文章叫做《上天还是入地》,说了学习的广度和深度,在这里也是相通的。

往深度挖掘,可以成为某个技术领域的专家,如搜索方面的专家、安全方面的专家,分布式文件的专家等等,不管是哪个领域,重点都不是学会使用某个工具和框架, 而是保证你可以自己的知识和技术去搞定这个领域的顶尖问题。

往广度发展,各个技术领域都要了解,对于某种需求,能够选取合适的软件和技术架构来实现它,把需求转化成合适的技术组件,让这些组件以合适的方式连接、部署、运行,这也需要持续地学习和不断的经验积累。

最后,以一张漫画来结束吧!

原文地址:http://www.cnblogs.com/freeking123/p/8110387.html

时间: 2024-10-09 10:32:46

后端程序员都做些什么?的相关文章

30岁后的程序员都做什么去了

最近,很多人都在讨论"中年危机",中年危机,一般指39-65岁的中年人经历的一系列事业.家庭.感情.健康上的困境.现在的90后程序员们,他们之中大多数的年龄在四舍五入之后都满30岁了. 年龄的增长,往往也意味着身上的责任逐渐变多.他们也就逐渐承担起事业.家庭甚至社会上的责任,而是适应这些责任并不是一朝一夕的事儿.这时候的他们在看了很多关于程序员30多岁被辞退等新闻后,不仅发出感慨,程序员真的是个青春饭职业?那些30岁后的程序员都做什么去了? 我们先来看一张图,这是网传的程序员职业路线图

看看这些大龄程序员都做了些什么

原文:http://zhuanlan.51cto.com/art/201905/596337.htm?utm_source=tuicool&utm_medium=referral 最近的朋友圈不断被996. 裁员.大龄程序员的出路等话题刷屏,我在想国外的大龄程序员情况如何呢? 对于普通的程序员,我也没有一手的资料,但是对于一些牛人,我在wikipedia上搜索了一些他们的发明和创造: Guido van Rossum 在35岁时创造了Python.James Gosling 在40岁创造了Jav

优秀的程序员需要做些什么

软件蚕食一切,未来属于程序员.所以人人都想当程序员.但是并不是每个人都能当好程序员.在你做出决定前还是先看看自己能不能当好程序员吧.要记住的是,编程不是什么精英才能干的事情.这个行业永远都缺人.所以除非你一点都不喜欢编程,或者也没有准备好看在钱的份上忍住这种不喜欢,否则都可以来编程. 我们说过新手总说普遍会出现的问题,那么这篇小编总结了公司几个优秀程序员同事他们的特点,给大家聊聊优秀的程序员他们有哪些点值得我们去学习的: 1:先进行实验是他们的本能反应 编译器和运行环境通常能比人更快地解释一个问

连大佬程序员都做的副业

前言 作为一名实实在在的程序员,其中大部分经常会是加班加点的干活,根本没有大量的时间去做另外一些副业: 就算有时间,或许都会遇到以下几种情况: 外包:  作为一个敲代码的,感觉外包作为副业很合适, 但是真的很累,也很耗时间,其实到最后赚到的也不是那么理想: 在我做过的外包当中,晚上加班加点搞,需求来回变等,搞了几个都“畏惧”了!!! 写作: 很多大佬都会写一些技术性的文档投稿,或是在各大平台写文章,如简书.知乎.掘金.头条等: 独立博客:自己搭建自己的博客,阅读量大的话,会有些公司找帮忙打广告,

并不是所有程序员都适合做管理

很多程序员都想转管理.做管理表面很风光,因为社会普遍会对管理者会高看一眼,工作内容也多是让别人干活,不用自己亲自动手那么辛苦,最后拿的薪水却比实际干活的人还高. 但权力有多大,责任压力就有多大,管理者要每天面对各种杂事,经常被各种电话邮件打断,很难一门心思的专注做事,团队项目失败,管理者要承担责任,团队成员犯错,管理者要承担连带责任. 那么程序员如何判断自己是否适合做管理呢? 1.要有大局观,团队意识,不能只关心技术细节. 2.习惯做发动机,做整个团队的引擎,驱动着下面成员转动,给团队成员安排任

StackOverflow程序员推荐:每个程序员都应读的30本书

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语.以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书.其实除了前10本之外,推荐数前30左右的书籍都算经典,伯乐在线整理编译这个问答贴,同时摘译部分推荐人的评语.下面就按照各本书的推荐数排列. 1. <代码大全>史蒂夫·迈克康奈尔 推荐数:1684 “优秀的编程实践的百科全书,&l

写给后端程序员的HTTP缓存原理介绍

通过Internet获取资源既缓慢,成本又高.为此,Http协议里包含了控制缓存的部分,以使Http客户端可以缓存和重用以前获取的资源,从而优化性能,提升体验.虽然Http中关于缓存控制的部分,随着协议演进,有一些变化.但我觉着,作为后端程序员,在开发Web服务时,只需要关注请求头If-None-Match.响应头ETag.响应头Cache-Control就足够了.因为这三个Http头就可以满足你的需求,并且,当今绝大多数的浏览器,都支持这三个Http头.我们所要做的就是,确保每个服务器响应都提

每一个程序员都应当了解的11句话

每一个程序员都应当了解的11句话,你最同意哪一句? 1. 技术只是解决问题的选择,而不是解决问题的根本 我们可以因为掌握了最新的 JavaScript 框架 ahem.Angular 的 IoC 容器技术或者某些编程语言甚至操作系统而欢欣雀跃,但是这些东西并不是作为程序员的我们用来解决问题的根本——它们只是用于帮助我们解决问题的简单工具. 我们必须非常谨慎,不要对某项正好喜欢或者正好很火的特定技术走火入魔.否则,我们将进入这样的思维怪圈:把掌握的那项技术比做是锤子,在思考问题时,会自然的把所有的

每个程序员都应读的书(转)

收藏,有时间,就读一读,有好处! 很多程序员响应,他们在推荐时也写下自己的评语.以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书.其实除了前10本之外,推荐数前30左右的书籍都算经典,伯乐在线整理编译这个问答贴,同时摘译部分推荐人的评语.下面就按照各本书的推荐数排列. 1. <代码大全> 史蒂夫·迈克康奈尔 推荐数:1684 “优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”.这本书有50页在谈论代码布