左手似乎还挽着初春,右手的太阳就这样升了又沉,日子就这样过的快了又慢。时间总在回忆处流连忘返,冬天一结束就是夏天,羽绒服还没收起就变得烈日炎炎。不知不觉间,就已经在 OneKey 呆到了第三个年头。

不知道为什么,最近的这段时间,每天晚上只要一闭眼,总是会回忆起以前学习和工作上的事情。我不是一个喜欢过去的人。有人说喜欢怀旧是因为现在过的不好,我对这句话倒不是很认可,一叶可以知秋,一叶可以障目,如鱼饮水,冷暖自知,很多事情还是得亲自问自己找到答案。

求学时光

作为独生子,从小到大父母对我的管教不算严也不算宽松,他们总在力所能及的范围里面给我最好的,很多事情愿意尊重我的意见。虽然小时候也有上不完的补习班,但总归是让我快乐成长到成年。

我是陕西人,所以在报考大学志愿的时候,大部分同学都会优先报考西安的高校,毕竟对省内考生无论从招考人数还是分数上都有优势。但是我没有,从小到大都在父母身边的我想独自出去闯一闯,又因为从小特别喜欢计算机,所以所有的志愿都是外省大学的计算机专业,最后如愿在南京开启了成年后的求学之路。

我不是一个学霸,大一的时候也很贪玩,对于老师的作业也是应付了事。对于真正的计算机 C 语言课程,也是浅尝辄止以应试为目的的学习。倒是 C 语言老师第一堂课上讲的一句话,我记到了今天,他说:「代码,是写给人看的,而不是机器」。

时至今日代码越写越多,越能理解这句话的深刻和本质。是啊,代码虽然是机器编译、执行,但总归是人来维护,是需要人和团队来看懂进行迭代。如果代码是写给机器看的,那么每一位工程师只需要学习汇编语言就可以,而不需要学习如今纷繁复杂的高级语言了,这也是高级语言诞生的根本原因,为了让「人」能更好的看懂代码。

大二开始有了更多的专业课,那个时候计算机组成原理,操作系统,计算机网络,数据结构与算法等等等等,所有专业课纷至沓来让人应接不暇。

真正改变我的,就是一次操作系统课的大作业。那时候正在学习操作系统里面的文件系统,老师给了我们一段代码,执行后他能实现很多的命令行指令。让我们编译成功之后,在这里面加一个功能,也就是今天 linux 系统里面的软连接指令 ln -s,当然对于硬连接也就是 ln 命令老师给我们的代码里面默认已经加好了。

今天来看这个题目不算复杂,但是当年作为一个只用 C 语言写过课后简单题目,写写 ifelse 的我来说,简直难如登天。甚至当时搞明白课堂里面学习的软连接和硬连接具体的含义和区别都花了我一些时间。也不知道为什么,当时从来没去过学校图书馆的我阴差阳错就带着电脑走进了图书馆,找了本操作系统的书开始研究这个问题,终于在规定时间前完成了这个题目,在图书馆跑通了代码流程。

当时老师竟然把解题的关键藏在了代码注释里面,其实只要解开注释掉的关键代码,再稍微写两行就能完成这个题目。这道题目其实压根不是看你会不会做,而是看你想不想去做。只要你想,去看这个题目老师给的代码,就一定能做好。

代码跑通之后,我就直接把笔记本电脑的屏幕扣上去找老师了。当时因为老师有别的班级的课程,查到老师讲课的教室之后,我就坐在教室的后面一直等着老师休息,像一个等待夸奖的小孩子一样,脸上一直傻傻的笑着看着老师讲课。

然而大概率发生小概率事件,当老师坐在我旁边我来演示的时候,我一边喋喋不休的说着我发现了代码注释里面的秘密,一边打开笔记本电脑的盖子来恢复刚才调通的程序。两双眼睛的注视下,代码竟然刚执行就报错了,明明来之前在图书馆调通了什么都没动的。那会儿对于调试没什么经验,我还不知道「重启试试」这种绝招,一下子就慌了神。老师倒是笑的前仰后合的,因为马上要继续上课,直到我走的时候也没弄好给老师看到。

