重新认识自己

我一直对 NodeJS 东西方向比较感兴趣,本年终于有机会在公司内,开始东西项目的研制,调研并设计了全体架构、独立担任开发作业。

去年年底时,我刚刚来到字节半年,其实心态还没有完全转换过来,之前在创业公司,触及了许多不同端的开发作业。所以我对自己的定位,还处于一个支持事务开发的状况,对技能渴望度足够,但关于技能道路有少许苍茫。只能看到一些比较聚焦度比较高的技能名词,例如 WASMWebGL,会对这些技能存在追捧,却并没有做到脚踏实地。

比较去年的我,本年我对一些概念又有了许多新的见解,究竟什么样才是出色的工程师?

当今国内工程师的问题

依照国内对工程师的区分,在各厂招聘列表中经常出现的是这几类,前端/后端/客户端工程师。

在我的作业中,经常会触摸各端 SDK 的开发的同学,触摸过程中,有时感觉到大家会存在一些 gap,也就是说 SDK 同学想去做一些事情,但是在他的视点他很明白底层逻辑,但关于其他端(前/后)同学,他们对底层原理其实并不了解。这就形成开发前,需求很长的时间去对齐功能的逻辑,协作同学也很难理解需求的意义与价值。

假如想摆脱这些困惑,那我认为你需求成为一名「全栈工程师」,其实说是全栈,不如是「软件工程师」,作为一名工程师,需求具有一些闭环全体开发流程的能力。

例如,以 SDK 开发的视点来说,关于 SDK 同学,实际上终究只担任到上报这个动作,至于之后数据的流向,以及数据清洗,并不在掌控的范畴之内。这尽管降低了 SDK 侧上手的门槛,但并不利于长期的保护。

假设你是一个软件工程师,关于以下流程,你都一目了然:

数据上报 -> 清洗 -> 存储 -> 消费

那你关于系统的全体认知就会提高,从优化上,能够给出更好的主张;在排查问题时,也能够更快速的定位问题。

何为工程师?

下面我具体谈一谈,怎么成为一个有微观视角的工程师。

首先,我现在的重视点主要在前端方向,假如你有仔细观察,你能够看到终究大部分比较厉害的前端,都是具有一些全栈能力的人。

关于服务端层面,我的主张是把 Golang 学好,这是一个还不错的方向。一个技能栈,假如有许多人重视聚焦,广泛地提出问题,那它的发展前景一定是不错的,起码不会垮掉,也就是说,开发生态是健康的。

关于前端层面,假如想去把前端学的很深化的话,那么前端东西以及工程化,必不可少。

在这一年内,我扩展一些自己本来不是很擅长的范畴:

  • 产品

    • 竞品调研
    • PRD 撰写
  • 服务端方向

    • MySQL
    • Rust
    • Golang
  • 前端方向

    • 单测/e2e:Jest、@testing-library/react、Cypress
    • 工程化:Rush.js、Pnpm、Webpack、TypeScript
    • 东西:Babel、CLI 相关的 npm 包东西
    • 插件:Chrome、VSCode
  • 设计

    • Figma 学习
  • 英语学习

除了开发角色,一个合格的工程师,还应该掌握技能计划设计的能力,这样能够将全体的开发流程闭环。也就是说一个人扮演,调研、计划设计、编码、测验的作业。从我的 Roadmap 中,你也能够看出来这一点。为什么要闭环呢,当一个需求,有越来越多的角色参加进来的时分,你会发现计划细节的对齐,变成了一个不简单的作业。

有时分咱们经常会讲一个词,融会贯通。当你把一整套研制系统都吃下来的时分,你会发现能够顺畅地解决掉项目的问题。

我的作业场景

在我的作业中,会触及到东西链的开发。首先在开始前,需求做一些竞品调研,计划设计的作业。

开发环节,对前端来说,依照现在的趋势,咱们更好的方法是以 Monorepo 的形式去做开发。这儿 Pnpm 就是一个很不错的选择,但接下来你会遇到一些问题,例如怎么去做这些包的发版编列?

由于在 Workspace 中会存在一些包之间的相互引用,在发版时,也要依照拓扑排序的方法进行发版,这时,咱们就能够用到 Rush.js 去做拓扑发版,以及主动生成 Changelog

东西链关于质量需求较强的把控,这时咱们就要引进 Jest 做单测,但一些场景下,单测是不够的,这时咱们需求引进 e2e 测验。

Monorepo 中,不像单仓中,可能只存在一个 tsconfig,这时会存在配置之间 extends 的联系,需求咱们对 tsconfig 的配置一目了然。

关于多种东西消费方法,例如 CLIChrome 插件等,实则需求共用一些方法与配置,这儿就需求抽象出共用的 utils 等。

在开发中,可能会重视一些新闻,比如 Vite 4 启用了 SWC 替代 Babel 做编译。那你是否有猎奇过,为什么 SWC 会更快,这时分假如学过 Rust,就知道 Rust 特有的语言特性。

总结

我想说的是,作为一个工程师,不要去把自己划分为「前端/后端/ PM」这些愈加细分的角色。你都能够去学习任何方面的常识。而且你学的全部常识,都是有意义的。尽管学习的道路很长,但只要坚持下去,你就会朝着优秀的工程师进发。