假如你今天新入职一家公司,用了一个新的语言,你该怎么系性的学习?
程序员会因多种原因面对新技术或概念,如技术发展为提升效率、配合其他部门、领导要求等,像如今 AI 流行,或换组后技术栈改变,比如从 Go 转向 Java,框架设计等都要换;也可能为准备面试,因不同公司技术栈不同,比如有的地方 Redis 用得多,有的地方 MySQL 用得多,或者自己对某新技术感兴趣觉得可能有用等。学习新技术有明显收益,若工作中用到,排查问题思路会更宽阔,比如知道 Java 中阿尔萨斯或 Spring 启动流程,面对报错就知道如何查;面试时若学得好能透彻讲解,不会出现被问到时才发现没看过、没研究过的情况;方案设计时思路也更宽阔,考虑更周全。
我设想一种方法,预期能解决:
- 如何避免学习新的忘记旧的
- 目标太大不知道怎么入手怎么办, 时间不够该学点啥
- 学了之后印象不深,面试或解决问题时还总是忘或回答的七零八落的
希望后面我学的不那么吃力吧,不知道能不能抛砖引玉给给大家一些启发或一起探讨下学习方法论的问题。
之前跳槽从陌陌到探探,从 PHP 转向 Go,之前学习了 PHP 的相关知识包括买 PHP7 源码书。搭建项目、调试语言,Go 中有很多 PHP 没有的东西如协程、垃圾回收机制和gin框架等;23 年 8 月又从 Go 转 Java。早些年因非计算机专业,还需要补操作系统、计算机组成原理等基础功课,认为学完对排难有帮助。在18年的时候面我进陌陌那个同事对我影响也很大,他发表技术文章包括看源码而解决疑难杂症,比如看nginx源码来解决一个偶现的502,我遇到这种问题我早就忽略了,又不是业务代码问题,或者找其他部门查,但他一点一点解决让我感到很惭愧。自己也想提升技术但感觉吃力,计算机方面的书很厚,像 CSAPP、Java 技术核心讲解、Redis 设计之道、Thinking Java 等,很少能坚持看完一本,即便看完一段时间后也会忘记。之前学网络时用 Wireshark 抓包看 TCP 连接等很感兴趣,但之后就很少再启动,现在一些网络相关问题还不懂。
今天看到一个博主说自己有”知识成瘾症“,每次想学新东西就买一堆相关的书,联想到台湾漫画家及尹烨的读书方法,即每次学新领域买七八本书,对同一章节内容结合多本一起看,批判性吸收并提出新概念。我就想这个能不能用在我们”知识饥渴症“的程序员身上?
我认为这种方法可用于程序员学习。
在学习新技术时,可先对技术进行思考,如对 Spring,往上找属于框架层面、Java 的库,往下找内部实现了 IOC 和 AOP 等,还可从 IOC 再往上找属于某种设计模式等,将概念的上下游概念多找一下,然后提问题,比如关于现有知识中哪些能与之匹配,像 Spring 和 NG 的通信协议等,通过具体问题找切入点,深入知识点并回忆之前内容;对于外部框架的路由机制等,可与之前学过的其他框架的路由进行对比,还可找其竞品及优缺点进行横向对比,这样能明确其定位和与其他知识的关联,相当于在大脑中把新区域和旧区域关联起来,重新激活知识且掌握效率更高。
之后可找关于上下游概念更细化的书,如 Spring 相关,找专门讲 IOC、AOP、Spring AI、Spring Boot 等的书,往上找讲外框架或 Java 类库的书。找书的方式可借助大模型或豆瓣搜索关键词,找到后提出问题并梳理学习路线,按重要性排序,确定对自己最重要、最优先的模块,可能是其他模块的依赖基础,或对面试、技术排查问题等足够,找到依赖顺序,针对重要模块找资源、书来看,看后产生想法再去其他书、网站或该领域知名人士的推特、博客等验证,当知识在多处得到验证则会很牢固,因为是反复确认,且知识点被反复提及则比较重要,反之可能没那么重要。