远程工作者的一天

很多人喜欢远程工作, 也有很多人多反对远程工作, 远程工作意味着:

雇主

  • 只能以员工的产出来衡量员工的价值

雇主雇佣员工的目的是需要这个人的产出,但很多时候很奇怪,很多雇主却花心思去关注这个个员工是不是呆在办公室8个小时,是不是愿意加班.

  • 提供对异步工作模式友好的基础设施

相比于传统的办公模式,远程工作对公司办公室的硬件条件要求较低,不需要奢华的办公楼,但是需要一些必备的工具来进行高效的异步沟通. 比如 Slack, Zoom, GitHub, JIRA, Google Document 这些沟通,协作,文档工具工具,也需要 VPN 这样的网络工具, 同样 CICD 的工具链也是必不可少,但是这已经是任何技术公司的必备了。

  • 招聘合适的人

对于支持远程工作的企业来说,人才库就从一个城市变成了全世界了,因为你不需要候选人来办公室坐班,所以只要条件满足,全世界的人才原则上你都可以挖掘,当然和所有的招聘一样,风险是存在的,所以 “Hire Slow, Fire Fast” 原则仍然适用,不是每一个人都能适应一个没有同事在身边的工作,有的人是难以自我管理,有的人更喜欢同步工作,有的人不能忍受”孤独”等等。所以招聘一个合适的人变得更难。

员工

  • 只能用高效的产出来证明自己的价值

你不再有任何的借口让自己偷懒,因为你的节奏你都已经全权控制,你不能在怪环境,怪时间,你必须成熟的学会管理你的自己时间和精力,管理StateHolders 的期望。

  • 选择自己最高效的时间和环境来工作

你不需要再去忍受办公室有的同事那些肆无忌惮的噪声(打电话,机械键盘, 或者公共区域的聊天), 你也不用去忍受总有一些必须的会议被安排插入到你的代码时间里面,更不会有人突然就冲到你的工位对你的屏幕指手画脚.

你可以选择你喜欢的咖啡店,书店,公园,海边,甚至喜欢的城市或者国家. 你也可以选择低迷的时间去运动,然后在高效的时间工作.

  • 更便利的肩负照顾家庭的责任

你几乎不会在错过女儿的第一次上台表演,接到幼儿园儿子不舒服的电话,你也可以第一时间去带他去就医,和父母吃晚饭,聊聊家常。你终于除了给他们经济的帮助之外也给予他们陪伴。

  • 有成块的时间培养自己

省去了在京沪上下班的漫长拥挤的地铁,没有任意插入的会议,没有随意被打扰的办公室环境, 你有了成块(1小时以上)去发展自己,也许是开源项目,也许是系统的学习新知识,也许是艺术和音乐的爱好,利用这样的时间块,你会成为一个更好的自己,你会少了很多的抱怨,多和很多的努力。

我的典型一天

虽然以前所在公司都曾经不同程度的 WFH (Work from Home), 但是真正加入一个纯 remote 的团队还是第一次, 是一种全新的尝试和挑战, 我也在不断的学习和适应当中,不知不觉两周过去了, 算下来每天的 Coding 时间大约在 2h - 3h 之间,PR Review 和 Design Review 大约在 1h 以内,和同事的会议平均每天 25min 左右,有较为成块的时间来进行系统学习和实验,也终于有了较多的时间给自己的儿子和女儿。

附上我的一个粗略的时间表.

上午

  • 07:40 - 08:00 早上起床,完成洗簌.
  • 08:00 - 08:40 带女儿出去吃早餐,然后送女儿去幼儿园.
  • 08:40 - 09:00 去家门口咖啡店, 或者远一点的店找一个不错的位置,然后点一杯拿铁或者美式.
  • 09:00 - 09:30 查看和回复 Slack 和邮件, 然后看一下今天的任务优先级,开始进入工作状态.
  • 09:30 - 11:00 写代码 –> 写测试 –> Pull Request. 或者 Review Pull Request, Review Architecture Design.
  • 11:00 - 11:30 和同事的会议一般都尽可能的安排在这个时间.
  • 11:30 - 11:45 刷一下 GitHub Explore, HackerNews, 和 Reddit 的相关 Channels, 顺便 Twitter, 微博,v站划划水.

中午

  • 11:45 - 12:30 如果在家门口的咖啡店就会回家和儿子父母吃午饭, 远的话就直接在店里解决午饭的问题.
  • 12:30 - 13:20, 和儿子去球场运动或者在家里玩玩具,儿子作息和规律,玩一会他就会开始午睡.
  • 13:20 - 13:30 回到咖啡店,一杯冰拿铁.