后来我仔细研究了下,发现还是因为当时程序没有退出。导致只有开始执行的几次软连接指令能工作,电脑如果进入休眠或者程序等待比较长的时间,就会有内存相关问题。虽然代码演示没有成功,但是老师在很多老师面前和很多他教的班级里面夸了我,说我是第一个发现注释里面的秘密和主动想把这个研究明白的学生,这还是后来大一社团认识的别的学院的同学告诉我的。

从那一天起,我就开始每天空闲就去图书馆学习。课内学什么专业课,掌握了课本知识的同时,也会买很多课外的书籍来同步阅读,同时重新复习了一遍大一学的几门技术编程学科。C 语言我就买 C Primer Plus / C++ Primer Plus,数据结构与算法就买算法导论,总之每门课都有非常多的编程经典书籍都能够买来学习。去图书馆也是每天从开馆坐到闭馆,一个知识点,敲代码一遍写不明白就敲两遍,两遍敲不明白就敲四遍。后来更甚除了计算机专业课程以外,所有的非专业课我都不去了,专门研究这些知识点。每节专业课再也不和宿舍室友坐在一起,都独自坐在教室的第一排。老师们也非常照顾我,有任何课内问题也会优先给我解答。

整个大学生涯,除了大一暑假还回家了一趟以外。剩下的几年除了过年回去几天,其余假期时间我都申请了留校,独自一个人在宿舍面对着厚厚的技术书籍和电脑。实在无聊了就坐在空旷的校园里面看着野猫嬉戏玩耍,买零食喂野猫可能也就是那会儿最有趣的娱乐活动了。

那会儿也给学弟学妹写代码挣钱,其他学院或多或少也有这种大作业,甚至在我这里连最后的作业答辩都能去帮她们处理好,所以经常有学弟学妹口口相传,倒还真的挣了不少钱。与此同时,操作系统的老师把我推荐给了学院一位教授去做项目,和其他优秀的同学一起还拿了一个全国的数学建模奖项,只是我觉得这个实在是太水,体现不出来我的工程能力,后来毕业写简历的时候跳过了这段经历,也婉拒了这位操作系统课老师后来给我推荐的很多机会。

当专业课的知识学习达到一定程度的时候,我决定不在「学术界」继续卷了。因为校园里面很多无论是老师做的项目,还是帮助学弟学妹做大作业,在我看来都太简单。本来上大学前,我是想大四毕业出国读研的。从决定不在乎绩点只上专业课的那一刻起,我就决定了大四毕业要直接去「工业界」卷,想看看真正的工业界互联网的公司是怎么个玩儿法,能不能在这里实现我的人生理想。

实习生活

于是乎从大二下学期开始,自认为理论派知识非常丰富的我,就开始投简历找公司,因为那会儿专业课太多,也没打算放弃课内专业课的学习,所以只找南京本地的计算机岗位。后来还真被我找到了一个,只不过是家非常老派的南京本地软件公司,但是对于可以说是白纸一张的我来说再合适不过了,于是乎我就带着电脑兴高采烈的去入职了。

这家公司当时给我的薪资是 100 一天,来一天算一天的薪资,对于当时的我来说已经认为是一笔巨款。技术栈上面,版本控制用的是 SVN,后端用的 PHP,前端页面就是一些 PHP 模版。公司虽然非常传统,同事们年纪都很大大概 40 多岁,但是好在大家对我都比较包容,也愿意帮助我解决一些问题,日子过的倒也融洽。

第一次在服务器上跑 SVN 命令的时候非常害怕,毕竟从来没有和别人协作过,总害怕会干出来删库跑路的这种事儿。我就一直等当时比较熟悉的一位工程师不忙了,嘴巴放甜一点儿。我跑一条命令他帮我看一条,确保不会出现问题。

