文章封面是 YOGO 的 2019 年公司年会的荧屏照片。
自 2018 年中到 2020 年末,我在 YOGO 机器人公司工作了两年半,虽然时间不长,但记忆深刻。
本文谨记录我对参与机器人工作期间的回忆。
值得回忆的点有很多,主要总结为两点:这里的事 - 机器人 和 这里的人 - 曾经的战友们。
机器人是非常有趣的 。
做机器人开发本身很有趣,当自己编写的程序,最终让机器人跑起来的时候, 那种兴奋,就像小孩子自己做成了一个心仪的玩具一样。做机器人的研发工作, 就是在设计一个新的生灵、也在设计它们世界中的规则,多少有些创世者的自豪感。
做机器人调试的日常,是跟着机器人到处跑,捧着电脑跟它一起乘电梯、 跟它一起过闸机、看着它撞墙、 看着它转圈圈… 想起来,亦是充满回忆。
在刚来到 YOGO 的时候,我参与了 KAGO4 机器人和第一代智能配送站 STATION 的研发。 第一次和搞运动的、搞电子的、搞嵌软的、搞结构的、搞设计的同学们一起合作, 大家一起奋战了两个月,终于摸索着做完了项目。 印象比较深刻的回忆,是我们跑完了测试,然后点亮 STATION 机器的灯光,看上去非常漂亮。 STATION 的机械臂运转也非常炫酷,大家录制了许多视频,还加上了激动人心的配乐。
这一次的结果并不好,我们做的机器人问题百出。 但是我认为,这一代机器人是 YOGO 接下来许多思路和愿景的起源点。 可以说,这是一次不完美、但是有收获的尝试。
从这一次开始,我初步结识了许多日后的战友。 在一块做项目、调试、加班,貌似确实可以形成难忘的友谊。 同时,我也初步认识到,这里,是和以往的世界完全不同的, 一方面,这群人,充满了干劲、坚持、打不死的创业风格, 这些特点也是 YOGO 长期以来的性格; 另一方面,做机器人这个事情,没有想象中那么简单、但也充满了乐趣。
此后的一年里,我们做了一款机器人 KAGO5 ,我主要参与其中的多机系统的设计和研发, 其实就是多个机器人、以及和电梯、闸机等楼宇设备之间的协作机制。 这是个非常有趣的方向,我至今仍对其有许多兴趣。
在最初的系统设计环节,我经常和做电梯的嵌软同事们沟通技术方案,正是那段时光, 让我更深地理解了许多技术思维,非常感谢。最后的多机联调阶段,同样充满回忆, 我们经常出没在公司的电梯旁、闸机旁,三四个人抱着电脑,不断修改着 BUG、又重新把机器人跑起来测试。
不过,这一期的多机系统,大体上是按照我自己的、或者说我和大家讨论后得出的思路来进行的。 可以说,也是摸着石头过河。我还花了很多时间来做工具和框架: 做了一个云端服务开发框架, 在通信上做了一个 bitproto ,还做了一个对机器人行为逻辑进行描述的轮子 等等。 另外,在测试期间,我还做了许多交互式的调试工具,想起来,觉得蛮好。
然而,后面我们的老板(姑且叫他 Z 吧)告诉我,思路是错的。我花了一些时间来抗拒、也花了一些时间来遗憾、 最后花了一些时间来消化。他是一个技术很出色、经验很老道的机器人专家,当时跟我讲了他的思路, 也给写了一张图。当然,Z 所提出的问题点、 以及给出的设计建议,都是正确和出色的,这张图我也保留到现在, 回忆多机的时候拿出来看一看。
那个夏天,我中途从 YOGO 离职了,其原因并不是我把系统做歪了,也不是不喜欢机器人了, 就觉得自己太累了,身体累、心也累。辞职后的自己仍然对多机方向有着浓厚的兴趣, 我也把此方面的兴趣延伸到了复杂系统一类的方向。当时看了一本感兴趣的书,叫做 《复杂》 ,我总幻想着,虽然我们称呼多机是群体智能, 但目前的多机远远没有达到真正的智能,我觉得未来的群体智能是从简单的规则中涌现出来的复杂的现象。 Z 也推荐给我一本关于人工生命的科普书,叫做《数字创世纪》 。
当时在家待了两个月,也没有找工作,就是想放松心情、看看书。 两个月后,我的一位老业务搭档 H 喊我回去,说我们要做外卖了,就再一次来到 YOGO 。
我还是很喜欢做业务的,尤其是外卖配送这个事情。在饿了么的时候,我们一直致力于如何运用新的配送模式来降低配送成本, 而机器人送外卖,是可以在长期上,以一定的固定成本来优化外卖配送末端上楼难的问题带来的成本的。 在加上对老搭档和 YOGO 老战友的配合默契 ,我决定再来试一把。自己也想了想,我可能只有两条路,一条是进一个大一点的公司, 不要出来,做下去,提高能力,另一条是再次选择创业,再拼一次,我选择了后者。
重新入伙后的头两个月里,很幸运,找到了几位优秀的伙伴,我们组成了小队伍,做起了 YOGO 早期的外卖业务。 这几位同学非常有责任心、大家磨合的也很快,到现在也仍然有着不错的联系。 当时的外卖系统的逻辑非常简单,我们只是把流程跑通,用户可以注册选择机器人配送,骑手小哥把外卖交给我们, 机器人帮客户送上楼。我们也开了两三个楼宇,机器人送外卖跑了起来。
再往后,组织架构调整,我们整合形成了一个稍大一点的应用开发团队。接下来,就是一场刻骨铭心的开发战役。 我相信,团队的每一个同学,都不会忘记这段时光。对于我而言,正是这一段时光,成为了我最后离职之后迟迟不愿回忆的点。 那几乎是最忙的时候,最累的时候,压力很大,我们需要完成一次应用系统的整合重构,而工期一延再延,团队也非常疲惫。 到最后交付的节点,问题也层出不穷,仿佛整个公司都认为,这个团队是充满了辛勤的汗水、却没有种出来可口的果实。 当然,Z 不会满意这次结果,也从未认可这个团队。
记得,当时夜里,我们放着大声的音乐,写着代码,调试着机器人。新整合的团队,很快都熟悉起来。 在最后一版应用程序核心部分开发好后,我才放下心来。回忆起来,自己是对不起团队的,大可不必如此。
这一次还有一个部分是值得回忆的,就是应用的产品设计。合作的产品经理,姑且叫做 T 吧,T 这个同学是小孩子脾气, 但做事也有认真可爱的一面。Z 对大家的要求都很高,对 T 的要求可能更高一点 (因为产品做的好不好是非常关键的), 产品稿经常被 NG 很多次才得以问世,在他们的来回讨论中,我在旁边看、听、思考,确实让我见识了许多。 有的时候,YOGO 的人搞创作, 是有一种艺术家的气息的,Z 本身就是这样的人,他经常以通俗易懂的图的方式来描述想法, 出色的设计师 J 也是这样的同学,T 同学也有点这个路子的意思。可以说,精益求精、极度完美甚至有点变态。
事后,关于这次系统的架构设计和开发结果上,也留下了许多问题, 有一些是程序编写上的问题、有一些是系统设计上的问题, 有一些是我已经意识到的,有一些是 Z 或者我的老 LEADER (叫做 L 吧)告诉我的,不过,其中许多点,我一直没有去解决。 这些问题,后面也给我带来了许多思考,如果重头再来一次,也许我会做的更好。
在后面的几个月中, 我和团队又重新投入到了外卖的方向上。和业务团队一起,我们开始摸索业务模式。 主要有两个大的版本,我们称呼最开始的版本叫做 V1,后面两个新的业务模式叫做 V2 和 V3 。 业务模式探索,也是非常有趣的。在饿了么工作时,老 LEADER L 同学我们一起搞过配送业务的模式创新,非常有意思。 做机器人的业务也是一样的,在此期间,我仿佛找到了一些久违的激情点,也非常积极地参与到产品的设计中去。
可是,我始终有一些问题没有完全弄明白。V2 的模式非常有趣,但是做的很重,自开始我是心里有些小嘀咕,这样的路是对的吗? 不知道,当时不知道,后面我也不知道什么是错的、什么是对的。我曾经问 Z ,为什么我们这么做?不太重了吗?Z 也没有给我回答, 也许他也不知道答案。V2 运行了很长一段时间,许多新的功能也在这个模式下迭代,仿佛机器人送外卖就是这个样子了。 直到 V3 版本的诞生,老 LEADER L 过来操刀,我们做起了一个更为简单一些的业务模式。我才明白,其实 V3 对 V2 的纠正点在于, 我们的愿景是做一家无人化的机器人服务,那么 V2 显然太沉重了,我们几乎不可能在 V2 模式下达到无人。 看起来,路的方向是错的。
在 2020 年末,我鼓起勇气,反思重新回到 YOGO 的这一年时光,决定辞职,其原因也想的明明白白。
在 YOGO 的日子,技术上,学到了许多。我自己总结,有三个点:
Z 曾经提过一个 「SB 原则」,我这里姑且叫做「闭环思想」。这个闭环的意思,不同于互联网世界中常说的闭环。 在控制理论中,有两种控制方式,开环控制 和 闭环控制。闭环控制是考虑反馈的。 闭环控制在机器人世界里是非常常见的,因为误差不可避免、机器人的世界充满了不确定输入。此外,闭环的思想在 YOGO 还有其哲学意义, 它要求假设环境的不确定性、假设合作方的不确定性,需要自身系统做的更多、更强。双闭环系统是优秀的,每一方都假设对方可能出问题, 从而各自想的更多、做的更强壮。
系统设计的能力。 无论是老板 Z 还是老领导 L 同学,都在技术上给了我很多启迪。
在刚加入 YOGO 时,Z 老板曾经花几个小时跟我讲清楚一个通信上的技术点,它同时是一种思维方式,这成为我后面做机器人过程中的一个关键的思维方法, 也让我更容易的能理解做控制的人、做嵌入式的人在说什么。
Z 老板在系统设计的能力上是非常强悍的。我无法领悟到其所有。
L 有着简单直接的性格,所提倡的系统设计风格也是:做简单。
事实上,在 YOGO 做过的许多系统,我把它们做复杂了, 一方面,没有做足够的技术抽象,复杂的场景会提高系统的复杂度,会越来越加大维护的成本。 另一方面,系统实现碎片化,没有做好模块化和分层设计。
现在,我在思考一个系统、一个业务、甚至一个小的技术实现的时候, 都会看一下这些点:保持简单 (KISS)、分层、抽象。最近读过一本书 《通灵芯片》, 其中有一些话异曲同工:
计算机是以组成一个分层体系的部件构成的,每一个部件都重复多次,要懂得计算机,你只需要理解分层体系就行了。
计算机依据的是概念,对技术的依赖性没有那么大。
功能抽象使概念独立于技术。
关注点分离,也是我在这段时期学到的点。 比如,分离生产者和消费者,生产者只管生产、消费者只管消费 (单一职责)。
这一方面,我总结了四个关键词:简单、抽象、分离、闭环。
计算基础和算法的能力。
我曾经对饿了么的配送调度系统很感兴趣,但是摸索出来的系统,总是拼凑而来,有些「民科」。 机器人配送的世界中,自然也有调度系统,我被触动的是,在这些地方,算法是一种关键的能力。
在多机系统的研发中,我们最开始用的是,我自己摸索出来的一种描述行为的轮子。当然,我也意识到它有很大局限, 有时候用起来非常蹩脚。 也尝试发散思考过新的东西。然而,这也有些「民科」。
意思是,计算机的基础课程里、机器人的实践里、已经存在的算法里,许多场景都是早已覆盖的。如果只靠兴趣驱动, 去思考发明一个轮子、一套系统,就会陷入「思而不学」。
在这两年半的时间内,我有幸参与到系统的设计者中去,但也很遗憾很多地方没有做好,其中一个重要的点就是要多学习、 多看已经存在的东西。和我一起做多机的小伙子,把游戏领域的一套东西,”师夷长技” 拿过来,搞得也很好, 总比自己摸索非要发明个轮子要好得多。
我想,后面应该没有像机器人一样有趣的事情了吧,真的要和机器人说再见了。
但无论如何,不后悔,不纠结,不迷茫 。
做好当下,愿继续成长。
(完)