对于初级程序员的进阶,两道最大的坎就是 经验 和 学习新技术。
经验是可以随着工作时间而增长的,但是新技术需要主动去学习。
如何系统地学习新知识/新技术?
第一步 从阅读 官方文档 开始
有的同学可能会排斥阅读官方文档,而选择一开始就去读各种博客。
我不否定阅读博客,但是官方文档往往是个更好的起点,因为:
- 更全面 —— 我所推崇的学习方法之一就是深刻理解 概念和设计,官方文档通常会花费大量篇幅详细阐述这两点。一旦对这两点有所理解,剩余的学习(API 也好,代码示例也罢)会轻松很多。
博客质量良莠不齐,不好的博客通常会跳过或者仅仅简述概念,甚至只是直接输出结论 ,是快餐式的体验
比如 有的 Git 博客会直接写 git reset --hard xxx 撤销修改到某个 commit,而不说原理,如果你只是简单复制粘贴指令照做,很可能不小心丢失了重要的代码! - 更准确 —— 官方文档的阐述/描述无疑是最准确的,也基本能避免错别字引起的不必要的误解
- 更适合初学者 —— 大多数开源技术想要吸引程序员学习它,于是它们的官方文档会尽力地去方便初学者。
比如通常有个 Get Started 章节,先简单明了地带你试玩一下;
也会精心安排各个章节的设计,由浅入深。
阅读官方文档的技巧:
- 先阅读What is XXX —— 在这个篇章里,通常会描述这个技术 解决了什么问题,有什么核心设计,有哪些指定的概念和术语。
理解了这些内容,会让你和文档的写作者处在同一个上下文(Context)里,之后的阅读就会更顺畅。 - 并不需要一下子把所有官方文档都读完,因为这通常需要两小时以上(取决于这个技术的复杂程度),容易厌倦、打退堂鼓。
理解了一些入门的概念后,可以尝试去搜索一些宣传视频/教程视频(外网可以去YouTube搜),看视频毕竟更有趣生动点。
也可以查一些高质量的博客看看,结合思考刚刚学到的概念设计等。 - 官方文档里的Hello World教程也是比较简单且准确的,跟着教程写点代码,感受一下新技术的魅力也是一个让你坚持学下去的动力。
- 在做第2和第3点的同时,还是要经常回到官方文档进一步了解各种设计,概念,直到读完大部分的官方文档(可以根据个人需求跳过少许的章节)
- 做做简单的笔记 —— 不是让你把官方文档抄下来或者翻译一遍,而是写一写看到的关键字、反复出现的术语、阅读过程中产生的困惑等。
切记不要花大量的时间写详尽的笔记,会分散你的精力和时间。有些人反而是因为因为做繁杂的笔记而导致学习半途而废。 - 让自己的学习环境舒服一些, 比如:
我每次看官方文档一定会放大网页,让字体足够大,让眼睛足够舒服;
避免额外的打扰,我还会让浏览器进入全屏模式(连 tab 和 书签都隐藏起来), 如下图
官方文档是学习的 基础与核心,接下来谈谈 实践。
实践是检验真理的唯一标准,也是验收你的学习到的书面知识的唯一办法。
如何实践?
- 除了Hello World教程中的简单示例代码,你可以进一步魔改它,让它变出更多花样;
- 你也可以开始在个人项目里尝试根据自己的需求使用这门技术;
- 还可以开始研究公司的项目代码里是怎么使用这门技术的。
这时你一定会踩到很多坑,产生很多困惑:
- 为什么这里代码没有像预期那么跑?
- 为什么多种写法却得到同样效果?
- 如果我想实现这种特别的效果怎么做?
- 有没有我想要的这种配置?
- 为什么公司项目代码里不是按照官方示例代码那么写?
怎么办?填坑!去debug,去查搜索引擎(首推 Google, StackOverflow),去问同事。
在踩坑填坑的过程中,你会切切实实地开始理解这门技术,而且逐渐学会灵活使用它。
进阶
官方文档更倾向于 介绍技术的 核心设计和基础概念,部分官方文档也有 进阶教程。
如果想进阶,经典书籍 和 大神博客 是两个很好的途径。
比如学习 Java,我一定推荐 《Effective Java》,《Java并发编程实战》和 《重构》
关于博客,我通常直接 Google 某个技术问题,然后进入一些博客网站查看, 我尤其推荐
这个博客网站, 博文质量比较高(但需要一定的英语阅读能力)
如果想再进一步,那就考虑 读源码了。
读源码不是什么特别可怕的事情,放下心中偏见,大胆地去读吧。(可以参考我的另一篇文章 ,看我是怎么阅读Axios源码的)
举个极端例子:
redux-thunk 这个拥有 13.5k Github star 和 npm 1,645,072 周下载量 的神库 的源码 浅显易懂且只有 14 行 !
https://github.com/reduxjs/redux-thunk/blob/master/src/index.js
当然这其实归功于Redux精湛的设计,于是又促使你去阅读 Redux middleware相关的源码
当然,另一个最有效的进阶方法就是在实际工作中不断 遭遇问题-查阅资料-解决问题的过程。
关于Hello World实践的一点可选的额外技巧:
假如你正在学习的技术的Hello World实践需要下载安装包,在本地起一个服务器(比如 MySQL)。
这种比较“重”的操作,通常会折腾你的计算机环境,比如新增了文件结构,改变了你的环境变量,加入了后台服务,注册了开机自动启动等等。
这都是比较让人头疼的事情。
我的建议是——这一类的实践可以优先使用 Docker 玩,因为
- Docker container本身就是一个虚拟的环境,无论你怎么折腾,它都不会影响你的主机环境。
- 当你从Hello World中毕业了,只要停止/删除这个Docker container就完事了。
- 你甚至可以把你的 Docker image 上传到 repo,换了新电脑也能轻松 pull 下来继续玩。
- 比较流行的技术在 Docker Hub 一般都会有官方维护的 Image,如 https://hub.docker.com/_/mysql
虽然这只是个可选的技巧,但是对不了解Docker的同学,我仍然强烈建议你去学习,因为Docker目前已经是最流行且使用极其普遍的技术之一了(类似于 Git 的地位 )—— 不如试试使用本文的技巧去学习一番吧!
有些同学排斥官方文档的原因是因为官方文档大多数是 英文 写的,看到英文就下意识地退缩,怎么办?
老实说,就算有官方文档有中文翻译,我也推荐你读英文版的。原因如下:
- 目前很多最前沿的技术都来自于国外,如果你一而再地逃避阅读英文文档,你就只能苦等翻译,等质量较高翻译出来时,可能已经过去几年了。
- 想想你写过的代码的API,是不是几乎都是英文?
以 JS 的数组方法为例 concat, slice, shift, fliter 等等。如果你认识这些单词,就算你不查文档你也能八九不离十地猜出它们的用法——培养英语阅读能力不仅有助于你看文档,也有助于你写代码! - 英文的文档内容 更准确。原作者想传达的意思只有在原版中才保持原汁原味,一旦经过翻译(尤其是不幸遇到蹩脚的翻译),不仅会多多少少丢失原意,还可能出现差错。
- 英文能力在我们这个行业本身就是一种能力,是你与其他竞争者拉开距离的一种能力!
- 目前的国内公司工作氛围比较不健康,如果你想逃离996,不妨尝试尝试外企 —— 优秀的英文能力是基本门槛
如果一开始阅读英文文档比较吃力,我推荐你在浏览器中安装一些翻译插件,如Chrome Google Translate,但只查询生词,千万别整段整段地翻译 —— 那可能比蹩脚的人工翻译还蹩脚 !
总结
如果你不想做个码农 / 精通复制粘贴的程序员,那就得深入理解已经了解的技术还必须不断学习新技术。
学习新技术不容易,系统深入的学习更是一个挑战。
我个人提倡的的学习原则是
1. 围绕着官方文档学习
2. 用各种方式给自己正反馈,激励自己学下去
3. 坚持
4. 放下心中偏见和恐惧,大胆进阶
本文改编自我的公众号文章 -
(不用关注我的公众号,我已经决定逐步把所有文章都搬到知乎上)
本文转自 知乎,原文链接:https://zhuanlan.zhihu.com/p/104769413,如需转载请自行联系原作者