2021下半年在一边准备实习一边准备研究生毕业相关的内容,2022年6月正式毕业,也正式入职开始工作。虽然一开始就做了心理建设,工作不是一件轻松的事情,而在今年更是如此。

工作

“忙”可能是这一年的关键词,但同时这也可能是真正实践编程、软件开发最多的一年。

开发经历

四月份开始了一个封闭项目,自己在该项目中独立负责设计和开发一个较为复杂的模块。也是这次的开发经验,让对代码设计有了真正的实践的机会。

毕业后找工作的时候会去学习“设计原则”、“设计模式”,但实际上对这些概念也是囫囵吞枣,一知半解。

比如最简单的“单例”模式,在实际开发中并不推荐使用,甚至“禁止使用”。为什么?如果直接简单的告诉我,单例隐藏了类之间的隐藏关系,我可能并不理解它的坏处是什么。只有在真正的开发中,会发现单例导致的不少问题。比如滥用单例会经常出现初始化时机异常,稍微调整一下单例初始化顺序就可能出现异常,同时软件中可能有用户身份的切换,切换前后需要保证用户数据彻底从内存中清理,而单例在运行时不销毁想要做到这一点则需要更谨慎些。还有单例的使用对UT也是不够友好的,除非单例本身提供了mock。但总体而言,单例不是最佳选择,除非有充分的理由。

这次的项目开发给予了我充分信任,也提供了很多帮助,比如最开始方案评审,和 leader 讨论了好几轮设计细节,和业务方讨论了也好几轮需求场景以及未来可能的需求场景,这些输入帮助我不断的思考究竟什么样的设计是好的设计。在方案设计过程中会有好几种方案,可能都可以满足需求。当时决策的一个原则是:避免过度抽象过度设计,但同时模块内部需要划分好不同的职责,提高可阅读性。

刚接触设计模块/设计原则,很容易去套公式。未必不对,但是可能因为缺乏经验,最后设计出来的模块看起来很厉害,但是不好用。具体而言,可能是设计的层级多/复杂,业务方不知道怎么使用这个模块。这些纸上谈兵很难有真正的体会,只有真正的实践才是检验“模块设计”的标准,因为开发出来后,后序的与业务方对接以及模块的功能迭代大部分都是自己来承担,这个过程会不会发现之前设计的不错的地方,以及还可以优化改进的地方。

4月到7月份整整三个月几乎没有太多的休息。以为7月结束后,可以恢复到正常(去年)的工作节奏了,但很快发现,只要你愿意投入,工作的强度就一直存在。“出门在外,工作的强度是自己给的”,这话没错。8月\~12月又在负责另一个项目,但同时因为原先的项目在后续有更多的人员参与,所以又会参加不少相关的技术评审会议。

在这个过程中会与非常多的人交流,这是以往未有的。这个过程有三点的变化:更了解职场真实的面貌,同时也对时间规划有更高的要求,以及自己会有自己负责事情有更深、更全面的认识以及迭代方向。

职场真实面貌

刚工作的时候埋头做好自己手头的事情,基本上就很难遇到职场那些糟心的事情。工作和职场的区别就好像是编程和软件工程的区别。编程就是做当下的事情,而软件工程则多一个一个维度:时间。职场同样多了一个维度:人与人的关系。比如和QA安排提测时间,和QA沟通提测细节,和PM对接,和其他RD沟通技术方案,review 其他人的代码。

在跨团队合作中也是非常考验人的一项能力。毕竟跨团队合作,你们彼此之间没有什么上下级,但是却有事情的驱动方和被驱动方。对方客客气气配合合作是他的职业素养高,对方不配合,给你甩脸子,还真的拿人家没办法。当然找对方上级那大概是下下策了,真的上升问题后,下次对方还可能“和气”的一起工作吗?最开始的时候,我没想到别人还会不配合的可能,抱着大家都是很彼此配合的心理一往无前的冲,直到后面吃了几次闭门羹就越发的觉得职场没有那么纯粹和简单的事情。