后来熟悉了所有的代码,交给我的也都是一些简单的实习生层面的杂活儿,有空了当时的领导就让我自己学习。我就发现内部有一个表单系统不好用,于是就在工作之余加班加点的重构了一下,那会儿总是想证明自己,有用不完的精力和热情去想把每一件事情做好。做完之后我给领导演示了一下,领导很开明,竟然愿意把系统换成我一个实习生写的这种界面和逻辑。虽然在今天看来,这套系统并不复杂,但是对于年轻的我来说,真的是很关键的一次项目经历。

在公司差不多实习 2 个月,自诩已经把公司所有的软件系统和架构都弄明白了,同时很多工作和需求也都接近尾声时,我就准备继续找下一家公司来实习和学习。当时领导听说我要走的消息,以为是薪资的问题,就把我的薪资从 100 涨到了 120,过了一周又涨到了 150,毕竟软件公司一眼就能看到头,所以后来还是实习期三个月离职了。

直到大四毕业前,我已经陆续找了四家公司来实习,有小公司也有大公司,有各种各样的技术栈和业务需求,钱也越挣越多,到最后也能支撑我在异地实习的房租和毕业旅行。毕业的时候,虽然我不是学院里面绩点最高的学生,但是我一定是工程能力最强的,两年半的全职实习加夜以继日的图书馆学习,铺垫了无数的 offer,想去哪儿就去哪儿。

大厂经历

在百度的那会儿绝对是我职业生涯当中的高光时刻,那会儿大家还都称 BAT,百度也还没有没落,百度是一个以基础技术著称的公司。当时入职的时候,我的直属汇报领导等级是 T8,第二年领导就升了 T9,导师是 T7,是一个高 T 多低 T 少的团队,非常适合职业发展。大厂的优势就是聪明人很多,大家都很优秀,周围清北的同事不在少数。有那种处处争第一从小卷到大的卷王,也有那种早早在北京实现车房自由的少帅。强中自有强中手,一山更比一山高。

做了一段时间的业务需求后,和导师和领导都建立了一定的信任,都认为我的基础能力和素质没问题,同时我也摸清楚了团队基本的情况和处理问题的方式。

在大公司,很多时候得学会自己额外找活儿干,这样才能在基本的业务之外,做到技术和社区影响力加反哺兄弟业务团队,才能在公司立足和晋升。也就是外界俗称的搞点儿「黑话」和「有的没的」。

于是乎我选了任务规划不太多的几个月,工作之余自己先验证了一套 demo,先确认了下大的方向都没问题。准备自己额外搞一个我们的百度云内部产品的 sass 产品,毕竟竞品已经有了同类型的产品,作为我们百度云,肯定也得有。

后来就和导师和领导都说了这个事情,毕竟在大公司很多资源都需要自己争取,领导这也拿捏不准,就说可以自己先尝试自己做一做,能做成功再投入资源。当然这也合理,所有的项目早期也都是这样的。于是当时真的就是自己一个人,吭哧吭哧的夜以继日的做,还是为了实现心中的目标和理想来证明自己。毕竟有早期 demo 阶段大部分的核心问题都已经处理完了,剩下的都是些边边角角好处理的部分,所以后续只花了几个月时间,就自己完全开发了一套系统,从前端到后端到数据库到网关运维部署都是自己搞定的。当然过程中有很多类似 BFE,和各类通用业务部分提供的的服务帮助,对于一些 DB 相关问题都有专门的 DBA 来提供 RDS 相关支持,所以我只需要专心开发业务,通用服务帮我节省了很多前期技术时间。

为了在前期渐进式验证项目结果,领导建议把这一套系统做了个 MVP 打包到云服务 To B 和 To G 的 POC 中,以及作为 sass 寻找代理商进行代理和沟通。当时我等同于既做产品,思考技术的极限和如何把技术应用到具体的产品中,又需要解决代理商的所有使用问题,又需要开发功能和做测试及上线。当时我们还是用了个 QQ 群和代理商沟通,相信那些代理商无论如何都想不到,这个顶着百度二级域名的产品,竟然后面只有群里这一个人在一直跟进对接和完成所有从客服到产品到研发后续的工作。

