美文网首页亮书房程序员周边互联网科技
后端成长之路:从菜鸟到架构

后端成长之路:从菜鸟到架构

作者: yubang | 来源:发表于2016-10-12 18:49 被阅读15954次

有不少初学者问到,我想学习后端,但是又不知道该怎么学,所以我决定把这几年的经验和经历整理成一篇文章,分析后端的路该怎么走,先说明下面仅仅是个人心得,也许与外面的理论有所不同。(文章最后面会附上学习路线地图和一些自己看过的书籍)

后端任务其实是实现接收输入响应输出

后端初接触

后端首先需要学习的是html,css和js,也许你会问做网页不是前端做的事情吗?答案是对于真实开发环境后端很多时候还兼顾了前端这个角色,对于架构来说优化不仅仅要考虑后端还需要考虑前端。

要学到什么样的程度才可以学下一样技能呢?我的建议是能够搭建起一个简单的页面,最重要的是学会dom操作和ajax。

语言选择

我相信过来人或者正在入门的人都碰到过这个世纪难题,如果你是初学者我建议您使用java。这里并不是说我喜欢java才推荐你们用java入门,而是java的思想对我们以后开发有很不错的启发。当你学会一种语言的基本语法就可以到下一步了(仅仅是语法,任意语言)。

hello world!

没错,这个时候,你得让浏览器可以看到hello world! 为了实现这个小目标,我们就需要根据语言配置不同的运行环境。由于入门,我建议可以使用一些集成的一键配置环境软件,例如php可以用phpstudy,java看看教程,下载一个tomcat然后跟eclipse集成就好,而python或则ruby则使用一个轻量级的web框架,copy一下官网提供的hello world!例子即可。

高级一些的hello world

这个阶段,你需要实现的是通过浏览器输入不同的网址,你可以输出不同的内容。然后要弄明白什么是get参数,什么是post参数。然后要实现根据不同get参数或者post参数输出不同内容。因为后端研发从根本上来说就是处理这些不同输入,输出特定的内容回去而已,所以这一步,最关键。

数据库

为什么我们要用数据库呢?以一个新闻网站为例,它要保存新闻数据,还得保存用户信息,也要保存评论信息。也许你会问用文件保存就好了,为何还要学习数据库这么庞大的东西呢?首先,我们来看一下什么是数据库,我们可以把数据库每一个table看成excel的sheet,每一个db就是一个excel文件。而sql语句就是一条条指令,可以帮我们操作里面的数据,可以节省我们大量的操作。开始学习数据库的时候,我建议学习mysql。

数据库

模板引擎

一项技术的出现,往往在于解决了一些开发难题。在没有模板引擎之前,我们得使用字符串拼接方式,弄成html字符串,但是这种方式很容易出错的。而模板引擎无需字符串拼接,并且可以处理字符串转义问题,并且模板集成,模板引用等功能,可以使代码可以重用,大大提高了开发效率,工程也更容易维护。

模板引擎

MVC框架

首先,我们得明白为什么要用框架?假如是第一次接触,我相信第一感受是用了框架加重自己的开发负担。然后框架存在必然有自己的合理性,我们来看看框架有什么优点。

1. 框架提供了大量的方法封装,我们可以直接调用来解决业务问题,这可以大大提高开发效率。

2. 框架能够帮我们分层编写代码,能够在后期更好的维护我们的项目。

3. 做一些安全防护,处理一些常见的攻击。

所以对于各种语言,大家可以选择一个对应的框架来学习。那么我们应该如何挑选一个框架呢?

1. 多人用的(最起码使用过程中遇到问题,都能找到人问)

2. 文档详细的(文档不详细,怎么去学习呢?)

3. 简单的(未来的趋势估计都是往轻量级框架走的)

MVC框架有利于维护

Linux与应用部署

开发用window没什么问题,但是我们做的应用绝大部分是要放在linux系统来对外提供服务器,所以不懂linux的操作是不行的,并且服务器为了尽可能节省资源,都是不使用界面的,所以我们要学好大量的linux命令。

服务器环境我们一般就不会用外面的通用的一键安装环境,往往需要优化的。所以基本的软件安装和配置需要学会,特别是近年来很火的docker,越来越多都是基于docker来部署的啦。

缓存