除此之外,跨团队合作也会遇到甩锅的问题,每个人对问题导致的原因可能理解不一致,就容易产生纷争。亲身就经历过一次这样的事情:另一个团队同事开发的新需求部分代码修改和我当前负责的模块相关。线上出现一个崩溃的时候,这个崩溃栈是在他的代码中的,一开始找不到复现路径,我根据最近的一些需求变化找到了复现路径,原因是业务的一个新的接口组合调用暴露了这个问题,这个问题根源是这个同事代码没有考虑到这个场景(我之前也没有考虑这个场景),所以他写的代码里就没有针对这个场景进行空指针保护,从而导致的崩溃。在我的角度很显然,这个同事直接加一下空指针保护修复一下即可,他却认为是业务调用引入的问题,所以不归他负责。接着直接在群里拉我的leader和他的leader,大有一幅评评理的架势。

虽然这些事情是非常头疼的,但是新的一年的,希望不要因为这些经历导致倾向于在工作上逃避沟通。工作是更好的达成目标,完成事情,如果对方不配合,那是对方的事情,需要想其它的办法来达成目标。专注自己的工作有没有预期,有没有解决问题才是最重要的,工作不是用来交朋友的地方。

当然也在合作中遇到过不错的同事,非常感谢!但总之职场不是一件埋头苦干就行的工作。

工作的时间规划

时间规划也是一个有意思的话题。在工作之前,我对TODO任务规划就有一些研究,比如GTD(Get Things Done),也用过不少任务类软件。在工作中,那些任务规划的技巧对我而言都太繁琐,我更习惯使用一个文档来记录每天的任务和进度,这个过程中最重要的是优先级的排列。始终做优先级最高的事情非常重要,但这一点也非常持续的执行。因为人都是喜欢去做轻松的,成就回报高的事情,对于需要复杂思考的硬骨头总是不自觉的“能拖就拖”,克服这一点是至关重要的。

工作中还有另一件事情非常重要的是承诺的可靠性。期间有一段时间因为自己非常忙,总觉得理所当然的对承诺的事情延期。但这实际上是一种不太靠谱的行为,即使有合理的理由,也不应该多次出现。将心比心,如果自己和对方合作,我们也希望对方给定的预期交付时间是准确的,即使有预期外导致延期,也一定不要因为害怕对方责怪而拖着不去告知缘由,这非常重要。

代码设计思考

工作时间长了,负责的事情多了,同时可以做的自由度也就相对更高了,即所谓的“权责一致”。相比最开始别人怎么说就怎么做,到现在也会对自己负责的模块思考有没有改进的需要,比如部分代码重构等。这是一个很自然的过程,一开始对模块不熟悉,后面随着排查的问题越来越多,就会对模块的细节理解的越来越清晰,就会发现历史代码设计中的一些问题。这些问题可能是随着需求迭代而不断产生的。

经常会说“不要过度设计”,那什么是过度设计,这个度其实只有真正维护这个代码的人才能切实的感受到。

经常会说“高内聚低耦合”也是一样,如果一味的追求解耦,就会出现不必要的代码复杂度变高,有的时候两个模块的定位在当下和未来可见的时间内就是紧密绑定在一起的,那又何苦增加一个中间层解除耦合,增加很多不必要的接口建立两个模块的联系呢?所以这些代码设计原则是真正服从于所做的需求的。

关于代码设计的心得,后面有空也会单独整理一篇文章来和大家交流一下。

对过程总结

工作中还学习到的一点是:对事情/过程的总结。同一个事情,面对不同人需要总结内容是完全不同的。比如一个问题排查过程,对于用户可能不需要知道具体是什么bug,而是给一个修复的预期即可;对于leader 需要知道问题的影响范围,大致的问题原因(不需要太技术细节),以及修复版本;对于其他RD 则可能会想知道更深入的技术细节,导致问题发生的真正原因。每个维度,每个角色所需要的信息都不同,这也是一门技能。这项技能是贯穿整个工作过程中的,在周会、OKR、季度总结、绩效、对上级汇报等等都会使用到。知道读者期望阅读的内容是非常关键的。这一点需要真正实践体会过才能明白。

有的时候我阅读别人的技术方案,根本看不懂,一些缩写名词可能对方已经非常清楚,但作为不了解他工作的内容的人就是看不懂,又或者是流程图和所写的文字对不上,或者是中间漏写了一部分关键流程。

这样的问题可能也会发生在我自己的身上,可能是由于时间问题,没有经历完善好文档,又或者是因为自己始终站在自己的视角,所以是需要不断自省的。所以今年我也会在技术文档、内容总结会多投入时间去学习。

