仔细想来,从上个月入职至今也过去了一个多月的时间,在这一个多月的时间里,我对这家公司产生了一些个人的看法~

前言

说到和字节跳动结缘那是从去年年中临近暑假的时候,当时我还在滴滴实习,当时已经实习大半年了,准备离职用暑假的时间去西部玩一圈,跟 mentor 说了这个事情后,却决定给我放两个月的假开学后继续回来实习。

得知这个消息时我有种预感秋招的转正基本上是稳了,起码不用太过于风风火火的去准备很多东西,可以继续专注于自己喜欢的事情。差不多也是这个时候,我收到了字节跳动的第三次面试邀请,心里开始纠结,是不是老天爷在帮我做选择让我去试一试,但当时在筹备西部旅行,这个事情也没特别在意,但种子是埋下了。

随后,顺利的搞定在滴滴的秋招转正,这就让我更加专注在当时做的事情上,免去了很多琐事。时间越往后推,我又一而再,再而三的收到字节跳动的面试邀请,这回是效率工程的一个同学加了微信直接聊,当时我也把自己正在纠结的一些点跟他聊了很多,并且也都约了面试时间,但在最后关头我又阻止了自己。

我当时无法放下在滴滴时自己这么好的状态,不忍心去改变,换句话说,在滴滴我每天都在思考自己今天要做什么,能做什么,再加上当时负责的产品我的话语权很大,我可以按照自己的思路去推动很多事情,同时也在一步步走进大前端这个领域,在这个新的领域里,有非常多的点是需要时间去一步步打磨的,再加上我给自己找到了一个非常不错的平衡点,并开始和小伙伴一起去健身。

这一切都在阻止我去放弃现有的状态,所以导致了几次约好的面试在最后都取消了。我跟几个同学说过这个事情,他们都说让我去面面看,不就面个试嘛~

但实际上我能够很明确的知道我可以面过,这也就是为什么我也经常说面试是个很玄学的东西,因为合适了就一定是合适的,只不过是时间的早晚,什么时候加入的事情。但在我接到其它公司的面试邀请时,比如天猫和快手面试,我一点感觉都没有。

氛围

一个多月的时间足够去体验一家公司的氛围如何。在字节跳动的这一个多月的时间里我所感受到的东西,可以说确实和我之前所实习过的公司都不一样。

在滴滴,我感受到的是做精品,换句话来说,我认为滴滴做的很多产品都是很「美」的,「美」这个东西你可以认为是「调性」,「调性」符合这个产品本身的定位,那就是「美」。

在这里我要在重点说一句:很多同学对内部产品有很大的误解,认为内部产品没有对外产品的技术含量高或者体验好。其实这是一个非常大的误解,我只能用一句话来说:初生牛犊不怕虎,非不怕实为不知。

在字节呢~我个人感觉应该做技术的同学都会非常喜欢,张一鸣本身就是技术出身,很多东西他都懂,下边的那群搞技术的忽悠不了他,换句话来说,他也知道下边的这群工程师都缺什么,应该建设一些什么配套设施能够最大化的帮助到大家,这一点我在滴滴是感受不到的,至少没有在字节这么强烈。

但如果我是个产品或设计,我会更加偏向于滴滴。

产品

从产品角度来看,不得不说字节的触角是真的多,正是因为触角太多了,给我的感觉很多时候会比较「晃」,有些问题解决不了或者没法做决策,那就交给时间去做决定,通过推到线上去做决策,最后再产出结果。

