文章首发公众号『风象南』
作为一名程序员,日常工作除了做项目,还需要不停自学技术更新自己的知识库,下面分享个人学习一门新技术时会关注的几个维度及每个维度下的具体学习思路和方法。
背景
学习一门技术,一定要解技术出现的背景,一门技术的出现一定是为了解决某个特定问题,了解这个问题产生的原因和相关背景、业务场景等信息可以更好地帮助我们理解技术的核心价值。
这个过程至少搞清楚3个问题
1. 为什么会出现这门技术
2. 能做什么不能做什么,也就是能力边界
3. 当前这门技术处于什么样的阶段,生态如何
那么从哪获取背景信息?
首先,从官网查,看它是如何介绍自己的,是如何给自己定位的,如果官网没有或者比较零散,可以去网上搜一些相关信息,你总不会是第一个吃螃蟹的人,学会站在前人的肩膀上,多找几篇看看总结出说法相近的观点,各种信息汇总到一起大致就清晰了。
当然,现在有AI了,这个就相对更容易了,比如”为什么有了 C/C++ 还会出现Java“,类似这样。
经过上面的步骤,大致就搞清楚了了解这门技术所需的背景信息。
关键概念
这里主要是需要从整体上了解这门技术牵扯到的关键概念,针对这些概念需要进行自我消化澄清,如果是一个相对优秀的技术,官网一般都会有比较明确的介绍,如果单通过官方文档理解比较困难,这个阶段可以更多结合文章和视频辅助理解,这个过程最好能够找到与现实或其他类似技术的相似性,降低理解的难度。
理清概念及概念之间的关系就可以构成这门技术的全局逻辑视图,一方面可以降低后续的学习难度,另一方面可以建立起宏观认识,相当于有了一个学习过程中的知识导航,能够做到心中有数。
关键特性
这里需要了解组件的相关特性,比如有什么特色功能,性能突出等,每个技术或者框架一定有他独有的特性和侧重点,这些核心特性或侧重点就是为了解决上面说的某个问题的解决方案。
这些信息同样从官网基本上都可以查询到。
了解特性的目的在于知道它可以做什么,可以做到什么程度,是后面做技术决策选型的重要参考依据。
做不了什么
除了要了解关键特性之外,还需要了解技术的不足与边界,比如配置复杂,比如需要大量占用内存等。
没有一个技术是万能的,是适合所有场景的。
同样了解不足之处也是后面做技术决策选型的重要参考依据,既要又要往往不现实,所以这里就是之前我文章里谈到的架构取舍问题,得结合多方面因素(时间、成本、团队等)综合决策。
跑一个最小DEMO
这里可以结合官网示例和文档在本地搭建一个最小可测试运行环境,上手体验,掌握运行起该技术的最小必要知识和动手能力,同时能够对前面所了解的概念性知识能够又具象化的理解,后续的高阶知识、项目中应用等都是基于最小化DEMO的不断丰富和扩展。
高级功能
最小DEMO跑通后,可以结合官方文档学习相关的高级功能,比如如何保证高可用,如何优化配置提升性能等。这个过程可以在最小DEMO的基础上进行配置调整与观察,以做实验的方式进行验证、学习。
架构
架构整体上需要从对内、对外两个方面去理解
对外
该技术与其他外部技术或组件的关系,出现在什么样的场景中,通过什么方式进行交互,在整体流程中起什么作用,担任什么角色。
对内
该技术内部的逻辑关系,包含哪些核心组件或模块,分别起什么作用,之间如何通信,整体协作配合的工作流程是怎么样的。
原理
基本模型
其实就是上面说的对外,对内结合之后就可以总结成一张技术架构图,从整体上了解技术或框架的结构和元素构成关系以及交互方式。
特性原理
特性原理主要针对前面说的关键特性部分的实现原理、核心流程等内容进行相对深入的学习,一方面可以加深技术理解便于后期更好的进行应用,另一方面其中的设计思想和解决问题的方法可以在项目开发中进行应用。
实践
经过理论部分的学习,就需要在项目中进行实战应用,俗话说观看不练假把式,同样的技术应用在不同的场景可能遇到不同的问题,存在不同的解决方案,也能总结学到不同的经验。
一个项目的应用或一个阶段的学习并不能够使用到其所有功能或关键特性,那么这时候可以通过网上其他人分享的博客、视频等资料学习更多场景的问题和解决方案,用于丰富自己的知识库,为后续技术决策提供参考。
总结
以上几点知识说明了学习一门技术需要掌握的几个维度,之间没有严格的先后顺序,可以按照自己的习惯和最高效的方式来,学会系统性的掌握一门技术。
随着掌握的技术和积攒的经验越来越丰富,后面学习新技术大多数情况下是一种大脑知识库的增量迭代而不是从零开始,前提是要多总结与系统化。