2021 年 6 月 23 日预览。
重新整理了这份 Angular 自学天然资源目录,可供我们参照。
我第二次写 Angular 约莫是在 2018 年 5 月 22 日以内,那六天递交了我的第两个 PR:
到写此篇提问的 19 年 5 月 16 日相差无几两年了,刚好来归纳呵呵他们的自学历经,也期望对没碰触过 Angular 的老师略有协助。
而此初年我给 ng-zorro-antd 递交了134 个 PR(当中有许多还没 merge,很多没 merge 就 close 的),写了 @ant-design/icons-angular 两个图标库,两个小讲义(现阶段处在成在状况),除此之外在子公司外部还写了两个模块库,参与保护工程项目组的工程项目,分立写了两个小辅助工具之类。
自学 Angular 以后
我从 17 年 10 月末已经开始老实自学后端(以后是学了基本上的 HTML CSS 和 JS),第一门框架是 Vue,因为 Vue 相对简单易学。我从 Vue 已经开始写了一写小 app(烂大街的音乐播放器、饿了么等),读 Vue 和 element-ui 源码,写了两个模块库(虽然只有 10 两个模块)之类。18 年春招进入了现在的工程项目组,工程项目组主要采用 Angular,所以从确定拿到 offer 那天起就已经开始自学 Angular。
在已经开始自学 Angular 以后我自认做到了以下几点:
扎实的 JavaScript 基础(我他们实现过 Promise,包括 Promise.all 这种,常用辅助工具函数他们撸完然后去对比 lodash 之类)习惯他们检索问题的答案具有一定的源码阅读能力个人觉得在自学框架以后,掌握基础是十分重要的,不然它们都会称为你在自学框架过程中额外的心智负担。
初学 Angular
时间上应该是 18 年 6 月到 11 月这段时间。我比较推崇的方法是 learn xxx in the hard way(源自 learnpython the hard way),以及 learn by doing,我在自学 Angular 的时候也是这么做的:
读。读 Angular 官方文档(讲义、文档完整的过了一遍),读 Angular In Depth 专栏(强烈推荐!)的文章,以及师兄 在面试还没走完以后就给我的阅读目录(后来也发布在了我们的知乎专栏,非常齐全的自学材料),我在入职前的时间里基本上 cover 了所有的知识点(当然不可能全部搞懂……)。RxJs、TypeScript 都是在这时候学的。写。跟着讲义写代码。比如我他们跟着三十天掌握 RxJS 的系列讲义撸了两个简单的 RxJS。当然先是给他们的工程项目组贡献 PR 了。最已经开始写的时候很菜,修 bug 还要一边修一边翻文档翻博客,也只能做许多简单的 issue。写了两个 side project,是上面提到的讲义工程项目,覆盖了 Angular 的不少 topic。进入工程项目组后,通过做需求、工程项目来进一步练习 Angular。和工程项目组商量了解决方案,分立编写了 icons-angular 。在读与写的过程中,你会对 Angular 的 API 越来越熟悉,也会对 RxJS、TypeScript 有更多理解,渐渐的在写业务的时候,Angular 及周边库就不会变成心智负担了。
关于题主在问题描述的情况——虽然信息量很少——我觉得原因是代码读写太少了。进一步自学
11 月到现在后来模块库的发展(主要是两个 milestone 里涉及的许多重大改造)需要我去自学 Angular 更高深的许多 topic,而此时提高他们对 Angular 的理解水平的仍然是读和写。
读。读 Angular 和 CDK 的源码(有的朋友可能看过我的解析文章),以及快要翻烂的 Angular in Depth(出场率真高 )。比如 OnPush 改造要求我们对 Angular 的变更检测机制极为熟悉,所以那段时间我们都读完了 Angular in Depth 上的相关文章并进行了很多讨论。写。ng-zorro-antd根据从 CDK 和设计模式里学到的知识,已经开始重构他们负责的模块(我自认做的比较好的是 cascader 和 carousel的重构,一次性解决了不少遗留问题)。为了彻底解决 breadcrumb 自动生成的问题,阅读路由机制的文章,甚至还读了 Angular 此部分的源码。写业务的同时已经开始注意多个工程项目之间的代码复用,和应用内更合理的数据流种种话题。到这里,Angular 已经不是写后端项目的障碍了,成为了两个得心应手的辅助工具,即便有暂时 block 我写代码的问题,我也自信能在一周之内完全搞懂那个 topic。
归纳
从我这两年的历经中,我觉得以下几点是自学 Angular 的过程中颇为重要的。
循序渐进。你可以看到我是 JavaScript => Angular API => Angular 底层原理这样一层层点技能点上来的,跳过的东西太多,后面就会付出不必要的代价。如果你经常碰到不知道怎样表达代码的情况,而此点可能是最先要反思的。我个人不太赞成“知道怎么用就好”这种自学方法,你在入门的时候,基本上无法判断他们是不是真的掌握到“够用”了,还不如完全理解以一劳永逸。求当中者得其下。多读多练习。自学任何技能的任何行为,都可以归类于观察——模仿——发展——反思四个类,分别对应读——跟着讲义写工程项目——写工程项目、做开源——归纳、输出四件事。找两个好工程项目组和一群好伙伴。我无意夸大他们的努力在我成长过程中的重要性,我的工程项目组对我的成长起到了很大的推动作用,包括师兄 对我的点拨,和工程项目组的小伙伴们 @wenqi73 之类的无私分享。如果你的周围没可以讨论 Angular 的小伙伴,你可以参与开源社区,通过递交 issue、PR 等方式和其他开发者交流(实际上我们工程项目组有两个小伙伴在加入以后都给 zorro 贡献过代码)。