论文资讯

您当前的位置:学术堂 > 论文资讯 >

前端工程师典型的一天是怎么样的?

来源:未知 作者:万老师
发布于:2021-10-21 共6164字

  说说我在 Facebook 最后一年的生活状况吧。

  我每一天最最固定不能改动的时间是三餐饭的时间,好像锚点一样固定在那里,其它所有事情都在三个锚点之间动态调节。早餐是 9:45,午餐是 12:00,晚餐是 6:00.

  我在 Outlook 日历上把这三餐饭的时间都 block 了,别人想约会议的话都会看到这三段时间是繁忙的,然后就会避免约这三段时间的回忆。真的有人想要约,我一般也会拒绝掉,叫别人改时间。

前端工程师2.png

  早上做好全天的规划

  我的起床闹钟是8:00 ,然后在床上刷刷手机到8:30起床。通常要过了9:00才出门,赶到公司吃早餐。公司早餐10:00结束, 10:15左右所有东西收走,但热[ ]的食物可能更早就被拿光了。我的目标是公司早督的鲜榨橙汁,所以要早点到,吃早餐。

  早上花半个小时吃完,顺便看看今天日历上都有什么会。很多人以被动的心态去开会,觉得把-群相关的人拉到一一个会议室自然能解决问题,但其实不是的。很多人都遇到过人际冲突带来的问题,很多程序员因为不会解决这些问题而觉得不爽,但这些问题是要解决的。

  吃早餐的时间,甚至加上早餐后的半个小时, 我需要想清楚我在今天每一个会议中有什么样的战术目的要达成,以及如何达成。这种事情就好像House of Cards -样,脑子里要想清楚, 这个人说A我就跟他说B ,他会用C来辩驳我就告诉他D ,最后他必须作出我想要他做出的选择。可能对于程序员来说,这些政治手段是非常不程序员的事情,但作为team lead是不可能不做的,总要有人为团队的非技术领域推进做保障。

  有些会议的信息必须吃完早餐回到座位才能仔细做研究,因为要看看之前的代码、文档、设计、聊天记录、会议记录等等。在充分掌握会议相关信息后,我才能尽力保证把会议芾往我想要抵达的战术目标。如果会议上有人敢跟我瞎说「之前的系统不是这样设计的」, 我可以把上述信息作为证据罗列出来。

  除了会议之外,我会规划一下当天的目标。我会看看我这周的目标然后确定哪些是今天做的。这需要考虑今天有多少会议,会议越多能排进来的事情越少。欺,我会优先安排IO类任务,然后再排CPU类任务。IO 类任务就好像CPU要通过IO读取硬盘访问网络-样,发出一个I0请求后CPU就可以闲下来了,然后要等很久I0才有结果。跟别人沟通往往属于I0类任务,我要叫A帮我做这件事情,我要找B确认这周末之前他能完成那件事情,我要催C审阅法律文…这些事情都如同IO -样找别人沟通之后我就可以闲下来。闲下来后我就可以做CPU类任务了,也就是那些需要我投入自己时间做的事情,例如写文档、写代码、分析数据等等。

  我每天早上会优先做当天目标涉及的IO类任务,把要找的人都先找-遍,能找到立即沟通的就沟通,找不到的就留言等他晚一些回来找我。接下来会开始做我的CPU类任务,或者是开始早上的会议。往往早上会议不多,因为10:00到12:00也没有多少时间。比较痛苦的是跟伦敦视频会议,因为他们下班时我们还没上班,所以至少要有一方作出牺牲 ,要么我们上班之前就跟他们开会,要么他们下班之后还要跟我们开会。有时候我就要早起,例如说8:00到9:00跟伦敦开会。

  快到12:00时,我就会看看座位周围有多少人在,叫大家-起去吃饭。 有段时间我开放我的午餐跟别人1:1 ,谁都可以约我一起吃午饭聊天,通常是中国人约我吃饭聊聊career的问题。( 正是这种1:1做多了,我才开始在外面提供Career Coaching服务的。)

  下午如果能写代码的话

  如果下午没有多少会,而且那段时间的目标是通过写代码完成项目,那就尽量组织大段的时间来写代码。有时候有几个会议在中间会很烦,因为写代码需要大段连续的时间才能集中精神来完成。在这里我参考的是Facebook -位时间效率超高的经理的做法,就是在日历上block大段的时间,把会议逼到一起去。

  这位经理最厉害的地方在于,他在顶峰时期能够直接管理30位工程师下属,平时也管理20位,对比一般经理只能管理10位直接下属,他的时间效率真的是非常高。他在公司内开一i ]课介绍他的做法,其中有一条就是在日历上block大段的时间。我尝试过两种block法,一开始是 block接近午餐的时间,只允许别人把会议排在早上靠前或下午靠后的时间,然后发现很多人不乐意。有一部分人早上来得特别完,让他们早上靠前时间开会不现实。另外一部分人下午走得特别早,例如去接小孩放学这类,他们不会接受下午靠后时间的会议。最终我把block的时间反过来,只接受早上靠后和下午靠前时间段的会议,剩下就有大段时间写代码了。

  能专心写代码的时候,我一天平均能发两三个diff吧。( 这在Google叫changelist ,对外用GitHub.上Pull Request的叫法。) 有时候一天规能写- 个,因为需要读很多文档研究清楚才能写;有时候-天能写五个,因为都是超简单的几个函数的修改。以前我是不会那么在乎写多少diff的,但自从Facebook绩效时不时会抓工程师diff count后,这就变成了-件需要应付的事情 ,也就是说同样的一段代码在合理的前提下我会进来拆成多个diff 来提交,好压榨diff count.

  Facebook以前不是这样子的,能做实事才是最重要的。如果写代码不是最重要的事情,我就不写代码做别的事情去。当然这要看当前团队的构成,如果团队里最缺的就是写代码的人,写代码是团队的瓶颈,那我当然应该去写代码。但如果团队有很优秀的人能写代码,瓶颈在别处而且其它工程师都不想做这些非技术的事情,那我就要 去做那些事情。然而Facebook现在在做绩效时,时不时就会查询大家的diff count ,看谁的diff count明显低于中位数,如果没有很好的辩护理由说清楚为什么这个人如此低的diff count也能做成重要的事情,那绩效就会受影响。

  所以我现在写代码,能写成多个diff就拆成多个diff来写。当然我要保证每个diff的独立完整性,每个diff都必须要有明显的目标,并且可以通过测试证明这个目标完成了。我知道有人拆diff拆得比我更疯狂,使得有些diff 会导致代码进入无效的中间状态。我个人是反对这种做法的。

  下午如果有很多会议的话

  如果下午会议比较多,那基本上开完会就E 3经累死了。可能会议跟会议之间有30分钟或者60分钟的间隙,但根本无法用来专心写代码。这种时间可以用来刷刷Facebook ,我的意思是Facebook内部用于工作沟通的那个Facebook , 现在叫做Workplace.跟公开的Facebook类似,Workplace有个newsfeed ,有很多很多的群组,然后大家在不同的群组里面发帖。

  刷Workplace是非常重要的,高效地刷Workplace尤其重要。因为当你的工作范围变得越来越广,你要设计的Workplace群组就越来越多, newsfeed的信噪比就会变得非常差,可能很多你不需要知道的信息会推送给你,可能很多你需要知道信息因为没有推送而错过。你必须高效地去找到所有你需要的信息,然后过滤掉你不需要的信息。为此,在不能专心写代码的时候就刷刷Workplace吧,看看公司内部都有什么新动向,有哪些新的契机。

  于开会,那真的是非常累的事情。如果开会不是被动地坐在那里讲,而是要无时无刻地关注讨论的动向,把讨论弓|导向我想要的战术目标,那我必须一直都全神贯注地倾听别人在说什么。这在我刚刚加入Facebook时是根本做不到的,因为就全程英语讨论本身就不可能实时地跟得上,当我的大脑跟上了,别人已经开始讨论下一件事情了。经过这么多年的训练,现在可以实时跟上别人英语说什么,也能厚着脸皮地问任何别人没说清楚的事情,但多脑力的消耗还是非常地严重,比写代码要辛苦多了。

  这也是为什么会议之间的时间碎片我不会拿来写代码,因为我必须休息-下。如果开了一整个下午的会议到5:00结束,我会跑到Facebook MPK 20/21楼顶的空中花园散步,等5:45开饭。