这也有一个问题,零碎的体力活太多,一个人的精力实在有限。没办法只能找隔壁组一个关系比较好的产品,借了一个他们组产品的 HC 实习生人力,不忙的时候协助我做一些活儿。比如这位实习生帮忙测试一下,帮忙熟悉一下系统进行一些群里的答疑工作。同时我在代理商里面也找了个有一定技术能力的,让他同步帮忙处理下各种用户层面或代理商层面的问题,后续在不违反公司红线的基础上,给他留意一些内部代金券和优惠活动的信息。

公测早期,很多功能需要做,很多东西需要调研,很多新功能需要补,很多 bug 需要修复。那会儿真的累并快乐着,毕竟你做的东西完全解决了用户实际的问题,有人会给你肯定。每天思考的倒也没有什么晋升的事儿,想的是如何超越外部的竞品,以及内部赛马的产品,到后来内部无论是百度云还是其他 BU,都有团队在做相同方向的产品。光我知道的就有三个,有个团队甚至已经超过了 20 人,做同样的 sass 服务。而这里那会儿没有做不了的需求,每天吃饭和做梦都想的是如何超越他们。

就这样跌跌撞撞的一直维护和迭代,做了大几个月之后,终于从业务功能完成度到代理商反馈这事儿都在向好的方向发展。虽然人少,但是迭代也快。毕竟是公测产品,一般有关键的需求早上说晚上就自测完上线了,所以功能也没落下,很多地方比其他人多的团队做的反而更好!对于代理商响应因为做的也很快,所以从功能层面到代理商层面都有一定的成绩,终于皇天不负苦心人,有些代理商已经决定付钱来代理了。

这时候,才真正的在我做的方向上,增加了一位产品和一位研发投入,算是这事儿真正跑了起来。

因为这个项目,我如愿获得了晋升和各种高绩效评价。后来也逐渐在这个系统周围做了非常多的工作。现在回想起来,那会儿从零到一做产品的工作真的非常有趣,就和创业一模一样,追求的是成就用户,比竞品做的好的那种成就感。

到后来一切都在往好的方向发展,我的活儿也逐渐恢复到正常水平,不需要再每天从睁眼干到闭眼连轴转。也和很多志同道合的同事一起做一些私活儿,开一些培训班做一些项目来挣钱。现在回想起来,都还发生了很多有趣的事情。虽然后来也因为职业发展的原因离开了百度,但是仍然非常怀念那里的同事和各种事情。

远程工作

工作了这些年以后,有了车房存款,没有什么经济压力。人生想进入下一个半退休的阶段,就想着找个工作躺平,于是乎就问了一些同事找一些网站投远程开发的简历。当时确实也拿了几个 offer,大部分都是美国的团队,有个不好的地方就是和中国有时差,很多会议比如每日站会说是需要中国这里半夜一点来。本来就是来躺平的,不能找个工作越躺越累吧!所以当时反而选择了薪资最低,降薪超过 50% 的国内的远程工作 —— 币信。

当时的计划是这样,先摸清楚团队的模式,在熟悉了一切之后,就能在处理需求和工作任务上游刃有余,就不会太累,同时因为远程,时间相对比较自由,这样也能工作比较舒服。领导说啥我干啥,领导指哪我打哪的躺平式工作模式。再加上那会儿还有很多兼职项目在做,如果真的能躺平,再根据剩余时间做做兼职也是美滋滋。

虽然是躺平工作,但也不是摆烂。工作强度决定了薪资,但是工作态度是由个人素质决定的。至少从第一次进入公司以来,无论工资多少,无论我是实习生还是核心开发,我还是从来不会在工作上给别人添麻烦。

刚来团队一周的时候,以前端开发工程师的角色加入,前端开发工程师我们就两个人。入职第一天刚来我就问了老板两个问题:我要干什么以及这事儿的 deadline 是啥时候。那会儿我自认为没啥解决不了的需求和问题,所以躺平的第一个关键点就是 deadline 是啥时候,所以当时每个需求只关心这个,做什么反而是其次。

