如果需要用一句话来形容技术的变化,我认为最恰当是:
唯一的不变就只有变化了
所以,没有高效的学习能力,程序员就只能变得墨守成规,停止不前了。这种状态下,就不要谈任何的高效的工作了。
本周,继续追求高效的程序员系列,这是第三篇,本系列其它文章为:
在编码之道中,我阐述过,术的东西是日新月异的,而道则是永恒不变的。程序员需要更着重修练道的能力,那是不是术的东西就不重要了?
当然不是,因为道的能力是通过在使用术的过程中才能提练,感悟与学习到的。而且是需要不停的接触各种不同的术。
但是对于技术来说,唯一的不变就只有变化了。
如果没有高效的学习能力,就很难应付日新月异的技术变化。
『求别再更新了,已经学不动了』
我曾在网上见到经常见到这句话,当然,大家也就是调侃而已,但背后仍然反应出一个事实就是:面对变化频繁的技术更新与变化,程序员确实有些难以跟随,而年龄越大,在某个技术已经付出很多的成本的程序员来说,这个问题可能更加严重。
怎么办?
我只能从我的经历总结出了一个六步学习法,对于新技术我一直是按照这个模式来做的,一直也是百试不爽。
这些年,我不停的各种技术方向与框架中切换,不停的学习与使用新技术,感觉这个方式还是可以的。
六步学习法
通读官网文档
学习任何一个新技术,一定要从官网的文档开始。很多人一来就喜欢不知道从哪个博客或文章搞个教程看下,然后就开始搞了,我认为这是非常不妥当的行为。
之所以要从官网的文档开始,原因在于:
这个步骤的一个重点是:通读
通读就是说,你只管读,不要动手去写代码。因为这个步骤我们只是为了了解这个技术的大致而已。
这个阶段,只是为了对一个新技术有大致的了解,知道它能做什么。
比如,最近我在看Docker的官网时,通读后就知道它有个多阶段构建。后面我在做持续交付时,就知道可以用上它了。
以专业的书辅助
这是第二个步骤,购买这个技术的一本专业的书来阅读。
专业的书主要是弥补第一个步骤的一些不足,包括:
关于这个,我特别喜欢拿移动开发的Android与iOS来对比,同为移动开发,它们的对比简直是绝配。
Google为Android搞了个非常完整的教程,非常好,与之相对应的,iOS则完全没这玩意,太差了,从iOS官网上完全找不到应该如何开发一个App的文档。
不过,Swift UI到是有了类似的文档与教程,一步一步介绍Swift UI如何做。说明苹果也是有改进的嘛。
所以,需要专业的书就是这个原因,有可能一些官网文档没有或非常差劲,另一个就是官网毕竟比较基础,当你用的久了,一定需要深入,这就可以买专业的书了,它们都是某个技术用了很久的人写的,有很深的感悟与理解。
当然,要学会选书,市面上可不缺少垃圾技术书。
从写简单的示例开始
技术是需要靠写的,光看不练那是假把式。
我们编程,都知道,学习一门语言,第一行代码永远是"Hello World"对吧。
所以,这也是你学习任何一门框架或技术的步骤。
从最简单的,能很快搞定并运行起来的开始,这会给你一种很好的正向反馈。
逐步添加复杂实现
下一步就是不断的添加复杂实现,不要一下子搞太多复杂的实现,万一有问题,你都不知道从哪个点开始着手。
在上一个能运行的成功的基础上,添加一个小的功能点,让它运作起来。
再重复这个过程。
这有一个非常好的持续正向反馈的过程,而且出问题很容易知道是哪个小的点引起的。
切忌一下子添加太多你不熟悉的功能点,搞一个完整的实现。这种出错的概率非常高,而且大概率你也很难找到原因。
错误与日志,最好的朋友
程序员都不喜欢错误,我们要尽量避免产生Bug或错误,虽然它是不可避免的。
但在学习一个技术时,错误与日志却是你最好的朋友。
如果你学习一个技术,从学习到实现你想要的,完全没遇到错误,也没因为错误去查找过日志,那我只能这个学习太肤浅了,你压根没有理解与学习它。
想要真正理解,就是从错误开始。
所谓错误就是:你以为应该是这样,结果不是这样,然后你去寻找原因,结果发现这个技术不是你想像的这样,而是那样的。
这个过程就是学习。
而查找错误就是要从日志看起,很多程序员一出错误,要么就问别人,要么就去网上找。但我觉得最开始要做的是自己查找原因,从日志查找起来。
但凡优秀的技术或框架在日志方面一定也很优秀。
比如,最近我在为我的myddd (https://myddd.org) 搭建maven仓库,因为是基于nginx而不是nexus (nexus对服务器性能要求高,nginx则非常低),所以我就需要搭建一个sftp,这个是上传包用的,我安装完成后,始终报错。
折腾了好久,尝试了网上说的各种方案,都没有解决。后面我想了下,得看下日志,于是我用了linux的journalctl -f来输出日志。果然,很快发现如下的日志提示:
ChrootDirectory directory must be owned by root and have 755 mode:
你看,这个日志多清晰,ChrootDirectory目录一定得是root用户,并且是755权限。
一下子对sftp的理解又多了一点。
这就是学习的过程。
重温官网文档
过了一段时间后,你已经使用这个技术挺久了,你觉得你已经掌握它了,或者用某个词叫精通。
不管怎么叫都行。
那最后一步,我就是建议你时刻去重温官网的文档。
在你用了很久后,再来看这些东西,和你刚开始看感觉不可能一样了。
孔子说:温故而知新。这是非常有道理的话。
我有事没事的时候,就喜欢不停的重温我这几年的各种技术的官网,不停的再阅读它们。什么kotlin,vertx,typescript,react,swift ui或是android jetpack等各种各样的。
每次重温,都是一种巩固的学习过程。
这就是我的六步学习法,我希望它对你能有所帮助。
不管我们用什么技术,一定会遇到错误或问题,除了我上面说的查看日志以外,有时候确实我们搞不定,这时候,我们就需要借助别人的帮助了。
感谢这个互联网时代,你遇到的问题,成千上万人也遇到过,他们会在在网上交流,反馈。
只要你学会一个能力,你就能站在巨人的肩膀上了,很快的解决问题。
这个能力就是:善用搜索。
可能很多人会觉得奇怪,搜索也需要说么,从我的感受到的,可能还是确实需要说下。
下一篇:追求高效的程序员(四):善用搜索