前端工程师.png

  下午如果有很多人来找我的话

  有时候下午没有会议,以为会有大段时间写代码,但其实有很多人来找我聊不同的事情。

  有时候是别人的项目想要来找我要参考意见,例如说有人做好了完整的系统设计然后想要看看这个系统设计是否合理。然后我们就要聊个30分钟到60分钟,过程有点像是一个系统设计的面试 ,我尝试从不同的角度提问题,了解这个系统和找这个系统哪里可能存在缺陷,然后对方解释他的意图和做法。有时候这类系统设计的讨论要持续多天,因为我给过反馈后别人会回去改,之后又再回来找我讨论,如此反复多次才能达到一个大家都满意的结果。

  有时候别人遇到一些人际冲突的问题,想要咨询一下。例如说有junior觉得某位senior叫他做的事情不合理,但因为别人是他mentor所以又不好意思直接拒绝。又或者说是有人觉得跟设计师合作不流畅,因为设计师总是没考虑到整个项目大局的目标是什么,只是专注于解决具体用户界面上的问题。这些都是我要花时间去做coaching的。

  曾经有一段时间还有很多 人来找我抱怨和吐槽的,因为那时候团队的士气很不好。天下午就有人跑来问我,「你今天去吃雪糕了吗?来吧,我们去拿雪糕,顺便走一走。然后大家就会跟我打听一下,上面的大老板到底怎么想的,我们这个项目继续做下去还有没有戏,或者说做好了到底有没有回报。有时候大家只是想要抱怨和吐槽,例如说觉得大老板不懂我们在做的事情,或者是大老板让他去做的事情在他看来不合理,然后我也照样跟他们聊了。反正作为team lead就是要安抚大家的情绪保证大家开心,有时候就是要做情绪垃圾桶。唯- -的问题就是有时候一天之内有不同人多次来找我去吃雪糕,然而我并不能吃那么多雪糕。

  这类聊天没有开会那么累,因为往往我不会有非常强烈的战术目标要达成,所以我不需要非常紧张地盯着话题的走向。很多时候我可以通过提问的方式让对方自己找到答案,不总是需要我来解决问题?

  下午如果要写文档的话

  这是我不是那么擅长不太喜欢但不得不做的事情。 .  .我说的不是技术相关的文档,例如系统设计文档。我说的是那些用于沟通的文档,例如说「我们上个月发布了什么, -个月观察数据得到了什么结论」, 或者是「我们下周即将发布什么,对大家会有什么影响」。这些文档都要斟酌很久,想清楚每一个字别人会如何理解,会不会铲"生误解,会不会导致别人过份解读。

  跟开会类似的是,每一份沟通文档都有它的战术甚至战略目标 ,也就是让某些人读完后做某些抉择。有些抉择是很快会发生的,但更多的是长远的战略性目标,就是要让人觉得这个团队是靠谱的,他们知道自己在做什么并且能持续地做好。如果这方面做得不好,上面的大老板就会变得不信任团队,然后可能把手伸进来直接管理某些事情,问题反而可能变得更糟糕。 …我写文档的效率要远低于写代码的效率。写代码,基本上是脑子里很清晰要写什么,然后就开始写。中间有可能有些地方要测试-下才能确定,除了问题需要调试,但反馈都很迅速。文档不一样,没有任何的反馈,于是就要-一个人在那里斟酌。有时候可以请相关的人来阅读和提供反馈,但因为这种东西很主观,不想代码那么客观机器能跑就是对的,所以还是很烦。

  下午如果要调试线上问题的话

  遇到要调试线上问题就非常崩溃,不仅仅因为线上问题难,而是因为我们组做的事情  .我们做的是内容审查平台,供Facebook成千万外包的内容审查人员使用。尽管内容审查可以用机器学习完成-部分,但也有非常多的内容是机器学习无法作出准确判断的,于是就需要由人去看。( 机器学习所需的训练数据从哪里来呢?还不是我们平台上的审查人员人手标记的。) 调试线上问题,就会看到线上需要进行审查的内容,这往往都是非常难看的东西。

  Facebook内容审查平台上的任务包罗万象,其中有些不那么难看(例如:垃圾广告、审查用户上传证件帮助恢复帐号),有些非常难看 (例如:反恐、暴力、自残、虐待动物)。大家打开Facebook很少看到这些内容,是因为大部分都被审查过滤掉了。但被举报进入审查平台的内容,大多数真的有问题,所以一-旦进行线上调试就不得不接触到。

  如果不是特定任务特定内容出问题,我会尽量挑选人畜无害的任务类型来调试。例如说,当一线审查人员说任务中的图片打不开时,我就会选择用Instagram.上被举报为垃圾广告的内容来调试,这是因为Instagram的内容大多数是图片(少数是视频) , 而且垃圾广告通常就是陈列商品的图片而已。我会先验证- -下图片是不是确实打不开,如果确实是代码问题导致打不开再想办法修复。有时候是一线审查人员所在的外包办公室网络有问题,这些我们无法在代码里面修复,必须跟外包协调修复网络。

  特定任务特定内容的调试是个高风险的操作。有一次我在调试部分视频无法生成关键帧缩略图的问题,为此我根据日志找了一个生成关键帧缩略图报错的视频来调试。我要在浏览器里看看这个视频是不是正常的,在打开之前先要填写个表单说明我为什么要访问这个视频。(为 了保护用户隐私,避免员工不恰当地越过隐私限制访问用户内容,在使用Facebook内部工具访问用户内容时通常会要填写具体的原因,例如说「我要调试视频关键帧缩略图生成失败」, 然后自动或手动审批后才能访问。) 等我成功打开这个视频后,看到了第一帧,都还没有点击开始播放,就发现已经太晚这个视频的第一帧,显示-具尸体扑到在地上,脖子的位置是一个切口, 然后头去哪里了呢?没看到,我也不想满屏蒂找头去哪里了,赶紧关掉。 估计这个视频内容属于一个反恐的审查任务 ,因为这类任务往往涉及ISIS砍头视频之类的内容,都非常难看。这就是调试具体线上内容的风险,时不时就看到自己非常不想看到的内容。There are things that cannot be unseen.

  然后我就跑回去看日志,继续找生成关键帧缩略图报错的视频。这次学聪明了,直接在日志数据里按任务类型做过滤,把难看的任务类型过滤掉,保证我不会再看到我不想看到的东西。最后调试和修复这个问题花了好几周的时间,因为这不是我们平台的问题,而是底层视频平台的问题,我花了很多时间来搞清楚到底视频平台是如何编码和存储视频的,为什么有些时候视频送给生成关键帧缩略图的工具后就会报错。

  晚饭之前去健身

  我每周有两天晚饭之前去公司健身房健身,因为是请了教练的所以不去就是在烧钱,这样比较有动力去。跟我一起去的人是我上一个组的同事,尽管那个组最终被大老板解散了,但我们还是喜欢一起玩,所以我们就一起去健身。

  大家-起去跟教练健身,就会有peer pressure要做足,不能偷懒,因为偷懒的话大家都看得到。

  这样效果比较好,因为很多时候障碍并不在体能上,而在意志上。不是自己做不到,而是不愿意做那么痛苦的事情。既然大家都在做,那自己当然不能偷懒。

  健身后我们会一起去吃饭,就算是回家吃饭的人也会跟我们一起去打饭,所以可以聊聊天。健身的日子跟其它日子很不一样,因为我们会被教练虐到连走路都不想走,然后就缓慢地从健身房走去饭堂。健身房离最近的两个饭堂距离相等,我们会掏手机打开公司内部app查看这两个饭堂今晚的菜单,然后决定去哪个饭堂吃。

  晚上收尾

  我会很准时地6:00去吃饭,然后7:00开车回家。为什么要等7:00 ,因为晚高峰基本结束,路上没那么堵。

  如果有什么事情是下午没做完的,晚上会收尾。大块的工作直接拆开来,把未完成的部分放到明天继续。写代码比较容易晚上接着写,没写完回家后写完,这是最容易的。因为在Facebook最后一年主要是跟伦敦很做,晚上是他们的凌晨,所以我不会找他们的。以前试过跟新加坡合作,那就很不样了,我们白天工作时找不到他们的,都是晚上才去找他们,告诉他们我们等着他们做什么,希望他们在接下来的这个工作日给我们答复。

  晚上没事情做就看电视、打游戏、看书、学西班牙语。学西班牙语是因为加州以前是西班牙殖民地,然后变成了墨西哥领土,之后独立为加利福尼亚共和国,最后才加入美联邦 ,所以说西班牙语的人口庞大,学习一下西班牙语有好处。

相关内容推荐
相关标签:
返回:论文资讯