下午

  • 13:30 - 14:00 写一道算法题, 偶尔会在 typing.io 上进行输入练习.这是工作日的 kata.
  • 14:00 - 15:30 密集的代码编写,测试,重构的时间,然后发 Pull Request, 更新相关的文档.
  • 15:30 - 16:20 去幼儿园接女儿,然后带她吃点东西,送回家,
  • 16:30 - 17:30 在家工作, 主要是 Review 同事的PR Review 和 对自己的PR 进行必要的重构,最后在 Slack 总结发出当日状态的明天的安排.
  • 17:30 - 18:40 送女儿去课外兴趣班,一般也会带着电脑和正在看的书. 偶尔也会进行 PR Review 或者看书.然后发现 iPad + 便携式的键盘非常适合在非工作场所写东西.

晚上

  • 19:00 - 22:00 回家吃晚饭,给小宝贝们洗澡,和媳妇带他们在小区或者旁边的商场散步,或者在家陪他们玩电子设备或者数学游戏,然后讲故事带他们睡觉.
  • 22:30 - 24:00 看 Slack 和邮件,回复紧急信息,然后写文字或者代码.
  • 24:00 上床睡觉,时常带着耳机看美剧或者武林外传,听着听着就睡着了.

Microsoft,Amazon,Google,EMC面试小记

过去的一个月面了 Microsoft, Amazon, Golang, EMC 几家公司,简单的记录了一下.

Microsoft (上海的 SDE, Dynamics 365 团队)

这个产品研发团队在上海开分部的时间不长,主要的工作语言是 C# 和 C++,面试的时候可以选择C, C++, C#, 很可惜,这几个语言都不是那么熟悉,所以面试的时候我都用 Golang,问题也不大,当然如果用 C/C++ 就更好了.

  • 一面 丹麦小哥,hiring manager, 简单的聊简历,聊做过的项目, 然后一道 Easy 级别的算法题 (Array) ,不是很难,但是需要自己设计好测试用例.
  • 二面 丹麦小哥,Senior engineer, 一道 Medium 级别的算法题目 (CSP),不过要写好测试,然后讲解测试过程。
  • 三面 丹麦小哥,Senior Engineer, 一道 System Design,和并发相关,分析复杂度,设计好测试用例和测试方法。
  • 终面 丹麦小哥,Group Manager, 一个15年的微软老兵,一道 Medium 级别的题吧 (LinkedList),他口音有点严重,沟通有点吃力。

Amazon (上海的 SDE 职位)

  • 一面,算法面试,两道 Medium 的题,45 分钟,一道 backtrace,一道 dp,都是 LeetCode 的原题,不过当时只刷了一百道题,没有见过,花了不少时间,勉强作出了一道,第二道有大致方向,但是没有时间了。
  • 二面,System Design 和 OO Design,很典型的面试题,不过自己没有掌握好技巧,面的不够好。

Google

  • HR 面, 会简单的过一下自己的简历,然后是基本的 screen, 算法复杂度,基本的数据结构和算法.
  • 一面, 听 HR 说是上海这边没有 Golang 的面试官,所以找了一个悉尼的一个资深大佬面的,一道 medium 的题目,字符串相关,做出来了,不过有些细节的代码问题,思考的速度也不够快。

EMC (Cloud Infrastructure)

这个 Team 很有意思,是纯远程的团队,虽然在西雅图,上海五角场的 EMC 园区也有工位,但是大家都是 Remote 在各个地方,偶尔聚聚。

  • 一面, 一道 Easy 级别的题 (Array), 一道 Medium 的题 (Heap) ,都比较常规,所以都快速的搞定了,然后聊简历,聊项目,然后聊团队和企业文化。感觉挺好的,最后留了一个 Project, 不是很难,几个小时可以搞定,不过有不少的小坑。(中间很尴尬的是,我送完女儿去幼儿园,然后找了一个麦当劳就开始面试,后来中间电脑没有电了,麦当劳还没有电源,赶紧和面试官说稍等,找了一个咖啡店继续面试)
  • 二面, 深入的聊做完的 Project, Golang的一些细节,系统的设计,特别是 Cache 的部分,然后是如何 scale 去支持高并发,然后拓展到加密算法等等。最后是一道 LRU 和 一道 LinkedList,都是 medium 吧,不过也是常规的题目,所以还好。
  • 三面, 主要是behavior,所以自由发挥好了。

总结