刚来公司一个月的时候,那会儿已经对整个公司项目有了个概念了。是一个主要做硬件的产品,同时做了全平台的客户端来配合使用。这段时间也针对 JS-SDK 做了一个连接硬件进行固件升级的网页工具,方便客户使用。只不过我没怎么了解其他人在搞啥,也对其他同事做的东西没啥兴趣,每天就搞搞自己这块的活儿。每天有更多的时间陪伴家人以及遛弯儿,坐在海边发呆放空自己,日子过的也是舒服惬意。

来公司半年,基本上所有的方向和需要沟通的同事性格(组内的同事 + 产品方向的同事)以及迭代模式我都摸清楚了,所有的活儿我也是得心应手。虽然之前没接触过区块链行业的开发,但是做了这么久的研发,本身我这里抽象业务的能力也不差,很多东西稍微调研一下就明白咋搞,工作上过的相当舒服,也就准备酝酿一下,看什么时候正式开始躺平。

虽然那会儿只在公司半年,但是却发生了很多事情:

  • 当时作为币信下面的 OneKey 事业部,一直在招人,从前端到客户端到服务端到链上以及硬件,团队在急速膨胀。我刚来的时候团队还不到 20 人,很短的时间就进入了近 40 人的规模,人数翻了一倍。
  • 部门负责人大熊,还是个非常实在的人。工作这么多家公司,见过很多人很多事,很多时候尤其是负责人岗位,都有有一种草莽的江湖气,对于我这样性格来说不喜欢这类人。至少这位老板人还是非常对我性格的胃口的。
  • 早期因为很多需求处理的不错,我也属于那种不喜欢多废话直接全部处理好的性格,那会儿天天想着赶紧干完赶紧下班了。所以没两个月就让我面试前端这里的软件岗,让我作为前端部门的负责人,半年的时间招了一些人,前端那会儿应该有 5 - 6 个人的样子。
  • 大熊对我还是不错的,半年两次给我提出加薪,每次说完加薪就把币信的 ERP 截图给我,让我确信这事儿而不是画饼。其实当时我对这个薪资倒没什么感觉,在币信的工资都是发到币信钱包里面,我都一直没提过,直到最后不用币信钱包了才一次提走。只不过加薪有肯定比没有强,我也是欣然接受。大熊这一点就非常坦诚我很欣赏,工作之外作为朋友有时候也能聊点有的没的。第一次涨了 3k,第二次因为连续涨薪在币信的流程没成功。大熊后来还天天给我说让我别急,一定涨,当时还是觉得这个老板挺有意思,日常工作中我还是非常喜欢和那些有意思的同事共事的。
  • 有一次修复一个硬件同学造成的问题,需要我这里协助做一些用户提示引导及 SDK 的 patch。全部折腾完到了晚上 1 点。后来大熊还专门找我跟我说「抱歉把你卷进来,我们这儿强度没这么大哈~」类似这种话。我当时倒是觉得没啥,以前工作的时候,有时候为了解决服务端的一个问题,半夜 4 点都爬起来过,这个 1 点当时还真没认为是啥高强度。只是觉得这个老板有点儿意思有点儿可爱。
  • 虽然是远程,但还是去了币信当时的办公室呆了两周。就一直住着公司马路对面的酒店,这个酒店很不错,有可乐畅饮可以随便喝可乐。我不抽烟不喝酒,但压力比较大需要缓解一下就会喝可乐,虽然在酒店也没喝几瓶,但是这种感觉是非常不错的,立马爱屋及乌对这家公司好感倍增。