职场流动性

短短入职一年半,身边就变化了很多,去年一起校招的同事转base了,另一位之前交流挺多的同事也转base了。最开始入职的时候mentor也转base了。今年上半年的另一位mentor也离职了,我自己工区也换了一个。

身处其中可能对变化没有太大感觉,但事实上,职场就是不断变化的。在这个过程中,需要清醒的认识的到一点是,自己在工作中所有身份、代码、文章、荣誉都是转瞬即逝的。只有留存在自己大脑中的知识才是最终真实的。如果没有意识这一点,则会对很多没有太大价值事情过分的看重,而忽略了最重要的事情。

生活

生活经历

这一年的生活是简单的,几乎所有的周末我都没怎么出门,周六上午睡到中午,下午和周日的时间过得很快。

4月底的时候开始胸闷,一直到现在也没有完全好,从一开始看呼吸科查CT,后来怀疑和慢性咽炎有关系看耳鼻喉科,再到看消化内科以及心血管科,从上到下几乎都检查了。现在根据症状,消化内科医生判断是慢性胃炎和胃食道反流,但是还没有做胃镜,所以一直吃着抑制胃酸的药。

6月底住的房子到期,终于从5人合租的房子换成三人合租的房子,没想到是一个坑跳进另一个坑,每天早上的关门声都会吵醒我,而且是早上6:50到7点半左右。中间还有长达3~4个月的楼上装修,长达好几周,每天早上8点就开始电钻声!!幸运的是这次3月底到期,这次肯定是不会续租的了。

生活的目标是更多的相对自由

除夕的前一天我请假了一天,准备理发完后收拾行李回家。上午去理发排了很长的队,一直到下午两点多才完成。于是准备找点吃的打发一下午餐。于是找了一个麦当劳的店点了一个鸡腿、一块鸡排、一杯可乐在店里靠窗的地方坐下来了。因为临近除夕,又是下午,店里除了我几乎没有客人,店外偶尔有人路过。

头发刚刚剪完,凭着自己想吃什么就吃什么点的麦当劳,而且迎接到来的春节假期,那一刻可以彻底的忘掉所有的压力,任由食物的美味填饱肚子,漫无目的的放空看向窗外,那一刻感觉特别的自由。

经常我会在心情不好的时候,问自己活着的目的到底是什么。体验更多不一样的经历?我是一个很懒的人,也不喜欢热闹,那些新奇的经历对我而言没有太多的吸引力,出门旅游每次都是劳财伤民,不是我的目标。过更好的生活?要知道更好是无法定义的,有的大house,会想要好家具,会想要更好更多的身外之物,这些都是我不愿意陷入的泥潭。但那一刻我也许明白了,生活的目标就是有越来越的自由。

小的时候,吃烤串、披萨是非常奢侈的事情,当时我应该是小学的时候,爸妈就在北京务工,暑假的时候我会过来,傍晚路边烤串就已经是3块一串了,披萨则是根本没吃过。直到我大学期间,我有一些收入的时候,我点了一次烤串外卖足足点了90多块钱,家里我、妈、爸三人加在一起也吃不完,为什么要点这么多,其实就是不想像过去那样,总是担心太贵了,而违心的说,我不想吃,我吃不下了。后来路过必胜客的时候,第一次进店里买了披萨带回去吃,印象中是60多块钱,现在想来还是挺贵的(外卖一人食也才20多)。

有些自由是随着年龄变化而获得亦或者失去的,比如读书时候,就是会被校园、宿舍这些东西所困,没有独立的经济,不能自由选择自己的生活。每个年纪在我看来都有不同的约束,但目前而言,可能是我觉得相对自由最大的时刻了。

看上去,自由和话语权/地位有些相似,在我看来是完全不同的。自由是解除对自身的禁锢,它基本上不会损害别人的利益,而话语权、地位则是凌驾他人之上,以贬低别人获取更多自己的空间,是非常恶劣的做法。

自由总是相对的,决定没有绝对自由。所谓绝对自由,大抵是什么都可以不做,想干嘛就干嘛。总是需要用一些事情作为代价来换取我们真正需要的那部分自由,这代价本身可能就是某些自由。如果以绝对自由作为人生目标,那只恐怕要失望到底了。

