【程序员进阶丨主题周】掌握后端技术的6点学习建议
程序员是一个金字塔结构的职业体系,越往上,人越少也越难达到。走到金字塔顶部需要不断的学习和进步,包括正确的态度、正确的方法以及持续的努力。本文整理了6点学习后端技术的建议,并在最后给出了学习新技术的方法论,希望帮你早日走上金字塔的顶端。
学习后端技术和学习其他技术并没有什么大的不同。因此,本文题目换作“如何学习技术”也是讲得通的。
∙1 扎实的计算机基础知识
计算机专业的一些比较普遍的基础知识课程分别如下。
数据结构和算法
程序是由数据和算法组成的,因此这两部分是计算机软件的基础,诸如B 树、哈希表、栈以及七大排序算法、查算法等,在很多软件代码中都可以看到。有时候,一名优秀工程师和一名普通工程师的区别也就在于是否能够使用合适的数据结构和算法。
计算机操作系统
操作系统可以说是一个集大成于一身的软件程序。资源调度、任务调度、I/O 调度、进程通信等,每一个设计都是精华,也是很多其他应用软件设计的思想来源。
计算机网络
目前绝大多数有数据传输功能的程序都离不开网络。网络七层或者四层协议栈的设计非常精妙。了解网络连接如何建立、断开以及每个连接状态的意义,都有助于对程序网络问题的排查。
计算机组成原理
这是计算机底层的设计,也是计算机运行的基础。了解这些有助于消除计算机的神秘感,毕竟符合冯・诺依曼原理的计算机无非就是存储数据、程序按序运行。
这里不得不说的一点是,虽然现在各大高校的计算机专业课程比较落后,但是这些基础课程是计算机专业的基础,因此不管怎样都应该扎实掌握。也许上学的时候你感觉不到有多
大的用处,但是进入实际的开发工作中,是否能够掌握扎实的基础知识往往决定了一名开发工程师的上限,这也是很多大的互联网公司无论是校招还是社招,都侧重于一些底层知识考察的原因。毕竟,你会使用什么东西只能决定你的下限,而你的基础知识和学习能力才决定了你的上限。
此外,其实很多平时开发中用到的技术都可以关联到这些基础知识。比如,我们经常为了提高查询性能而使用的缓存技术,以及为了兼容CPU 和I/O 速度不匹配而设计的CPUCache 就是同样的东西;操作系统中的进程间通信方式和服务之间的异步/ 同步通信也是差不多的道理。诸如此类,其实计算机科学基础凝聚了很多精华的设计,无论是计算机硬件架构、计算机操作系统还是计算网络。
网络前端需要学什么∙2 知其然更要知其所以然
经常遇到来面试的工程师,在简历上写了很多项目,也用过很多技术,怎么看都是非常不错的候选人,但是面试一旦深入到原理或者优化层面,很多工程师甚至是一些公司的资深架构师都会支支吾吾,答非所问或者说是没关注过。听到最多的解释就是业务压力太大,没有时间去研究。其实,从笔者自己的经历来看,业务忙是原因,但是没有时间却肯定是
借口,毕竟阅读一个项目的源码虽然比较耗费时间,但是去网上看看已有的原理分析其实是花不了太多时间的。归根结底,还是没有一种知其然更要知其所以然的基本意识。很多东西,你学会了使用会很兴奋,但是你有没有想过这么令人兴奋的功能是如何实现的呢?最简单的例子,Java 中的HashMap,大家都在用,但是它到底是怎么实现的呢?很多人甚至都不知道它和数据结构课程上的哈希表是什么关系,更别说知道解决冲突的方法了。
这也可以映射到现在的一种现象:很多开发工程师工作了很久,看似经验丰富,但基本都是拿着一年的工作经验重复n 年。基本上每一份工作,每一个项目都在做重复劳动,而且不去考虑如何避免重复劳动。
这也涉及技术的广度和深度的问题。就笔者来看,对于刚刚毕业或者刚刚入职的工程师来说,首要的是深度问题,只有你在某一领域有了深入的研究和造诣,你才能融会贯通,迅速地扩大自己的知识面,在广度上做到突破。而对于有一定工作经验的工程师来说,虽然深度不是那么必需,但是遇到的问题、新学到的东西还是刨根问底才好,否则一旦出现问题再去亡羊补牢会非常被动,也不利于自己的技术发展。毕竟,一个什么都做过、什么都用过却什么也不精通的人很容易被替代。
∙3 动手实践
一种学习技术的最佳实践就是“项目驱动型学习”,也就是动手实践。很多技术,只看书,你会觉得云里雾里,看了就忘,必须要经过自己的实践或者项目中使用到了这种技术,你才能很快地掌握并熟练。此外,现在朋友圈、微博上充斥着各种所谓的干货,很多人阅读大量的资料自以为收获满满,其实对于里面的知识根本就没有实践过,甚至有时候就是感叹一下别人真厉害而已。真正的干货是需要自己消化的,消化最好的模式就是实践,无论是对资料中的例子,还是一笔带过的知识,都是如此。
∙4 频繁练习
动手实践能够让你快速入门,但只有频繁练习才能让你熟练使用。
“一万小时”理论讲的是任何一个行业都至少需要一万个小时的实践才能成为专家。
先不去讨论此理论是否正确,可以想想当你长时间不写代码或者不用某个技术后再去做相关的开发,那种生涩、陌生感想必是无疑的。可见对于研发这个角,频繁练习是多么重要。
当然,这里的频繁练习并非指重复劳动,而应该是带着自己的思考去练习,多想一下为什么这么做,有没有更好的方式。
∙5 持续学习
“活到老,学到老”这句话用在程序员这个职业上再合适不过了。IT 技术尤其是互联网开发中的技术,迭代速度是非常快的。也许你今天学的知识,过不了几年就被抛弃。虽然相比前端技术,后端技术算是比较稳定的,但与其他行业相比,迭代速度还是非常快的,像Struts 这种当年火得一塌糊涂的技术现在也过时了。因此,一定要对新事物、新技术具有敏感性,要不断地涉猎业界最新的知识点,扩充自己的知识库。
这里还需要提到的一点就是,要“逃离舒适区”。人们对自己熟悉的东西会感到亲切,对自己熟练掌握的技术一般也能够自信地使用,然而当需要使用自己没接触过的技术时,很多人就望而却步、不敢尝试了,进而也就丧失了学习新知识、扩充自己知识库的机会。
最好的方式应该是敢于“逃离舒适区”、敢于使用新技术,这样才能让自己具有持续的学习兴趣,促进自己的持续进步。
∙6 自我总结
相信很多人在平常的工作中,经常会遇到一些问题,然后通过查阅网上资料、询问同事、翻看源码等手段解决了,当再次遇到类似的问题甚至相同的问题时,还是一头雾水。先不提记忆力的问题,造成这种情形的很大一个原因就是没有总结。当然,这里的总结不仅仅指的是把你平时遇到的问题记录下来,更深一层的是要到问题发生的本质原因,如何避免发生同样的问题,从中有什么启发和收获等。再进一步,则需要经常将自己一段时间内的知识收获整理成体系或者融入自己的知识体系中,这样才能举一反三,遇到相同的问题可以有据可循。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论