2021-10-31
起因
这是我给自己布置的一个新任务,从这周也就是今天开始,决定每过一周就通过写博客的方式记录自己这一周的工作生活。这些都会同步到我的个人博客中。
jimmy 的个人空间 http://1.116.204.114:3000/
起因很因为最近一直在阅读的一本《软技能 2-软件开发者职业生涯指南》这本书,受到这本书的启发,我决定学习作者每周记录自己所作所学所想的事,对自己的职业生涯确实是有很大的帮助。
本周的工作
首先要说的是这周甚至是这两周我都不忙,我所负责的小程序已经另外一个 web 站的开发任务前端部分都已经结束,剩下的工作需要等待后端配合提供接口之后我才能继续开发,所以这两周是十分闲的工作。
学习 vue3 源码
我的源码笔记(携带注释)vue3 源码笔记 : gitee.com/jimmyxuexue…
学习源码是培养高阶开发思维和技巧的必经之路,显然这一步是十分困难的,之前尝试了很多次,就连 JQuery 的源码都能令我劝退,这周也是下定决定花时间去认真的研读。
因为没什么开发工作,我开始尝试从 vue3 的 reactivity 部分开始看,一直到看了 vnode,以及 patch 算法的部分,说实话这是个困难的事情,因为代码虽然有一些英文注释,但是大部分的地方还是没有注释的,所以只能强制根据自己的理解进行写注释,有一个很好的点是 vue3 的代码是使用 typescript 写的,有了类型约束以及接口函数返回值类型的确认,让这件事情开始变得相对容易上手了。我个人总结了有助于理解源码的方式:
-
如果是 typescript 写的代码先看函数接收的参数以及返回值,接口,类型等等。
-
尝试一点一点的写注释,比如知道了一个函数是的作用是什么就将自己的注释写在旁边。
-
结合理解的 API 功能进行理解源码。
比如 vue3 的
shallowRef和shallowReactive,这两个是 vue 提供的创建非递归监听的 API 方法,大概就知道 shallow 这个关键字的作用就跟是否递归有关了,源码 vnode 部分有挺多 shallow 的,刚开始真的是怎么都不能理解到底是干什么的,知道了这个作用再去看源码就有助于理解了 -
在网上搜索相关的源码博客或者视频
这个网上是很多的,我也看了很多,在吸收了他们的说法之后再写进自己的注释。
学习 typescript
笔记(本次记录在第二轮):ts 学习笔记 gitee.com/jimmyxuexue…
typescript 我其实学了蛮多次的,因为大学我学的是 C#,所以 typescript 对我来说并不是一个特别难的东西,还是 js,多了和 c#一样类型限定。
这次决定重学 typescript 的原因是 ts 确实很有助于开发,自己只会简单的用法,但是涉及到抽象类,泛型,装饰器等等就完全忘记了。重学了之后现在的进度是学到装饰器的使用,学了这些知识之后再阅读 vue3 源码确实跟之前相比事半功倍了。
目前也有遇到 ts 的瓶颈
-
泛型!!
虽然知道了泛型的应用场景,但是可能开发中没有涉及到,很难主动的去使用到它,这个也是我感觉 typescript 中最难的部分,vue3 中运用了大量的泛型,我也很难很好的理解它们。
-
没有使用 ts 开发项目的机会
之前开发小游戏使用的是 egret 引擎,是使用 ts 开发的,但那时候我的 ts 功力太差,加上一点大学 c#的基础硬着头皮写,感觉就是用着 ts 外壳,实际上写的还是 js。现在的我公司也没有安排之前的业务给我了,所以没有使用的机会,在我的认知中只有真正开发运用到了,你才能真正的掌握它,如果是自己写的 demo 类似于玩具,大脑很快就忘记了,否则我也不会学三四遍 TS。
编写自己的 jxue 库
git 仓库地址:Jxue gitee.com/jimmyxuexue…
这个需要着重的介绍一下,我认真的对待的一个项目,基于自己这段时间阅读源码,以及学习 ts 加上之前学习了 webpack 的知识,决心自己构建一个和 mini-vue,实现 vue 的一些 api 以及数据响应式。
目前进度:
- v-show
- v-model
- {{}}
- @(v-on)
- v-html
- v-for (需优化)
这个在大家的眼中肯定是玩具级别的,目前也还没有引入虚拟 DOM 这一层,之后会继续完善下去,这个对我来说意义非凡。
协助团队开发
我负责的模块已经是开发完毕了,但是同组的小伙伴还没有还在工作,他们遇到了一些相对棘手的事情,本来的我是想着继续自己学习下去(是真的,我可能有意识到要帮助一下他人,但是我又想着继续做现在觉得有意义的事情)。周三晚上我看的书《软技能 2-软件开发者职业生涯指南》有一章讲到 团队 “一荣俱荣一损俱损“要学习沟通与协调,帮助队友,其中最关键的一句话”如果你想成为一名高效能的软件开发者,你希望拥有一个成功的软件开发职业生涯,那么你需要学会如何与团队协作“。
于是周四我和另外一个开发者试着帮助这个队友解决一个他所遇到的问题,最后也是成功的”暂时解决了“(暂时能跑了,但是优化点还有很多,项目也还没有上线,先这样吧~)
总结
感觉这周过的非常的充实,花了很多时间在学习上,这是我最喜欢的工作状态,我也意识到,我并不想当一个拧螺丝的程序员,因为和组长有过一些架构上的讨论,我们其他人大部分都在写页面等等(拧螺丝),可是我的组长在研究整个项目的架构优化(实现请求队列)(造火箭)。我没能帮上什么忙,这个问题最后也是组长独挡一面解决下来的。这就是程序员之间的差距吧~