字节跳动和 Go 语言

字节跳动

2022年1月5日,我正式入职字节跳动,高级测试工程师,负责一个字节非常底层的网络库的质量保障工作。这次找工作没有选择开发岗位的一个原因是,开发工程师对于整个工程的控制力是比较弱的,一般来说基本相当于一个纯「产出单元」,没有宏观调度的能力与意愿。我想要做更多宏观的工作、加强自己对于工程的把握感,就只有QA、项目经理、产品经理这几个岗位,后两个岗位对我吸引力很低,QA 则刚好和我的个人履历与兴趣相结合。

绝大部分大厂对于 QA 的运用,基本上还是作为测试部门,以调研各种测试流程和技术为主,为「产出单元」们提供后勤保障工作。换言之,说是 QA,其实就是测试+一些 bug 数据统计+打包发版。

当然,并不是说,QA 应该彻底脱离测试、成为一个飘浮在半空中的岗位。但如果 QA 部门自己都不能深刻的理解「何为质量」这个命题,如何能带领整个团队进入下一个质量高潮呢?

以手工回归测试来说,这项工作用来了解产品特性还凑合,但了解产品最好的方式不是使用产品,而是开发产品——买的永远没有卖的精明。但业内的 QA 或测试工程师对产品源码一般来说没什么兴趣,精力都放在测试流程和技术上。国内高强度的工作方式,的确会抑制工程师们的想象力。

在和开发工程师的一次午餐中,我向大家阐述了自己的职业目标,以及我对「质量」二字的理解:

我个人永恒的职业目标,就是把自己当下的岗位「干没」。「干没」,意味着永久性的、终极的解决了这个岗位面临的一切问题——如果我是一个开发,那么我的目标就是减少掉自己这个开发;如果我是测试,就要让团队不再需要测试;如果我是 QA,就要让开发过程不再需要 QA 的校准;如果我是团队 leader,就要让团队不需要我这个 leader 也同样能高效运转。

这是非常终极的目标,有可能永远不可能达到,但应该有这样的追求。作为工匠,不必担心自己未来会失业,如果一个职场人能达到以上高度,那么一定有更重要的岗位等着你。

我对质量的理解,则是——「质量」不应该成为一个岗位,而是一种思想、一种意识形态。因为质量诞生于开发部门,而 QA 永远只能「揭示」质量、而非产出质量。既然「质量」是开发工程师的产出,那么应该让开发工程师来负责质量,才是最正确的事情。就像打铁铸剑,一个产品在诞生之时,其品质已经确定,后期再修补也无济于事。

在传统的「开发-测试-发版」流程中,如果测试发现质量有问题,就应该将之返回给开发团队,由开发团队去内部处理一切有关「质量」的问题。试想一下,这个世界上存在与质量相关、却不应该由开发亲自处理的事情吗?

换言之,「质量」是一个开发问题,而不是测试或 QA 问题。

那么 QA 这个岗位,还有存在的意义吗?

QA 仅存的意义,我认为是一个类似战锤40K中的「牧师」角色。

这就是战锤40K中的牧师,勇武更超普通星际战士

在战锤40K的作战小队中,队长负责战术指挥,牧师负责思想和信仰工作。当士气低落、信仰垂危时,牧师要首当其冲的站出来,挽狂澜于既倒,扶大厦于将倾,即便为了一线胜利而牺牲自己,也在所不惜。

这个牧师不是躲在堡垒中对战士们指指点点的文官,他本身就是一个和兄弟们冲锋在前的顶尖士兵。只是相比于其他人,他的信仰更坚定更执着,也更有大局观、更优秀。

战锤40K 的牧师,实际上就类似项目组中的 QA 角色,这样的 QA 拥有如下特点:

  1. 战斗于一线,而非文官(本身就是开发,而不是开发团队之外的「指导者」)
  2. 更具宏观思维,能超脱于实际战斗以外(视野超出普通开发,更关注整个团队的产出质量)
  3. 来自于团队内部,而非外部(从开发中遴选一个开发人员成为QA,而非在团队外部设置QA岗位)

在这几个原则的规范下,我们很容易确定团队中谁来成为 QA,同时将团队外部的 QA 岗位直接取消。

目前微软已经取消了测试和 QA 岗位,全部测试工作都由开发工程师来做。这种意义上,字节还相当于普通星界军、而微软已经人均星际战士了。

Go语言

早在几年前,我就开始关注 Go 语言,只是耽于舒适区,一直没有向前一步。最近做了下调研,发现除了 Shopee 之外,字节也大量使用 Go 作为后端开发语言;另外作为区块链开发的重要技术栈,Go 语言未来也可能越来越重要。

所以从本周开始,我利用工作和业余的一些零散时间,开始逐渐学习 Go 语法,了解生态现状。

和我最熟悉(应该是唯一熟悉)的语言 Python 相比,Go 的生态要小很多,但是他们的特点都非常显著:Python 生态强大,几乎可以做一切事情,代码编写灵活;Go 的目标就是一个轻量版 C 语言,在「灵活快捷」和「高性能」之间尽量寻找平衡点。

中国互联网企业,实在是没什么技术含量,如果硬说,那就剩下一个「高并发」独步全球。在解决这种并发问题上,Go 有天然优势,goroutine 的内存占用非常小,同时通过 Channel 进行安全的数据处理,避免了 Python 那种一团乱麻式的异步和锁。所以新兴互联网企业喜欢用 Go 来构造后端,是非常理性的。

Python 是当之无愧的王者,但其中势必包含大量的非专业工程师 Python 开发者(例如科学家,量化交易员,等等)

区块链同样面临性能问题,传统比特币、以太坊性能都令人无法接受,所有新型公链一定会号称解决了性能问题。毕竟,以「代币」为核心机制的新型互联网,如果不能解决性能问题,则毫无未来。Go 语言在这个领域可能是最优选择。未来如果有机会进入这个行业,Go 肯定是必修课。

Go 位列13名,已经是非常好的成绩,仅次于 SQL/Swift/PHP/R。

以目前的发展趋势来看,Go 断然不会成为 Python 这样的全能语言,但其后端领域的影响力很可能会在未来几年达到甚至超过 Python。所以对于有 Python 基础的人来说,应该尽快学会 Go 并掌握开发技巧,不仅会带来收入上的提升,还能更好的了解到技术界的新趋势。

所以,这篇文章也算是一个节点,看看我下一次更新博客的时候,能用 Go 写出什么样的东西来了。

祝我的读者们新年快乐,虎虎生威(下面弄两个小老虎凑合凑合吧)!

虎虎生威,新年快乐!

Tagged : / / / / /