缓存可是处理高并发的万能药,每当你写的功能慢的时候,基本上你都可以通过缓存来大大提高网站性能。实现缓存的方法很简单,但是一当在并发下和海量数据面前一切都不容易,还得上分布式集群这些。

http协议

如果上面的你都接触了,恭喜您普通开发估计是没问题了,如果你说很多需求还是做不出,没关系,其实你只是缺乏开发经验而已,只要多写多请教,你就会发现,其实后端研发也没什么难度。这个时候,如果我们想往高级研发工程师方向走,一些底层的高级的东西我们得学会。

http协议

浏览器与服务器通过http协议交互,其实就是相互之间传递一串特定格式的字符串。get参数,post参数,url,和cookie等信息其实都包含在这字符串里面。我们平时虽然没有怎么碰到这些底层的东西,其实是框架和tomcat这种软件帮我们处理了。

就像平时一个重定向,其实就在header里面有一句Location: XXX。而我们平时声明返回的是html还是json其实是headers有一句Content-Type:XXX,一切神奇的功能其实仅仅是一段特定的字符串而已,所以http协议怎么可以不研究呢。

nosql

非关系型数据库有很多,例如memcached,redis,mongodb,coundb等。这些东西都有自己的适用场景,合理利用可以加快开发效率,对提高应用性能有很大的帮助的。

消息中间件

这种技术的出现是为了解耦,当我们业务过于庞大的时候,就会相应的拆分成几个小系统,系统之间的通讯往往是通过http协议调用和基于消息中间件。通过http协议有一个弊端,就是某个系统一旦修改了地址,那么就必须修改调用该服务的系统。如果通过消息中间件调用,那么应用如何迁移,也不会影响到别的系统。

消息中间件

一点点话

你跟所谓的大牛差距在哪里呢?我的看法是差距仅仅在于项目经验。也许你会说后端怎么需要学习这么多东西,并且年年都有新的技术出现怎么学呢?其实对于一种新技术,我们主要是要弄明白我们为什么要用这种技术,因为存在即合理,新技术的出现必然有自己的原因,所以新技术不一定要追求,但是底层建议要理解。然后什么海量数据和高并发下系统优化,一个原则,找到性能瓶颈并解决它而已。

附录

路线图

一个简单的学习路线图

书单(下面仅仅是一些个人以前看过的书籍,并不是推荐要看,个人建议看看哪种讲解核心的书籍,怎么制作比怎么用更总要)

LINUX操作系统(第2版)

LINUX指令范例速查手册

JSP & SERVLET学习笔记

STRUTS 2.X权威指南(第3版)

HTML 5从入门到精通

JAVA入门经典(第6版)

看透Spring MVC:源代码分析与实践

大型分布式网站架构设计与实践

Docker 容器与容器云

Python Cookbook(第3版)中文版

Go语言程序设计

MongoDB大数据处理权威指南(第2版)

NoSQL数据库技术实战

构建高可用Linux服务器(第3版)

大型网站技术架构 核心原理与案例分析

Linux运维之道

高性能MySQL(第3版)

Java核心技术 卷I

Java核心技术 卷II

相关文章

