写代码的中庸之道
这周真是跌宕起伏的一周。周一晚接到的百度面试官的邮件,告诉我评估通过,我也在期待中在周二等到了 HR 的 OC。可惜好景不长,仅仅 24 小时之后的周三下午她便再次打来电话说,因为我的学历(是双非)的关系,我的 offer 估计要被取消了。说实话我其实并没有太大的波动,因为上周我就已经接受自己评估失败的假设了,没有气馁过多,我便做出了考研的决定。当然最后还是在权衡下决定目前最优先全身心投入做毕设,争取今年做完、24 年开始准备春招,2 月开始春招考研两手抓,并随着时间推移逐渐扩大重心到考研上。emmm,算是我的总结与规划了吧。
这周我便开启了泡图书馆模式,推进我那基于 Next 的毕设。事实证明我选择 next 没有错,对于一个人开发而言,一套语言(TS)搞定前端后端数据库是很不错的开发体验,我甚至可以一个 interface 同时给前后端接口用。因为 Next 生态较新,且集中在国外,所以我也不得不对着英文文档学习。
这篇文章为何要起这样一个标题呢?结合我的经历导致目标的变化,我也学会及时转变我的代码方式,这个转变大部分受到了来自阿杰的影响。我之前写代码是有些“学术”的,比如写 TS,力求完美的类型标注、力求最新的生态和技术栈。这周开发的一个阻塞点也是因此而起的,我的操作数据库的框架是 Sequelize,它目前的稳定版本是 6,但这个版本的类型支持不是很好,而他的版本 7 在 Alpha 阶段,利用了 TS 的注解使得类型支持又好又简洁,所以我就直接上 7 了。
这是背景,而我想要实现的功能是通过邮件登录,需要实现这个功能,Next-Auth 需要接入数据库的支持,恰好它支持使用 Sequelize,对此还专门出了 adapter 来进行调用。但不幸的是,这个 adapter 只支持版本 6。这时就有多个选择:退回 6;或使用另一种框架例如 Prisma,但 Prisma 貌似不是纯 TS;或者弃用 next-auth 转而使用 clerk。我纠结了很久,因为每个方案都要对项目进行大动干戈,拖慢我的进度。但最后我想通了,这个问题的根源不就是要搞邮箱登录的功能吗?邮箱登录是我这个毕设的核心功能吗?不是。是必须功能吗?也不是,因为已经有密码注册和登录了。所以我最后决定,直接砍掉这个,直奔我的核心功能!所以中庸之道是:既要长远地、学术的写代码,也要不能死磕细节。对于不同需求要有不同的态度,分清轻重缓急,确保按时达成既定的目标。
在写这篇文章的时候,我又想到了另一种实现方式。之所以前面的难做,是因为我想使用next-auth提供的邮箱登陆能力,而这个能力对现有系统的侵入太大了,甚至出现了不兼容的情况。既然这样,我自己实现一个不就好了吗?不过不是用在登录,而是用在忘记密码的找回!当然,这也是在核心功能做完了之后再考虑的锦上添花的需求。