算法是外企面试的必须步骤,所以数据结构和算法都好好准备好是必须的。系统设计一般是 Senior 一些的职位会特别重视,所以也要做好准备吧,面试是双方选择的过程,所以过了是缘分和实力,不过也没有什么关系,我的理念是做好准备,结果随缘吧.

如何衡量一个团队是否值得加入

最近有人在 Hacker News“How do I find a meaningful software engineering job?”, 其中有一个人的回复我觉得有点意思, 而且和现在的看法有些些许的类似。

I’m a late-career software developer. 30+ years in the trenches doing this…
I’ve done “meaningful” work at companies that treated my like a consumable resource, and less meaningful work at companies that treated me like a person. I prefer the latter. My suggestion is don’t jump at the first interesting work, look more for culture and career opportunity. You can find both, those jobs are not quite as rare as unicorns.

最近和常常和 Jakehao 聊聊工作这个事,什么样子的工作才是好工作,我们不断的跳槽到底在挑什么. 我和 Jake 经过这几年的工作经历,都觉得自己并没有单单为了工资而跳槽,由于我们俩都有过不成功的换工作经历,在一个自己不喜欢的地方和氛围下工作,是一种极其折磨人的状态,一般很难呆太久。在找工作的时候,我们两不时会聊自己的面试情况,自己的心态和感受,经过简单的总结之后,我们得到了这样一个公式

1
WGI = WLB * PV * SL * TA

WGI ( Worth Going Index): 值得去指数
WLB (Work Life Balance): 工作生活平衡
PV ( Product Value ): 产品价值
SL ( Salary Level ): 工资水平
TA ( Team Atmosphere ): 团队氛围
WGI 越高,这个工作机会的价值越高,越值得我们去尝试;反之,WGI 越低则越表明这个工作机会的价值越低,越不值得我们尝试。

WGI 的这四个决定因素: 工作生活平衡 ( Work Life Balance, WLB), 产品价值( Product Value, PV ), 工资水平 ( Salary Level, SL), 和团队氛围 ( Team Atmosphere, TA ). 是来源我们两个数次的成功或者失败的换工作经历的总结而来的。

Work Life Balance

工作生活平衡,966 在很多中国的 IT 公司不知不觉已经常态,这有点让人泄气,对很多人来说,也包含着有些无奈。 我是旗帜鲜明的排斥任何形式的加班的,我不喜欢任何形式的 Push。每一个人都是成年人,成年人就应该知道怎么规划自己的时间,怎么安排自己的工作,怎么去做任务的优先级排序,尽量少的给别人造成障碍和拖累拖累团队。绝大多数的加班都是无意义的,作为 Leader/Boss 让你的团队成员加班,就是赤裸裸用战术的勤奋来掩盖战略的愚蠢,无可争辩。

Product Value

由于工作占据了我们生活的很大一部分,把自己那么大的时间和精力投入到一个没有太多意义的产品研发中,很难保持长久的激情。 如果参与到一个对自己,对这个社会有意义的产品开发中,每一次的代码的提交,都在让这个世界变得更好一点点,让人们的生活变得更好一点点,会让我们能保持一种充满激情的工作状态,而这种状态也让我们做事情事半功倍,每天的工作都是一种享受,也有助于我们有更多的时间去享受工作之外的生活。

Salary Level

工资水平,我们都是平凡人,都需要买面包和牛奶。我们不是神,所以不能靠各种画出来的大饼来填饱肚子。

Team Atmosphere

团队氛围,好的团队让每一个人都工作开心,相处融洽,相互帮助,分享知识,共同成长。好的团队并不是说要每一个人都要成为好朋友,我们都有自己的私人空间,尊重是一个好的团队的前提,尊重个人自由,尊重个人选择,尊重个人独立的想法。互助合作,每一个人都有新手时期,作为一个资深者应该给新人适当的给予帮助。团队中齐心协力才能让团队获得成功,但是团队成功并不意味着必须牺牲个人成功,相反,团队关心以及帮助团队成员获得个人的成功会更加有助于团队的成功。

有了这个公式之后,在我们找工作做选择有一个清晰的对比了,我把自己经历过的工作粗略的挨个计算了一下,结果如下:

1
2
3
4
5
6
Company	WLB	PV	SL	TA	WGI
Synopsys 1 0.7 0.7 0.7 0.343
Second Spectrum 0.8 0.6 0.8 0.8 0.3072
Splunk 1 0.6 0.9 0.9 0.486
设计家 0.5 0.7 0.8 0.8 0.224
Udacity 1 0.9 0.8 0.9 0.648

不妨你也是计算一下你的前任和现任雇主们吧.