分享

【程序员进阶丨主题周】掌握后端技术的6点学习建议

 太极混元天尊 2018-05-23


程序员是一个金字塔结构的职业体系,越往上,人越少也越难达到。走到金字塔顶部需要不断的学习和进步,包括正确的态度、正确的方法以及持续的努力。本文整理了6点学习后端技术的建议,并在最后给出了学习新技术的方法论,希望帮你早日走上金字塔的顶端。

学习后端技术和学习其他技术并没有什么大的不同。因此,本文题目换作“如何学习技术”也是讲得通的。

  • 1 扎实的计算机基础知识

计算机专业的一些比较普遍的基础知识课程分别如下。

数据结构和算法

程序是由数据和算法组成的,因此这两部分是计算机软件的基础,诸如B 树、哈希表、栈以及七大排序算法、查找算法等,在很多软件代码中都可以看到。有时候,一名优秀工程师和一名普通工程师的区别也就在于是否能够使用合适的数据结构和算法。

计算机操作系统

操作系统可以说是一个集大成于一身的软件程序。资源调度、任务调度、I/O 调度、进程通信等,每一个设计都是精华,也是很多其他应用软件设计的思想来源。

计算机网络

目前绝大多数有数据传输功能的程序都离不开网络。网络七层或者四层协议栈的设计非常精妙。了解网络连接如何建立、断开以及每个连接状态的意义,都有助于对程序网络问题的排查。

计算机组成原理

这是计算机底层的设计,也是计算机运行的基础。了解这些有助于消除计算机的神秘感,毕竟符合冯・诺依曼原理的计算机无非就是存储数据、程序按序运行。

这里不得不说的一点是,虽然现在各大高校的计算机专业课程比较落后,但是这些基础课程是计算机专业的基础,因此不管怎样都应该扎实掌握。也许上学的时候你感觉不到有多大的用处,但是进入实际的开发工作中,是否能够掌握扎实的基础知识往往决定了一名开发工程师的上限,这也是很多大的互联网公司无论是校招还是社招,都侧重于一些底层知识考察的原因。毕竟,你会使用什么东西只能决定你的下限,而你的基础知识和学习能力才决定了你的上限。

此外,其实很多平时开发中用到的技术都可以关联到这些基础知识。比如,我们经常为了提高查询性能而使用的缓存技术,以及为了兼容CPU 和I/O 速度不匹配而设计的CPUCache 就是同样的东西;操作系统中的进程间通信方式和服务之间的异步/ 同步通信也是差不多的道理。诸如此类,其实计算机科学基础凝聚了很多精华的设计,无论是计算机硬件架构、计算机操作系统还是计算网络。

  • 2  知其然更要知其所以然

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

这也可以映射到现在的一种现象:很多开发工程师工作了很久,看似经验丰富,但基本都是拿着一年的工作经验重复n 年。基本上每一份工作,每一个项目都在做重复劳动,而且不去考虑如何避免重复劳动。

这也涉及技术的广度和深度的问题。就笔者来看,对于刚刚毕业或者刚刚入职的工程师来说,首要的是深度问题,只有你在某一领域有了深入的研究和造诣,你才能融会贯通,迅速地扩大自己的知识面,在广度上做到突破。而对于有一定工作经验的工程师来说,虽然深度不是那么必需,但是遇到的问题、新学到的东西还是刨根问底才好,否则一旦出现问题再去亡羊补牢会非常被动,也不利于自己的技术发展。毕竟,一个什么都做过、什么都用过却什么也不精通的人很容易被替代。

  • 3  动手实践

一种学习技术的最佳实践就是“项目驱动型学习”,也就是动手实践。很多技术,只看书,你会觉得云里雾里,看了就忘,必须要经过自己的实践或者项目中使用到了这种技术,你才能很快地掌握并熟练。此外,现在朋友圈、微博上充斥着各种所谓的干货,很多人阅读大量的资料自以为收获满满,其实对于里面的知识根本就没有实践过,甚至有时候就是感叹一下别人真厉害而已。真正的干货是需要自己消化的,消化最好的模式就是实践,无论是对资料中的例子,还是一笔带过的知识,都是如此。

  • 4  频繁练习

动手实践能够让你快速入门,但只有频繁练习才能让你熟练使用。

 “一万小时”理论讲的是任何一个行业都至少需要一万个小时的实践才能成为专家。

先不去讨论此理论是否正确,可以想想当你长时间不写代码或者不用某个技术后再去做相关的开发,那种生涩、陌生感想必是无疑的。可见对于研发这个角色,频繁练习是多么重要。