而在滴滴我的感受有可能是跟接触到的产品有关,每次发版前都会把我整「崩溃」了,要我说就是 QA 没好好测,各种上下游依赖没打好,或者依赖得各个组件接触到线上数据后,「气垫」没做好,哪个环节有问题直接拖到凌晨(对,我也有搞到凌晨一点多的时候……

有几次我都要有小情绪了。得等后端上线后我才能做线上回归测试,最后才发版,所以一旦后端上线出问题了,我这边就得一直等,有一次等到晚上 10 点我才上。

在字节这就很不一样了,不管做什么都会卡时间,每周三的某个时间点停止任何新代码合入,QA 开始自己打包做测试,剩下的时间直到周五的某个时间点,再加入的新代码都算 bug 修复,走另外一套逻辑。

这就保证了至少 QA 根据某个节点拉出来代码打的包测试通过后,后续再加入的代码跟这个测试通过的包没有任何关系,除非是修复 bug 后重新合入。

当然,产品不同所衍生出的配套开发流程也不一样,这部分内容只是自己所负责的产品不同所做的对比,不同的产品投入的资源也不一样。

上下游

我觉得在开发流程的上下游中,字节真的是给了我的一个非常惊艳的操作。首先表明,我并没有在滴滴做主端,所以主端所投入的资源跟除了主端之外的资源是不一样的,这就带来了不一样的开发流程。

但就从负责的产品出发,在滴滴的开发流程中所依赖的上下游,给我感觉就像从纯手动的「远古时代」进入了「石器时代」,而在字节是直接迈入了「奴隶时代」,在「石器时代」,你有一些还算能用的工具去完成一些任务,但在「奴隶时代」你拥有的可是一个完整的「人」,一个「人」能做的事情可不是的一个「石器」能够替换的。

从开发过程配套的各种工具和平台,真的让我感受到了「写代码」真爽,释放了一些外的精力去钻研一些「稀奇古怪」的 bug……

跟产品直接开杠需求这在两边都有,这也不是字节的特色,我觉得如果工程师连需求都不敢提出质疑,其实水平也有待加强。但就我目前所接触到的人和事来看,滴滴和字节都很欠缺自动化测试。当然也有可能是因为产品因素?还是不够大?我已经经历了 N 多个黑盒 QA 了。在滴滴时,后来的测试小哥那一波自动化测试惊到我了,虽然也都是基于 DOM 树做了一些溯源操作,但至少这个测试小哥子在一些 case 上做了一些自动化测试的工具来协助完成,毕竟给他的 title 是「自动化测试工程师」,但他最后也走了,因为实际上每天做的事情他也很厌烦,用他的话来说:“明明招我进来做的是「自动化测试」,但每天却让我「点点点」,根本不给时间去写自动化脚本……”。

不过也有可能自动化测试真的比较困难吧~但不管怎么说,就我个人而言,一个产品发展到后面,如果没有自动化测试只会越来越依赖原有的 QA 同学,因为只有这些同学才明白曾经的哪些路径下会出现问题,哪些路径下是需要依赖哪些环节的操作才会复现某个问题。如果没有一些自动化测试去保障,问题只会越来越多,甚至明明没有问题的地方,因为所依赖的状态被其它地方修改了,导致问题暴露了。

关于「测试」这块的内容会逐渐成为我接下来的学习方向,因为我觉得很多情况下只需要 Monkey 工具就可以测出一堆因为状态依赖混乱而导致的各种问题,有机会我们再聊。

开发

整个开发流程中,我个人觉得除了「每周一版」比较有问题以外其它都很正常。目前来看,我个人对「每周一版」这种做法比较排斥,虽然「每周一版」看上去「快速迭代,快速尝试」特别美好,但就我这一个多月的时间来看,暴露出了不少问题。

「快速迭代,快速尝试」的背后需要有大量的人员支持,是大量,不是多一两个这种情况,所以你会发现为什么字节跳动一年四季都在疯狂招人,因为人永远不够用,据我所致抖音的 iOS 都 107 个了(现在估计会更多),当然这其中肯定不是全都负责主业务需求,但你会发现都破一百号人了抖音还是在疯狂的招人。

是需求真的做不完么?真的有这么多需求么?其实不是的,而是因为一个需求很有可能往往会做两份甚至三份,要根据不同类别的呈现方式寻求出一个对各种指标数据保持良好趋势的最佳方案,其中 A 方案会对广告有增长,但是对用户留存有影响,B 方案会对留存有增加,但又拉低了收益。

所以工程里会充斥了大量的因为 A/B 测试而留下的各种代码,实验结束后因为新需求又来了,这部分 AB 的逻辑就会忘了删,长期下来就非常容易导致各种奇奇怪怪的 bug 发生,今天刚解决一个在 iPad 上和 iPhone 上点赞动画呈现方式不一致的问题,最后发现居然是之前下发测试策略时,iPad 版本的开关就一直没打开过,一直走的是老逻辑……

换个角度来看,会发现团队或小组内部最少总有一至两个同学每天都在修上一个版本、上上一个版本的各种稀奇古怪的 bug,而且这种 bug 因为逻辑杂糅,经常会搞得不知道是依赖的组件出的问题还是业务逻辑有问题,只能把这部分业务逻辑依赖的组件都拉到本地进行调试,发现不是这个组件的问题,换下一个组件继续调试,如此反复,时间很容易就过去。

恍惚过来后,发现有可能是我们业务逻辑自己的问题,一个或几个状态值没在初始化模型时传递过去,或所依赖组件里的其中一个判断出了问题,开始把涉及到的相关同学拉进群聊,开始复盘,提出解决思路,跟相关同学沟通出一个结果,好了,今天就这么过去了。

这一周查了几个问题把我搞懵了,同时也让我学习到了做一个暴露给业务方调用的组件,尤其还是 UI 组件一定一定要考虑好每一行代码写下去会引起的问题,特别是动画相关。

怪不得也有人说为什么程序员对 GUI 编程不感兴趣,因为 GUI 编程太难了。要我说,其实写业务的也挺难,要真正理解好一个业务领域里知识下的真正含义才能写出符合用户逻辑的代码,要不然点个赞,把「收藏」也取消了就不好了……

环境

字节跳动环境别说了,除了我现在待的盈都大厦外任何一个办公区我觉得都好,工位比我之前小了 30%,椅子坐久了相当不舒服,因为不透气,所以你懂得。

洗手间早上十点半之前都还能用,一旦过了这个时间就完了,想上个厕所根本下不去腿,味道太可怕了……但是其它办公区的洗手间环境都好好,太羡慕了。

我目前所在的办公区除了工位、茶水间、会议室和食堂外没有其它任何多余的空间,特别怀念之前在滴滴午饭后和小伙伴去打个台球的感觉,在这个环境里太「机器人」了,刚开始来特别不适应,特别憋屈,刚开始好几次我中午实在受不了跑去茶水间待了一会儿,空间小没关系,但是工位小就非常难受,虽然说大家都是上班时间不会做什么乱七八糟的事情,但是这种其它同事稍微瞄一眼就知道你在干什么的感觉真的太难受了。

工位(实际左右两边大一点)

而且我特别厌烦中午围在一起打游戏的这种习惯,也不是不给打对吧,其实要打去茶水间或者租个会议室打我觉得也 OK。不管中午是否午休或者工作,一群人围在一起发出一些奇怪的词语,有些同事真的累了也没法休息一下了。

之前在滴滴也有,但是后来大家也都不打了,据说是被投诉了,因为滴滴的工位和附加面积很大,经常会有人聚集在一个休息区里做各种事情,包括面试,但是打聚集王者荣耀或吃鸡这种事情我觉得不妥。

环境这个我是真吐不出什么好果,因为真的不够好,而且很压抑,呆久了再加上 bug 有点多,精神崩溃我觉得都是正常的。主要就是空间太小了,一旦空间小,只要一个人感冒,周边四五个人全都感冒了。再加上这么压抑的空间感,心情也好不到哪去~

中午经常跑去的茶水间阳台

成长

字节比较适合搞技术的同学,我只能说是适合,可能并不一定是最适合。我现在已经把字节内部的一个学习平台上关于 iOS 的课程都看完了,正在过另外一个学习平台上的内容,我个人觉得每天的收获都非常大。

因为字节内部不但产品非常多,而且每个产品的体量也非常大,遇到的问题大家都不一样,但又非常有共同性,内部的各种学习平台上所沉淀下的内容,就算每天都在看,满打满算看一个月都看不完。

可以说来到字节对我的工程素养又上了一步,主要是在 SDK 方面。刚好现在团队内部有很多东西都需要沉库,沉库本身不难,但是如何把原先逻辑解耦,沉淀到 SDK 里,把各种逻辑封装得「优秀」是非常重要的,这涉及到对原先的业务逻辑的深入理解以及对外部逻辑调用的时机和流程的把控(我已经快受不了公司内部有些库的实现了,查出来的问题有时候都得被活活气死。

食堂

关于食堂的讨论,当时我给自己的一个目标是这样的:

  • 去在商圈附近的公司;
  • 去有自己食堂的公司;
  • 去有自己食堂,且免费吃的公司。

可以说,这几次的实习下来,目标都实现了。但我现在又要给自己加上这条:去有自己食堂,且免费吃还要好吃的公司。我只是对食堂有个目标,实际上我对吃的没啥感觉,都是被小伙伴带去吃吃喝喝,如果你也能带我去吃吃喝喝就好了!日常开支我现在是 0。

早餐

正餐

总结

现在的互联网公司整体而言都差不太多,上下班时间也都差不多,做的事情本质上也差不多,但我觉得这其中差异的地方在于整个公司所营造的氛围有很大的差别,滴滴是有「人文」的,字节是有「极客」的,我觉得滴滴会更像硅谷的公司一些,字节就非常「粗暴」的打法,做有挑战的事。

这一个多月下来,我很累,确实累,自己想做的一些东西因为时间根本就不够而延后甚至放弃,但是有些想做的事情真的要做,而且特别喜欢去做,每天会搞到凌晨,没办法。但这种「重压环境」下自己对技术的思考也更进了一步。哪些东西一定要做,哪些东西可做可不做实际上都会有一个排序。

最近因为感觉自己慢慢失去了关注生活细节的习惯,在前段时间收到第一份工资后,买了人生中第一台相机,逼迫自己每周都要出片,并且挑出最好的那一张作为「微信朋友圈」背景,欢迎你来监督我~

如果你对字节跳动感兴趣欢迎给我丢简历:wengpeijun@bytedance.com

「深夜食堂」