马上又要开始新的一年了,突然想总结下自己在这段日子的成长,总得来说,对自己的成长还算满意,但仍需进一步努力。
初来驾到
2019 年 4 月份刚来的时候,看到一堆“烂”代码,简直焦头烂额,所幸自己也没有灰心,而是开始思考代码变烂的原因,认识了烂代码之后,才知道什么叫做好的代码,同时对前人总结的设计原则越发的认同,越来越感觉好像理解到一点点真谛,于是这一年来陆陆续续坚持学习设计模式,至此 23 种设计模式也都学过了一遍,学的过程中确实有顿悟的感觉,自己也成为了一名面向对象开发的推崇者,深知自己学习的还不够,必将继续努力。
说到代码烂,其实也并不能全怪工程师,并不能说他们写的烂,第一这里面有一定的历史债务,第二项目本身相比传统的 web 项目要更复杂一些,因为涉及到一些三维和二维的渲染与编辑,而且交互也比较复杂。有了历史债务,随着业务的频繁迭代,代码容易越来越烂。项目本身复杂度对工程师也提出了更高的要求,这里包括技术要求以及工程师自我追求。
这一年也是自己飞速提高的一年,掌握了不少新技能,比如地图的使用,学习到了 geojson 的图形表示和常见的图形操作,接触到了比较完备的 git 工作流。也参与负责了团队 code review 以及团队的招聘工作。开始接触并坚持写单测,自己也重新定义单测的意义,就是对当下的代码书写提出了更高的要求,更是对未来的重构提供了保障。也经历了 typescript 真香的过程,也学习到了一些渲染相关的技能,使用 three.js 进行 3D 渲染,用着也还算熟练,但对底层的 WebGL 原理了解的还是非常有限,对了,这里涉及到一些数学基础,可我都忘记了,我要开始学数学了。
渐入佳境
2019 年末,公司要对项目进行改版,趁着这个机会,我们前端团队终于要对 angular 下手了,什么原因就不细说了,总之我们准备转成更加时髦的 react 项目了,自己有幸主导前期的环境搭建和技术选型工作,我不断反省之前项目存在的问题,我觉得使用设计原则和设计规范来改善代码是很困难的,因为这非常依赖个人经验,但是编码规范却可以迅速的提高代码的质量,于是我定义了一些比较通用的规范,比如命名,类型定义,代码格式,OOP 规约,注释等等,同时为项目添加 prettier 保证代码风格的统一,使用 eslint 配合 stylelint 做代码检验,加入 git hook 强行做风格检查来保证代码的质量。对了,我还小心翼翼的想在团队推广 OOP 编程思想,希望提高代码的内聚性,通过拆分更多的小类来提高代码的复用性,减少超大文件的可能性,真的很小心翼翼,因为这想要大家一起认同并执行,真的有点难。
这时候公司开始进行业务线分组的探索,我们索性也将以前庞大的项目进行的拆分,让每个组负责维护好自己的项目,因为单个项目太大,会导致打包编译巨慢。考虑到这种情况,我于是提出了前端微服务的概念,希望能带来更好的用户体验。当然拆分成多个仓库后,也带来了很多的问题,比如代码复用的问题,每个仓库的环境配置如何保持同步的问题。代码复用暂时通过 submodule 的方式解决,但总觉得不够优雅。至于配置同步的问题,正在思考可否通过 monorepo 的方式来解决,对了,上面的微服务目前还没有落地,monorepo 也还只是个想法。
对了,改版后的项目,被吐槽交互很奇怪,用户不会使用,目前正在优化欠下的交互债。自己思考了一下,大概有几个原因,首先不得不说,做一个工具类的产品,真的很难,不仅对工程师提出了更多的要求,对产品经理和 UI 设计师要求更高。第二点我觉得就是,用户是有使用惯性的,突然的改变必然被吐槽,我觉得被吐槽也是意料中的事情。
未来展望
2020 年 10 月我来到了一个新的业务线,工作内容也有所差异,最大的改变是由 3D 渲染转换到了 2D 渲染,所开发的产品更加倾向于解决复杂问题某一个具体环节,而不是全流程的解决方案,个人其实挺认同这种方案。还有就是遇见一个编码理念非常契合的人,这很棒!
除了业务方面之外,心里也一直心心念念几件基础建设方面的工作,大致如下:
- 前端微服务解决方案:目前采用的方式,还很原始,有些问题没法解决,需要尽早改善
- 代码共享与配置同步问题:打算实践下 monorepo,还能否应用上
对于个人的成长,也有如下几个方向
- 深入 React 底层原理
- 可视化基础夯实
- 学习 Rust 语言,看能否配合 WebAssembly 解决一些性能问题