我关于业余学习的建议

这篇博客我主要是献给我的同事以及其他跟我一样是上班族的同学的。我有好几次想要写一下这个话题,但是之前有很多别的东西要写给大家,然后就忘掉了这件事。现在是时候了。我会写得口语化一些,一篇博客看起来有点像口语应该也没什么关系吧。

不管是我维基百科的朋友也好,同事朋友也好,可能会觉得我为什么总会有新的想法。我怎么那么多想法呢。我觉得我关于技术的,大部分的想法,都是因为我每天都在摄入相关的信息。当然也有我个人性格的原因,但我觉得已经不是主要原因了。

我非常明白高强度的工作,会让大家没有时间学习其他的东西,所以我也不会想要跟大家说,你要忙了一天了,回家再学一晚上,像上学那样。我觉得我提倡的成年人的学习状态是这样的:

前两个可能是大家都能够想到的方面。但第三点我想特别提一下,我认为是非常有用的补充,而且每天都会有新闻,不会需要你特别认真的状态学习它,你不想看它了就不看了,也没有什么损失。在你下次无聊的时候,你再看,还会有一些新的可看。

在我关注的领域,有些网站我会推荐给大家:

这是我常看的网站。没事的时候我就会随手点开它们,在你了解更多的知识之后,它们会带出一些新的想法,这些想法因为有你看到的一些技术的支撑,从而可以实现。在实现一些新的想法的时候,你时而就会用到你不太掌握的一点点知识(一般来说你都会找一些你觉得能做成的想法去实现,不是吗)。攻克了,就像是完成了一次新的拼图。

业余时间不适合独立搞大型的项目。我一般业余时间写的代码都是那种单个文件的程序,做一些我的想法的验证。证明它们确实能够做出来,能够使用,就是这样。真正如果用到正式场合中,可能需要考虑各种与实现想法本身无关的事情,比如维护这份代码的成本啊、长期运行的稳定性啊、公司是不是需要做这件事情啊、是不是使用一个大家都熟悉的编程语言啊之类的。不要觉得所有事情前人都已经做过,真的有一些事情,你是第一个做的。如果一件事情,是你可以拆解的,拆解成你熟悉的步骤,那么它就是可以做的。

另外,不要过分期待你业余时间的学习能够用到工作中太多,能够用到工作中当然是一件开心的事啦。从时间上讲,你的时间得到了节约,你不必再花一份时间在这件事情上。当然,如果你的公司是一个重视技术的公司,那么你业余时间的提升,其中一部分转换为了“工作技能”,你在工作上或许也会更加顺利。我不是提倡大家花费休息时间去提升工作技能,我反而更鼓励大家花工作的时间去提升这一点。许多公司工作时长很长,如果你在公司的时间除了工作还能够剩出一些,我鼓励利用这样的时间提升工作相关的技能。让公司为我们的提升买单,而不是让公司白嫖我们休息时间的个人提升。

我主要的思想就是让大家轻轻松松,不太费力地,有一些提升。这些提升可能不足以让你通过某项专业技术考试,但它在不一定什么时候,就会派上用场。而且根据我的经验,这个转化率一点也不低。我想跟大家讲我个人的一段小经历。应该有人知道,我不是一毕业就工作,而是在家休息了一阵子。我个人有个感受就是我在家休息的时候,我也不知道我自己该学什么,我想写维基百科,但我不知道写什么好;但找到工作进入公司以后,我经常遇到自己不懂的知识,于是我很快就积累了一堆备选条目,因为平时没时间写嘛,只有周末或者放假才能赶紧写写。在这种状态下,我最终演变出来的阅读偏好,也会多多少少与公司能用到的技术,有一些关系。工作会给我们提供一个大概的学习方向,我们自己可能会发展出各种各样的实际学习方向。

我个人目前发展出来了六个方面的兴趣:

  1. Lua脚本
  2. OpenResty及Nginx应用
  3. 数据可视化
  4. 数据库相关
  5. Deno脚本
  6. WebGIS