同样的,公司半年我也就能看出来一些问题,当然这些都是站在公司视角下的观点:

  • 公司大部分以产品研发为主,但是总感觉整个产品研发没有规划,大家做的非常散。因为那会儿我也不清楚其他研发都在搞啥,只是感觉每次都是大熊在群里歇斯底里的喊需求和催进度,其他人没什么响应状态,就像是大熊一个人在干着急。
  • 团队内部建设和基本的流程规范做的确实差一些,比如想要发布一个桌面客户端或者浏览器插件版本,或者登陆服务器做一些操作的时候,那么我作为前端负责人就能直接操作和发布。这个我认为是比较大的问题:一个公司在越是关键的部分越应该靠规则约束,而不是应该靠某个人。对于上线和发布这种严肃的事情,更应该增加防呆和二次确认的流程。比如 QA 和运维相关同事也应该参与进来,作为二次确认。这样不会因为「前端负责人」的疏忽而给公司造成毁灭打击。越是关键部分越应该增加冗余和相信规则。
  • 当时币信有个提名活动,就是表彰做的好的同事,会发一点奖金。有的时候表彰到别的研发同事时,会写一下他做了什么。经常我就会感觉,比如在老板这么在意产品研发进度的时候,表彰的同事竟然在做类似 pre-commit hook 和 lint 这种在我看来锦上添花的需求,隐隐的就会感觉团队研发没有重心。

当然毕竟对其他人也不了解,一方面觉得老板不错,另一方面任何大小公司任何团队都有各种各样的问题。我也就自己做好自己这一亩三分地的活儿,管好我这几个人的事儿,其他方面我也没问什么也没说什么。

又过了大概几个月,公司又发生了几件大事,有比较尖锐的矛盾和问题:

  • 当时硬件那里,因为同事的疏忽,导致直接从本地编译的固件发给了工厂。而这个固件里面有一个非常严重的 bug 会导致用户资产无法恢复。这个问题直接导致首先我周末加班出了一个类似检测页面的 dry run 工具,其次召回了所有卖出去的当批次的产品。这件事情对无论公司品牌还是团队士气打击很大。
  • APP 这里四个形态各异,有只支持硬件的桌面客户端,有支持软硬件的浏览器插件,还有进度无法同步的 iOS 和 Android。总之研发人员是不少,但是做的东西确实差强人意。从用户视角来看,你说这 4 个 APP 是四个公司做的都信,除了 logo 一样其他哪哪不一样。
  • 再加上有意从币信脱离,成为独立公司。面对每个月的成本需要自负盈亏,估计大熊心里也没底。

当然对于第一个问题,那确实除了赔偿真正出问题的用户损失和召回一批硬件之外没办法,只能从团队流程去解决。第二个问题当时我看到了之后,毕竟 JavaScript 作为跨平台第一大语言,我了解到的就有非常多的跨平台框架,所以毕竟作为前端软件的负责人。我就微微提了一句,可以尝试下 React Native,毕竟一来有 Facebook 在后面背书,二来这个用的人不少,相对比较成熟。

然而这个方案遭到了大部分人的反对,他们更倾向于换成 Flutter 写 Dart。当然我也能理解,毕竟作为别的技术栈的人来说,换成 JS 有学习的成本,心里会抵触。但是从业务和技术两个角度来说,换成 Flutter 都不是最优解。一来我们有前端同事,JS 一定是熟悉的,任何技术问题最起码有熟悉的人能来解决,我们就能快速处理业务问题而不是纠结在技术问题上,二来对于区块链业务来说,很多 SDK 也都有 JS 的,不需要 Dart 那样从零开始。

为了能说服他们,我决定先周末花点儿时间写个大的框架和多端编译的 demo,给他们看看效果以及一些技术栈的选型,同时大家分一分活儿,以及各自调研的方向。

当然这里对于一些技术栈选型,肯定需要照顾更多的初学者,以及从运行时的角度,编译时的角度出发,做了非常多的社区框架竞品调研和取舍。这里面的技术细节太多,总之最终花了点儿时间,做了个多端的结构出来,解决了非常多的大问题,剩下的都是些小问题,就给所有可能相关的研发同事看了下。

与此同时,我也稍微研究了下过去的聊天记录和 github 的一些代码提交,看看这些人平常究竟是在搞些什么玩意儿。看看以前这些人写的代码有没有看起来相对比较靠谱的,了解下这些人的状态。

