• 周末复盘:Work Life Balance + 写博客

    今年冬天来的很晚,这周出门时才开始真正感受到英国的冬天。早上起床开始不想离开温暖的被窝儿,走在路上时常会被一阵寒风吹的瑟瑟发抖。这周回到了繁忙的工作生活模式,一上来还真有点不适应。好在只要再坚持三个星期就又可以放假了,还是很有盼头的🎄!

    Work life balance

    上班后一忙起来基本没有什么时间管家里的事。早上8点出门,一般晚上到家都快7点半了,吃完饭后没什么时间来陪伴家人。之前尝试过每天早回家30分钟,但发现晚饭前时间利用率不是很高,小布丁基本上都在看电视,一晃就过去了。

    改进:改进:尝试把一周的工作在周一到周四忙完,必要时可以加一下班。周五尽量在家工作,且不安排项目会议。争取周五上午把这周的工作收一下尾,中午可以和小丸子一起吃个饭,下午可以处理一些家里的事,接小布丁下钢琴课,然后一起去咖啡厅坐坐或者去公园的Playground玩一会儿。感觉这样把空余时间集中起来可以更好的陪伴家人。

    关于写博客

    这周又开始写博客了。这应该是近10年来的第6次开始写博客(数了一下,之前的五次是Tumblr,博客大巴,自己host的Wordpress,豆瓣,DayOne),可惜每次都因为各种原因没能坚持下来😓 。

    这次开始写东西的初衷还是缓解焦虑,记得当时快上班了,睡不着觉,不想练钢琴,又觉得玩游戏太浪费时间。最后通过写些东西来减少无意义的大脑空转,尝试将无序的思路转化成有条理的文字。没想到一转眼居然已经坚持了一周了!下一步先立一个小的Flag,争取可以坚持一个月。

    • 坚持,把写作当作一种生活习惯。
    • 不要太刻意的管理内容,写就比不写好。
    • 严格控制时间,每天分配最多三十分钟。
    • 除了写些生活随笔,还可以写一些学习、读书笔记,作为一个学习输出的闭环。

    由于这周花了额外的时间来写博客,没怎么练习钢琴。这点还是小布丁做的不错,上周我定的龙猫的钢琴琴谱到了,今天早上起来她就自己在练习了。

  • 第一次教女儿学编程做游戏

    第一次教女儿学编程做游戏

    我在这次长假中完成了一个长久以来的梦想,就是和女儿一起开发一个小游戏。我希望通过做游戏来帮助她开始学习编程并锻炼解决问题的能力。

    这是女儿第一次接触编程,我希望她可以体验到一个小项目的完整开发流程。这次我没有选择小朋友编程启蒙时常用的Scratch语言,因为我希望女儿可以一开始就接触比较专业的工具。我自己试了一下Unity和Unreal游戏引擎,最终决定用Unity作为开发工具(我感觉Unreal对小朋友相对更难上手一点)。

    第一天来做项目计划。我先和女儿来了一场头脑风暴,让她想象做一个什么样的游戏。可能是由于我和她在一起学钢琴,她说要做一个控制大象来弹钢琴的游戏(是的,这就是博客名字的由来)。之后我和她详细讨论了游戏的玩法,并写下了项目计划的初稿。女儿很认真的“审查”我的项目计划,并提出了一些建议。比如

    1. 游戏目标:快速移动大象来弹奏好听的旋律 “没有目标,只为好玩”
    2. 游戏策略:难度逐渐提高,弹错10次就结束 “保持相同的难度,No Game Over ,Just fun!!!”

    最后我把项目任务细分成子任务,女儿完成了游戏界面的初始设计。

    第二天开始3D建模,我没有给她介绍其他3D建模软件(比如Blender),而是让她直接在Unity下拿基本的3D图形来搭建场景。我先让她看我用立方体做了一个钢琴的模型,然后让她来拖拽材质上色。之后让她自己来按照我的方法给大象建模,她用了四个立方体建造了第一版的大象模型。

    下一步是采集声音,原本我想录制一下家里钢琴的声音,再导入Unity。后来懒了一下,直接从网上找了现成的采样。给女儿演示了如何导入声音文件并且绑定到钢琴的琴键上。

    第三天,终于开始编程了。我的目标是让女儿写一行代码来移动大象。我先给她建好了ElephantController脚本和负责移动大象的方法,并用注释描述了如何来移动大象。然后教她打出了第一个关键字,并在IDE的帮助下完成了她人生中的第一行代码。

    transform.Translate(Vector3.right)

    虽然她不知道什么是Vector3,但是可以根据关键字的大概意思理解这会让大象向右移动。当她按下Play键后,看到大象快速向右侧移动并飞出了屏幕后超级兴奋。之后她又反复玩了好几次,每次都嘎嘎的笑个不停。好不容易才让她平静下来,给她讲了要想更好的控制大象需要加入速度参数,并考虑屏幕刷新率,和判断方向键触发。她耐着性子听完后,按照我说的把剩下的变量加上了,完成了这一行代码。

    transform.Translate(Vector3.right * Time.deltaTime * speed * horizontalInput)

    不过很遗憾,后来她就开始不耐烦了。有可能是她理解不了之前那一大堆变量的作用。正好我让她休息一下,自己把使用大象鼻子控制按键播放声音的部分直接写了。

    第四天吃晚饭时,我让她来给妈妈演示一下我们的成果。女儿超级开心,尝试控制大象来弹奏她刚学会的曲子。之后我们开始迭代添加新功能。我问女儿如何可以让游戏变得更好玩,她的想法是当琴键按下时,大象或钢琴会把琴键的颜色喷涂到后面的墙上(可能是受了最近看我玩Splatoon3的启发)。

    我觉得这个设计很好,不过有点麻烦需要对物体材质编程。而且就算我实现了,女儿也没办法参与到其中。于是我引入了MVP的概念,给她讲解Trade Off的选择。为了“完成”我们的游戏,经常会牺牲掉一些功能。最后她同意了我们打算用射灯的灯光来模拟喷漆的效果。

    第五天迭代改进。我给女儿展示了如何添加调整灯光,并让她来编写把琴键颜色同步到灯光颜色的代码。这次我尝试让她来自己写,启发她想象如果电脑可以听懂她说话,她需要怎么样描述才可以把键盘的颜色传递给射灯。再反复的启发下,终于完成了下面这行代码。

    spotlight.color = keyColor;

    当她试玩时发现她的代码真的会让灯光的颜色产生变化,超级开心,又开始玩个不停。最后我又收了一下尾,多加了两个灯和一些随机移动、渐变的效果,最终完成了下面的MVP版本。

    这可能是我近年来做的最有成就感的一件事了。小时候我就梦想可以自己写游戏,但当时没有足够的知识和能力实现,所以这次也算是在女儿身上圆了一下梦。我想当女儿将来看到很多人是通过HelloWorld来编程入门时,再回想起自己的第一个项目应该会很骄傲吧。

  • Code Freeze 开始了

    终于到周五了,第一周上班顺利结束。最后花了大概四天的时间来熟悉假期落下的工作,与同事和客户开会跟进项目,制定下一步的工作计划。下周回复正常的工作模式。

    算了算今年还剩大概10天假,可以从12月中一直休息到年底。放假前还有三周的时间,主要又三个任务。

    • 组织团队计划明年上半年的工作
      • 今年公司推荐用OKR来计划,我还需要学习一下。
    • 写团队的年终总结
      • 这是比较烦的活儿。
    • 没做完的项目收一下尾

    这礼拜Code Freeze开始了。Code Freeze一般在感恩节和圣诞节前后。这期间有很多用户使用我们的产品。为了减少由于产品更新导致的Bug,一般大厂都会停止产品的更新部署。

    另一方面,这期间也有很多美国同事开始休假一直到年底,如果产品出了问题,还需要联系相关同事回来修,这样会影响大家的假期。所以下周不需要写什么代码,正好可以来学一下OKR,计划一下团队明年的目标和项目。

  • 牙齿仙子忘记来了🧚‍♀️

    牙齿仙子忘记来了🧚‍♀️

    晚上回家,老婆告诉我说女儿吃饭和她抱怨,昨天牙齿仙子忘来了。我才突然想起来,昨天她牙齿掉了,但忘记给她枕头下放金币了。

    在国内,小时后听说牙齿掉了要扔到房顶上,或者埋到地里。女儿第一颗牙松动时我才知道英国的习俗是将牙齿放在枕头下面,牙齿仙子晚上来取,然后给你换一个金币。刚开始我还以为是开玩笑,问了同事后发现这个习俗是真的,但不同国家的版本会有一点不一样。比如有的版本是小老鼠来取,还有的是牙齿矮人来取。

    当时花‘重金’给她买了一套10枚牙齿仙子金币套装(是的,我以为只需要第一颗牙齿掉了才给,但习俗是每颗牙都要给一个😓)。这应该是第四颗牙了,每次牙齿掉落当晚,我都会趁她睡着后给她换一个金币,第二天早上她总会超级兴奋的跑来告诉我和老婆牙齿仙子来过了。

    我看Wiki上说,一般小朋友会在5-7岁时知道牙齿仙子是虚构的。我很庆幸女儿现在还没发现。今晚我们告诉她有可能是牙齿仙子没又找到枕头下的牙齿,于是睡觉前她又在盒子上加了一个便条。真希望她可以晚一些发现,Keeping the magic alive!

  • 在岔路口上的Twitter

    早起看到Elon给Twitter员工昨晚发的一封名为”在岔路口上“的邮件。邮件中称为了让Twitter2.0取得成功,员工需要开始长时间高强度的工作。邮件下方还包含了“同意”的链接,如果在24小时内不点击同意,将会直接获得三个月的遣散费。

    这让我想起了华为的“奋斗者协议”,难怪他之前对中国特斯拉员工的效率很满意。一方面很庆幸我们公司的CEO没有像Elon一样,做事情会考虑Human Factor而不单是工程和效率。但另一方面也不得不佩服Elon做事的执行能力,在短时间内裁掉半数员工,每天住在公司,把剩下的几千人聚到一起,快速进入一个高强度开发模式。

    我想也许会有一小部分工作狂可能会认同Elon,真心追随他去做一番事业。但大多数工程师应该不会Enjoy在这种环境下长期工作。邮件中还提到了“Twitter作为一家软件服务公司,将更加以工程师为导向”,这就意味着设计与产品管理员工的待遇可能会被降低。

    也许在短期内公司可能会做出更多的新产品,但我不看好长期的用户体验和产品质量。当然我还是很期待Twitter2.0的,毕竟Elon是那个造出了Tesla把SpaceX送上天的人。

  • 第一天回公司上班就病了

    第一天回公司上班就病了

    昨天是长假后回公司上班的第一天,结果回家就挂了,头疼发烧了一晚上。好在睡了一大觉后,第二天基本好了,接着去上班😭。我实在想不出为什么会生病,之前休假身体一直很好,昨天也没受凉。我猜一定是我的身体或潜意识在抵触上班,通过生病来提示我一下。

    昨天也是上周裁员后第一次回公司,虽然我们大组没受很大影响,但工作区还是感觉有一点怪怪的,没什么精气神。和同事聊了聊,一半人压根儿就不怎么担心,觉着裁员的赔偿很合理,直接再去找家公司就是了😓。另一半人觉着天要塌了(尤其是拿工作签的同事),都没怎么睡好觉。听同事说英国今年推出了新的人才引进签证HPI(High Potential Individual),很多最近毕业拿工签的同事都打算去换签证,这样就不用担心被裁员后因短时间内找不到工作而被迫回国了。

    这两天我的目标是快速的follow up落下的工作,争取在三天内恢复原有的工作状态。下面是我优化的流程:

    • 先写个Post告诉大家我回来了
      • 包括一些假期的Highlights (省的每个人看见我都问我一遍)。
    • 和主要的Team成员开一轮儿会
      • 让大家Update一下这段时间的工作,感觉这样比我去看他们的post或代码效率高。
      • 问问有什么需要我这两天优先处理的。
    • 过一遍假期中所有的工作信息,邮件和Post
      • 这个最耗时间,尤其是由于公司最近的变动导致很多部门的项目重心都更新了。
      • 我不打算直接处理这些信息,只是根据项目分类,等处理具体事项时再来消化它们。而且根据经验有些事情拖着拖著就不需要做了😏。
    • 和主要项目合作伙伴定会
      • 跟进项目进度,看看有什么metrics还差的很远。
    • 将所有的待办事项列出清单

    争取周三可以把清单列出来,然后挑一些容易的事情开始做,逐渐恢复高效的工作Flow。

  • 龙猫音乐剧 (Totoro++)

    龙猫音乐剧 (Totoro++)

    周末去Barbican看了音乐剧版的龙猫(My Neighrour Totoro)。当熟悉的背景音乐响起,从看到小黑点们在家中与两姐妹捉迷藏时开怀大笑,到小黑点们默默离去时抑制不住眼中的泪水,再到妹妹遇到大龙猫,姐姐送给大龙猫雨伞等经典场景又控制不住的激动,整晚都在欣喜与感动中反复。

    龙猫音乐剧的舞台设计得很精致,场景道具完全沿用了动画的风格, 巧妙的还原了一个日本小村庄的场景。虽然主要演员使用纯正的英语讲台词,但他们表演时会加上日本人特有的动作和日语中拉长音的腔调,没有很明显的违和感。辅助演员在表演之余还融入了许多搞笑的场景,故意犯一些尴尬的小错误,营造出十分轻松的现场氛围。

    当然,最出彩的要数大龙猫了,模型制作的和动画片中的龙猫一模一样,而且还最大限度的还原了龙猫的眼神,声音及物理属性,比如跳着走路时身体一弹一弹的样子,一下就把我带入到了一个真实的龙猫世界。

    我还超级喜欢现场的人声和配乐。回家后我又重听了一遍动画原版的音乐和久石让之前与伦敦交响乐团合作的一个版本,但发现我还是更喜欢音乐剧的版本,感觉现场的器乐和人声加上舞台氛围让音乐多了一些感染力。

    对我来说这次的改编已经超越了原版动画,或者说这是一个大人的专属升级版。我看过几次龙猫,小时侯会觉得大龙猫超级可爱并担心妈妈的病情没有好转。但长大后重看时我却觉得这个故事有点简单,主角没有超能力,剧情也没大反派,只是一个比较单纯的童话。虽然音乐剧版的故事和原版一致,但是舞台氛围和演员的表演让我一下就沉浸到了一个更加真实的属于大人的龙猫世界,让我再一次相信这个世界真的龙猫。

    这部音乐剧不光是成年人的回忆杀,也很适合小朋友。之前给女儿放过龙猫的动画片,但是看到一半她就有点烦了。这次她很高兴的看完了全场,虽然表演中姐妹因为担心妈妈生病而吵架的情节让她有些小害怕,但是她还是非常喜欢这部剧。

    真心希望吉卜力工作室可以把更多的作品搬到舞台上。是的,“人人心中都有豆豆龙,童年就永远不会消失“!

  • 第一次经历裁员潮

    第一次经历裁员潮

    最进很多互联网大厂都裁员了,我们公司也不例外。感觉这次裁员来的很突然,从公司前景很好,到停止招聘,再到大裁员只有几个月,心里完全没准备好。周三等了一天的邮件,很庆幸这次不在裁员名单内。

    工作五年了,这是我第一经历裁员。现实真的很残酷,昨天还在正常上班的同事今天就联系不到了。而且这种大裁员也不只看工作业绩,很多有经验的同事,由于项目被砍掉了也直接被裁掉了。

    很多同事会写一些离职留言,大家会回忆在公司开心的过往,也很感谢自己的同事和朋友,没有任何人在抱怨离职的不公平。我感觉自己很幸运在这样一个充满正能量的团队工作。

    我一直觉着自己比较理性,不去浪费时间思考自己改变不了的结果。不过这次从裁员消息传出后,我还是几天没睡好觉。一直想如果被裁了,作为快40岁的程序员,下一步应该做什么呢?

    可以确定的是要重新开始计划经济,争取尽快还完房贷。手头留了一年的生活费,应该有充足的时间去计划下一步。

    不确定的是下一步去找一份什么样的工作。说实话习惯了大厂的工作和待遇,不是很想找一份平常待遇的工作。但另一方面这些年在大厂卷着,错过了很多陪伴家人的时间,又在想是不是应该找份更轻松的工作,多花一些时间来陪伴女儿成长。

    虽然这次很幸运,躲过了裁员潮,但也说不准名年经济会继续下滑,再来一波裁员潮。所以我因该现在开始做准备,没事刷刷题,多阅读,多输出。

  • 从Metaverse开始

    从Metaverse开始

    马上要回去上班了,到晚上总是睡不着,想着应该做点什么。今晚有三个选择,弹钢琴,记账,和玩Metaverse,最后选择了Metaverse。

    这是第二次玩Horizon Worlds。第一次很尴尬,进到大厅后,看到别人过来和我打招呼,我本能的直接Mute,然后直接传送小黑屋了。这让我意识到我的社恐级别比我想象的高。

    这次尝试了一下Build World,体验非常好,尤其是把3D模型放在手中,旋转拉伸时,有种小时候搭积木的感觉。比起去外面和陌生人尬聊,在一个空档的虚拟房间里,建造自己想象的空间和物品更休闲。

    之后随机去了几个Worlds,每个环境都很有特色,但是可以交互的物品实在是太少了。比如很喜欢的一个钢琴演奏厅世界,进去后我可以坐在Piano前面,但是手按下钢琴却没有声音,只能营造一个闲聊氛围。

    玩儿完Metaverser还是睡不着,想着写点什么也许会舒缓些压力,于是就开了这个博客。