各位也可以列出不同于我的,适合于自己的多个方面。我喜欢说自己是一个对技术挑剔的人。我不会鼓励大家学一堆编程语言。把两门编程语言用得熟练更加重要。其中一个可能是工作中最常用的语言(对于我来说是JavaScript),另一个可能是你私下最喜爱的语言(对于我来说是Lua)。你感兴趣的领域也不需要太多,也许一开始就一个两个。但其实,慢慢就会多起来,不必担心。但即便多起来,你在特定一段时间内,可能也就只关注一两个。人的精力有限,这是很正常的。

文章的最后我还是做一点小小的补充吧。作为一个程序员,有时候需要一些通用的能力,如果你没有,可以通过业余时间提升一下。我相信是有帮助的。这些通用的能力中我想要特别提出的有:

  1. 熟练运用正则表达式的能力
  2. 利用搜索引擎快速查找有效内容的能力
  3. 使用业界公认强大工具的能力

为什么我想要提这三个呢?我想要一个个解释一下。

正则表达式是字符串匹配领域的标准,几乎任何编程语言,乃至文本编辑器(Windows自带的记事本除外),都支持基于正则表达式的文本查找与替换。我想跟大家说的是,一定不要仅仅把正则表达式认为只是编程语言中的一个功能或模块,它是一个能处理大量有规律数据的武器。我运用正则表达式的很多场合都不是在编程,而是在处理大量文本,把它从一种形式转换为另一种形式。它能够帮助大家减轻很多这类重复劳动。

搜索引擎是一个几乎大家都用,但只有一部分人真的会用的东西。不会用的人往往搜半天搜不到想要的内容,然后抱怨网上没有现成的实现或者方案。我也不能算用到搜索引擎的所有功能,但我可以把我的经验跟你们说说。

  1. 我不会过分依赖搜索引擎自带的分词,我会主动用空格来分割开我要查找的词,尤其是当我查中文的时候。另外,如果可以,我不会查找完整的句子,而回把关键的几个词放到搜索框中。比如我比较关注乘风破浪的姐姐中的阿兰,我可能就会搜“浪姐 阿兰”这样。
  2. 充分利用时间搜索功能。按照时间搜索的功能几乎搜索引擎都会支持。一般都会出现在“高级搜索”或者“搜索工具”里面。我们在维基百科中查找一段文字是否侵权,经常就会用到这个功能。当然,我们也可以用到搜索一个工具或者一个概念有一年内或者一周内互联网上有没有出现,判断我们关注的某个软件是否大家还在使用以及关注。
  3. 中文搜不到就换外文。在不同的领域,不同语种的人可能有不同的重视程度。在我们IT领域,外文的资料要比中文好用很多。但不要在国内搜索引擎搜外文,那样反而查不到什么有用信息。直接上Google最好,条件不允许的话,也可以尝试一下Bing的国际版。

使用业界公认的强大工具,是让我们站在巨人肩膀上最容易的方式。我们要承认人与人是有差距的。我们不能让大牛为我们干活,但我们可以用他们开发的工具来发挥强大的作用。就比如Nginx,它的性能很高,很稳定。仅仅通过配置,就能够实现一些通用的HTTP功能。所以我不能理解为什么,我们公司的开发会想要把纯静态资源放到tomcat里面。当然我不是说那些跟后台服务直接相关的前台代码,就是纯前端工程或者静态资源。我甚至都想直接用Nginx开发业务服务,指OpenResty。强大的工具当然也包括Redis、数据库,Linux上的GNU工具链等。我想跟大家提这一点的原因之一也是大家常说的,不要重复造轮子。不过这句话我想加上个条件,在你写不出超越前人的成果或者时间不允许你写出来的情况下,不要重复造轮子(但业余写着玩除外)。

总而言之,这些只是我个人的建议。业余时间不一定要花费在学习上,也可以做其他有趣的事情,放松身心。即便大家业余时间用于学习,也别太累。