网友评论

  • JAVA架构师的圈子:推荐一个程序员交流群:236283328

    群主要是面向于有工作经验,需要内推,想突破技术瓶颈、薪资瓶颈,以及职位瓶颈,想得到专业技术交流平台的程序员们~
  • loszer:强迫症....系统拆分,拆成的是“组件”(比模块粒度高)
  • 169537fe92e8:不错不错,收藏了。

    推荐下,分库分表中间件 Sharding-JDBC 源码解析 17 篇:http://www.yunai.me/categories/Sharding-JDBC/?jianshu&401


  • vipwhr:毕业半年,卡在了Linux部署应用,当然前面的也不是懂很多,MVC架构现在主要用的SSH,自己也会在练习搭SSM的,也在努力的钻研Java一些稍微深点的东西,内存啊什么的。认真的看完了楼主写的东西,觉得是很棒的。对我们这些后辈挺有帮助,说的直白点至少不是装逼,真的在写感悟。而且这个路线在我看来比较偏工程了,就是走的是能干活的路子了。如果楼主有好的建议给我,那非常感谢啊~
    yubang:@vipwhr 一般出于安全性考虑,生产服务器都是主管在管理。不过给一个建议您,可以自己买一台服务器来模拟真实环境,搞实验买最低配服务器,价格也不贵。
    vipwhr:@yubang wow 真的回复了,可是现在在公司没机会接触那些部署生产环境什么的,都是主管什么的在做,完全不了解,要想学只能自己在自己电脑上玩了。
    yubang:@vipwhr 如果要专研,可以深入理解一下java虚拟机,明白它的原理。然后linux还是靠多玩,我的部署都是生产环境多折腾积累出来的。
  • KingJA:看完一头雾水
  • 李小二姜:文主,我后端学的是PHP,现在前端HTML,jQuery,css,ajax都可以,不过大部分时候用的bootstrap框架,后台PHP基本语法没问题,xml正在学习中,memcached,正则表达都会,后台框架学的ThinkPHP,因为现在保了生物信息的研究生,所以Python,R,Linux学的多一些,Python主要处理文本,R用来统计和机器学习,想请问我这样的如何深入提高水平?多谢文主~~ :smiley:
    yubang:@李小二姜 在我看来,高水平无非就是能够解决更多的技术问题,所以应该多实践,积累解决问题的经验,而不是说学会多少技能。
  • 一叶染秋:文主,你好 :smile:
    我现在面对:高并发,多线程,缓存,性能优化。这类关键词其知识相关学习的时候,一头雾水啊,有没有好的建议或者方向呢。
    ~感谢感谢 :grin:
    之前,在各个平台上找解决方案,知识思路,东看西看的,越弄越晕。
    我现在是python服务端开发。(菜鸟学习进步中)
    一叶染秋:@yubang 我明白了 谢谢您指点
    yubang:@一叶染秋 其实好多名词都是忽悠人的,只有实践过才能说明白这些。一般来说看了这么多,到了实际往往都是对不上号的。我的经验,遇到问题,定位问题,想解决方案。平时的文章看看就好。
  • 李旦eo:没有大量的源码、文档、基础理论作为支撑,再多的项目经验也是在忽悠人。
    整篇文看下来全是菜鸟之路,关键的问题全都一笔带过。列的书单存在一些过期的书,还有很多讲的很泛的书,在设计、并发、安全、网络通信、JVM等主题都有缺失。
    建议改为: 后端成长之路:从啥都不会到吹牛逼
    590b0294a2d3:@superLe0 期待高手大作,给吾等菜鸟开开眼。
    yubang: @superLe0 我只想说,文章完全是个人观点,开头已经说了。并且书单只是我看过的部分,不是推荐一定要看,也是有说明的。一篇文章的篇幅,我连拿来讲秒杀系统架构也写不完,当然我必须承认文章写得不够深入丰富,但我只想大家看后有一点点收获就好,而不是看完就成了架构师。你指出的问题我会反思,感谢赐教。
    搁浅的双鱼:@superLe0 哈哈 :smiley: 的确有点空洞啊
  • 布拿拿:这些读完谈不上架构,现在架构的概念真不值钱。做完这些只是一个合格的程序员而已。
    布拿拿:@晓魚兒 所以呢?我并没有说不是服务于业务也没有这么说
    ae0cd6710ceb:架构不是服务于业务吗?如果你对某个领域很熟悉,对业务了如指掌,那你就能够架构出适用的场景方案呀。
    yubang: @布拿拿 对的,的确我整篇文章没提及架构,架构也难以用语言概括,各种情景各种约束
  • 壹猿:Java 前后 一起开发,页面布局头大。
    yubang: @1code 所以现在尽可能的搞前后端分离了,但工作量明显变大
  • JinkeyAI:初学者应该用python入门啊
    martyfai:@yubang 我也觉得是java,尤其是在面向对象方面
    yubang: @JinkeyBlog 感觉Java思想上对以后开发有帮助
  • JinkeyAI:能啃完这堆书的都是神人啊
    ae0cd6710ceb:我不会去完整看一本书,我需要了解,下一个项目需要用的我回去书中看看,然后在实际开发中再去优化对比
    yubang:@JinkeyBlog 这些书仅仅是我看过的一半

本文标题:后端成长之路:从菜鸟到架构

本文链接:https://www.haomeiwen.com/subject/epzvyttx.html