如何像交朋友一样学习一项新技术

做了这么多年程序员,也学了这么多技术,我慢慢开始觉得自己在学习这件事情上,好像有那么一点sense。最近重新读了一遍《软技能-代码之外的生存指南》这本书,作者提到了他学习一项新技术的过程,让我从中得到了一些启发,我再结合自己的经历和理解,总结进化出了一套自己认为比较有效的学习新技术的方法论,留作以后自己使用,也希望各位能够在评论区交流一下自己的经验。

在详细讨论方法论之前,我先介绍下我看待技术的一个视角,我认为学习一门新技术,就像交一个新朋友一样,开始时你需要对它有一定的兴趣,进而去了解它是什么性格,看看你们之间是否聊得来。有些技术可能你接触了以后不太喜欢它,而有些技术非常酷,会让你眼前一亮,进而想深入了解它,再然后,随着你们之间的进一步深入了解,你发现不同的技术具有不同的价值观,奉行着不同的处世哲学。

下面就聊聊我是如何像交一个新朋友一样学习一项新技术的。

第一步,了解技术出现的背景,要解决的主要问题,以及能够流行起来的原因

每个技术都是在特定的时代背景、行业背景或公司背景下诞生的,了解了这个,就对这项技术的出身、被寄予的期望和发展现状有一个大概的了解了。

比如说,java诞生在上世纪90年代,当时是c++比较鼎盛的时期,java解决了跨平台、自动内存管理等问题,后续又支持了企业级动态网站开发和android开发,还有庞大的开源社区和众多大企业的大力支持,所以java至今依然非常火爆。

jquery解决了浏览器兼容性的问题,还可以用相同的api来操作DOM,也火了一把,但随着MVVM模式的流行,以及nodeJS的火爆,angular、vue.js、react等技术也火了起来,让前端程序员可以更高效地编写页面,甚至还可以借助node实现移动端的开发。

当年的微软在技术上比较封闭,与开源社区作对,导致公司出现严重的危机,随后微软决定拥抱开源,拥抱linux,开源的.netcore随之诞生,让c#具备了跨平台的能力。

golang的出现,使开发效率和运行效率得到了更好地平衡。docker和kubernetes的持续火爆,也证明了go语言是可以担当大任的,所以现在很多基础技术或中间件产品,会首选golang来实现,c/c++被打到更底层,java被打到更上层。

苹果公司的工程师实在是受不了Objective-C的奇葩语法,于是开发出了语法特性非常酷和现代化的swift。

redis的全称是Remote Dictionary Server,远程字典服务,它的出现最开始是为了解决磁盘IO的性能问题,到后来被广泛用作内存数据库、缓存和消息broker。

hadoop的诞生,解决了在普通商用服务器上可靠存储和快速计算海量数据的需求。

ansible的诞生,解决了在多台linux服务器上批量重复执行同样工作的需求。

spring boot的诞生,解决了spring依赖混乱和配置复杂的问题。

一项技术能够流行起来,一定是有原因的,它的作者在开发它的时候,在给它起名字的时候,也许还有很多有趣的故事。了解这些背景,不仅可以让你对它的定位心里有数,还会让你对这项技术产生更多的兴趣,从而引导你去进一步学习和使用它。

技术的官方文档的首页,或者相关技术书籍的介绍性章节,一般都会谈到技术诞生的背景、发展历程等。

这一步的目的不是去掌握什么,只是对这个技术有一个全局性的了解。就像你听说了某个人很厉害,然后你顺手从网上扒一扒他的基本情况,履历经历什么的,对他有个大概的印象。

第二步,明确你希望通过这个技术来解决自己的什么问题

这个环节至关重要,甚至可以直接决定你最终能不能学会这门技术。有了要解决的问题,会让你目标更明确,意志更坚定,范围更聚焦,兴趣也更浓厚。

如果没有明确的目的,你可能会把一本书从头到尾地读,这个过程花的时间很长,枯燥的内容可能会让你产生一些负面的情绪,例如,我真的有必要花这么多时间学习它吗?要不我就用自己熟悉的xxx吧,又不是解决不了问题等等。此时一旦你遇到了难度较大或理解较困难的部分,你可能就放弃了。

这一步就像,你听说这个人有一种特殊的能力,而你碰巧需要这种能力来解决困难,这个时候你就会想办法去认识他,结交他,然后请他来帮你的忙。

第三步,寻找优质的学习资源

对于学习技术来讲,最好的学习资料肯定就是官方文档了。这个技术被开发出来以后,它的开发团队一定希望别人喜欢它并且使用它,甚至恨不得别人第一眼就能喜欢上它,并且在最短的时间内就能熟练使用它,所以就会提供质量很高的文档,来告诉开发者怎么去使用它,官方文档也是技术的开发团队和其它开发者之间最重要的媒介。所以如果你想全面掌握一门技术,官方文档是首选的学习资料。

很多技术的官方文档都是用英语编写的,英语是世界语言,有人也说英语是程序员的母语,总之,良好的英语阅读能力,会让你和很多不具备这项能力的人自动拉开距离。如果你不具备良好的英语阅读能力,那就仿佛这项技术的研发团队精心为你准备了一桌子丰盛的大餐,你却只能在窗户外面傻傻看着。