当然,这里的频繁练习并非指重复劳动,而应该是带着自己的思考去练习,多想一下为什么这么做,有没有更好的方式。

  • 5  持续学习

“活到老,学到老”这句话用在程序员这个职业上再合适不过了。IT 技术尤其是互联网开发中的技术,迭代速度是非常快的。也许你今天学的知识,过不了几年就被抛弃。虽然相比前端技术,后端技术算是比较稳定的,但与其他行业相比,迭代速度还是非常快的,像Struts 这种当年火得一塌糊涂的技术现在也过时了。因此,一定要对新事物、新技术具有敏感性,要不断地涉猎业界最新的知识点,扩充自己的知识库。

这里还需要提到的一点就是,要“逃离舒适区”。人们对自己熟悉的东西会感到亲切,对自己熟练掌握的技术一般也能够自信地使用,然而当需要使用自己没接触过的技术时,很多人就望而却步、不敢尝试了,进而也就丧失了学习新知识、扩充自己知识库的机会。

最好的方式应该是敢于“逃离舒适区”、敢于使用新技术,这样才能让自己具有持续的学习兴趣,促进自己的持续进步。

  • 6  自我总结

相信很多人在平常的工作中,经常会遇到一些问题,然后通过查阅网上资料、询问同事、翻看源码等手段解决了,当再次遇到类似的问题甚至相同的问题时,还是一头雾水。先不提记忆力的问题,造成这种情形的很大一个原因就是没有总结。当然,这里的总结不仅仅指的是把你平时遇到的问题记录下来,更深一层的是要找到问题发生的本质原因,如何避免发生同样的问题,从中有什么启发和收获等。再进一步,则需要经常将自己一段时间内的知识收获整理成体系或者融入自己的知识体系中,这样才能举一反三,遇到相同的问题可以有据可循。

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

  • 7  如何学习一门新技术

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

由于很多技术的模块非常多,源码也非常复杂,很多时候看源码会陷进去越看越不得章法,因此这里着重说明一下“看源码”的典型流程。

1)阅读该技术的架构文档,了解其总体架构和组成。

2)根据总体架构,将源码文件以模块或者上下层级进行分类。

3)从未阅读过的模块中选择最独立(依赖性最小)的模块代码读起。

4)阅读此模块的功能介绍文档。

5)阅读此模块的源代码。

6)一边阅读一边整理调用关系(以表或者树的形式)。

7)转到第3)步。

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


Java 是一门非常容易入门的语言,初学者经过初期的学习之后基本能掌握DEMO 级别的编程应用。但是Java 庞大的体系可能会把你绕晕,又或者你还没看到Java 的生态系统有多么复杂。

此时,你需要本书。

本书主要针对一名合格的Java 工程师的必备技能做了大纲性的总结和阐述。本书内容包括了工程化、常用开发框架、数据存储、数据传输、Java 编程高级知识、性能优化、安全技术等内容,基本涵盖了Java 工程师需要掌握的绝大部分技能点。

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

点击图片进入小程序参与抽奖,5月24日自动开奖。


本书目录结构

篇幅限制,完整目录请见本书。

第1章  后端技术导言

1.1后端基础设施

1.2 Java后端技术概览

1.3 如何学习后端技术

第2章  Java项目与工程化

2.1 项目构建

2.2 代码版本控制

2.3 代码质量保证

第3章  开发框架

3.1 依赖注入

3.2 对象关系映射

3.3 日志

3.4 Web MVC

第4章  Spring

4.1 Spring核心组件

4.2 Spring数据操作框架

4.3 Spring Boot

4.4 Spring常用组件

4.5 总结

第5章  数据存储

5.1 关系型数据库——MySQL

5.2 非关系型数据库

5.3 缓存

5.4 搜索引擎——Elasticsearch

第6章  数据通信

6.1 RESTful架构风格

6.2 远程过程调用——RPC

6.3 消息中间件

第7章  Java编程进阶

7.2 Java网络编程

7.3 Java并发编程

7.4 Java开发利器

7.5 Java新版本的特性

7.6 总结

第8章  性能调优

8.1 调优准备

8.2 性能分析

8.3 性能调优

第9章  安全技术

9.1 Java加密

9.2 安全HTTP——HTTPS

9.3 Web安全

附录A  代码构建常用命令

附录B  Git常用命令

附录C  MySQL常用命令

附录D  MongoDB常用命令

附录E  Java调优常用命令

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多