就即使到了这种程度,还是有不少人对这事儿报以鄙夷的态度,说话的时候喜欢藏着掖着。因为毕竟对于 APP 里面原来的一些功能我也不是很了解和熟悉,比如 lite NFC 和蓝牙连接硬件。那么在这会儿要做哪些更应该提前准备好 TODO 和各自调研的方向,来让团队取得成功。有的人他知道就是不提前说,然后等你分的时候再说「那蓝牙咋办?那 NFC 咋办?」这种非常拆台的话。有的人就等着分活儿干活儿,也不想写 UI 的东西,就等着当时他们团队的负责人来发话,边界感很强,有的时候和这些人沟通可把我给气的。

与此同时,有非常多的人对这一套技术栈提出质疑:

  • 问:这个 xxx 框架能行吗?答:你赶紧看文档去吧,把嘴闭上不要问,咱们去实践就能行
  • 问:我在网上看 xxx 框架人家都说不行,现在不用这个了。答:还不是为了照顾你这种初学者,这个框架都是样板代码,对初学者比较友好,给你整个难的你看都看不懂
  • ……

诸如此类的问题天天都在各个私聊和群里面上演。我也不是那种很轴听不进去意见的人,关键就在于,我在了解了这些人以前做的事情和一些对研发内容的看法后,做 APP 的时候很多人就喜欢搞些有的没的,在协作上内耗,比如对于 UI 和链那一层很多时候划分的分歧,就特别像那种前后端交互的团队,大家在前后端做的事情上的一些内耗,一点儿不像一个稳扎稳打向前推进的研发团队,那会儿我心里就知道这些人大部分能力不咋样。我这里白天得写代码功能,晚上还得跟他们斗智斗勇,于是乎说话就越来越毒舌。

当时我也只是个前端小团队的负责人,很多人也不愿意听我的。但这事儿肯定得想办法解决,你们不搞那就不搞吧,就我们自己搞。发展到这会儿已经不是是否给公司重新做一个新框架的 APP 的问题了,而是我这儿不争馒头争口气的时候了,不管公司咋样,这活儿肯定搞定让你们看看,用结果让你们闭嘴。

现在回想起来,那时候是真的是内外交困,大熊作为 OneKey 事业部的负责人甚至都退了群,也许我们很快就不行了。脱离了币信的那一天,可能我们的工资也就没人发了。我倒对公司是否会不行没什么看法,大不了就是重新找份工作。这时候也有很多同事离职以及伴随着脱离币信的调整。而我只是想赶紧把这一套东西研发出来,让你们这几十个菜逼闭嘴。研发最讲结果,别说那没用的,最烦这种喜欢搞有的没的的同事。

现在想想当时又真的是意气风发,相信自己的绝对实力,相信这一套一定能在多端上面解决上面 APP 的问题,同时每天又和这么多人斗智斗勇,解决各自在 APP 研发上面的问题和分歧。不知道现在的自己,如果再回到当年那时候,是不是还能坚守自己的初心和执着,做着同样的事情。

这一段时间真的是最艰难的时候,内外交困人心惶惶。再过了一段时间,大熊重新加了回来,同时因为脱离币信,很多同事有调整和离职,团队人数骤减。这时候 APP 在客户端层面研发已经差不多了,有了一定的规模。因为有另外几位非常给力的同事,一同夜以继日,不考虑个人得失的写里面的代码,只用了三个月整个客户端在多端上就差不多了。说实话如果不是他们几个人,当时的 APP 一定不会这么顺利,到今天我都非常感谢他们,非常信任他们的能力。

后来的事情就逐渐向好的方向发展,大熊的融资比较顺利,APP 也在几个月后正式推出了内测版,不管怎么说,肯定从迭代速度和多端一致性上,比以前好了很多很多很多。

再后来大熊让我负责整个研发团队,也就是在前端的基础上,多加硬件和 QA。当然我个人对硬件了解不多,但是我大概也知道硬件团队的核心问题。还是出在基本的规范和流程上,得梳理清楚所有的规范和流程,约束好从发布到生产的过程。对于安全重视本身暴露的接口,收敛接口就能解决大部分问题。


