企业管理

0

程序员如何系统学习新技术

头像
小财

对于初级程序员的进阶,两道最大的坎就是 经验 和 学习新技术。


经验是可以随着工作时间而增长的,但是新技术需要主动去学习。



如何系统地学习新知识/新技术?


第一步 从阅读 官方文档 开始


有的同学可能会排斥阅读官方文档,而选择一开始就去读各种博客。

我不否定阅读博客,但是官方文档往往是个更好的起点,因为:

  1. 更全面 —— 我所推崇的学习方法之一就是深刻理解 概念和设计,官方文档通常会花费大量篇幅详细阐述这两点。一旦对这两点有所理解,剩余的学习(API 也好,代码示例也罢)会轻松很多。
    博客质量良莠不齐,不好的博客通常会跳过或者仅仅简述概念,甚至只是直接输出结论 ,是快餐式的体验
    比如 有的 Git 博客会直接写 git reset --hard xxx 撤销修改到某个 commit,而不说原理,如果你只是简单复制粘贴指令照做,很可能不小心丢失了重要的代码!
  2. 更准确 —— 官方文档的阐述/描述无疑是最准确的,也基本能避免错别字引起的不必要的误解
  3. 更适合初学者 —— 大多数开源技术想要吸引程序员学习它,于是它们的官方文档会尽力地去方便初学者。
    比如通常有个 Get Started 章节,先简单明了地带你试玩一下;
    也会精心安排各个章节的设计,由浅入深。


阅读官方文档的技巧

  1. 先阅读What is XXX —— 在这个篇章里,通常会描述这个技术 解决了什么问题有什么核心设计,有哪些指定的概念和术语
    理解了这些内容,会让你和文档的写作者处在同一个上下文(Context)里,之后的阅读就会更顺畅。

  2. 并不需要一下子把所有官方文档都读完,因为这通常需要两小时以上(取决于这个技术的复杂程度),容易厌倦、打退堂鼓。
    理解了一些入门的概念后,可以尝试去搜索一些宣传视频/教程视频(外网可以去YouTube搜),看视频毕竟更有趣生动点。
    也可以查一些高质量的博客看看,结合思考刚刚学到的概念设计等。
  3. 官方文档里的Hello World教程也是比较简单且准确的,跟着教程写点代码,感受一下新技术的魅力也是一个让你坚持学下去的动力。
  4. 在做第2和第3点的同时,还是要经常回到官方文档进一步了解各种设计,概念,直到读完大部分的官方文档(可以根据个人需求跳过少许的章节)
  5. 做做简单的笔记 —— 不是让你把官方文档抄下来或者翻译一遍,而是写一写看到的关键字、反复出现的术语、阅读过程中产生的困惑等。
    切记不要花大量的时间写详尽的笔记,会分散你的精力和时间。有些人反而是因为因为做繁杂的笔记而导致学习半途而废。

  6. 让自己的学习环境舒服一些, 比如:
    我每次看官方文档一定会放大网页,让字体足够大,让眼睛足够舒服;
    避免额外的打扰,我还会让浏览器进入全屏模式(连 tab 和 书签都隐藏起来), 如下图





官方文档是学习的 基础与核心,接下来谈谈 实践


实践是检验真理的唯一标准,也是验收你的学习到的书面知识的唯一办法。


如何实践?

  1. 除了Hello World教程中的简单示例代码,你可以进一步魔改它,让它变出更多花样;
  2. 你也可以开始在个人项目里尝试根据自己的需求使用这门技术
  3. 还可以开始研究公司的项目代码里是怎么使用这门技术的。

这时你一定会踩到很多坑,产生很多困惑:

  • 为什么这里代码没有像预期那么跑?
  • 为什么多种写法却得到同样效果?
  • 如果我想实现这种特别的效果怎么做?
  • 有没有我想要的这种配置?
  • 为什么公司项目代码里不是按照官方示例代码那么写?


怎么办?填坑!去debug,去查搜索引擎(首推 Google, StackOverflow),去问同事。


在踩坑填坑的过程中,你会切切实实地开始理解这门技术,而且逐渐学会灵活使用它。





进阶


官方文档更倾向于 介绍技术的 核心设计和基础概念,部分官方文档也有 进阶教程


