如何学习后端技术?

学习后端技术和学习其余的技术并无什么大的不一样。所以,题目换作如何学习技术也是讲的通的。归纳来说,有如下几点建议:html

  • 扎实的计算机基础知识
  • 知其然更要知其因此然
  • 动手实践
  • 频繁练习
  • 持续学习
  • 自我总结
  • 学会规划

扎实的计算机基础知识

  • 数据结构和算法:程序是由数据和算法组成的,所以这两个东西是计算机软件的基础。诸如B树、哈希表、栈以及七大排序算法、查找算法这些,在不少软件的代码中均可以看获得。有时候,一个优秀的工程师和一个普通工程师的区别也就在因而否可以合理使用合适的数据结构和算法。
  • 计算机操做系统:操做系统能够说是集大成于一身的一个软件程序。资源调度、任务调度、IO调度、进程通讯等等,每个设计都是很精华的,也是不少其余应用软件设计的思想来源。
  • 计算机网络:目前只要有数据传输功能的程序绝大多数都是离不开网络的。网络七层或者四层协议栈的设计很是精妙。了解网络链接如何创建、断开以及每一个链接状态的意义都有助于对程序网络问题的排查。
  • 计算机组成原理:这是计算机最底层的设计,也是计算机一切的基础。了解这些有助于消除你对计算机的神秘感,毕竟符合冯诺依曼原理的计算机无非就是存储数据、程序按序运行。

以上是计算机专业的一些比较广泛的基础知识课程。这里不得不说的一点是,虽然如今各大高校的计算机专业课程是比较落后的,可是这些基础课程,因为多少年也没有怎么变过,所以无论怎样都是须要扎实掌握的。也许上学的时候你感受不到有多大的用处。可是进入实际的开发工做中,是否可以掌握扎实的基础知识每每决定了一个开发工程师的上限,这也是不少大的互联网公司不管是校招仍是社招,都侧重于一些底层知识考察的缘由。毕竟,你会使用什么东西只能决定你的下限,而你的基础知识和学习能力才决定了你的上限。前端

此外,其实不少平时开发中的一些技术均可以类比到一些基础知识的。好比,咱们常常为了提升查询性能而使用的缓存技术,和为了兼容CPU和IO速度不匹配的而设计的CPU Cache就是一样的东西;操做系统中的进程间通讯方式和服务之间的异步同步通讯也是差很少的道理。诸如此类,其实计算机科学基础凝聚了不少精华的设计,不管是计算机硬件架构、计算机操做系统仍是计算网络。程序员

知其然更要知其因此然

常常遇到来面试的工程师,他们简历上写了不少项目,也用过不少技术,怎么看都是很是不错的候选人。可是面试一旦深刻到原理或者是优化层面,不少工程师甚至是一些公司的资深架构师都会支支吾吾,答非所问或者说是没关注过。听到最多的解释就是业务压力太忙,没有时间去研究这个。其实,自我经从来看,业务忙是缘由,可是没有时间却确定是借口,毕竟阅读一个项目的源码虽然比较耗费时间,可是去网上看看已有的原理分析实际上是花不了太多的时间的。归根结底,仍是没有一种知其然更要知其因此然的基本意识。不少东西,你学会了使用会很兴奋,可是你有没有想过这么兴奋的功能是如何实现的呢?最简单的例子,Java中的HashMap,你们都在用,可是他究竟是怎么实现的呢?不少人甚至都不知道这和数据结构课程上的哈希表是什么关系,更别说让他说出解决冲突的方式了。面试

这也能够映射到如今的一种现象:不少开发工程师工做了好久,看着经验丰富,但基本都是拿着一年的工做经验重复n年的。基本上每一份工做,每个项目都在那里作重复劳动,并且也并不去考虑如何避免重复劳动这件事。算法

进一步的,除了遇到问题再去看源码、究底层,主动阅读经典类库、高质量开源项目的源码以及其余同事写的代码,学习其中好的架构、设计、编码风格以及类库的使用也是促进自身技术进步的一个很是有效的方式。后端

这也牵扯到了技术的广度和深度的问题。就我本身来看,对于刚刚毕业或者刚刚入职的工程师来讲,首要的是深度问题,只有你在某一领域有了深刻的研究和造诣了,你才能融汇贯通,迅速地扩大本身的知识面,在广度上作到突破。而对于有必定工做经验的工程师来讲,虽然深度不是那么必须了,可是遇到的问题、新学到的东西仍是刨根问底才好,不然一旦出现问题再去盲羊补牢会让你显得很是被动,也不利于本身的技术发展。毕竟,一个什么都作过、什么都用过却什么也不精的人可替代性太强了。缓存

动手实践

学习领域有所谓721模型:我的的成长70%来自于岗位实践,20%来自向他人学习,10%来自于培训。虽然这种理论存在争议,但在笔者看来对于程序员来讲按照实践、学习和培训的方式进行重要性排序是合理的。广泛公认的一种学习技术的最佳实践-“项目驱动型学习”,也就是这里说的动手实践。不少技术,只是看书,你会云里雾里,看了就忘。必需要通过你本身的实践或者项目中使用到了这种技术,你才能很快地掌握并熟练。此外,如今朋友圈、微博上都充斥各类所谓干货,不少人阅读大量的资料自觉得收货满满,其实对于里面的东西根本就没有去实践过。甚至有时候就是感叹一下别人真厉害而已。真正的干货是须要本身消化的,消化的一种最好的模式就是实践,不管是对资料中的例子仍是一笔带过的知识。网络

