时光荏苒,今年过的很快,早计划动笔写一下我的2024总结,但是因为元旦前后因为筹备DR活动,拖到今日(1月14日)。写这篇日记主要是记录一下收获颇多的2024年,也希望自己在2025年能够在2024年的基础上,更进一步。本文主要从技能的学做一个概述。
作为一名牛马,首先说一下自己技术的成长,毕竟这个是自己吃饭的家伙。说一下今年的工作情况:上半年,神仙班的节奏;下半年,躺平了半年,后遗症就是我现在都不想起来了。虽说是"躺平",但是也没敢真正的躺平,作为一名"一天没学习就难受"的奋斗青年,用下半年狠狠的补了一下自己的技术空缺,也收获了很多,2024年可以算得上很充实的一年。
过了6月份后,我彻底的闲了下来,做的第一件事情便是对TCT项目PC和OSS两个项目的复盘,总结了一下两个项目目前的现状、一些公共方法中存在的问题、范式开发、和重点改造模块。对PC端(对客端)因为该项目一直都是我跟随并作为主力开发,因此自认为质量较高,首先风格较为统一,先不说是不是带有严重的个人色彩,而对于OSS项目,因为该项目我参与的很少,更多的是筛选一些较为复杂的业务打样,所以该项目中能看到各路大神写的代码,天马行空。对我个人而言,我是比较乐于看别人的代码,一是因为确实能发现一些好的实现方法,能够借鉴学习(虽说很少),二是遇到一些自己"看不懂"的代码,我可以身临其境,模拟分析作者当时在开发这段业务时的状态和思路,以及结合作者本人的性格、状态分析为什么会写出这样的代码,进而也能评估出每位作者对待工作,甚至是生活、人生的态度。既然说问题,重点列举一下发现的问题:
-
数据模型model的泛滥。造成的后果是用时一时爽,全局变量满天飞,和主业务剥离,成为数据孤岛
-
用在控制modal弹框的显示隐藏、数据传递
-
存储loading、Tab的active的id等
-
存储一切想存的全局变量
-
-
范式开发意识不足,对共性的问题没有规范化的意识
-
form表单元素的统一化,包括最大最小长度、文案提示、是否可清除、form item的联动、报错机制等
-
tab列表到详情,详情回退到列表的keep-alive
-
跳转路由参数约束,基本上都是管他跳转携带什么参数
-
下载按钮逻辑,有将按钮封装成组件的,有封装成为方法的,还有封装成为hooks的
-
错误边界,错误捕获意识仅仅停留在接口,并没有错误影响最小化的概念,但像表格、列表、Typography等因为数据类型等出的错几乎无人处理,万千数据中因为一个不重要的数据的类型不对,该页面就不能显示
-
-
代码模板化严重,CV大法好
-
TS编写能力较差
-
基本上停留在接口声明,并且最多用到Pick、Omit的那种,什么继承、多态、友元等通通都没有,更别说其他的高级用法
-
业务代码中很少用到TS,甚至还会可以any化
-
-
大局观不足,技术人员的特立独行,以为自己以为的就是最好的
-
对技术的不敬畏,技术的积累是一个日积月累的过程
-
拿AntD来说,很多人可能认为这仅仅是查个API的事情,但是很少有人能用好
-
现成的用的多了,动手能力就差了,把use-form-hooks封装成为antd类的组件,我发现这个事情很"难"
-
浮躁,面对AI编程。结论:掘金中的小年轻是真的强,现实中队友是真的"菜"
-
其实写了这么多,主要还是观今宜鉴古,通过分析过去的自己和别人的路,来规划自己未来的技术及职业发展方向。过去的两年,因为机缘巧合之下,转到了TCT业务组,也算暂时负责了该业务线的两个PC端的项目,体验了一把"老大哥"的身份,随着项目接近尾声,我也对该经历做一个汇总。首先,很庆幸自己TCT这段日子,这段日子成长颇多,技术上,因为来了新的领导,新领导整体上对技术的管理相对还是相对开放的,所以面对需求,我可以有了更多的时间去思考,比如:类似于搜索列表这种最常见的场景,公司现有解决方法是否是最佳的;Modal弹框最佳实现方案等等,当然自己也在这个过程中也了不少的垃圾代码。在新领导的倒逼之下,我的TS水平也有了长足的提升,在此之前,我对TS这门语言也仅仅停留在接口定义上去,现在可以尝试着去写更多复杂的场景,马马虎虎上算是较为熟练吧。管理上,对于小团队的管理也纳入了我的KPI考核指标,我也尝试着去做了一些管理工作,但是我还是主要是以老大哥的角度去提一些建议,帮助主要是XXX、LLL、YYY三位小伙伴一些帮助,一起成长,但是更多的是一些授人以渔的方式,教会他们如何去思考、如何在简单重复的事情里找到技术的提升,我也很有幸,默默的关注了这3位同事一年多的成长。
过了6月份,让我有时间静下心来想想自己没有做过的事情,有:独立发布一个npm包、研究monorepo、npm包的版本管理、文档库的编写发布、涉及CI/CO的github actions及jekens、github pages、思源笔记的阿里云存储桶、腾讯云自动化部署、项目中常见webpack的配置、babel配置、eslint配置等,基于刚刚列举的事情列表,近半年来,在参考了诸如antd、ahooks、塔斯汀仓库后,用pnpm结合dumi、fatherjs、changest技术栈搭建了一套@flyjs库,涉及组件、utils、hooks的开源仓库,发布至npm,同时在github上发布官网,并配置Action实现自动化发布部署。除此之外也学习了如何npm的私有化部署、如何为下npm包增加types、前端自动化、git的自动化钩子、如何使用node发布一个自己的脚手架等。
因为下半年团队要投标YT项目的缘故,对YT的14个项目进行了近1个月的调研,依此为契机,对Vue和Angular的有了初步的了解,学习Vue更多的因为想看看这个和React齐名的框架到底是一个什么样的玩法,但是学习Angular,则更多的是因为任务,而我对这两个框架的学习,花费的时间却恰恰相反,我对Vue重点了解了生命周期、语法糖、Vue2和Vue3的异同,主要还是因为这个框架相对简单,对于Angular则对该数据栈进行了全面的学习,包括Angularjs、响应式编程的模范Rxjs、深受Angular风格影响的Nestjs、并使用Rxjs改写了几个常见的业务场景如接口渐进式轮询等,对于Nestjs这专门在Github上开了一个库,来对常见的功能做后台支撑,很感谢有这么一个契机,逼着自己学习了一把Angular,在我认为Angular不仅仅是一个框架,甚至是一种思想,影响着后续技术的发展,诸如:Nestjs、Springboot等,重塑了我的认知,让我知道如何使用Rxjs来实现Redux的数据响应和流转,让我知道Spring Boot这种MVC真正的玩法,以及该方案为啥成为后台开发的最优解。
在学习Nestjs之前的4年前,有幸用Koa2写过公司的Mock服务平台,但是经过4年的弃之不理,我也将它淡忘于东风,零星记得Nodejs这么语言除了写脚手架外,还能作为业务后台。这次选择了Nestjs,则选择了更为基础的Express作为框架的大底层,加上TypeORM、SQLite、sqlite3搭建了一套后台服务。这个过程让我最惊讶的是框架本身的装饰器写法,宛如匕首,让我重新审视在前端业务中的那种冗余写法。另外一个认知就是不要给自己设限,不要将自己仅仅局限在前端开发的角色里,而没有勇气去探索。我对诸如诸如JWT、密码动态验证、http协议、文件切割等可以从后端的视角了解业务的真实玩法。同时为了弥补上半年业务评审中提到的"宽表"、"临时表"等字眼,选择了SQLite数据库作为学习目标,重新系统的学习数据库的一些知识和数据库语法,目前能达到对SQL语句的阅读,并且能编写基础的数据库的增删改查语句。
刚刚提到的SQLite数据库,作为我目前学习的主要数据库而原因是,一是方便我结合Python做本地数据分析,二是它本身就是标准的数据库,可无缝切换到其他数据库。我从去年年底开始,逐步接触并系统学习了Python语言,并且从头至尾阅读了一遍Python从入门到实践 (第三版)这本书,跟着书本从基础语法到做出雷霆战机的小游戏,初步窥探了python语言的全面貌,让我可以有机会和js、ts做一下横向对比,找到每种语言的优缺点,比如python的数据类型的名称我认为就比js要准确且合适,迭代器的写法就比js的更加简洁,获取字典的get方法就比js的更加安全且科学,import和js是反的,但是更加语义化等等,同时也有不少的缺点,比如debugger就没有js那么方便、python库太多且API自成一派造成学习困难、国内关于python的文章很少等。横向对比,也能更加方便自己理解,用js或者ts的思想去学习python的语法,比如ts中的元祖和python的元祖、ts中的枚举和python的集合、js中的箭头函数对应python中的lambda函数、js中的generator对应python的迭代器等、ts中的装饰器对应python的装饰器等等。整体上python语言在我认为是一个多种语言的集大成者,命名更准确优雅,语法更简洁的脚本语言,但是说到这个语言的用途,我最初主要是用来作数据分析,从pandas一路走来,窥探python的强大,到matplotlib的炼化升仙,让我想到目前业务报表中用js处理的憋足,如果这块引入python来写,则如神来一笔,虽说目前python在我的目前工作中没有太多的应用场景,但是它已经和gulp一起作为我平时工程化的一部分,我尝试着用python递归统一项目文件夹和文件的命名风格、尝试用python做数据库的同步、图片的下载、电影的爬取,也写了一个客户端程序提醒自己下班,对比了python的web框架flask和express的区别,工具尽在我手,万事俱备,只欠东风。
除了SQLite数据库外,我还稍微了解了一下Access数据库,这个由微软发布的一个功能强大但是备受冷落的本地数据库。我主要是考虑到Excel在做数据统计的局限性,而此时Access则可最大限度的发挥它作为数据库的优势,同时,对于面对很多传统企业,Access说不定是能够是最快实现办公自动化的工具和平台。我因此也在本年花了部分时间放在了对Access数据库的研究上。除此之外,对于工具的使用,我花了很大的时间去学习,如Excel的Power Query,阅读了《数据分析之荒岛求生》这本书,对比数据分析在Excel的实现和用Python的实现的区别和效率差别。其它的工具中对我最大的影响则属AI了,AI已经从去年年初的稀缺和难access变成现在的无处不在,目前也正式成为我平时编码和学习的一部分,经过我的大量对比,筛选出文心快码和Github Copilot作为辅助自己编码的核心工具。
要说json的解析谁最快,那当然是jq.,在我原来的认知里,能遍历解析json,无非就是循环喽,但是jq.的发现让我耳目一新,原来超大json数据的字段搜索、提取、加工可以不用遍历,可以不用各种if...else,但是好用是有代价的,光熟悉它的语法就花了我2-3天时间,才能完成一个示例。
其他的研究还有git命令、js的最新语法、react的最新语法、ts的最新语法,除了技术的学习,还学会了使用clipchamp去剪辑视频、配音和配置字幕,设计调查问卷和查询小程序、共享文档和成员权限控制、浏览器插件的原理等等。
经过2024年,我已工作10年有余,从一名初入职场的网页设计师逐步蜕变为一名接近全栈的资深程序员。从前后端未分离的时代一路走来,走了不少弯路,听了不少讽言讽语,不过整体上自己还是幸运的,关键的节点总会出现一些前辈或者朋友能够给自己指点迷津。最后说一下我对2025年技术的规划吧:脚踏实地、融会贯通、深度思考、横向发展。