如果想进阶,经典书籍 和 大神博客 是两个很好的途径。


比如学习 Java,我一定推荐 《Effective Java》,《Java并发编程实战》和 《重构》


关于博客,我通常直接 Google 某个技术问题,然后进入一些博客网站查看, 我尤其推荐

这个博客网站, 博文质量比较高(但需要一定的英语阅读能力)


如果想再进一步,那就考虑 读源码了。

读源码不是什么特别可怕的事情,放下心中偏见,大胆地去读吧。(可以参考我的另一篇文章 ,看我是怎么阅读Axios源码的)


举个极端例子:

redux-thunk 这个拥有 13.5k Github star 和 npm 1,645,072 周下载量 的神库 的源码 浅显易懂且只有 14 行 !

github.com/reduxjs/redu

当然这其实归功于Redux精湛的设计,于是又促使你去阅读 Redux middleware相关的源码


当然,另一个最有效的进阶方法就是在实际工作中不断 遭遇问题-查阅资料-解决问题的过程。






关于Hello World实践的一点可选的额外技巧:

假如你正在学习的技术的Hello World实践需要下载安装包,在本地起一个服务器(比如 MySQL)。
这种比较“重”的操作,通常会折腾你的计算机环境,比如新增了文件结构,改变了你的环境变量,加入了后台服务,注册了开机自动启动等等。
这都是比较让人头疼的事情。


我的建议是——这一类的实践可以优先使用 Docker 玩,因为

  1. Docker container本身就是一个虚拟的环境,无论你怎么折腾,它都不会影响你的主机环境。
  2. 当你从Hello World中毕业了,只要停止/删除这个Docker container就完事了。
  3. 你甚至可以把你的 Docker image 上传到 repo,换了新电脑也能轻松 pull 下来继续玩。
  4. 比较流行的技术在 Docker Hub 一般都会有官方维护的 Image,如 hub.docker.com/_/mysql


虽然这只是个可选的技巧,但是对不了解Docker的同学,我仍然强烈建议你去学习,因为Docker目前已经是最流行且使用极其普遍的技术之一了(类似于 Git 的地位 )—— 不如试试使用本文的技巧去学习一番吧!


有些同学排斥官方文档的原因是因为官方文档大多数是 英文 写的,看到英文就下意识地退缩,怎么办?


老实说,就算有官方文档有中文翻译,我也推荐你读英文版的。原因如下:

  1. 目前很多最前沿的技术都来自于国外,如果你一而再地逃避阅读英文文档,你就只能苦等翻译,等质量较高翻译出来时,可能已经过去几年了。
  2. 想想你写过的代码的API,是不是几乎都是英文?
    以 JS 的数组方法为例 concat, slice, shift, fliter 等等。如果你认识这些单词,就算你不查文档你也能八九不离十地猜出它们的用法——培养英语阅读能力不仅有助于你看文档,也有助于你写代码!
  3. 英文的文档内容 更准确。原作者想传达的意思只有在原版中才保持原汁原味,一旦经过翻译(尤其是不幸遇到蹩脚的翻译),不仅会多多少少丢失原意,还可能出现差错。
  4. 英文能力在我们这个行业本身就是一种能力,是你与其他竞争者拉开距离的一种能力!
  5. 目前的国内公司工作氛围比较不健康,如果你想逃离996,不妨尝试尝试外企 —— 优秀的英文能力是基本门槛


如果一开始阅读英文文档比较吃力,我推荐你在浏览器中安装一些翻译插件,如Chrome Google Translate,但只查询生词,千万别整段整段地翻译 —— 那可能比蹩脚的人工翻译还蹩脚 !


总结

如果你不想做个码农 / 精通复制粘贴的程序员,那就得深入理解已经了解的技术还必须不断学习新技术。


学习新技术不容易,系统深入的学习更是一个挑战。


我个人提倡的的学习原则是

1. 围绕着官方文档学习

2. 用各种方式给自己正反馈,激励自己学下去

3. 坚持

4. 放下心中偏见和恐惧,大胆进阶



本文改编自我的公众号文章 -



(不用关注我的公众号,我已经决定逐步把所有文章都搬到知乎上)



本文转自 知乎,原文链接:https://zhuanlan.zhihu.com/p/104769413,如需转载请自行联系原作者
头像
丢弃