我刚开始做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及其生态系统就应运而生了。

  之前听说过一个大前端的概念,把移动端和网页端都归结为“前端”,我这里造个词“大后端”,把那些用户直接接触不到的、发生在服务器端的都归结进来。想要在程序员生涯内有更高的成就的话,C/C++就是一个既可以强化思维能力,又可以打好编程基础的编程语言,要做软件开发,成为核心程序员的话,就来湫湫学习C/C++吧!你如果感觉自学C/C++语言有困难的话,C/C++编程学习,六零四,一六8和719。即使是零基础的学习者,都可以一起成长进步。

4、怎么学好后端?

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

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

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

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

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

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

  最后,以一张漫画来结束吧!学习C/C++编程,欢迎关注微信公众号:C语言编程学习基地。

程序员分前端与后端,那么后端程序员都做些什么?看完你就明白了!相关推荐

  1. 前后端解析_好程序员Web前端教程分享前后端分离接口

    随着互联网的高速发展以及IT开发技术的升级,前后端分离已成为互联网项目开发的业界标准使用方式.在实际工作中,前后端的接口联调对接工作量占Web前端人员日常工作的30%-50%,甚至会更高.接下来的好程 ...

  2. Java后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...

  3. 后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...

  4. 互联网公司都有哪些职位?程序员都做些什么工作?

    [文章来源微信公众号:每天学编程] 程序员已经是很宽泛的一个名词了,不止是设计制作APP 在正式探讨这个问题前,我首先想到的是,为什么会认为程序员就是设计制作APP呢?大概是这两年移动互联网的兴起,导 ...

  5. 后端技术:Java中Spring 和 Spring Boot 有哪些区别,看完你就明白了!

    概述 对于 Spring和 SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习 SpringBoot的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,相信对 ...

  6. 为什么都建议程序员不要做“外包”?看完这些经历,很辛酸

    在程序员圈子里面,外包程序员似乎永远处于一个尴尬的角色,如果你说他们不是程序员吧,他们也是程序员.应该说是外包这个词比较尴尬吧. 其实我们身边也有很多外包程序员,我身边也有从外包进一线互联网企业的例子 ...

  7. 今天聊:2~3年前端处于离职困境与舒适区能做些什么

    前言 工作2~3年的前端群体容易出心理问题,很大一部分原因就在于还没有建立更成熟的自我认知,也没有完成从学生到社会人身份的转变,加上前端行业的快速迭代,中小型公司技术管理的混乱,和身边同行带来的竞争压 ...

  8. 好程序员Web前端教程分享前后端分离接口

    随着互联网的高速发展以及IT开发技术的升级,前后端分离已成为互联网项目开发的业界标准使用方式.在实际工作中,前后端的接口联调对接工作量占Web前端人员日常工作的30%-50%,甚至会更高.接下来就给大 ...

  9. Android程序员必备!阿里巴巴Android面试都问些什么?完整版开放下载

    背景 坐标广州,五年iOS开发经验. 最近面试了一位工作12年的程序员, 这位老哥有3年java开发经验,2年H5,7年iOS开发经验,简历上写着精通Java,iOS,熟悉H5开发.没有具体的技术点. ...

最新文章

  1. PCL基础2:点云赋值
  2. 华为鸿蒙手机官网价格表,曝下半年华为将推出两款鸿蒙手机:国内独享,价格良心...
  3. Python面向对象编程:入门类和对象
  4. Node的垃圾回收机制与内存溢出捕获(上)
  5. Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)
  6. 一个SQL性能问题的优化探索(二)(r11笔记第38天)
  7. 提高C程序效率的10种方法
  8. SAP 电商云 Spartacus UI 3.4.5 版本引入的对并发 SSR 请求的支持
  9. 对于大规模机器学习的理解和认识
  10. HTML5 Canvas实现360度全景图
  11. RocketMQ : RemotingTooMuchRequestException: sendDefaultImpl call timeout
  12. Openstack Nova network
  13. 2008-2019年高等学校科技统计资料汇编
  14. 如何在SendWS上做到WhatsApp账号多开,WhatsApp群发超链的意义,WhatsApp营销推广引流
  15. phalcon蹩脚的面包屑(breadcrumbs)功能
  16. 解决双卡4G模式下不能接听和拨打电话问题
  17. AVR32单片机 矩阵按键 按键键值函数解析
  18. 电脑的任务栏只显示一条杠,没有图标怎么解决,看这里!!!
  19. 博客园样式(仿简书)
  20. 非学校用户如何免费下载论文

热门文章

  1. html怎么进入阅读模式,怎么用浏览器看小说进入阅读模式
  2. HDU 5594(ZYB's Prime-网络流)
  3. 三院士漫谈:未来机器人:目标、路径和挑战
  4. excel 作图-- 主次纵坐标轴 横坐标名称太长
  5. 近50年前500部精品电影合集
  6. 4.pycharm(免费专业版)下载与安装与环境配置
  7. 魅族千元新机曝光:处理器不错!
  8. java练习(金额转换)
  9. <<和>>运算符的用法
  10. 《AR与VR开发实战》——第1章AR技术简介