弹指一挥间,就在 OneKey 做技术负责人 CTO 快 2 年了,这两年间处理和解决了相当多的问题。分析制定关键流程解决固件发布和迭代问题,工厂住了 1 个月在产线抓细节解决车间从生产工具到发布的流程,通过开人招人解决 APP 迭代的流程。这两年的时间里,从一个开局只有天天出问题的硬件和四个形态各异的 APP,到今天 app-monorepo 用 22 个月发布了 61 个版本,固件用 15 个月一共发布了 37 个版本,让全世界听到 OneKey 的声音。过程中的心酸困苦,过程中各种内外问题,不是寥寥数语就能说明白的。说实话我特别感谢过程中一直愿意相信我们的同事们,很多事情光靠我一个人肯定做不到。创业公司的核心竞争力是人,有人在就有希望,有人在 OneKey 就在。只有真正合适的人,才能在纷繁复杂的外部变化中,带领 OneKey 穿越牛熊。

我也很感谢大熊非常信任我,很多事情都交给我去做愿意听我的看法。我也知道对于他来说很多时候有投资人的压力,不能像我这样只需要专心处理事情就行,说实话就算他真的让我当这个 CEO 我也干不来,我还是更喜欢吃技术这碗饭,专心在发现问题解决问题处理问题,永远问心无愧,永远对结果负责,每天超越昨天的自己。

同时,很多时候大熊更愿意以朋友而不是上下级的方式来和我沟通交流,日常生活对我也是真心实意的不错。记得 22 年第一次来深圳住在一起的时候,经常给我做早饭,竟然还不需要我洗碗!每天晚上帮我把脏衣服和浴巾洗好烘干叠好,方便我第二天换洗。在我在工厂和远程的时候,说的最多的话是「你不用去工厂让他们做就行」「xxx 你让 xxx 弄就好」。到今天从结果上来说,今天的 APP 迭代又出现了各种问题,也没有责备过我一句,只是问我「有没有解决的办法?应该怎么做更好?」。

现在又到了 OneKey 最困难的时期,APP 积攒下来了很多问题,很多问题在我看来是第一次重构前就埋下的祸根,积攒了两年才爆发出来。我在一线很久,写了很多代码,看过很多功能,我更能知道问题的关键是什么。过程中我也有质疑,也会逃避,中间有一段时间每天只睡三个小时,每天需要靠吃药才能维持精力。我也很怕最后没有达到预期,过不了心里那道坎,但是我还没有逃避。

写在最后

如果说为了完成操作系统大作业而走进图书馆时,是命运齿轮的第一次转动,它让我真正意义上对编程产生了兴趣,找到了让我愿意为之奋斗一生的事业和方向,成为了一名真正的「学者」。

那么第一次实习加入的软件公司,绝对就是第二次。它让我完成了从一个只会纸上谈兵,只会写一些简单的编译命令行 C 语言的学者,到一名真正的能在团队当中协作的「工程师」的转变。

虽然呆过滴滴出行,百度,字节跳动这三家大厂,百度的薪资也不是最高的,但是不得不说百度那一段自己从零到一独自做产品的经历,绝对是命运的第三次转折。它让我真正完成了一个从产品说什么就做什么的工程师,变成了有想法就去主动实现,竭尽全力把一件件大小事做到极致做好,站在全局去规划和看结果的「独立开发者」。

那么在今天 2024 年的伊始,又需要再出发重新解决在 OneKey 的种种问题,直面自己的内心。我希望能从一个独立开发者真正成长为一个能带领团队成功的真正的「技术负责人」。

唯一的区别呢?曾经的我只相信自己的绝对实力,我不会彷徨。而这一次,就在今晚,当我再一次问自己是不是因为现在过的不好而喜欢回忆时,我会再一次坚定的告诉自己答案:肩负着更多人的期待,选择相信团队的力量,一定可以做到极致,我也不会彷徨。

我会把这最后一份目标的豪言壮语,写进自己的脑海!写在黎明前夜!