接受失去与珍惜当下

接受失去才意味着面对了现实,只有这样才意味着你跨过了这道坎,但是才能知道接下来怎么走。就比如说一个人生病了,如果没有认识到这个事情,或者不相信不接受自己生病了,那怎么去治疗,和康复呢?

这句话也许出现在很多鸡汤中,但接受失去并不是一件容易的事情。如同标题上写的一样,“生活是一场脱敏试验”,你可能一开始不接受,但是随着时间一次又一次地通过各种方式告诉你就是失去了这个东西。比如生病了失去了健康,身体不舒服是切身感受到的

一次又一次的身体不舒服,让你不得不重视这件事情,意识到自己病了。接下来就必须需要花费时间去重视,只治疗这个问题。生活会一次次的把自己摁在地上摩擦,直到接受现实为止。之前看过这样一句话,时间它是治愈一切的良药。最开始我是不相信的,一年、两年、三年又怎样呢,就可以彻底忘记吗。但是几年后,过去认为非常重要的事情,现在已经变得模糊不清了。

失去固然可惜,但是当下仍然是有着充足的理由值得我们珍惜的。如果没有搞清楚这个理由,那珍惜当下就是一个口号,并不不走心。

在病情较轻的时间点,我天天抱怨,为什么就突然身体不舒服了啊,这真是太倒霉了!我们知道,在任意时刻,当下的状态是有不同的可能性的,可能是身体好的那个分支,也可能是身体差或者身体更差的故事分支。而在那个时刻,我总是和“更好可能性”的分支去比较,就只能心生抱怨、不满与痛苦的。后面的时候,我的病情严重了些,晚上需要频率比较高的深呼吸才能缓解,甚至还影响睡觉。那个时刻,我非常怀念正常呼吸的日子。只要能舒畅的呼吸,我肯定就什么都不抱怨了。当时一直抱怨的生活状态竟成为了未来向往的状态!

这就是为什么我们需要珍惜当下的理由,生活走向更差故事线的可能性并不是很低,反而是很高的,而当下则非常可能是未来我们向往求而不得的生活状态!

就好像“向死而生”一样,人们都说“The best is not come yet”,但现实很可能是“The worst is yet to come”。认识到这一点,才会发自内心的对当下有更多的知足感。

or go on, go on, go on

继续吧 继续吧 继续吧

if you are thinking that the worst is yet to come

如果你认为最糟的还没到来

闲聊是“无意义的话”

我是一个非常不擅长聊天的人。平时吃饭的时候,我会观察大家在聊什么,以及我自己在和别人闲聊,我也会观察别人会和我聊什么。时间长了,我会发现闲聊的很大部分就是车轱辘话,换句话是“无意义的话”。要么聊上周末干了啥、买了啥,看到了啥,要么就是之前聊过的话题因为不同的场景又再一次重新去说。

看过一个段子:“我”出门的时候,邻居总是问,上班去呀。不然呢,早上7点,我背个包去夜店吗?我家狗我总结出每天这个点我要上班了。其实现实就是如此,看到认识的人从食堂出来,就会问,刚吃完饭呀。从茶水间出来,会说来喝水呀。仔细想想这样的寒暄有任何意义吗,平时的闲聊有什么意义吗?

如果说是否从这些话中获得了有意义的信息,获得了成长,那肯定是没有的。但是慢慢觉得,不是所有事情,因为有明确的意义我们才去做,或者换句话是,我们一天那么长的时间其实很多时间都是没意义的。比如我们刷短视频有任何意义吗,大部分时候并不是想从短视频获得什么知道,就是打发时间,获取纯粹的开心或者是猎奇感而已

人与人聊天也是这样的,本身就不需要寻求什么意义,就是打发时间,这个过程里如果能加深聊天对象之间的熟悉感,增加个人与群体的联系,那更是额外收获了。这个,就是我关于这个话题的一些思考和想法。

美好的事情背后是血泪

《繁星·春水》 作者冰心

成功的花,

人们只惊羡她现时的明艳!

然而当初她的芽儿,

浸透了奋斗的泪泉,

洒遍了牺牲的血雨。

小学课本上一首小诗,在今年有了一些更深的感受。