频繁练习

动手实践可以让你快速入门,但只有频繁练习才能让你熟练使用。数据结构

“一万小时”理论讲的是任何一个行业都至少须要一万小时的实践才能成为专家。先不去争论此理论是否正确,能够想一想当你长时间不写代码或者不用某个技术后你再去作相关的开发,那种生涩陌生感想必是每一个人都有体会的。可见对于研发这个角色,频繁练习是有多么的重要。架构

固然,这里的频繁练习并不是指的重复劳动。应该是带着本身的思考去练习,多去想一下为何这么作?有没有更好的方式?

持续学习

“活到老,学到老”这句话用在程序员这个职业上再合适不过。IT技术尤为是互联网开发中的技术,其迭代是很是迅速的。也许你今天学的,过不了几年就成了被抛弃的。虽然相比起前端技术,后端技术算是比较稳定的,但相比起其余行业,迭代速度仍是很是快的,像Struts这种当年火的一塌糊涂的技术如今也成了过期的东西。所以,必定要对新事物、新技术具备敏感性,要不断地去涉猎业界最新的知识点,扩充本身的知识库。

这里还须要提到一点就是要“逃离温馨区”。人对本身熟悉的东西都比较亲切,对本身熟练掌握的技术通常也可以自信地使用,然而当须要使用本身没接触过的技术时,不少人就望而却步、不敢尝试,进而也就丧失了学习新的知识、扩充本身知识库的机会。最好的方式应该是勇于“逃离温馨区”、勇于使用新的技术,这样才能让本身具备持续的学习兴趣,促进本身的持续进步。

自我总结

相信不少人在日常的工做中,常常会遇到一些问题,而后经过查阅网上资料、询问同事、翻看源码等手段解决了,当再次遇到相似的问题甚至是相同的问题时,仍是一头雾水。先不提记忆力的问题,形成这种情形的很大一个缘由就是没有去总结。固然,这里的总结不只仅指的是把你平时遇到的问题记录下来,更深一层的是要找到问题发生的本质缘由,如何避免发生一样的问题,从中有什么启发和收获。再进一步的则须要常常将本身一段时间内的知识收获组织成体系或者融入到本身的知识体系中,这样才能触类旁通,遇到相同的问题能够有据可循。

而自我总结的方式包括记笔记、写博客、作分享。其中,比起记笔记来讲,写博客、作分享是笔者更为推荐的方式。毕竟,和别人交流一方面能促使你对总结质量的把控,另外一方面分享知识给别人带来的“荣誉感”反过来会产生某种正向反馈让你更加乐于总结和分享。

学会规划

平时和很多工程师聊过关于职业规划的事情,其中有些人对本身的职业道路有很清晰的认识,但更多的则是没有任何概念,只是以为能挣钱养家就好。很明显前者是属于有规划的人,对于这种人来讲,其努力是有目标的,所以走的路也会更踏实,更具备可持续性。

对于研发职位来讲,学会规划是一个很关键的特质。而规划能够分为长期规划和短时间规划。上面说的职业规划就是一种长期规划,须要高瞻远瞩的定下本身前进的方向。如在五年内成长为一个后端服务架构师就能够看作一个长期规划。笔者本身的长期规划以下:

  • 35岁以前只作能提升本身技术水平的事情,可以成为公认的某一个技术领域的专家。
  • 毫不为了钱加入本身并不认同的企业或者团队。

而对于短时间规划来讲,则是一些具体技能、晋升、学习方面的规划。如,笔者近一年的学习计划包括:

  • 学习机器学习技术,可以成为“调参工程师”。
  • 增强自身的管理技能,可以带领部门有好的业绩。
  • 完成《增加黑客》、《分布式系统概念与设计》等十本书的阅读。

须要注意的是,对于这些短时间规划,要设定的比较合理,具备可达性,也要设定好优先级,根据优先级逐步去完成。此外,规划不要定死,能够根据实际状况灵活调整。

如何学习一门新技术

上面主要讲述了宏观层面的如何学习技术,而具体到学习某一个新技术,其实也是有法可循的。以下图所示:

因为不少技术的模块很是多,源码也很是复杂,不少时候在看源码的时候会陷进去越看越不得章法,所以这里着重说明一下“看源码”的一个典型流程:

  1. 阅读该技术的架构文档,了解其整体架构和组成。
  2. 根据整体架构,将源码文件以模块或者上下层级进行分类。
  3. 从未阅读过的模块中选择最独立(依赖性最小)的模块代码读起。
  4. 阅读此模块的功能介绍文档。
  5. 阅读此模块的源代码。
  6. 一边阅读一边整理调用关系(以表或者树的形式)。
  7. 转到第三步。

总结

程序员是一个金字塔结构的职业体系,越往上,人越少也越难达到。以下图所示:

一步步走到金字塔顶部须要不断的学习和进步,包括正确的态度、正确的方法以及持续的努力。本文所述只是笔者本身的体会,也是本身一直在践行的东西。除此以外,确定还有不少其余优秀的方法和思想可以促进这个过程。


本文节选自《Java工程师修炼之道》一书。

本书能够看做一本Java工程师的入职指南,也能够看做一本串联Java后端技能点的参考手册。经过精心编排的内容,刚入门的Java工程师可以体系化地学习相关开发技能,有经验的Java工程师可以查漏补缺,巩固本身的相关开发技能,进一步完善自身的Java技术体系。

购书地址:item.jd.com/12325207.ht…

相关文章
相关标签/搜索