除了官方文档以外,一些公认的经典书籍也是一个不错的选择。有些经典书的作者会直接参与这项技术的开发,有些则深入使用它,并且善于深入浅出地教授别人使用它。

优质的学习资料会让你事半功倍,搞明白其中的一个,足以让你解决与这项技术相关的80%的问题了。最好不要把一些中文技术博客(像csdn博客、简书之类)作为你的第一手资料,它们在完整性、严谨性以及深度方面是远远不够的,所以最多可以作为某个具体主题的补充资料,或者遇到具体问题时的参考。

第四步,快速上手,主动探索

学习一个新技术,如果英语阅读能力还算凑合,一定要先看看官方文档里面的quick-start章节,这个章节一定是经过精心设计的,它会让你快速上手使用这项技术。技术书籍的前三个章节也一定会包含快速上手的内容。

一旦你能把这个技术用起来,哪怕写一个“hello,workd”,或者别的等价操作,你就和它建立了一种对话机制,你会问它各种问题,从而对它产生更加直观的印象,它也都会如实地回答你。如果你已经有一些跟它相似的老朋友了,那你会自然而然地问它一些你很熟悉的话题,对一些编程语言来讲,你可能会问,如何定义和调用一个function,多个module如何组织起来,依赖包如何添加,多线程怎么实现,泛型是怎么玩的,内存管理是怎么实现的。对于framework来讲,也很容易找到类似的问题,比如对于web框架来讲,路由规则如何定义,支不支持MVVM,template的语法是什么,如何获取数据并呈现出来等。

你也可以快速地跳转到感兴趣的章节来阅读,也可以跳到对自己有用的章节(不要忘记你学这个技术是有明确的目的的),也可以去stack-overflow上搜索相关内容,几乎都能找到一些可用的示例。这个过程是非常主动地,让一颗尝鲜的心带着你往前走,可以浅尝辄止,也可以深入了解某个感兴趣的主题,你会体验到新技术带给你的便利,从而获得更多兴趣。

这一步可以用一句话来总结,就是用20%的时间了解一个技术80%的特性。

第五步,开始使用,增进了解,随时深入

有了前面的基础,接下来就可以在项目中实际使用它,来解决自己的实际问题了。这就像你已经成功说服了它过来帮你解决问题了。实际使用的时候,你会发现自己对很多内容的理解其实是不够的,这很正常,也个好事情,你会带着更具体的疑问,去学习对应的内容。这个过程中,实际项目场景会引导你去关注什么主题,以及关注到什么程度。如果项目中比较依赖某个特性,那你就要花时间去彻底搞明白这个特性的原理。

经过在真实的场景中来使用,你会对这个技术的理解更加立体一些,实际场景还会让你深入到一些具体的主题上。

截止到这一步,你已经使用20%的时间了解了这项技术80%的特性,还深入到了某个主题上,并且解决了实际场景下的问题,用通俗的话来讲,学到这一步已经“够用”了。

第六步,系统学习,并输出技术博客

对于有些技术,可能够用就行了,但也有一些技术需要系统学习并且深入掌握的,这取决于你自己的规划。如果这个技术对你来讲十分重要,那你就要系统学习并深入掌握的。

你需要再次找出你前面使用的经过精心挑选的学习资料,去阅读(几乎)所有的主题,先要明白每个主题能够解决什么问题,适用什么场景,然后写一些示例代码,去感知它们的行为,然后把他们写成一篇篇的技术博客,来教别人怎么使用这项技术。输出博客可能会占用比较多一些的时间,但是这个投入的产出是极高的。你要花时间把自己学到的东西从大脑中提取出来,以别人能理解的方式组织起来,你发现自己会做很多查漏补缺,会意识到自己之前对有些内容的理解并没有自己想象的那么正确和深刻,你还会把这些技术缝合进你的大脑,内化为自己的思想。另外,随着你学习的技术越来越多,总有一些技术是你近期用不上的,他们的大部分细节会慢慢被你遗忘。如果两年以后你需要再次使用它,你可以通过阅读自己当初写的技术博客,来快速地回忆起各种细节,重建起你对这个技术的完整结构。

这就像你和一个朋友经过长时间的交流和相处,你们已经成了密友,它的思想很多都成了你的思想。哪怕经常不见面,再见面时,当年你们的共同经历会飞快地钻到你的大脑里,那种熟悉的感觉又回来了。

对于全栈工程师来讲,如果没有这一步的话,你可能会疯掉的。当你熟练地把自己的代码部署到kubernetes上,并在linux中通过命令分析java进程的运行状况,正不亦乐乎的时候,明天你可能就会去vue写几个页面,你需要快速地回忆起ui-router、webpack的工作方式与技术细节,需要快速的使用某个ui框架搞一个说得过去的三段式页面布局,尤其是他们没有按照你的预期工作时,你需要熟练地通过F12去搞定他们。如果你都需要重新找资料的话,你的心情可能就不那么愉快了。

以上就是我总结的自己在学习新技术时用的方法,之所以是总结出来的,是因为我大部分的时间可能都是这么做的,但我可能意识不到我在这么做,它已经成为了我的一种习惯,如果不好好总结整理一下,是说不完整的。

如果你认为内容有价值,别忘记长按下面的二维码关注我(老朱的读书随想)。
如何像交朋友一样学习一项新技术_第1张图片

你可能感兴趣的:(技术人生)