有这样的一个视频估计很多人都看过,就是一个小女孩模仿大人皱眉,惹得大家捧腹大笑。这个小孩的家长在b站上有账号“蹦蹦和蜜糖”。因为这个视频我很早之前就关注了,疫情的时候,他们开了一个炸鸡店,我还看过他们直播。不管是直播还是拍的视频都是我非常羡慕的家庭氛围,虽然他们家不富裕。今年看到他家庭也离婚了,并且因为离婚的事情,爸妈都在各自的账号下发布自证相关的视频。作为一个普通网友总有些说不出的滋味。

这一次是非常真切的感受到所谓“美好生活短视频”的另一面。这并不是个例,抖音的slogan就是“记录美好生活”,但实际上是剪辑美好视频罢了。需要认识到这些看上去美好的视频实际上包含了很多演绎与虚假的成分。

美好生活并非短视频那般轻松,并非唾手可得。要想美好的事情发生在自己身上,一定要付出代价,我们一定要有付出代价这样的一个心理准备和觉悟,这其实是我想说的这个观点。

长期打鸡血是不现实的

我经常会在觉得自己生活不够“上进”的时候,会短期的打鸡血设定一个目标,期望达成后能改变现状,改变生活。但是愈发的发现这是不现实的。

所谓打鸡血就是以一个比较高的要求去要求自己在一个相对较短的时间去获得比较明显的收益。比如想要一个月减肥10斤、一月看xx本书。就好像是一辆没有发动的汽车,突然以120km/h 速度启动起来运行,就很容易出问题,回到现实场景中就很难持续下来。

所以更好坚持的方法是以更小(非常小)的步长、更小(非常小)的目标的开始启动,不要一开始想着设定最终的目标,而是在当前的基础上,设定非常的小的一步,先启动起来,并且坚持一段时间,知道这一步变成当下的习惯后,再在这个基础上再设定一个很小的变化,持续迭代。

这里有一个方法就是“每日三件事”清单,可以用一个文档记录每天要做的三件事。可能你会说我每天要做那么多事情,怎么可能只有三件事。这里要记录的是对自己有略微有挑战的事,或者是之前不愿意做的事情。举个例子,之前做不到早睡,那么就可以将xxx点睡觉作为其中一项,不想洗衣服,就可以将洗衣服作为其中一项。最开始可能有很多想做的事情,但确保始终只记录不超过三件事,我建议从记录一件事开始。超过这个数目的其他事情如果有时间做,不要写在这个清单上,可以默默无闻的做掉,或者记录在另一个清单里。

这个过程我在去年尝试了一个月是非常有效的,但是后来没有坚持下来这个习惯,一方面是后来甚至没有时间(懒)一件事都做不下来。今年我会继续尝试这个事情。

常常遗憾,不要后悔

生命中我们做过很多选择与决定。当回头看的时候,难免会对某些选择感觉到遗憾,从现在的角度来看,当时的选择似乎不够明智。

遗憾和后悔并不是一件事情。弄清这两个概念我觉得非常必要的。奇葩说某一期就有关于这个话题的讨论(EP24:终其一生只是个平凡人你后悔吗)。后悔总是伴随着假设,即如果当初我不那么选择,结果会不会更好,而遗憾则坦然的接受和认清的事实。

比如当时因为某事情和某个人的感情生疏了,那这个结果就是事情,是可以遗憾的。但如果总是想着如果当初这件事那样做就好了,就不会和某人决裂了,那这个行为就是后悔。

后悔是一种非常没有必要的内耗。首先后悔中的假设都是需要回到过去。坦然的问我自己,我不愿意回到我过去的任何一个阶段,我当下的阶段是过去任何一个阶段努力过来的结果,我并不觉得当下的阶段比过去的任何一个阶段综合来看更差,至少在我目前关注的部分,没有更差。其次,就算回去了,以当时的视角、经验、环境,我能做出更好的决定吗,我觉得不能。当时那么做一定有当时的理由,我不是疯子、傻子,再回到过去,这个理由仍然是存在的。

所以不要后悔的本质是不能过高的要求过去的自己有上帝视角作出最佳的决策,而是要接受过去自己所做的每个决定。可以浅浅的为过去一些不是特别正确(也许)的决定叹口气,然后接受它。

最后修改:2024 年 02 月 16 日
喜欢我的文章吗?
别忘了点赞或赞赏,让我知道创作的路上有你陪伴。