注册
环信即时通讯云

环信即时通讯云

单聊、群聊、聊天室...
环信开发文档

环信开发文档

Demo体验

Demo体验

场景Demo,开箱即用
RTE开发者社区

RTE开发者社区

汇聚音视频领域技术干货,分享行业资讯
技术讨论区

技术讨论区

技术交流、答疑
资源下载

资源下载

收集了海量宝藏开发资源
iOS Library

iOS Library

不需要辛辛苦苦的去找轮子, 这里都有
Android Library

Android Library

不需要辛辛苦苦的去找轮子, 这里都有

社会现实告诉我,00后整顿职场就是个笑话

00后整顿职场,也算是我之前的关键词吧。 我硬怼老板要加班费和提成,和他们辩论什么是我的财产,什么是公司的财产。 甚至还能在即将被开除的时候,反将一军把老板开除。 而正是因为这一次把老板开除,让我得到了机会。可以站在了相对于之前更高的位置,来俯瞰整个职场。 也...
继续阅读 »

00后整顿职场,也算是我之前的关键词吧。


我硬怼老板要加班费和提成,和他们辩论什么是我的财产,什么是公司的财产。


甚至还能在即将被开除的时候,反将一军把老板开除。


而正是因为这一次把老板开除,让我得到了机会。可以站在了相对于之前更高的位置,来俯瞰整个职场。


也真正意义上让我感受到了,00后整顿职场,就是一个互联网笑话罢了。


1、职场宫斗,成功上位


我之前在苏州工作,堪称工作中的宫斗,并且在这场宫斗大戏中胜出,将原有的项目负责人开除,成功上位。


而这个项目存在的问题非常多,我就在六月被派遣去项目的总部合肥进行学习,等到打通项目的全部链路后,再回到苏州。


届时我将以这个项目的负责人,重新搭建团队,开展这个项目。所以我在合肥那边,以员工的身份深入各个工作组进行学习。


在市场部,运营部的办公大厅工作过,也在各部门的独立办公室工作过。


我感觉自己像个间谍,一边在以平级的打工人身份和我的同事们相处,一边又以苏州负责人的身份,参与那些领导才能参与的内部会议。


2、内心变化的开端


我在合肥总部工作中,接触了很多躺平摆烂的同事,但这个“躺平摆烂“要加上双引号。


他们是00后,90后,甚至有85后。如果放在三个月前,我可以不假思索地说,他们全都是我最讨厌的人。他们如同牛羊一般任人宰割,上级让加班,他们就加班,有时候加班甚至超过四五个小时也没有怨言。


我甚至从来没听他们感慨过为什么没有加班费。亲眼看着他们被自己的上级用一些与工作无关的鸡毛蒜皮之事骂得狗血淋头,但他们也只会在被骂完之后,背地里吐槽那个领导估计是在家被老婆骂了,才来拿他们泄愤。


我打听了他们的工资,只能说中规中矩,起码不是能让人当牛做马的数字。偶尔我见到一两个有骨气的人,觉得拿这么点钱就应该干这么点事。干不爽就马上离职,但马上就会有下一个人替补他的位置,形成闭环。


我惊讶于怎么有人能惹到这个地步,但后来和他们日渐熟落,我们一起吃饭,一起打游戏,一起下班顺路回家,还参加了他们的生日聚会。我发现他们活得其实真的很洒脱。一切都是随遇而安,下班时间一到,他们就真的可以无忧无虑。


因为他们有一份工资还行的工作,养活自己。他们没有啃老,也没有用卑鄙的手段,去抢想要努力的人应该分到的蛋糕,也压根不去想要赚很多钱,因为没有什么需要太高消费的需求。


加上现在的环境,找到一份可观收入的工作确实很难。所以公司偶尔的加班,领导偶尔的泄愤,这些毕竟还是少数时候的偶尔,也都没有超过他们的心理承受阈值,那也就得过且过了。


所以我们其实都一样,只是个普通人罢了。而像我们这样的普通人,取之不尽,用之不竭。这到底是好事还是坏事呢?


3、复杂的职场生态环境


建立在这个基础上,视觉转换到高层领导们这里。他们当着我的面说,这样的人就是个底层打工仔,缺人就招,加班照旧,心情不好还要扣他们的全勤绩效。


压根就不怕这些底层打工仔闹事,纵使有一两个所谓的决心者辞职,也能在很快时间找到下一位。


两者形成互补,共同铸就了这样恶劣的职场生态环境。但我说职场无法改变,远不止这么一点原因。


在这个项目中,我说好听一些只能算是项目负责人,在此之上还有着项目股东,这还要细分成大股东和小股东。而我所在的项目属于互联网赛道,也就是说需要一些新鲜事物的眼光和思维来对待。


但这些股东们经常提出一些奇怪的意见,就如同用微商时代的卖货思维,来指点直播带货,并且他们是出钱的股东,他们提出的战略方针不容我驳回,因为在他们的光辉历史中,有大量的成功案例,来佐证他们的思路是对的。


我刚开始觉得也有道理。他们能有钱投资,肯定是有什么过人的本领能让他们赚到钱,但是随着相处下来,我发现不过是他们本身家里条件就优越,在九几年就能拿出一百万给他们创业。


他们把这一百万分散到二十个领域,每个投资五万总能撞上那么一两个风口,让他们实现钱生钱。


九几年的五万也算是一笔不少的投资。他们这样的发财经历,让我很难不产生质疑,这不是给我我也行吗?


毕竟他们如果真的有什么过人的本领和远见,也不至于在每次内部开会之前,都要组织喊这样的口号:“好,很好,非常好,越来越好“


甚至试图把这样的口号,带到每一次迎接客户的项目介绍会上。我以自曝式要挟制止他们这个行为,我说如果你们这么干,那我当天就辞职,内部都是自己人,我可以陪你们这样弄,但如果对外这么搞,被录下来说我们是传销,我都不知道怎么辩解。


4、职场中的背锅人


他们就是这样坚信着自己能成功,是因为自己有过人的才华。所以自我洗脑着自己提出的方向没有错。如果出错了,亏损了,那一定是负责人的问题。


但好巧不巧,我就是那个负责人。我已经无数次告诉他们,我们这个项目压根就不需要穿黑丝短裙跳舞的小姐姐。


我甚至写了一篇报告给他们,分析我们的项目为什么不能用擦边这种手段引流。但他们执意要,说这样来流量快,我都有点分不清到底是他们自己想看,还是深信这样做确实是可行。


但如果最后这样还是没成功,导致项目亏损,大概率还是在我身上找原因吧。


面对他们这样的大佬,我心里很清楚,这已经远远不是宫斗了,这也绝对不是靠几个心计,或者有实力撑腰就能取胜上位了。这场权力的游戏,不是我等草民玩得起的。


5、换个思路,创造属于自己的职场


一边是被提供资金,但是瞎指挥的股东们摧残,一边是在有限的预算下,我作为负责人,确实很难做到尊重打工人的内心挣扎,回到苏州我虽然能身居高位,但我终将成为我曾经最鄙视的人。


我不要当这个背锅侠,我也不想在这个环境中,去逐渐接受这样的价值观。


这样看来确实如此,00后整顿职场不过是一场互联网的狂欢罢了。


这个题材的故事,也永远只能发生在职场的最底层。由一群家境优越,体验生活的公子哥和我这种不知好歹的普通人共同出演。


大部分人只是在手机屏幕前把我们当个乐子,成了扣个666,然后一起吃胜利的果实。没成,那就确实是看了个乐子。


或许是因为他们心里也清楚,凭我们压根就做不到。


00后现在确实整顿不了职场,因为社会的资源和命脉还不掌握在00后手上。


但就止步于此了吗?我曾说过我想有一个自己的小工作室,遵守劳动法,双休,按时发工资,交纳五险一金。


是的,换个思路,也许00后不需要整顿职场,而是直接创造属于自己的职场,那么接下来我就要向着这个目标去努力了,毕竟二十年后我也还是00后,不如到时候再来说00后整顿职场吧。


作者:程序员Winn
来源:juejin.cn/post/7311603432929984552
收起阅读 »

职场贩卖焦虑,不如调整心态

每当长假期来临之际,出行就变得异常困难,本来是该放松心态的阶段,因为各种各样不好的事情充斥在周围,败坏了本该愉悦的心情,五一还未出行,调补假期的事情就吵的沸沸扬扬,机票的大跌也带来背刺,这个假期注定从焦虑开始,接下来大家还会面对,路上的堵车、景区的人从众、天价...
继续阅读 »
image.png

每当长假期来临之际,出行就变得异常困难,本来是该放松心态的阶段,因为各种各样不好的事情充斥在周围,败坏了本该愉悦的心情,五一还未出行,调补假期的事情就吵的沸沸扬扬,机票的大跌也带来背刺,这个假期注定从焦虑开始,接下来大家还会面对,路上的堵车、景区的人从众、天价的消费,住店的隐私及背刺、以及可能遭遇的不好的天气等等等等;


啊~~~ 难道今天是要来贩卖焦虑吗?


贩卖焦虑吗?其实不然,我更想聊,大环境的变化,如何去调整自身?


大环境


互联网大环境,说说我自身的感受;


加班


加班,相比几年前,感受最深的是,或者说免费加班,越来越多;好像演变成了这家公司好像不搞点 996,都不是互联网公司,不搞点 996,这家公司都不赚钱,不搞点 996 ,这家公司都没有上升空间;


面试很多公司最少都是 995 起步,搞得候选人不接受,好像就吃不苦、没有奋斗精神一样,也许也是,不然为什么 79 的眉笔都会牵涉出工作不努力;但是想过没有,这可能真的会让人认知不够清晰的同学真的去怀疑自己是不是真的不够努力,也真的会让努力的人寒心;


并不是每个人都是幸存者偏差,成功真的不会降临在每个人身上,现实是大部分人不是出生在罗马,而是不是骡就是马,天赋加机遇,各种契机的组合,也许都是百万分之一的幸存率,真的不是努力了,就能有结果的;


但中国人骨子里优良的品质,从日出而作日入而息,自古以来的勤奋,就在基因里面代代传承,现实社会,别说出人头地,能够较好生存都已经不容易了,所以真的,社会多一些宽容,企业多一点人性,如果可以,真的要好好审视现状;


加班真的能带来更好的营收吗?也许可能吧,但是被禁锢的灵魂,你想要他能有多大自驱力,能有多大创造力,能看到前景吗?


内卷


人口大国,求职者甚众,听过最多也是最讽刺的话,你不干多的是有人干,是的,我们每个人都是备胎,我们每个人备胎都很多;


我不知道是从哪里看过一篇言论,大概就是说,程序员这个职业体系,其实大部分是没有什么背景的人,或者是农村人,他们没有好的出路,想要挣钱,想要快速走出原来的贫困圈,他没有太多的选择,他只能苦干;


很讽刺是不是,也许上面的话是被人断章取义的,但是我来自农村,我的感受确实大差不差,你以为干着一份体面的工作,其实在背地里都是牛马,而你没有办法去反驳,因为你没有背景,你要出圈;


所以细细想来,嘈杂的环境,加剧了内卷的诞生,一群本不该竞争的人,一群本该一起取暖的人,一群本来有着共同理想的人,逐渐变成了相互的垫脚石,kpi 的丑态,已经让很多人变成了死道友不是贫道的淡漠。


PUA


PUA,也许是自嘲的人或者不良的氛围或者玩梗,PUA 已经变成日常用语,『牛马们』 开始觉醒,原本作为管理者的手段,上位者心照不宣,突然被公之于众,大家都逐渐去理解你说的话,背后的含义是什么;


『我对你是失望的』『你在低绩效里面是靠前的』『机会已经给到你了,接下来就看你能不能把握了』『我知道你有压力,但你要扛得住压力』


是的,每个人都很珍惜自己的工作,每个人都有理想,每个人都想名利双收,利用人性的欲望去做管理,从本身来说没有什么问题,但是利用人性的弱点,去打压,去PUA,真的不病态吗?


小结


大环境确实存在问题,社会在发展,人类在进步,在快速发展的历程中,总会有一些病态的体系出现,但是在面对这些不定因素的时候,时刻保持理性的头脑,要学会去洞察,要保护自己,在做每一件事情上,不求完美,但求心安,不做别人的摆布工具,做好自我,坚守自我;


关于自我


社会立足,自我认知很重要


职业规划


和很多很多的同学聊过,经历过很多阶段的同学,实习生、初级、中级、高级、资深、专家等等,走技术架构的、走业务架构的、走技术管理的等等;


大部分的同学,其实都不具备职业规划的能力,甚至没有概念,这种真的会很盲目,没有目标、没有方向,一家一家公司换,随性,自由,看起来潇洒、有魄力;


薪资,当然是第一考虑因素,一切不聊到手薪资的都是耍流氓,但是真的不是唯一考虑因素,每个阶段,真的要知道自己需要的是什么,多去看看相关职业规划的书或者前辈的实际历程,当然不要去轻易质疑一个职业人生,理性看待每一件事;


当我们有意识的去按照自己想要走到路线的时候,薪资,我希望不是唯一的理由,当然他依然很重要,他依然是第一要素,不然工作为了什么?为了理想,丢掉面包吗?大可不必,除了自我感动,没有人会为你喝彩;


话说回来,职业规划,一定要重视,他不是今天的目标,也不是你今年的目标,他是你实现你人生目标的一个重要规划之一,每个阶段可能会变,变,很正常,不用自我怀疑,随着你见识的增长,经济的增长,你眼界会不一样,而我们要求的就是不断的是调整规划,为每个阶段的目标去准备,但是在快速奔走的过程中,也请回过头,看看自己的初心;


强大自我


本身我自己是前端,虽然现在不是纯粹的前端开发,但是从来没放弃过对前端技术的关注;


前端很乱,很快,很浮躁,『前端娱乐圈』 也不是一朝得名,很多时候,我也很焦虑,在做开发的时候,我对技术理解很纯粹,就希望用更好的方式去实现,更牛的技术去开发,但是随着了解的越多,越觉得需要了解的也越多,所以在很长的一段时间里,每天我都会查阅大量的资料,为了搞懂一个技术点,可能会去看一整本书,或者几十片技术文章;


我记得有一段时间,我甚至有点偏执,一段代码,甚至项目周期都过去一大半了,我突然发现实现的方式不是很好,很别扭,我直接把所有代码都删掉,甚至包括牵连的老代码,删掉一时爽,接下来就是无尽的痛苦,007 等着你;


换成现在,我不知道还会不会做这种偏执的事情,但是我想,不顺眼的,我照样还是会去优化,对技术的执着,我个人倒是觉得没有太大问题,但是前提别耽误项目进度,否则团队的信任会越来越低;


还有一个阶段,我觉得自己现状已经不是自己想要的了,接受降薪资,去一家可能会给我职业生涯带来有利成长的公司,人们没有办法当即去评判当时做的选择是对或者是错,事后看来,在做评价,已经没有太多意义,人生很长,也是到迟暮之年,这也许也是一段有着非同意义的经历;


我只是站在我自己的角度,去看待或者去如何强大自我,在这个过程中,有偏执,有耽误,也有背离,但是更多的是我自身对自身的调整,不能说我自己做的如何好,只能说,我是一直向着自身变好的方向努力;


关于焦虑


从我个人角度看,职业生涯中,已知和未知的事情太多,初期你会为了自己不够强大而焦虑,到后来你会发现你掌握很多东西,但是依然有很多盲区,技术很广,很难做到都了解;每个阶段都有每个阶段,或者每个环境需要有每个环境掌握的东西;有盲区,也请不要焦虑;


看过余华和罗翔的有意思一个对话:



  • 罗翔问余华老师:给女主人公起名叫林红,是取自南唐后主李煜的那个林花谢了春红,太匆匆,长恨朝来寒雨晚来风,胭脂泪,留人醉。自是人生长恨水长东吗?

  • 余华老师:我真没想这么多,我就是随便起的,现在是了。


你看,作者可能都没想那么多,如果说写的时候,每个都去考究,也许一篇小说,可以写几十年,也许余华老师就是取名字的时候,看到院子前面的林子里面的花红了,就叫林红,别去揣测太多,毕竟*『尤雨溪』*面试 vue 都不见得能通过;


我们能做的就是做好准备,拒绝内耗,理性看待,做每个阶段发力;


最后


环境、自身以及不可控因素,就像假期出行一样,你永远无法去预料即将发生的事情,如果被牵着走,你会发现很多事情,在没有开始之前,就已经寸步难行,不如调整心态,强大自我,无论是职场工作,还是生活,强大的自我,懂得适度调整,所遇之事,可能都会变得不一样,毕竟爱笑的程序员,代码肯定都不会写的很差;


作者:深谷逸风
来源:juejin.cn/post/7363193808522477607
收起阅读 »

给迷茫的朋友一点建议吧,主要是前端方向的。

背景 前两天分享了一篇自己的个人经历,没想到引来了那么多人共鸣,很多人留下了评论,大部分评论我都认真看了,并且也回复了,有的评论建议真的很棒,对我的帮助很大,很感谢。 今天给评论给整理了一下,再加上自己有一些新的感悟,给大家分享分享,给迷茫的朋友一点建议。有很...
继续阅读 »

背景


前两天分享了一篇自己的个人经历,没想到引来了那么多人共鸣,很多人留下了评论,大部分评论我都认真看了,并且也回复了,有的评论建议真的很棒,对我的帮助很大,很感谢。


今天给评论给整理了一下,再加上自己有一些新的感悟,给大家分享分享,给迷茫的朋友一点建议。有很多东西想说,但是表达能力有限,只能写出一点。


一个30岁老前端的人生经历(学习+工作+婚姻+孩子),给迷茫的朋友一点激励。前端是不是真的不行了

有些没有毕业或者刚毕业的兄弟们,很关心这个问题,因为关乎他们是否要学前端开发。还有一些想转前端开发的兄弟,也很关心这个问题。


关于这个问题,上篇文章有评论开玩笑的说现在入前端,相当于49年入guojun,下面就这个问题我发表一下我的个人看法。


先说一下我的观点,前端确实比以前难很多,工作岗位变少,薪资变低,技术要求也变高了,还没入或准备入前端的,建议真的不要入了,有经验的都不好找工作,更别说没工作经验的了,当然天才除外。


我同学和我朋友两个前端(都是好几年工作经验的)找了几个月都没有合适的工作,面试机会还是有的,但是外包偏多,并且还要降薪,最后都拒了。


他们还发现了一个现象,有时候面试的过程中整体都非常好,hr有要发offer的意思,但是就一直拖着,然后后面突然有一天说不合适了。这种应该是有更好的选择了,以前都是求职者手握多个offer,去挑选公司,现在公司占据主动了,从多个候选人中挑员工了。


后端情况我不清楚,但是前端真的没有以前好就业了,这个时候想入前端的,我真的不太建议,除非你真的特别牛,就算你很牛,但是没有面试机会,也没办法证明啊。


有些已经入前端的新人私信我,让我给他一些提升建议。



  1. 多写多练,熟能生巧,没有别的好办法。先不用去看某某某源码,也不用花很多时间去深入的了解某个库,会用就行,然后从网上找个实战项目跟着做,或者自己从零做个小项目,在实战的过程中可以快速定位到自己薄弱的地方,然后针对自己的问题查漏补缺就行了。我当时从后端转前端时候就是这样的,不一定对所有人都适用,仅供大家参考。

  2. 多总结和复盘。这个习惯让我一直受益,比如今天的文章就是对上一篇文章评论的总结。经常复盘真的能让学习效率变高很多的,还能避免犯同样的错。我的习惯是白天学东西,晚上睡觉前复盘总结一下,这样一来印象很深刻。

  3. 学习的时候,不要怕别人说卷什么的,有些人看到别人学习就说别人卷,反过来自己偷偷的学,这种人就是不想别人追赶上自己。还有一些人自己天天下班打游戏从来不学习,看到同事学习,就在背后说别人卷,这种人就是害怕被别人甩开。为了某个目标去奋斗,我觉得是一件很有意义的事情。比如我吧,天赋一般,家庭一般,就是靠比别人付出的多,才能让一家人过上好一点的生活,只要家人开心,”卷“一点又有什么呢,随别人说去吧。

  4. 定目标。这个对于自律性不够的兄弟有帮助,相信很多人看完某个鸡汤文后,努力个几天,就坚持不下去了,这就是因为没有目标,有时候定完目标还是坚持不下去,可以找人来监督一下。比如我在上篇文章中立的flag,明年写40篇文章,有评论说写质量高的文章,一年肯定写不了那么多。是的,好文章确实不是硬挤出来的,我立这个flag的原因,是我知道自己自律不够,立出来让大家监督的,至于文章质量,我觉得只要用心去写,能帮助到人而不误导人就行了。


小结


没入前端的同学,建议别入了。刚入前端的同学想快速提升自己,多学多练,多总结和复盘,不要怕被别人说卷,给自己定目标。


30岁前端的路


我在flag里写了打算2024年认真看一下react源码,很多大佬建议说现在别搞这些没意义的东西了,搞前端死路一条。


关于大龄前端发展,从评论建议中,我总结了以下几条常用出路,欢迎大家补充。


深入技术


都说前端的天花板就是组长,结合我自身的经历和评论区的留言来看好像确实是这样,我几年前就开始做前端负责人了,其实就是组长,只是管的人多少的问题,cto永远是后端。主要工作就是需求来了,把任务给下面人分一分,就没了,最有挑战的也就是框架基建了吧。


评论里有人说,如果想要继续搞技术的话,可以往全栈方向发展,因为前端很难涉及到公司业务,所以可替代性很高,后端和公司业务结合的比较深一点,而业务才是公司的根本,换一个人很难立马上手,可替代性比前端低很多。


关于全栈我的观点是,大龄前端还是往全栈发展比较好,除了上面的原因外,全栈可以自己做个产品,还可以接私活、做自由职业者,甚至转管理都需要懂点后端技术。


想转全栈,但是又不想学别人语言,node也是可以做后端开发的,现在比较成熟的框架有midway和nest,甚至koa都可以做后端开发。关注我的人应该知道我正在做的fluxy-admin就是一个全栈项目,前端使用的是react,后端使用的是midway,前端上手midway还是很简单的,我一个星期就上手写项目了。


转管理


有一些评论提到了转管理,说实话这个是需要机会的,不是所有人想转就转的,因为公司很少愿意给员工尝试的机会,除非你开发的时候已经表现出了管理方面的天赋,让老板认可你,不然都很难转成功,一是一个萝卜一个坑,老的领导没走你就上不去,而上面领导走了,很多公司可能会从外面招一个新的人空降过来,而不是从下面提拨一个上去。


还有管理也不是什么人都可以做的,有的人搞技术可以,管理真的不太行,比如我,在某家公司,当时管着10几个前端,团队被我带的一团糟,后来我找个副组长帮我管理,我专心搞技术搞框架,团队才慢慢走上正规。


个人觉得想转管理,需要机会和自身有管理才能,这两个条件都很重要。


转产品


有些评论还提到了转产品,我感觉这个还是比较靠谱的,玉伯大佬就是一个成功转型的案例。


个人感觉前端转产品还是有一些优势的,下面是我从网上搜的:



  1. 技术背景:掌握技术知识,能更好地理解产品实现的可能性与限制,与技术团队有效沟通。

  2. 用户体验关注:作为前端开发者,通常会对用户界面和用户体验有较深的理解,有助于设计更好的产品。

  3. 敏捷与迭代理念:熟悉敏捷开发流程和迭代思维,能够快速响应市场变化并调整产品方向。

  4. 问题解决能力:编程经验锻炼了解决复杂问题的能力,这在产品管理中也非常重要。

  5. 沟通桥梁:作为曾经的开发人员,可以成为团队内部技术和非技术成员之间的沟通桥梁。


前端转产品,可以将技术理解和用户体验融入产品管理中,提高产品的竞争力。感觉门槛也不高,只需要有想法,并且现在软件行业那么发达,实在想不到好的点子,还可以借鉴别人产品设计。


甚至以后AI发展的很成熟了,可能就不需要开发了,只需要产品经理把需求描述好,产品就自动生成出来了。


我现在也在往这方面发展,最近一年在公司主导研发低代码平台,从最开始的设计到基本构架实现都是我一个人,框架成熟后,经常和交付直接交流,渐渐往产品的角色发展了。现在工作中不只是只有代码了,经常也会站在产品的角度去思考,做的东西怎么才能更有价值,怎么提高用户体验等。


平时有一些想法在公司产品里用不上,所以打算自己做一个产品,现在有了一些idea,明年应该会去做。这里说明一下,如果有想法想做个产品但找不到合适的后端合伙人,全栈做小应用或独立产品还是很有优势的,呼应了前面说的全栈优势。


搞副业


评论里也有很多人建议搞副业,这个确实也是一条出路,但是我感觉搞副业得有可靠的路子,不能盲目的去搞,不然最后可能血本无归。


我知道前几年有个程序员可以干的并且很好的副业,录视频卖课程,现在随着互联网新人越来越少,这个副业已经不行了。


现在我知道的有个副业还不错,在线帮别人修改简历,因为现在很多人找不到工作,甚至没有面试机会,他们会很焦虑,认为可能是自己简历的问题,会找一些大佬帮忙优化简历,搞这个的提前你得是个大佬,并且有一定的知名度,对于普通人不适用。


现在也有一些人趁着AI的热度,独立开发AI应用,靠这个赚了一些钱,我对这个不太了解,不做评价。


下面是一位大佬的评论,可能比较适合普通人,不过他说的那些我都没有认证,大家请谨慎对待:


image.png


转行


有很多评论认为搞技术没有前途,还是要考公,确实对于刚入行或准备入行的兄弟考公是一个比较好的选择,因为年轻还有很多机会,像我们这种年龄大的,还拖家带口的已经不适合改行了,成本太高了,真经不起折腾。


也有评论说想回老家,说实话我也想老家,但是以我的能力,回老家估计都养不活一家人,只会写代码,回老家能干啥呢。


最后


上面的内容是根据评论内容简单的整理了一下,还加了一些个人看法,大家可以结合自己的情况食用。可能还有更多好的建议因为我文笔有限,没写出来,欢迎大家评论,一起交流。


最后说一下自己吧,没写文章之前,我一直认为作为一个程序员技术最重要的,就像我的简介里说的那样,我唯一会的就是写代码,我不一定会成功,但是我会努力做的更好。看完大家的评论后,内心有过动摇,是不是不应该继续卷技术了,在写这篇文章的时候,我又坚定了,因为搞技术不只是我的工作,这也是我热爱的东西,即使有一天被迫失业不做程序员了,我可能偶尔还会写写代码。不过鸡蛋不能放在一个篮子里的道理我还是知道的,我现在已经在慢慢往产品转,用以保证未来不失业,因为还有一大家子需要我来养啊。共勉。


作者:前端小付
来源:juejin.cn/post/7311932190442635299
收起阅读 »

切!我又不是第一次没人要🤡

我和你一样都经历过 家里蹲 狗都嫌 的尴尬时期,每天早上起来拿着手机不断刷着招聘软件, 海投几百份还是杳无音讯,在BOSS直拒、前程堪忧、失联招聘、猎空之间反复横跳... 还经历了十分灰暗的阶段,焦虑导致出现躯体化反应(头痛、严重失眠、吃不下东西等) 整夜整夜...
继续阅读 »

thumb-1920-651952.jpg


我和你一样都经历过 家里蹲 狗都嫌 的尴尬时期,每天早上起来拿着手机不断刷着招聘软件,


海投几百份还是杳无音讯,在BOSS直拒前程堪忧失联招聘猎空之间反复横跳...


还经历了十分灰暗的阶段,焦虑导致出现躯体化反应(头痛、严重失眠、吃不下东西等)


整夜整夜睡不着,躺下脑子都是工作、面试、人生选择带来的压力


不想出门社交,害怕面试。


其实,我想跟你说:裸辞并不是终点。


1.裸辞/辞职并不是终点


当我扛着我的键盘收拾东西离开工位,第一次对辞职的 “人走茶凉” 有了实感,


下午六点跟对我很好的前辈们告了别,公司离地铁有点远,和往常不一样,天还没黑,有黄昏相伴


三号线还是这么挤 还有点闷。


v2-7ab9c9ebffb2d15971a4ec2a9b1b2fe3_720w.webp


算起来这是第二次辞职,但第一次辞职找了一个礼拜就顺利入职了
,这次好像有点久,今年大家都在说被裁员大环境差,同学领证成家的也不少。


我意识到人与人的节奏不同,而我好像又一次走到了岔路口,上一次这么慌张还是在高考前


即便我从来没后悔过离职这个决定,但还是会因为面试带来的压力感到局促不安


每次离职就像是一场查漏补缺的大考,对勇气,对储蓄,对知识点的大考


唯有拆迁认亲能打破这场突如其来的考验。。。啊不是。。。我想说:


唯有行动能打破僵局!!


R.png


行动!!!去吃个冰淇淋!!。。。果然有灵感了


363b10d3887191d03f7a462610206e4.jpg


短暂的欢愉后,是与台灯的昼夜相守,与简历的交织缠绵


(简历编。。不是。。写不出来呀!!!)


v2-e4d9f181546345313e5e36f15d2e3cf1_r.jpg


反复改了几版之后确实多了一些“打招呼”的机会,但是实际面试机会还是屈指可数呀,


切!又不是第一次没人要🤡,拒绝我的多的去了,得从巴黎排到广州...


继续努力,等待运气,厚积薄发


v2-4039118d48100a401ec76dd9e4d73405_r.jpg


2.当知识脱离了考试,真理和美丽才慢慢浮现


2.1 心态调整(分享一下最近对我有帮助的书)



  • 《见识》 - 吴军


这是第一年出来工作,遇上了很好的领导送我的书,每当迷茫的时候再拿出来翻翻有了不一样的感悟,很多我们看上去非做不可的事情,其实想通了并没有那么重要,无论在职场上还是在生活中,提高效率都需要从拒绝伪工作开始,有些苦是可以不用吃的,苦难并非造就人类



幸福是目的,成功是手段




  • 《意志力》 - 罗伊·鲍迈斯特


技术行业的人都知道学习是个漫长/终身的事情,跟考公考研短期爆发式集中不同,我们更需要坚持长期一点点做下去,我认识到所有人的意志力都是有限的,使用就会消耗,压力也并非与动力画等号,人也跟机器一样需要“充电”和合理分配,每个人的节奏和身体承受能力也不同。



  • 《被讨厌的勇气》 - 岸见一郎、古贺史健编著


在心情动荡的时期,这本书就像开了一盏加热灯一样在一旁无声陪伴,那会我就像婴儿一样无意识地紧紧抓着自己的头发,直到我睁开眼看见了、意识到了,放下禁锢着工作、生活、交友的课题的手,更能轻松地赶路了。



生活的方式千千万,人生的意义,由我自己决定




  • 《法律常识全知道》 - 李桥


读书的时候没有一门跟社会接轨的课程,毕业了也一直专研技术,导致一毕业不知道劳动合同/租房有什么坑,把仲裁和维权看得过于艰难,法律条例密密麻麻 一时间不知从何下手,这本书就很适合我这种来一线城市打工没什么社会经验的小白,用简单的案例植入“NPC游戏”攻略,和《影响力》这本书加一起简直就是进城防骗指南哈哈哈



免费法律援助电话:12348



2.2 前端学习路线图:


roadmap-完整路线.jpeg


各位摸鱼的小伙伴下次见,这篇便是我的2023年终总结:


裸辞不是终点,唯有行动才能打破僵局,当知识脱离了考试,真理和美丽才慢慢浮现。




参考资料:


前端学习路线


作者:慌张的葡萄
来源:juejin.cn/post/7312304122535133220
收起阅读 »

我和我的4年前端生涯

我是一个普普通通的前端开发工程师,除了我的同事,在这个圈子内没人认识我。“前端开发工程师”,老实讲,我很喜欢这个称呼,我对一些圈外朋友总是这么称呼我自己,当然我的内心和认识我的人都知道,我就是一个“写代码的”。初见在2019年,我大专毕业,那时候的学长学姐总和...
继续阅读 »

我是一个普普通通的前端开发工程师,

除了我的同事,在这个圈子内没人认识我。

“前端开发工程师”,老实讲,我很喜欢这个称呼,我对一些圈外朋友总是这么称呼我自己,当然我的内心和认识我的人都知道,我就是一个“写代码的”。

初见

在2019年,我大专毕业,那时候的学长学姐总和我开玩笑说,以后毕业的我们都会去卖保险,跑销售,那时候的我不以为意,以为只是自我调侃,后来发现人家说的是真的,根本不是开玩笑。我在某大厂做了近3个月的电销,那时候我还是我们班工资最高的人,但不得不说这份职业我根本不喜欢。后来,我大学的班花邓某(真的很漂亮)有一次和我聊天,那阵子她在某大厂做审核。她说她打算去培训前端,问我有没有兴趣。那时候的我觉得计算机啊,编程啊都是精英人群,我这等人也能从事吗?我还打趣的问她,参与前端和高考上清华哪个难?(可见那时候的我对这个想都不敢想)

学习

在19年6月毕业后,我就失业了。我根本想不到大专毕业生能从事什么好的工作,也不清楚我能做些什么。后来我一想,那不妨去培训吧,这样就能和班花做同学,有一起接触的空间和机会了!然后我就开始联系她,但是不得不说,她有强烈的拖延症,她根本对这件事没放在心上。那就自学吧!如果我先学会了,然后等她入门的时候,我就可以教她了!她一定对我刮目相看!嘿嘿!我当时是这样想的没错。我首先找到了培训机构,找他们要到了课程大纲,然后自己逐一的根据大纲上的内容,在网上找视频。不得不说,bilibili大学真的很好用。我的html,css,js都是师承的pink老师,他讲的真的很棒,后来vue就跟着180的科比老师学习,不得不说,这两位的视频对我来说有着举足轻重的作用。那时候第一次学习编程,很多东西都是死记硬背的(切记不要这么做),你很难想象到一个人会去背各种元素的作用以及api。那时候学习的过程还是很快乐的,每天都能接触到新知识,在这就是看着那些视频的进度,想象着看完后自己就能毕业的样子,还是很期待的。甚至说,根据视频模仿了一个很小的功能,然后和自己父母分享的时候,他们都在夸我,现在回想起来,那是我从事前端这么多年来最快乐的时光。

毕业

20年9月的时候,大概经历了近10个月的自学,我决定出山找工作了,我来到了广东。当时我具备的技能有html,css,js,vue2,ts。后来就进入了刷面试题的阶段,有很多面试题完全都是死记硬背的,印象最深刻的就是vue2的响应式原理和nextTick原理,完全是根据百度来的台词去阐述。虽然说现在的我让我自己手写这些都不成问题。不得不说,准备的面试题可以准备,但是项目经验,一些细节可真是苦恼了我。一些对项目,业务比较感兴趣的面试官,我通常都会挂在这里,因为没有任何的工作经验。

我还记得,我面试的第一家公司,是在一个星期天,他们需要找开发小程序的人,最后聊完了技术之后;

面试官:“我看你的简历上写着你上一份工作在武汉有着6k/月,是吗?”

我:“是的”(在这里,我和大多数人一样,包装了,美化了自己的简历)

面试官:“据我所知,不到1年工作经验的专科生,是不可能在武汉有6k/月的,当然这只是我个人的片面的看法,江东自古多才俊嘛”(这就是他的原话,我此生都忘不了)

我内心:“尴尬,脸红,我要逃!快让我走!”

我也还记得,我第一次收获的offer的时候,是一家在CBD,25层高楼的公司,在我毕业以前,我一直都以为能在那里工作的人都是精英,商业大佬。这家公司他让我试岗三天,试岗第一天有个题目是让人手写轮播图和使用element做一个分页功能。我还是通过网友,帮我远程控制我的电脑才完成的这个任务,不过很遗憾,我自己选择了离开这家公司,原因嘛,因为我每天挤不上地铁,再者就是,那家公司气氛感觉很压抑。21年的我还很年轻,有这样的果敢和勇气,如果说24年的我,肯定会忍耐这两点。

第一份工作

2021年3月,在经历过长达3个月的求职经历后,我已经被磨练成了面试机器人。终于找到了一家公司,给我的薪水也很不错,至今我都觉得那家公司是宝藏公司,人数500+,我在那里上班1年没有任何加班经历,需求也非常简单,用vue改改东西,写下静态,一周5天能摸鱼3天。就姑且叫那家公司为X公司吧,还有一个特别搞笑的经历,在X面试的时候,老大问我,“你的项目上有分页查询,这个功能是怎么做的?”,我的回答是:“这个功能是前端做的”。真的很难崩有木有!!!他居然要我了!后来在X的日子,开始过起了神仙般的日子,温饱问题总算是解决了,开始每天接触前端这个圈子,和群友聊天,早上刷各种社交软件。 那时候下班了自己也会回家学习,心里也有一个大牛梦,想着自己能不能做出一些很棒的产品开源出去,就像那些社区圈子的名人一样。还记得那时候跟着视频学习写mini-vue框架,也买了很多课程,觉得投资自己是一笔超值的买卖,然而时至今日那些视频都没有看完。在X公司混到了要转正的那一天,还是蛮忐忑的,结果老大把我单独喊出去谈话,到这里已经开始觉得事情不对了。老大说我的表现还不能满足转正,要继续观察一个月,如果说看到这里,可能很多人会说垃圾公司快跑,但我始终为我当时没有赌气离职感到自豪和开心。

ps:有趣的事,在22年的时候我和带我的女同事都离职了,我们聊天的时候说谈起来这件事,她告诉我,关于我是否能转正的问题,是老大先去问她的意见,问我技术怎么样,她把我夸了一顿。当我知道这个事情的时候,泪目了。

第二份工作

在X公司混了1年左右后,说实在的,我的任务实在是太简单了,上班大多数时间都在摸鱼和自学,没有接触到真正的业务。后来就跑路来到了第二家公司,且叫Y公司吧。在这里我接手的一个项目是从0到1实现的,这正是我想要的,能够完整的学习到项目经验,太妙了。那阵子加班的时间就开始多起来,不过也还挺满意的,能学习到真正的业务。不过这种情况持续了大概半年,新鲜感就退去了,我发现我所做的事情,就是“搬砖”。业务上需要用到什么东西,直接搜一个开源的,然后自己管理一下状态,和后端交互一下,结束了,基本上所有的我参与的业务都是这样的模式,我开始懈怠了,早上每天来了先吃半个小时早饭,然后刷新闻,甚至直到下午才开始做活,因为这些事情实在是太无聊了。在下班后,我开始探索代码的世界,开始着手实现自己刚出道的时候的梦想----实现一个开源产品。那时候的我仿佛就是为了写而去写,我根本不知道要写什么,解决什么样的问题,完全就是照着vue,react这种前端框架去抄,而且实现的非常玩具,没坚持多久就放弃了这个天真的想法。

再见

突然有一天,班花邓某突然联系我了,她告诉我她已经辞职去培训了,问我要不要一起。我得承认,收到她消息的时候小鹿乱撞了,我告诉了她我已经从事前端的工作了,她大为开心,说要我帮帮她,有什么不会的就来问我,我很开心,第一次明白被人需要是什么感受。后来她在培训班毕业了,她让我来面试她,不得不说教她的都是什么妖魔鬼怪,我问她对Vue的理解,她居然背文档说,“vue是一款渐进式框架...”。我问她什么是“渐进式”,她就不知道了。那阵子和她交流了很多,虽然不在一个城市,但还是很开心。另外确实漂亮的女生真的在我们这个行业很有优势,她不到1个月就找到工作,而且她提出期望9k,人家面试官给她10k。

WX20240327-161849@2x.png

JS为我做的三件事

  1. 工作

这第一件事就是让我有了生存的技能,找到了一份工作,首先是能生存下来了。说真的,在我参加工作之后,程序员人数膨胀之前,我一直都认为程序员是普通家庭的专科生一项比较好的出路,但现在的话的来说,我可能也会偏向于劝退专科生的萌新吧,这张图是我专科,4年工作经验,计算机专业的求职经历,如果你能承担像这样的挫折感的话,并且你比较自律,热爱编程,我也鼓励你坚持梦想!

WX20240327-132049@2x.png

其实我目前的状态也很难讲,因为这是一个离奇的经历。我们公司最近的效益不太好,可能是我们部门的产品没能带来什么收益,已经开始裁员了,而且很过分的一件事情是,我和我的部门同事,已经3个月没有发薪水了!这件事超级严重,根据过往的经验和数据的话,大概是要凉凉的节奏。

我们部门一个资历比较老的同事,就带头跑路,然后搞的其他人也就跟风,然后吧,好巧不巧,他们问我跑不跑,我深知专科生找工作无比艰难(请参考上面我的BOOS图),我只能相信公司,会好起来的。

这件事无论说到哪里,大家给我的建议都会是立马跑路,然后去仲裁,可能现在看文章的你也是这么想的,但是我很怕,我怕失去工作,我已经适应了现在的环境,我没办法面对接下来的未知挑战,这和我的个人性格有关系,我决定留下来,在赌一下自己的前程,或者等公司裁掉我,没准还有补偿不是吗?

好巧不巧,我们部门资历老的全跑了,老大让我来当老二了,我听到这个消息的时候是懵逼的,老大给我布置了一系列的任务,包括架构一下前端,招人等事宜,我提道工资呢?老大说会给你发的,公司在等机会。也就是典型的加量不加价,其实今天为什么能来更新这篇文章,也是因为我来架构前端,打算在掘金调研一套eslint规则,因为这里的大佬比较多,技术文章质量也还是很高的。

我想到这里,其实觉得我的平台,舞台也是蛮大的,发挥的机会很多,(虽然没发工资)。于是乎我提出了一系列计划上报了老大,包括技术从Vue2转到react18,前端组件库改用storybook等。除了使用react18这套方案被否决了,其余的也都通过了。

说真的,对这份工作的未来也是有极高的不确定性,如果你不敢承受10%的暴跌,那就会错过1%的大涨,不是吗?

  1. 爱情

我在2023年的时候,在某书上认识了一个江西的女生,我们聊的很投缘,我们甚至是一个大学毕业的,她在武汉上的大学。我们有着共同的爱好,经常聊天就是半天的时间就过去了。而且,我们经常分享自己的一些身边事给对方,一些实事的热点新闻的看法,我们也出奇的一致,她在朋友圈发的照片也很好看,有一次,我给她发消息,她过了一段时间没有回复我,我就开始想着,她在干嘛,为什么还没有回,开始焦急,情绪被左右了,我明白了,我确实喜欢他了。

当从朋友,也可能是网友的关系,变成了爱慕的时候,我对她的态度就变了,我开始变得很有占有欲,开始看她某书下的评论有没有其他男孩子,那阵子的我,真的很丑陋。

我开始着急了,我决定更近一步试探一下,我邀请她一起玩某某荣耀,她也答应的很爽快,那时候我还以为我成功了,有戏!没想到,当天,我上号后,她邀请我,我发现!她居然带了她闺蜜和一个男生,我纯纯无语。。。而且游戏过程中,他们三个互动比较多,基本上我就是路人甲,那晚挺失望的反正。

到了她的生日,我说我送你一个生日礼物吧!她也婉拒了,从那时候开始,我们的距离就变得远了。到今天,2024,3,27号,我们大概40多天没说过话了。

到这里,和js有什么关系呢?

我即将告诉你我人生中,做的最小丑的决定

我想的是,女生都比较幕强,我要给她展现一个技术大佬的人设!没错,在某个夜晚我是这么想的,晚上下班后,我上某里云租了一个最便宜的服务器,然后用express + react.js(没错,我个人更喜欢react,这也是我为什么尝试说服领导转react的原因,hhh)花了一晚上时间,写了一个聊天室功能,还内置了许多她喜欢的东西作为背景,icon,logo,然后我部署在了服务器上。

第二天,我立马把域名分享给她,期待她的回复!还俏皮的说,能打败微信吗?我以为这样,她会对我五体投地的佩服,结果她只回了一个 “6”,然后补充“哈哈哈哈哈哈”

那时候我觉得,她是对这种技术不感冒,她只对迪士尼和追星有兴趣,她每周都会去迪士尼和一只小狐狸合影,请注意是每周。而且她会追每一个在她城市开演唱会的人,某杰,某谦,某棋。我以为她是喜欢这些,后来我才发现,她其实是对我没兴趣而已,意识到我越界了,有意疏远我。

  1. 开源,

我用js尝试写过很多开源,也想成为一个为社区有过贡献的人,但后来发现根本没什么用,自己无论写什么,都已经有了前人的库,比我好,比我成熟,比我火。我最近一直在思考,如果我把学习这些,折腾这些的时间用来学习一门其他的事情,比如吉他,或者打游戏,我会不会更快乐?都说1-3年的前端交流群里都在聊技术,4-5年都在聊业务,5年以上的都在聊家庭和钓鱼,看得出,这就是现实,极少有人能从技术中脱颖而出,我也认清了自己。


作者:soloDog
来源:juejin.cn/post/7345760019319373864
收起阅读 »

别做老实人了!这才是 HR 喜欢听的离职原因!

哈喽,大家好 我是 xy👨🏻‍💻。今天我们来聊聊一个面试时超级敏感但又不得不面对的问题——离职原因💢 找工作面试被问离职原因,千万不要直接说出你为什么从上家公司离职的真实原因!!! 当老实人要吃亏的!!! 其实,大部分真实的离职原因都是每家公司或多或少会遇到...
继续阅读 »

哈喽,大家好 我是 xy👨🏻‍💻。今天我们来聊聊一个面试时超级敏感但又不得不面对的问题——离职原因💢



找工作面试被问离职原因,千万不要直接说出你为什么从上家公司离职的真实原因!!!


老实人要吃亏的!!!


其实,大部分真实的离职原因都是每家公司或多或少会遇到的,但如果直接说出来,很可能会让面试官担心你入职后也会因为同样的原因离职哦!💢


😉 所以,作为一个聪明的求职者,我们应该如何回答这个问题呢?


6 个常见的离职原因


首先,让我们来看看这 6 个常见的离职原因❌,以及它们的“禁忌”回答方式吧!🚫


🎯 工资太低

🚫 禁忌回答:因为前公司给的工资太低了,我实在是受不了了。



🎯 加班严重

🚫 禁忌回答:前公司加班太严重了,我身体都垮了。



🎯 领导傻 X

🚫 禁忌回答:前领导简直就是个傻 X,根本不懂管理。



🎯 被裁员

🚫 禁忌回答:我之前的公司裁员,我被无辜波及了。



🎯 无法升职

🚫 禁忌回答:我在前公司干了几年,但一直升不上去。



🎯 同事相处不和谐

🚫 禁忌回答:前公司的同事们都太奇葩了,我实在受不了。



👀 看到了吗?这些回答都是大忌,因为它们会让 HR 觉得你不稳定、有负面情绪、甚至可能是个问题员工。那么,正确的回答方式是什么呢?别急,我们接着往下看!✅


🎯 工资太低

✅ 回答模板:HR 您好!我过去 2 年,在公司和领导的帮助下,我在技术和能力方面有了很大提升,为公司开发的各种工具和库,极大地提高了项目开发效率,领导对我很认可,但公司的薪资结构有一些硬指标,无法满足我的涨薪需求,所以想看看市场上的新机会,寻找一个可以长期稳走发展的平台。



🎯 加班严重

✅ 回答模板:HR 您好!在上家公司,我的工作效率较高,能按时保质保量地完成工作,但前司会定期统计加班时长,并以此进行考核,导致大部分人为了加班而加班,效率非常低,我个人并不反对加班,但这种低效的常态化 996,我并不认可,我希望能在更人性化管理的公司里发挥优势。



🎯 领导傻 X(这个有点难,但我们可以尽量委婉)

✅ 回答模板:HR 您好!因为前公司的工作职贵划分比较固定,每个人负责的业务比较少,对于所负责的开发工作,我已经没有什么新知识可以学的了,我希望职业生涯是一个持续的学习和提升的过程,并且在自己具备了相关业务技能经验后,也想迎接一些新的挑战。



🎯 被裁员

✅ 回答模板:HR 您好!前公司当时在进行业务调整,公司想让我调到其他业务线上,岗位职责也发生了变化,我觉得自己还是很擅长做前端工具链方向的开发,并且也在这块积累了几年经验,还是想继续在这个方向上深耕,因此出来看看机会。



🎯 无法升职

✅ 回答模板:HR 您好!前公司管理比较扁平,虽然一直被领导重用,也负责过多个核心业务,但是职级几年来来一直没有变化。领导也争取过,但由于工作年限等原因,没能通过。我不想安于现状,想找一个更能发挥自己才能的平台。



🎯 同事相处不和谐

✅ 回答模板:HR 您好!我之前在前司能力不错,取得了不错的成绩,但由于分工不太合理,出现了很多扯皮现象和低效沟通,影响到了工作效率,有时甚至会影响整个项目的进度,内耗较大,所以决定离开,希望找一个氛国好团队长期发展。



💡 记住了吗?面试时回答离职原因的关键在于:不要贬低前司和前同事不要让 HR 觉得是你的问题也不要吐槽前司的任何不足。掌握这些要领,相信你在面试中一定能够游刃有余地应对这个问题啦!




作者:前端开发爱好者
来源:juejin.cn/post/7351321275975843867
收起阅读 »

减肥 & 恋爱 - 2023年度总结

前言 大家好, 我是前夕. 2023已经过完了, 我也想简单聊聊这一年发生的事情. 今年发生的事情不多, 但是都足以改变我未来人生的走向. 五个月减肥32斤 今年最大最大超级无敌大的改变, 就是减肥了. 我是95年生人, 工作已经5年了. 这个年龄段相当多的人...
继续阅读 »

前言


大家好, 我是前夕. 2023已经过完了, 我也想简单聊聊这一年发生的事情. 今年发生的事情不多, 但是都足以改变我未来人生的走向.


五个月减肥32斤


今年最大最大超级无敌大的改变, 就是减肥了. 我是95年生人, 工作已经5年了. 这个年龄段相当多的人身体都已经出现了一些警告信号. 其实肥胖就是最早的不痛不痒的信号. 我的老粉也都知道我花了半年时间减掉30多斤的事儿. 作为年终总结很重要的一趴, 我还是要简单提一下. 其实之前我一度认为胖不胖的无所谓, 人生苦短, 怎么开心怎么来. 但是相信我, 瘦下来的快乐是你无法想象的.


这是今年3月的我. 身高170, 体重162. 你也可以称我为正方形战士.


这是今年3月的我. 身高170, 体重162. 你也可以称我为正方形战士.


这是今年3月的我. 身高170, 体重162. 你也可以称我为正方形战士.


image-20230924145422838


image-20240106150356245


这是今年9月的我. 身高170, 体重130. 你也可以称我为猛男.


这是今年9月的我. 身高170, 体重130. 你也可以称我为猛男.


这是今年9月的我. 身高170, 体重130. 你也可以称我为猛男.


image-20240106160113246


image-20240106150717340


肯定有朋友会问, 减肥成功的正脸照是不是美颜了? 答案是的, 但是, 第一张也美颜了, 且是同一部手机. 一荣俱荣一损俱损. 另外, 我必须得说明, 我很清楚自己的颜值缺陷, 是眉毛太淡了, 因为小时候眉毛受过伤, 所以特别淡. 于是做了纹眉. 别的没了. 主要差别其实还是减肥带来的, 只要你胖, 怎么样都不好看. 只有瘦下来, 你捯饬自己才有效果.


接下来说说身材. 健身的人都懂, 肌肉身材往往需要阴影的配合. 确实是这样的. 所以我也放出我正面直拍的照片.


image-20240106163727183


就半年时间我也练不到多猛. 现在这个肌肉量已经相当可以了, 毕竟我的起点是个肥宅. 回顾减肥的历程, 只有减过肥的人知道这有多难. 虽然我早就结束减肥了, 但是我仍然觉得五个月32斤是个很夸张的数字. 其实减肥带来的好处, 我真的是一时半会说不完, 只能说我在体重恢复正常时, 看着镜子里一身腱子肉的自己, 我好像宇智波斑解除了秽土转生一样, 只能用青春正当时来形容自己.


image-20230924150305870


相信很多同学看到这会打鸡血, 表示自己24年也要减肥! 首先我希望你不要向我的变化程度看齐. 因为我付出的代价非常大. 运动, 只是一环, 还有很多其他方面. 而我身边(包括朋友圈)真正减肥成功的, 不到半只手. 难度真的挺大的. 如果你坚持就想要减肥, 非常好. 那么我推荐你可以看看我的方法论: 五个月减肥32斤, 涅槃重生也不过如此


交往了00后女友


在去年十月底和现在的女朋友谈了. 这段故事我想简单说下, 有点魔幻. 其实我刚刚工作的时候就认识她了. 是网上认识的, 相谈甚欢, 甚至她明确表达过喜欢. 但是因为异地的问题(她在成都我在上海), 所以双方都pass掉了. 后来也就过年发下祝福啥的, 日常都不联系. 我也理解, 因为对于没有结果的喜欢, 没有人会一直坚持. 我也只是希望大家就做朋友就好. 直到去年我老是刷到一家外卖叫料可可炒饭. 而她的小名也叫可可. 我很多次想截图发她, 但是都没行动. 因为没什么意义, 我又没指望什么, 我连聊都懒得聊. 但是确实经常点外卖就能看到. 后来我就忍不住了就发她了.


image-20240106170401148


我没想到她怎么还找上话题了. 我只是单纯想和她分享一下而已. 但是她既然说了别的话题, 行吧, 那我就陪你聊下, 不然不回人家显得我很冷血. 结果越聊越high, 当晚就打视频, 她还是几年前的那个模样, 而此时, 我已经减肥成功, 她都不知道我胖过. 全程和我聊的也很开心, 一瞬间不知道到底是她和我聊的来, 还是我和她聊的来, 还是双方真的聊的来. 对线细节不说了, 简单几次出招后她就摊牌了.


她: "如果你在成都就好了, 我想和你谈恋爱".


当她说完这个话, 我就想挂电话了. 其一是我觉得她上头了. 其二是我真的很困, 当时已经凌晨4点了. 但是我却很难入眠. 那晚我一直在思考一个问题. 我喜欢她吗? 说实话, 都那么久没联系了, 你说喜欢不喜欢的, 只能说还行, 毕竟还没谈, 喜欢不是理性的产物, 至少我还是很愿意和她相处的, 且确实聊的非常开心. 不知道大家能不能get到遇到一个同频的人有多难得.


然后我就思考第二个问题, 我和她没在一起的原因是什么? 之前她一直想待在成都, 而我对成都其实也没什么感情. 之前一直想去杭州(大学在那边读的), 因为无法解决地域问题就没继续了. 但是工作久了, 发现在杭州的朋友慢慢的也都离开杭州了, 杭州对我来说, 也已经没有多大意义了. 我对于待在哪个城市, 不是很有所谓. 那这不正好吗? 去成都呀. 也就是说, 4年前的我和她, 地域问题导致我们并不合适. 但是现在, 双方都有能力选择自己想要的生活.


所以第二天晚上问她要不要视频. 我当时想好了, 她可能确实是聊上头了才说喜欢的. 所以如果她拒绝接听视频, 那我就当什么都没发生. 成年人嘛, 这都基操了. 但是她秒接视频. 于是我就说了下面这句话


"你有没有想法把我们的关系再推进一些?"


她明显愣了下, 我看出了她也是在考虑地域问题. 她肯定想不明白地域这个问题该咋解决.


我赶紧补充道: "我知道你想待在成都. 对于以后定居成都的事儿, 我也不是很介意. 但是, 这不是一个飞机票的事情. 咱们倒推下, 假如我们在成都生活, 前提是我们一起攒够钱. 而这个前提, 是我作为程序员, 只有在大城市才有比较好的就业机会. 再往前, 那你得先来到上海和我一起赚钱, 再往前, 我们得是情侣, 再往前, 需要判断我们是否真的合适在一起. 那么怎么判断我们是否合适在一起呢?"


经常谈恋爱的朋友们肯定知道, 判断一个人能不能和自己谈, 不可能需要个把月的时间. 基本上相处几天就能确定大概方向了, 再慢不过半个月, 如果有朋友觉得这个速度太快了, 那只能说明你的段位太低了.


"我们可以出来玩一下, 就知道是否适合谈恋爱了. 如果适合, 我们就试着在一起. 不适合, 就当一切都没发生. 就算在一起, 我们也一定是要双向奔赴的. 不是我努力就能有结果, 也不是你单方努力就能有成效. 双向奔赴一定是我们的唯一解. 我下周再买机票来见你, 我给你一周的时间考虑要不要见面"


不知道是不是她没听到最后一句话, 她马上打开了boss开始看上海的工作机会了. 后来我们的见面也如期而至, 当天晚上就在一起了.


目前谈了2个多月了, 她还没来上海, 因为她行业的问题(媒体), 她哪怕去北京都很容易找, 但是在上海反而很难找. 这个原因涉及到一些敏感信息, 我不方便在这里解释. 总之, 她一时半会确实很难过来, 只能说在尝试.


目前我们是一个月见一次, 每天晚上就是打视频+玩蛋仔派对. 因为异地, 每天只能在游戏里约会.


image-20240107164714324


image-20240107170248689


我能感受到她确实是在向我奔赴而来. 之前我们公司经历了几次裁员, 我和她商量, 要不要我现在去成都. 不想异地恋了. 她和我说


"你不要为了我来成都, 你优先考虑哪个地方对你的工作是最有利的, 不管你在哪里, 我都会想方设法靠近你" 当时我真挺感动的.


我的房租是半年付的, 一次性交了1w多, 我和她分享说1w多好贵啊. 我只是单纯地分享, 而她犹豫了下说要不然我们2个月见一次吧. 我还愣了下, 为啥突然这么说. 随后我就反应过来她是希望降低我的经济压力. 对此我肯定是不会同意的.


类似的案例有很多, 不一一撒狗粮了. 因为每个月只能面对面地抱在一起三天时间(周末+年假一天). 所以最后天其中一个人就要去机场返程了.


image-20240106182920302


每次我们送别彼此都会很难受. 上次我去成都返程, 我前脚刚走, 她就泪崩了. 其实她比我坚强. 如果是我送她离开上海, 一般是她还没走我就已经难受的不行了.


现在男女冲突挺严重的, 我时常在沸点看到jym不是女朋友想方设法让你送礼物, 就是对象只顾着自己不顾家, 甚至上次还有个离婚了等着要分老公年终奖的. 这样的男女矛盾屡见不鲜. 我也很庆幸遇到了一个双向奔赴的女孩, 我们都在尽自己所能给彼此最好的生活. 为了保护女友, 我还是不放人家照片了. 随便放一张意思下.



网上一直有个争议很大的话题, 就是选择一个你爱的人 还是 爱你的人. 我现在的答案是应该选择一个我爱的人, 因为想起她, 我会充满干劲. 而更幸运地是, 她同时也爱着我.


思想更加开阔


去年看了点书, 不多, 就几本, 不到一只手. 但是我受益良多. 很多人觉得幸福是客观存在的, 我有大鱼大肉吃就是幸福, 我可以不上班就是幸福. 但是这是真的吗? 其实不完全是. 幸福是主观的. 引用某著作的一段话



淘宝和拼多多上的基础款羽绒服也比清朝最好的棉衣要暖和轻便;慈禧兴师动众劳民伤财的在北京城的数个地点开凿了上万平米的冰窖,只是为了将冬天的冰存到夏天来祛暑。而现在每一个装有空调的家庭都能在这一点上比慈禧过的更舒服。甚至是经济条件不足以购买空调、支付电费的当代中国人,也可以去地铁站、图书馆、商场等公共场所享受这种超过老佛爷的体验。



但是我问大家一个问题, 慈禧的幸福感比你差吗? 如果幸福是绝对依赖客观世界, 那么随着科技的发展, 大家应该越来越幸福才对. 但是现实是这样的吗? 显然不是. 当然, 我们不能否认客观世界对幸福的影响. 比如疼痛, 肯定是不幸福的. 有钱的话可以体验更好的医疗, 让疼痛不那么多, 这也是幸福. 但是我想强调的是, 幸福并不100%取决于客观世界. 在这里我是希望大家不要忽略主观想法对幸福感的影响. 这也是为什么说心态很重要的一个原因. 还有很多想说的, 但是我写完又删了, 因为哲学的东西讨论起来, 确实非常依赖你的经历和你所处的精神层次, 甚至会引发大家的争吵, 想想算了, 反正我觉得很多事儿我想的比之前明白了, 也没有了精神内耗, 现在每天都挺开心的.


结语


我不喜欢规划, 所以也不会说什么24年要怎么怎么样, 如果有, 那也只是说说而已. 因为说是说, 做是做. 而生活, 总是见招拆招. 在这里, 我只想祝福大家天天开心!


作者:前夕
来源:juejin.cn/post/7320541744352854057
收起阅读 »

致青春 → 十年了,她依旧历历在目

开心的一刻 一老大爷坐火车,买的是慢车票,却上了快车 乘务员查到了,对他说:“老人家,你的票要补哦” 老人家听了眼一瞪说:“上面的洞洞是你们剪的,咋喊我补呢?” 乘务员傻眼了,解释到:“不是票坏了喊你补,你买的票是慢车票,这趟车是快车,你应该补快车票” 老人大...
继续阅读 »

开心的一刻


一老大爷坐火车,买的是慢车票,却上了快车

乘务员查到了,对他说:“老人家,你的票要补哦”

老人家听了眼一瞪说:“上面的洞洞是你们剪的,咋喊我补呢?”

乘务员傻眼了,解释到:“不是票坏了喊你补,你买的票是慢车票,这趟车是快车,你应该补快车票”

老人大悟,说道:“哦!是这样啊;那你喊司机开慢点吧,我又不赶时间”


骑猪.gif


十年的回忆


今天无意之间听到了Eason十年,突然意识到我已经大学毕业十年了

十年,经历了很多,也成长了很多

当初的青涩已不复存在,留下的只有无尽的沧桑

唯一不变的是,我依旧孑然一身


单身的牢笼.gif


这十年

有轻松快乐的游戏生活

也有战战兢兢的职场蹉跎

经历了说走就走的旅行

也经历了痛彻心扉的爱情

从当初的意气风发,到如今的随波逐流

终究活成了当初最讨厌的样子!


他好像一条狗呀.gif


要问这十年间印象最深的一次经历是什么

毫无疑问是十年前的川藏线之旅!


无意的决定


2013年6月的某一天,好哥们(阿超)突然发来QQ消息:我们去骑川藏线吧

我很淡定的回道:好啊


我们去骑行呀.gif


然后阿超又约上了另一个好哥们(阿方)

至此,三兄弟的川藏线协议就此达成

约定好.jpg


从左往右:阿超、楼猪、阿方


"充分"的准备


说到准备,我只能说我们是:无知者无畏


还有谁.gif


装备准备


阿超是我们三个中最早接触骑行的,大三的时候他就购买了他人生中的第一辆山地车


阿超的山地车.jpg


我记得当时的购入价是1500,他骑着他心爱的座驾,逛了邵阳不少的地方,其中也包括崀山

因为他接触的早,所以除了车之外的装备,都是阿超在淘宝上选购的

包括抓绒衣、防晒服、头巾、手套、冰丝袖、打气筒、补胎套件、驮包、手电筒、尾灯等等

说到抓绒衣,就不得不提一下,也不知道当时是不知道有冲锋衣了,还是预算不够,我们就买了普通的抓绒衣


抓绒衣.jpg


好几次差点成为冰雕,后面我再细说

然后就是我跟阿方的自行车,当时应该是考虑到预算的问题

我们在淘宝上买了2辆,一辆是“悍马”,一辆是“宝马”,还都是折叠车!


悍马与宝马.jpg


最前面的是我的“悍马”,中间的是阿超的美利达,最里面的是阿方的“宝马”

我和阿方的车单价是565,两辆一共1130

现在想想我俩的胆是真肥,这样的车是怎么敢上路的!!!


还有王法吗.gif


至于拍摄装备,当时没想那么多,就各自的手机:阿超的Nokia 5230、我的Nokia 830、阿方的OPPO(型号不记得了,是个翻盖)


攻略准备


攻略也是阿超全权负责,哪一天从哪出发,每一天要到达哪个目的地

考虑到安全、时间、预算等因素,我们一开始就计划住青年旅舍或者当地居民家,没打算户外扎帐篷


川藏线路线.png


川藏线分南线和北线

南线由四川成都雅安泸定康定东俄洛雅江理塘巴塘西藏芒康左贡邦达八宿波密林芝工布江达墨竹工卡达孜拉萨,属318国道

北线成都东俄洛南线重合,再由东俄洛南线分开北上,经八美(原乾宁县)—道孚炉霍甘孜德格西藏江达昌都类乌齐丁青巴青夏曲那曲当雄羊八井拉萨,属317国道

南线相较于北线,平均海拔更低,开发也更早,更容易骑行

所以我们选择了南线,也就是上图中标粗的主线


拉练准备


我们三都没有进行实战型的拉练,阿超相较于我俩,只是平路骑的比较多

长距离的上山、下山,我们都没有试过

在出发前的前一周,我们一起绕着大学骑了三圈

这就算完成了我们的拉练...


刺激的旅途


2013年07月16号,我们正式出发了

坐上了可爱的K487次列车,历经17时49分,于2013-07-17 13:37到达了成都东站


成都东站.jpg


然后我们骑车来到了成都师范学院,在附近找了一间民宿,调整了一晚


出师不利始康定


2013-07-18 06:00正式开始了我们的川藏线骑行之旅

似乎天空不作美,一出门就看见仙女的眼泪,密密麻麻的滴在地面,也滴在了我们的心里

纵使她万般挽留,我们依旧没有丝毫的动摇,毅然决然的出发了

可人算不如天算,成都到康定的这段318路线因暴雨已经封闭,不让通行


挨刀.gif


不知道要封闭多久,其他路线又没有详细的攻略,不敢贸然行动

所以我们选择了一种轻松的方式:坐汽车到康定


坐车.jpg


经过漫长的等待、颠簸,于2013-07-18 22:13,我们到达了康定


康定.jpg


下车后,急忙找了一间民宿,那时是真的困,我们很快就进入了梦乡

婴儿般的睡眠,很是怀恋


初尝失算新都桥


2013-07-19清晨,正式开始了我们的骑行之旅

天空些许阴沉,冷风中夹带着细雨,零零散散的行人,时不时的哈气、搓手

此时的我们异常兴奋,直奔着下一站(雅江)急速而去

骑行了17公里之后,我们来到了折多山脚,此时已是上午的09:45,距离折多山垭口还有35公里

心里想的是:哼,才区区35公里,那不是张飞吃豆芽,小菜一碟?

可骑着骑着,我们发现速度并没有比徒步的快,似乎还有被超的迹象!

13:00,此时距离垭口还有13公里,我们的锐气已荡然无存,高反已悄然而至

加上没有准备足够的干粮,我和阿超已明显感觉不适,眼前发黑,停下车,靠着路边的防护栏呕吐起来

阿方见状,在路边的摊贩买了两瓶红牛(一罐貌似是八块!),递给了我跟阿超

喝了红牛之后,我们在路边坐了将近一个小时,状态才基本恢复,顶着饥饿继续前进

17:47我们终于到达折多山垭口


折多山垭口.png


此时天空下起了雨,还伴随着一粒粒的冰雹,放眼望去,哪有栖息之所?

我们只能继续赶路,赶往45公里外的新都桥(至于既定的目的地:雅江,一点想法没有了)

一路下坡,一路狂飙冷冷的冰雨在脸上胡乱的拍,呼呼的狂风在耳边肆意的啸,很快全身湿透,体温急骤下降

全身开始哆嗦,嘴唇逐渐变紫,直至发黑,更让我绝望的是小腿开始抽筋,丝毫不敢用力

望着渐行渐远的两个小伙伴,我甚至连呼喊的力气都没有了,隐隐约约看见死神在逼近

擦干眼睛,定神一看,那不是死神,那是我的两个兄弟!

看着摇摇晃晃的我,他们拼尽最后的力气拦停了我的车,将我从车上艰难的扶下了车

我们用尽最后的力气把车推到了路边的休息区


新都桥休息区.jpg


望着被紧紧绑住的驮包,我们陷入了绝望,尝试了几次,弹力绳纹丝不动

也许是上天怜悯,一辆温馨的小轿车在我们旁边停了下来,从车里下来了一个帅气的大哥

在他的帮助下,我们终于换上了干衣服、干鞋子,而此刻雨也停了

时间已经来到了19:57,天空还剩最后的一丝余亮,距离新都桥还剩9公里,我们继续前行

因为太过饥饿,这9公里显得格外的遥远

当看到路边藏民家的灯的时候,我们决定停下了(此时距离新都桥还剩3公里)

热心的藏民同胞给我们安排了房间,还给我们准备了丰盛的晚餐


新都桥晚餐.jpg


吃饱之后,倦意席卷而来,很快我们就进入了梦乡

不幸的是,第二天阿超就感冒了,我们只能休整一天,顺便把湿衣物吹干(吹风机慢慢吹)


一秒入睡在雅江


在新都桥休整好后,我们继续出发,朝着雅江而去

翻越了4412米高的高尔寺山


高尔寺山.jpg


翻山随难,但不似折多山那般,也没了高反,一切顺利了很多

从山顶顺坡之下,犹如脱缰的野马,飞速疾驰

车轱辘似乎也放肆了起来,隐隐有要单飞的感觉,我时不时的紧一紧刹车

16:00,我们到达雅江,感觉还早,我们继续往前赶路

又骑了一个半小时,困意席卷而来,忌惮于折多山的余威,我们决定停下休息

阿超去点菜的间隙,我和阿方已经进入了梦乡


雅江梦乡.jpg


困,是真的困!

上完菜后,阿超细声的呼唤着我俩:醒醒,吃饭了!

三人狼吞虎咽,将菜一扫而光,所幸饭可以无限续

饿,也是真的饿!

吃饱喝足,进行洗漱整理,伴随着黑夜的降临,上床入梦


一分为二入理塘


早上六点我们就出发了,今天的目标是130公里外的理塘

距离不是很远,但有两座大山,不会那么容易的


叶问_没那么容易的.gif


经历了前几天的磨砺,我们已经基本适应,虽说速度依旧慢,但身体已没有不适

一路晴空万里,蓝天白云,漫游在山坡上,内心纯粹无比


雅江_理塘 晴空万里.jpg


顺着超扁的S型盘山公路在山坡上蠕动,内心毫无杂念,一心就想着上垭口

终于于15:00到达4659米高的剪子弯山垭口


剪子弯山.jpg


不敢做过多的逗留,休整片刻后我们继续往前赶路

下坡是所有骑友的最爱,其中也包括我

但依旧不敢完全松开刹车,任由我的“悍马”驰骋,左边时常经过的大卡车,右边深不见底的深渊,时刻告诫着我们不能掉以轻心

伴随着夜幕的降临,我们已经身心俱疲,但依旧没有找到可以落脚的地方

打开前后车灯,继续往前骑,伴随着一阵阵的狼嚎,终于在21:35找到了一处藏民的帐篷

此刻我们饥寒交迫,没有任何赶路的想法了

和藏胞谈妥后,悬着的心终于放下了,围着火炉坐下,感受着暖意的扑面而来

藏胞给我们热了酥油茶,一口下肚,暖流入胃,奶香上鼻

还给我们煮了牛肉面,粒粒牛肉,片片白菜,根根面条,在白汤的滋润下,鲜香无比

吃饱之后困意如期而至,宽大的帐篷下簇拥着好几张床,挑了心仪的一张后安然入睡


雅江_理塘 帐篷.jpg


第二天清晨,我们看到了高大威猛的藏獒、天真浪漫的小牦牛、任劳任怨的母牦牛,在晨光的照耀下,是那么的静谧与美好


雅江_理塘 牦牛.jpg


和藏胞进行了短暂的告别后,继续我们的旅途,朝着理塘而去

途中翻越了卡子拉山


卡子拉山.png


剪子弯山理塘的路程,整体海拔是下降的,整个路线也是下坡居多

卡子拉山只是其中少有的上坡的小插曲,上升高度很低,少了翻山的难度,也少了翻过的兴奋

翻过卡子拉山后,阿方的“宝马”开始兴奋起来了,后轮出现了很明显的左右摆动,像是在告诉我们:来吧来吧,一起摇摆!


一起摇摆.gif


我和阿超赶紧跟上去,打断了阿方的兴奋,三个人一起下车,推车前行

边走边拦截路过的四个轱辘 ,希望能拦停好心人,将阿方连人带车一起带去理塘

也许是上天刻意的考验,四个轱辘都是从擦身而过,除了带起一片尘烟,什么也没有留下

推了一段距离后,我们决定阿方去最近的158道班(类似一个小驿站)修车和休整,我和阿超先去理塘等阿方

这里说明下:不是我和阿超“抛弃”了阿方,是考虑到158道班很小,而一路上骑行的驴友很多,我们三个人都去的话,可能住不下,另外就是身上的现金已所剩无几,需要去理塘取钱了


158道班.png


阿超(“独揽财政大权”)将身上本不多的现金一大半给了阿方(计划是去理塘取现金的),然后将阿方驮包中的馕、需要清洗的衣服拿了过来

阿方推车朝着158道班而去,我和阿超则骑车奔着理塘而去

在日落前我和阿超赶到了理塘


眺望理塘.jpg


理塘东城门.jpg


找了一间旅馆,卸下行囊,把需要清洗的都清洗好之后,我和阿超开始了啃馕

第二天接着啃馕,等着阿方的到来

16:40,阿方来了,加入了啃馕队伍,晚上三个人一起啃馕,馕好像变香了!


日行百八飞巴塘


经过一晚的休整,三人状态都恢复的不错

理塘巴塘有将近180km ,早上六点我们踏上了前往巴塘的旅程

出了理塘西城门,就来到了毛垭大草原 ,群山环抱,郁郁葱葱,停车驻足,心旷神怡


毛垭大草原.jpg


路况非常好,视野很开阔,一眼过去,直达天际

花花草草的地下隐藏着很多大家都很熟悉的小可爱,没错,就是它:


土拨鼠.gif


大概下午四点,我们登上了海子山垭口,看到了柔美的姊妹湖,湖水碧蓝,恬静而温婉,堪称人间仙境


姊妹湖.png


停下车,快速的奔向姊妹湖,近距离的欣赏、感受着姊妹湖,内心逐渐平静,身心的疲惫也慢慢消散

纵有万般不舍,依旧要往前行

收拾心情,八十千米的下坡,我们来了!

一路下坡,穿过好几个隧道后,终于在晚上九点多来到了巴塘胖姐休闲庄

我们这一次终究还是来得太迟,错过了床才有的温馨舒适,酝酿好久终放下对床的相思,最后客厅过道成地铺地址(改编自歌曲太迟


出川入藏至芒康


即将入藏,无比期待,早早的就出发了

沿着巴河南下,很快来到了金沙江


金沙江.jpg


一似渭,一似泾,汇合似渭泾,实属难得的景观
来到金沙江大桥,望着西藏的界碑


西藏界碑.jpg


想着即将见到魂萦梦绕的她,激动万分

停车回首,感慨颇多


四川界碑.png


来不及好好告别,空留一段,记忆的线,系不下长长的哀恋 ,却魂绕梦牵,恍惚中又和你相见(摘自歌曲

经过长长的排队,检查了身-份-证,登记了基本信息,我们终于进藏了,梦里的她,我们来了!

经过漫长的缓上坡,于下午七点左右,我们来到了海通兵站,在海通兵站的斜对面找了一个落脚点:扎西德勒藏餐馆


扎西德勒藏餐馆.jpg


二楼一个大房间内,床挨着床,放置好行李后,发现二楼没有洗手间

来到一楼询问老板娘:你好,请问洗手间在哪?

老板娘:洗手间?

我:厕所在哪?

老板娘向屋后指了一下,然后画了一个圈,好像在说:屋外都行

疑惑的我们来到屋外,向河边走去,突然从河边的深草中站起一个女孩,时不时的整理身上的衣服

我们三个面面相觑,顿时悟了:诺大的露天洗手间,河边、山间都可以大小恭,于是我们在山边的灌木林中解决了排泄问题

晚上躺在床上快入梦乡时,陆陆续续来了很多藏胞走进了隔壁的房间,不一会就响起了嘹亮的歌声;原来隔壁是个KTV

伴随着他们“优美的歌声”,我们迟迟未能入睡,听又听不懂,说又不敢说,只能强迫着自己尽力去“欣赏”

好不容易入睡了,结果又赶上两大狗帮在街斗,狗吠声很响亮,听着有大几十只

也不知道斗了多久,它们终于散去,至于谁输谁赢,无从知道

那晚,我也不知道睡着了多长时间

要不得说,年轻是真好,第二天依旧六点出发,虽说不是十分兴奋,但没那么疲惫

不知不觉就来到了宗拉山垭口


宗拉山.jpg


没有了往日翻山的艰难,似乎也少了翻过之后的兴奋

继续前行,当来到拉乌山垭口的时候,突然乌云密布,豆大的冰雹顷刻间就落下


拉乌山.png


似乎冥冥中注定一般,正好路边停着一辆大货车,暂时寄居在它的庇护下

高原地区的雨雪,来的突然,去的也突然,不一会又晴空万里了

经过35km的长下坡,我们来到了如美镇,找了一间旅舍,停下了脚步,开始清洗衣物


如美镇.jpg


经过一晚的休整,状态恢复的很不错,但今明两天注定很艰难

险峻莫过觉巴,高寒当属东达 , 觉巴山是今天要征服的,而东达山是明天要翻越的
来到觉巴山脚,抬头望去,一排又一排的U型盘山公路,脑瓜子嗡嗡的


觉巴山脚.jpg


公路左边是万丈深渊,右边是怪石嶙峋的峭壁,着实险峻

一路盘山而上,一路心惊胆战,到达觉巴山垭口后


觉巴山.png


迎来了短暂的下坡,在登巴村进行了短暂的休息后,继续前行,赶往荣许兵站 
终于在晚上八点左右达到了荣许兵站 ,找了一家旅舍,吃饱喝足后开始入睡,明天又是一场鏖战


推上最高下左贡


清晨,天空灰蒙蒙,下着小雨,温度很低

没蹬几步,阿方停下了,他的“宝马”左边的脚踏板掉了,气人的是我们装备里面没有大扳手,没法拧紧,真的是:屋漏偏逢连夜雨,船迟又遇打头风

所以我们仨决定,一同推车翻东达

一路推行,我们超越了好几拨骑行的,他们都露出了怀疑的目光

大概下午两点,我们到达东达山垭口,鞋子和裤子已经湿透,但我们内心却火热无比


东达山.png


盘边帐篷是个补给点,但东西是有点贵,拿起的泡面又放下了

稍息片刻,我们骑上车下坡而去,此时寒意更甚于推车

我们在坡边找到了藏胞家,家里只有老奶奶和小孙子,正好有一堆炭火,我们换了袜子和鞋子,烤干了裤子

给他们留了一些糖果后,我们继续赶路,在下午五点左右到达左贡县城

先找地方修了阿方的脚踏,然后找到了邮政银行取了现金,还补充了干粮

吃吃喝喝洗洗后,很快就进入了梦乡


坑坑洼洼颠邦达


左贡邦达,绝大部分是砂石路、搓板路,很伤车,也很伤人

路面坑坑洼洼,四个轱辘经过,要么溅你一身泥,要么扬你一脸灰

所幸今天不用翻山,但骑行速度不比翻山快

在天黑之前,还是到达了邦达


邦达.png


镇上的旅舍基本都满了,我们最终选择了离镇不远的藏胞家

广场上很多藏獒,并非印象中的威猛霸气


邦达广场藏獒.jpg


是放养,还是流浪?不得而知


七十二拐拐八宿


清早出发,很快就开始了盘山,爬了两个多小时后,来到半山腰,回头一看,邦达近在咫尺


回望邦达.jpg


蓝天白云,群山环绕,河流穿过,还有大草原,辽阔壮美,一览无遗

继续盘山,大概十一点,我们到了业拉山垭口


业拉山.png


业拉山垭口有服务中心,自驾的、骑行的、徒步的、朝圣的汇聚于此,或休整、或补给、或拍照、或摄影,热闹非凡

在观景台看到了即将要奔赴的怒江72拐,壮观无比,令人瞠目结舌


怒江72拐.jpg


也得知了它亦称九十九道拐


九十九道拐.jpg


心中窃喜的是下72拐,而不是上

下山时,双手要紧紧放在刹车上,时不时捏一下刹车降一下速度,听说这里出过很多事故,所以我们格外谨慎

快乐与危险并存,天堂与地狱一线,痛并快乐着

从垭口到怒江边上,海拔降了近2000米,短短的几个小时,我们就经历了四季,山顶的冬冷,山腰的春(秋)暖(爽),山谷的夏热

停车稍息片刻,补上几口干粮,继续赶往八宿

今天比较顺畅,天气很好,人和车都很稳妥,早早的就到了八宿县

八宿挺大的,房屋挺多,此刻的气候也很暖和


天不遂愿待然乌


早早的出发,今天的挑战不小

不同于之前的长上坡,也不同于之前的U型盘山公路
70km的反复起伏,总体上坡直至安久拉山垭口,不一样的骑行感受,不一样的骑行困难,就像折多山那次一样,非常难受

但还是坚持了下来,在下午三点左右,我们登上了安久拉山垭口


安久拉山.jpg


休息与拍照自是不可少,天气也很给力,蓝天白云,疲惫感逐渐消散,补充些许口粮之后,继续上路

虽说整体是下山,但却是反复起伏着下坡,心中一万只草泥马奔腾而过

当穿过保护性长廊后


然乌 护廊.png


我们来到了然乌镇


然乌.jpg


找了一家离公路较远、离然乌湖较近的藏民家,有洗浴间,有卫生间,非常不错

一路骑来,都未曾停下好好欣赏周边的风景,和小伙伴商量明天在然乌休整一天,去看看来古冰川

第二天睡了个懒觉,起的比较晚,吃过早餐后,我们租了一辆车去看来古冰川

今天不赶路,就是撒欢!

可惜的是来的季节不对,冰川已离去大半,山顶的冰雪依旧清晰可见,山脚则只有零零星星


来古冰川1.jpg


来古冰川2.jpg


在这里,我们的车队人数达到了最大


来古冰川3.png


从左往右分别是:少帅楼猪阿方琦哥阿超咖啡师阿胜阿凯

一天下来就是看、躺、拍、嬉戏打闹,主打就是一个开心

我们回到镇上吃晚饭,畅聊着接下来的行程,要翻的山只剩两座:色季拉山米拉山,路况也相对会好很多,骑行会顺畅不少

第二天清早,天朗气清,空气清新,我们来到镇上吃早餐

也许是昨天的无限欢乐引起了老天的嫉妒,给我们开了一个巨大的玩笑:昨晚(2013-08-0211通麦大桥断了,整座大桥全部坍塌!

我们一开始都不信,阿超琦哥卸下装备,空骑去核实了,结果属实,但也带回来一丝希望:大桥旁边有一座老桥

老桥宽度不够,只能通行人和自行车,而且年久失修,直接封闭不让通行

我们只能等,期盼着早日把老桥维修好;既然走不了了,那就好好玩乐,当天我们逛了然乌湖


然乌湖.jpg


第二天,一拨人打了一天的升级(扑克的一种玩法),一拨人出去逛了周边

第三天早上,我们来到镇上,打听到老桥还是没有通行,但时间容不得我们继续等下去了(大家都是参加工作,或者是即将参加工作的人)

我们商量决定租车去昌都,然后通过北线拉萨(咖啡师时间比较充足,他决定留下来继续等)


奔昌都.jpg


我们正式开始了四轮之旅!


一路惊魂终拉萨


不得不说,坐车确实舒服不少,就是什么都看不到,丢失了这次旅途的初衷
然乌逆向而行,北上经八宿昌都市

相对而言,昌都要繁华不少,但我们来的比较晚,坐车从南线来昌都的骑友也很多,加上本身就走北线的人

旅店都已经住满,最后派出所收留了我们(不是我们犯了事,实在是没有睡觉的地方了!)
昌都拉萨,具体歇息了几站,不记得了,依稀记得睡过网吧,睡过旅馆等等

昌都之后,司机每天都是重度疲劳驾驶,行驶在悬崖边的公路上,我们提心吊胆,阿超阿胜轮流盯着司机

给司机按摩、喂红牛,一旦司机打盹就拍醒他,时不时放那些激情澎湃的歌曲给司机提神

而我们其他人,貌似没意识到问题的严重性,一个个睡的老香了!

北线的路况比南线要差很多,但风景同样很优美


北线1.jpg


北线2.png


北线3.jpg


2013-08-09早上到达了拉萨


兜兜转转游拉萨


刚进拉萨,一个帅哥开着小车来到了我们旁边,盯着我跟阿方的车,表现出了很浓厚的兴趣

问我们车卖不卖,他的两个小孩一直想要一辆

正好我跟阿方想把车出掉,就问到他能出多少钱

帅哥试了一下我的车,觉得还不错,就说500行不行

然后同伴们就一起吹嘘这两辆车有多好,最后550一辆成交

帅哥开开心心买下了车,放进了后备箱,我和阿方高高兴兴收下了钱,坐上同伴的车快速离去

找了一家岳阳老乡的宾馆,接下来的几天就以此处为大本营了

当天没有出去逛,而是清洗、整理衣物,晚上去网吧打了几把LOL、上传照片

2013-08-10我们开始了逛拉萨西藏博物馆清政府驻藏大臣衙门西藏大学布达拉宫广场大昭寺色拉寺


西藏博物馆.jpg


清政府驻藏大臣衙门.png


西藏大学.jpg


布达拉宫广场.jpg


2013-08-11凌晨2点,琦哥少帅阿胜阿凯排队买票,参观了布达拉宫

阿超阿方觉得太累,就在宾馆休息了

等他们从布达拉宫回来,我们一并去了八廓街,吃当地特色美食,买当地特色纪念品,逛逛买买,甚是悠闲

当我们返程时,发现停在派出所门口的山地车被偷了两辆,琦哥阿胜的车被偷了

小偷是懂车的,琦哥的车5000多,阿胜的车3000多,是我们队伍中最好的两辆车

要知道,这可是2013年!
去派出所请求帮助,说没看没开,也没看到是谁偷走的,无疾而终

很不愉快的回到宾馆,第二天决定去二手车市场碰碰运气

2013-08-12一早,我们一起去了二手车市场,一路看下来,并没有发现琦哥阿胜的车,最后的希望也落空了

下午,我们仨去踩点了拉萨火车站,方便明天的归程


拉萨火车站.png


三天归程脚浮肿


2013-08-13,我们仨和其他小伙伴正式道别,没有依依不舍,分别的很洒脱

阿超的车通过邮寄运回了湖南,上车前买了2斤脆皮蛋糕,一共30元,买了12桶泡面,这些是接下来三天两夜的食物

我们买的是Z266次列车,绿皮的硬座,始于拉萨,途经那曲格尔木德令哈西宁兰州咸阳西安郑州武昌,最后到达长沙

一共要花47小时39分钟,但因为晚点了一个多小时,我们一共坐了49个小时

青海湖非常漂亮,湖边很多飞禽走兽,碧蓝的天空映射在湖面,煞是美丽,此刻只想吟诗一首:落霞与孤鹜齐飞,秋水共长天一色


青海湖.jpg


拉萨(海拔3660多)到西安(海拔400多),海拔降的很快,车上很多人出现了严重的耳鸣,幸亏火车上有随行的医护人员提供帮助

我们仨也出现了轻微的耳鸣

西安进行了换车,阿超用仅剩的钱买了三个肉夹馍,肉没有,夹了不少盐,这不讲武德的商贩欺人太甚!


265.gif


终于在2013-08-15下午一点多,我们到达了长沙

当我准备起身时,发现起不来,低头一看,整个脚背全水肿了,转向他俩一看,一样的情况,估计是坐太久没动的原因导致

轻柔一下脚背,稍微运动一下脚,慢慢的可以起身动起来了

2013-07-162013-08-15,整整一个月(是巧合,还是计划好的?),我们的旅程正式结束!


相关补充


资金


我们这次出行,家里父母是都不知道的,我们也没向家里要钱

通过大学期间的捣鼓:家教售卖二手电脑其他兼职等,我们存下了这次旅行的费用

最初人均预算是4000多,最后超出了预算一丢丢,在可以接受的范围之内

其实是可以拉赞助的,途中我们就遇到了很多拉着捷安特美利达等等横幅的骑友,据说赞助费不菲


火车票


从拉萨到长沙的火车票,需要提前15天预订
骑行途中通过另外一个好朋友帮忙买的,买了之后退的话,怕再次买不到了

这也是我们不能在然乌一直等的原因


照片画质


相信很多小伙伴已经看出了上文中的很多照片,画质喜感

没办法,绝大部分照片使用直板手机拍的,那时候智能机还没普及,手机拍照功能很拉胯

少数几张高画质的是从其他同行小伙伴用单反拍的,大家将就着看吧


感悟


车很重要、车很重要、车很重要,但不是最重要的,最重要的还是发动机(人的意志)、发动机、发动机

祖国很大,广袤的大好河山足够我们欣赏一辈子,国外的月亮不比国内的圆

这趟旅程很是历练,如果时间充裕,强烈建议时常停车驻足,用心去感受这纯天然、无污染的自然景观

有空多出去走走,逛逛,看看,给嘈杂的内心寻找片刻安静的港湾,对调整个人心情甚有帮助

十年前的这次旅行,经历了很多挑战、困难,感受了很多惊喜、刺激,留下了太多不舍、遗憾

最近,再骑一次的声音一直萦绕耳畔,内心的冲动也是愈发强烈,但此时非彼时,有生之年能否再骑一次?


作者:青石路
来源:juejin.cn/post/7324011329882374171
收起阅读 »

自己没有价值之前,少去谈人情世故

昨天和几个网友在群里聊天,一个网友说最近公司辞退了一个人,原因就是太菜了,有一个功能是让从数据库随机查一条数据,他硬是把整个数据表的数据都查出来,然后从里面随机选一条数据。 另外的群友说,这人应该在公司的人情世故做得不咋滴,要是和自己组长,领导搞好关系,不至于...
继续阅读 »

昨天和几个网友在群里聊天,一个网友说最近公司辞退了一个人,原因就是太菜了,有一个功能是让从数据库随机查一条数据,他硬是把整个数据表的数据都查出来,然后从里面随机选一条数据。


另外的群友说,这人应该在公司的人情世故做得不咋滴,要是和自己组长,领导搞好关系,不至于被辞退。


发言人说:相反,这人的人情世故做得很到位,和别人相处得也挺好,说话又好听,大家都觉得他很不错!


但是这有用吗?


和自己的组长关系搞好了,难道他就能给你的愚蠢兜底?


这未免太天真,首先组长也是打工的,你以为和他关系好,他就能包庇你,容忍你不断犯错?


没有人会愿意冒着被举报的风险去帮助一个非亲非故的人,因为自己还要生活,老婆孩子还要等着用钱,包庇你,那么担风险的人就是他自己,他为何要这样做?


我们许多人总是觉得人情世故太重要了,甚至觉得比自己的能力重要,这其实是一个侮误区。


有这种想法的大多是刷垃圾短视频刷多了,没经历过社会的毒打,专门去学酒满敬人,茶满欺人。给领导敬酒杯子不能高过对方,最好直接跪下来……


那么人情世故重要吗?


重要,但是得分阶层,你一个打工的,领导连你名字都叫不出来,你见到他打声招呼,他都是用鼻子答应,你觉得你所谓的人情世故有意义吗?


你以为团建的时候跑上去敬酒,杯子直接低到他脚下,他就会看中你,为他挡酒他就觉得你这人可扶?未免电视看得太多。


人情世故有用的前提一定是建立在你有被利用的价值之上,你能漂漂亮亮做完一件事,问题又少,创造的价值又多,那么别人就会觉得你行,就会记住你,重视你,至于敬酒这些,不过是走个过场而已。


所以在自己没有价值之前,别去谈什么人情世故,安安心心提升自己。


前段时间一个大二的小妹妹叫我帮她运行一个项目,她也是为了课程蒙混过关,后面和她聊了几句,她叫我给她一点建议。


我直接给她说,你真正的去写了几行代码?看了几本书?做了多少笔记?你真正的写了代码,看了书,有啥疑问你再找我,而不是从我这里找简便方法,因为我也没有!


她说最烦学习了,完全不想学,自己还是去学人情世故了。


我瞬间破放了,对她说你才20岁不到,专业知识不好好学,就要去学人情世故了?你能用到人情世故吗?


你是怕以后去进厂自己人情世故不到位别人不要你?还是以后去ktv陪酒或者当营销学不会?这么早就做准备了?


她后面反驳我说:你看那些职场里面的女生不也是很懂人情世故吗,你为啥说没用,这些东西迟早都是要学的,我先做准备啊!


我当时就不想和她聊下去了,我知道又是垃圾短视频看多了,所以才会去想这些!以为自己不好好学习,毕业后只要人情世故做到位,就能像那些女职场秘书一样,陪着领导出去谈生意。


想啥呢!


当然,并不存在歧视别人的想法,因为我没有资格,只不过是觉得该学习的时间别去想一些没啥用的事情!


我们所能看到的那些把人情世故运用得炉火纯青,让人感觉很自然的人,别人肯定已经到了一定的段位,这是TA的职业需要。


而大多数人都是在底层干着街边老太太老大爷都能干的活,领导连你名字都叫不出来,可以用空气人来形容,你说人情世故有什么卵用吗?


这不就等于把自己弄得四不像吗?


当你真的有利用价值,能够给别人提供解决方案的时候,再来谈人情世故,那时候你不学,生活都会逼着你去学。


最后说一句,当你有价值的时候,人情世故是你别人学来用在你身上的,不信你回头去看一下自己的身边的人,哪怕是一个小学教师,都有人提着东西来找他办事,但是如果没有任何利用价值,哪怕TA把酒场上面的套路都运用得炉火纯青,也会成为别人的笑柄!


作者:苏格拉的底牌
来源:juejin.cn/post/7352799449456738319
收起阅读 »

三个开发者,支撑一万亿的活跃使用量

对于很多开发者来说,SQLite 一定不陌生。 也知道它很强,但是没想到居然这么强。 SQlite 目前超一万亿(1e121e121e12)的活跃使用量。 它主要用于: 平台包含SQLite移动设备每一台安卓设备,每一台 iPhone 和 iOS 设备计算机每...
继续阅读 »

对于很多开发者来说,SQLite 一定不陌生。


也知道它很强,但是没想到居然这么强。


SQlite 目前超一万亿(1e121e12)的活跃使用量。


它主要用于:


平台包含SQLite
移动设备每一台安卓设备,每一台 iPhone 和 iOS 设备
计算机每一台 Mac,每一台 Windows10 机器
网络浏览器每一款 Firefox、Chrome 和 Safari网络浏览器
通讯应用每一个 Skype 实例
媒体应用每一个 iTunes 实例,每一个 Dropbox 客户端
财务软件每一款 TurboTax 和 QuickBooks
编程语言PHP 和 Python
家庭娱乐大多数电视机和机顶盒
汽车大多数汽车多媒体系统
其他无数百万其他应用程序


👉 表格来源于:http://www.sqlite.org/mostdeploye…



而 SQLite 的全部开发者,也就三个人:




👉 图片来源于:http://www.sqlite.org/crew.html




  • D. Richard Hipp2000 年 5 月 29 日开始 SQLite 项目,并继续担任项目架构师。理查德在北卡罗来纳州夏洛特出生、生活和工作。他拥有佐治亚理工学院(电子工程硕士学位,1984 年)和杜克大学(博士学位,1992 年)学位,并且是咨询公司 Hwaci 的创始人。

  • Dan Kennedy :澳大利亚人,目前居住在东南亚。他拥有昆士兰大学计算机系统工程学位,曾在多个领域工作过,包括工业自动化、计算机图形和嵌入式软件开发。Dan 是主要贡献者自 2002 年起使用 SQLite。

  • Joe Mistachkin(发音为“miss-tash-kin”):软件工程师,也是 Tcl/Tk 的维护者之一。他也是 TclBridge 组件和 Eagle 脚本语言的作者。他自 1994 年以来一直在软件行业工作。


另外一件有趣的事情是,SQLite 不接受任何外来的代码贡献。


也就是说,SQLite 开源,但是并不开放代码贡献。


在 SQLite 的版权声明有提到:




👉 图片来源于:http://www.sqlite.org/copyright.h…



很多时候,都不得不感慨软件的边际成本


一份代码,可以分发给十个人用,也可以给十亿个人使用


三个开发者,就支撑一万亿的活跃使用量。


SQLite 创造的价值,无与伦比,科技改变世界。


REFERENCES



作者:吴楷鹏
来源:juejin.cn/post/7352877037125894180
收起阅读 »

宫崎骏系列电影:《你想活出怎样的人生》观后感

1 回想宫崎骏上一部上映的电影,已经是2013年,距今已有十一年之久,那时在唐山的网吧里,在微博偶然刷到了《起风了》的预告片,一开始就被主题曲《ひこうき雲》轻快动听的旋律吸引住了,加上当时的说法是,这部《起风了》应该是收官之作了,所以当时情绪很复杂,既有期待又...
继续阅读 »


1


回想宫崎骏上一部上映的电影,已经是2013年,距今已有十一年之久,那时在唐山的网吧里,在微博偶然刷到了《起风了》的预告片,一开始就被主题曲《ひこうき雲》轻快动听的旋律吸引住了,加上当时的说法是,这部《起风了》应该是收官之作了,所以当时情绪很复杂,既有期待又有不舍,不像《你想活出怎样的人生》,只是隐约看到一两则新闻,其他没有过多关注,虽然也有说是告别之作,但是竟没觉得有何特别之处,心态还是很坦然的,不过想到宫崎骏老爷子都八十四高龄了,这次应该真的是最后一部了。


2


你想活出怎样的人生?


通过电影名字,就可以知道这部电影的主旨,剩下的就是我们怎么能在这场奇幻旅途之中,寻找到想要的答案。


3


整部影片的剧情用一句话概括就是,二战之后,一个丧母的少年和一只会说话的苍鹭去寻找继母的奇幻旅程。


我本来想着,要把电影剧情一五一十地表述完整,但是,我感觉这个东西很容易变成流水账,完全是为了充字数,并不会有什么价值可言,是个人只要想写,都可以写出来,所以就此作罢。


我觉得观后感,是很自我的东西,不用非常刻意去挖掘多高深的内容,也不需要每看一部电影,好像带着写观后感的任务一样,那就违背了初衷,我不是为了写观后感才去看电影的,我是喜欢电影,喜欢这部电影才有感而发,是很纯粹的一些感受。


4


在电影院观看时,我一开始并不觉得音乐有多出色,至少相比之前那些作品而言,没有觉得很惊艳。但是现在在敲这些文字时,QQ音乐正好放着配乐《Ask me why》,居然觉得很好听,仿佛有一股暖流,慢慢流淌遍及我的全身,而《青サギ》则是清冽的感觉,像在深山的竹林,偶然听见风铃一样冰凉的声音。


5


宫崎骏的电影,没有绝对的善与恶,不同的立场,不同的选择,大家都只不过是为了自己坚持的正义而战罢了。


我很感恩,在我很小的时候,遇到了《千与千寻》和《哈尔的移动城堡》这两部电影,不管岁月如何变迁,不管社会如何险恶,不管人心如何复杂多变,我始终相信,会有那么一样东西,是如此纯粹,如此干净而美好的。


哪怕做不到具体的某个事物,只是某个瞬间,让我们回归到最初的自己,就好像从未改变过一样。


想到《火影忍者》里大蛇丸,找到君麻吕的时候,说的那一段话,抛开PUA洗脑这些因素不谈,整段话还是很有哲理的,带着对美好事物的向往。


“并没有所谓的活着一定就有意义这种事情,但是活下去,说不定能找到有趣的事情,就像你找到了那朵花一样,就像我找到了你一样。”


我又想起来2015年加入的QQ群,叫作06年神雕侠侣,里面就有位大兄弟说的一段话,我很喜欢,所以截图一直保存至今,我想这就是宫崎骏的电影,之所以如此迷人的原因。


“无论这个人走过怎么样的一条路,经历过什么样的沧桑浮华,对美好事物的爱永远都不会消失。”



6


这部电影中,让我印象比较深刻的是苍鹭,太好玩了,他的造型让我眼前一亮,本体是一个留着大鼻子的老头,披着苍鹭的外形,出场的画面都很滑稽,补鸟喙窟窿那段笑死我了哈哈哈,还有就是戴眼罩的样子,太可爱了。然后苍鹭露出原型振翅滑稽的飞行样子,让我想到了《千与千寻》里的苍蝇带着坊宝宝变的小白鼠起飞的样子。除此之外,从影片中还是能看出,有之前很多作品的影子,比如任意门就是对应的《哈尔的移动城堡》,进入异世界的入口就对应了《千与千寻》等等,想必宫崎骏老爷子也是想在告别之作,缅怀自己已逝去的岁月吧。



7


“我不怕火,能生下你,是我的荣幸。”


当时看到这一幕的时候,想到了丹尼斯·维伦纽瓦的电影《降临》里的剧情,对,就是《沙丘》的导演,女主因为接触到外星人,所以有了预知未来的能力,当她知道和男主在一起,会面临未来女儿死亡的结果时,当她只能眼睁睁看着结果发生时,拥有的同时就正在失去。


“如果你已经能一览自己的人生,从始到终,你会想做改变吗?”


“就算知晓整段旅程,知晓它如何终结,我也选择接受。选择去拥抱其中每个瞬间。”


有异曲同工之处,这一切都源自于爱。我还想到韩寒《乘风波浪》里最后那一声“妈咪”,也是很感人的。



8


要说影片觉得不好之处,应该是结局突然就结束了,感觉太匆忙了些,然后就是火美在看到真人老爸,也就是自己未来老公的时候,稍微多一些表情变化就好了,表现出一丝细腻的联系,电影中整得好像陌生人一样,缺少了一点温情。其他的都还好。


9


最后那段塔主人对真人说的那些话,其实也是本片的高潮之处。


“我穿越时间和空间,旅行了很远,才找到它们,你可以建造自己的塔,创造一个没有邪恶的国度,一个富裕和平而美好的世界。”


“你想回到那个充满了凶杀和盗窃的疯狂世界吗?它很快就会变成一片火海。”


“随你交朋友,回你的世界去,但你必须堆积这些石头。”


“我的塔撑不了多久时间了。”


有人说,真人其实是宫崎骏自己,但我觉得塔主人才是宫崎骏自己,在自己即将告别之际,让屏幕前的你我,勇敢地做出一个选择,你能活出怎样的人生?你敢活出怎样的人生?你想活出怎样的人生?


想到的是东野圭吾的《解忧杂货店》里的结尾,那个一张白纸的回信,十年前就很受感动,所以一直保留这个照片,而以这个作为结尾,同样很适用于《你想活出怎样的人生》这部电影想要传达的美好祝愿。



作者:AR7
来源:juejin.cn/post/7355692365330153512
收起阅读 »

我二姨卖猪为什么不能自己决定价格

我二姨既养猪也养牛,收益是赔的时候更多。 如果你有投资猪肉股经验,一定知道猪周期。要是在猪肉下行周期中囤猪,那就等着赔吧,赔多少而已。 我年轻的时候就想,为啥二姨自己养的猪,自己却不能决定卖多少价格?多年过去这个问题总算是有点眉目。 本质是二姨在利用市场销售自...
继续阅读 »

我二姨既养猪也养牛,收益是赔的时候更多。


如果你有投资猪肉股经验,一定知道猪周期。要是在猪肉下行周期中囤猪,那就等着赔吧,赔多少而已。


我年轻的时候就想,为啥二姨自己养的猪,自己却不能决定卖多少价格?多年过去这个问题总算是有点眉目。


本质是二姨在利用市场销售自己养的猪,而市场有其自身的规则,单一家庭养猪户是没有办法决定市场猪价的。


一 市场


市场准确的说是市场经济,自我国宋代就已诞生。


然而现代市场经济理论的奠基人是一位西方经济学家——亚当·斯密,就是写了《国富论》的作者。


在《国富论》中其详细阐述了自由市场经济的原理。他提出了“看不见的手”理论,认为在自由竞争的市场中,每个人都在追求自己的利益,这种追求会像一只“看不见的手”一样,引导市场资源向最有利于社会的方向分配。


在姚洋的《经济学的意义》中提到福利经济学第一定律:如果由市场自己去生产和交换,最后经济总会达到帕累托最优。提到福利经济学第二定律:任何的帕累托最优状态,通过调整初始的禀赋分配,最后都能在市场机制下实现。帕累托最优指的是不可能在不牺牲任何人利益的情况下改善其他人的福利的状态。


所以市场经济被认为是配置资源最好的方式,至少目前还没找到比她更好的方式。


曾经一位伟大的国人说,他所做的事情不过是对我们的国家做了一次市场化改革。


现在我们建设的是具有中国特色的市场经济。


二 边际与均衡价格


边际是一种思维方式,就是永远看市场中最后一个人的行为或者最后一个产品的情况。比如在劳动力市场上,工资不是市场中的平均水平的劳动者决定的,而是最后一个参加劳动的人决定的,要看给他多高的工资他才愿意去做这份工作,同时也要看他有多大的贡献工厂才雇用他,两者相等的时候才是市场里的均衡工资。


边际能够解释一些实际问题。比如高速费的收取,如果不收取高速费,会导致高速拥堵,收取高速费导致对高速使用价格敏感者退出,所以说高速价格不是由第一个人决定的,而是最后一些人决定的。


边际也是新商品上市后价格的演化,直到形成均衡价格。就生猪市场而言,其是成熟市场,均衡价格已经形成。在均衡价格下,价格决定于供求关系,决定于价值链,决定于生猪出厂价格和猪肉消费价格。


我的老家在河北,我从我妈那里了解到我们老家农村的猪肉价格是10/斤元上下;而我在北京小区超市看到的是13/斤元上下。这个价格我认为肯定不是大家口袋里没钱造成的。


我又看了下A股几家上规模的生猪养殖集团:牧原股份、温氏股份、正邦科技。三者在2023年都是大幅亏损,其中正邦科技更是st了。而2020年牧原股份大幅度盈利200多个亿,我还查到2020年河北9月份的平均生猪价格,为33.73元/公斤,这都赶上今年的猪肉价了。


这样的数据结果表明今年的猪肉或者生猪价格,主要是供给导致,是生猪太多,生猪养殖太卷,不得不低价销售导致。


总结一下,生猪养殖市场均衡价格由供求关系决定,供求关系就像是天平,只有其上的砝码发生较大变化时才会影响平衡。就生猪市场来说,供求关系可以被牧原股份这种千万生猪体量的养殖集团影响,可以被一场范围特别大的猪瘟影响。


单一家庭养猪户因为生猪体量非常非常小,影响力微乎其微,不可能影响供求关系,也就不可能决定生猪价格,这也就是我二姨不能决定卖猪价格的原因。


三 周期


这部分属于题外话。不仅猪市场存在周期;文明也有周期,表现为王朝的兴衰更替;经济本身也存在周期,比如加息周期和降息周期;现在更有万物皆周期一说。


一种解释是,周期的产生源于人的贪婪。有一句话著名的话:人们从历史中吸取的教训就是从不吸取教训


文明周期源于王朝的后期统治者普遍开始奢侈,导致统治力衰弱,最终王朝灭亡,比如烽火戏诸侯。


经济周期源于债务,也是贪婪。债务越借越大,越借越不想还,就比如现在的美利坚,你看他的国债多大了,一年利息都1w多亿。


或许周期本源于人性,源于这个世界本身,且看那天地有四季,有日月更替。


尾声


现在二姨已经不养猪了。如果还养猪,我会建议要当有大猪场倒闭时再进入,这个时候市场上能卖猪的少了,而想买猪的没变,均衡价格该起来了。


作者:通往自由之路pro
来源:juejin.cn/post/7352100456334639114
收起阅读 »

特斯拉违约24届全部应届生,如何评价?

4月23日有消息称:特斯拉(上海)撤回了所有24应届生的offer,统一给了一个月底薪作为补偿。 目前这个话题的讨论热度在脉脉上排第二。 先不管是真是假,至少看到有一部分同学确实是被裁了,这个时间点被裁,基本是废了。金三银四都差不多过完了,虽说还是应届生身...
继续阅读 »

4月23日有消息称:特斯拉(上海)撤回了所有24应届生的offer,统一给了一个月底薪作为补偿。



目前这个话题的讨论热度在脉脉上排第二。


脉脉热榜


先不管是真是假,至少看到有一部分同学确实是被裁了,这个时间点被裁,基本是废了。金三银四都差不多过完了,虽说还是应届生身份,但马上就要毕业了,这个时间点工作确实不好找了。


4月15日马斯克宣布特斯拉裁员10%,按照特斯拉去年公布的数据显示,特斯拉在全球共有14万名员工,算下来得裁1.4万人呐。之前出裁员消息的时候就上过一波热搜,没想到这事还没结束,现在又把所有应届生都毁约了,特斯拉这波是有点狠的。




注:信息来源于网络,官方目前并未公开发出毁约所有24应届生的消息。



看看网友怎么说


网友一


思路打开点,反正工作找不到了,考个研缓三年,还是应届生[狗头]。



网友二


能进特斯拉的肯定都是大佬级别,趁机宣传一波公司招人,这确实是个好时机。



网友三


至少赔钱了,一般的企业你看理你吗?(确实)



网友四


看了下特斯拉股票,“广进计划” 诚不欺我😅。



我怎么看


裁员我是可以理解的,哪家公司都会有亏损的时候,进行一波裁员也很正常,谁又能保证公司能一帆风顺向上发展?


但是集体毁约应届生这个事,我是不太能理解的。每年亏损的公司这么多,集体毁约应届生的一般也就两三家(老员工也可以裁呀)。既然集体毁约,是否能够根据当前的就业环境,拿出足够的诚意?如果你是十月十一月集体毁约,那我觉得赔一个月工资差不多了。但是在四月底进行毁约,我觉得得赔3个月才够诚意。


当然啦,这些只是我站在道德制高点的一些看法,真要说起来,特斯拉这个毁约条件,比起大多数企业确实还是算好的了,就像网友说的 “赔钱了良心,国内都不理你”。


最终倒霉的还是这些拿了特斯拉offer开开心心准备去上班的同学了,用“天崩开局”来形容都不为过。



你怎么看


欢迎在评论区留言,发表的你看法。


作者:阿杆
来源:juejin.cn/post/7361023886852849718
收起阅读 »

Zed,有望打败 VS Code 吗?

大家好,我是楷鹏。 先说结论,不行。 Zed,又一款新起的文本代码编辑器 👉 zed.dev 今年一月二十四号正式开源,短短不到三个月,GitHub 上已经冲上 3 万 star 正如 Zed 的口号所说「Code at the speed of th...
继续阅读 »

大家好,我是楷鹏。


先说结论,不行


Zed,又一款新起的文本代码编辑器




👉 zed.dev



今年一月二十四号正式开源,短短不到三个月,GitHub 上已经冲上 3 万 star



正如 Zed 的口号所说「Code at the speed of thought 以思考的速度编码


实际体验下来,Zed 确实会比 VS Code 丝滑


⬇️ Zed



⬇️ VS Code



官网也给出了打字输入性能对比:



输入字母 z 并显示到屏幕,Zed 仅需 58 毫秒,而 VS Code 需要 97 毫秒


Zed 比 VS Code 快了 1.4 倍


在输入性能方面,Zed 胜出


其次就是 Zed 主打的另一个核心功能,多用户协同编程



额说实话,这个功能暂时想不到很好的落地使用场景。




到目前为止,Zed 仅仅是一个不错的文本编辑器。


甚至可以说,Zed 实质上并没有重大的突破,属于自嗨产品。


Zed 宣传的高性能,并没有质的飞跃,很难打到用户的马屁上。



「58毫秒」和「97毫秒」两个差距并不大


实际开发都知道,编程的瓶颈并不在于输入速度


另外是多用户协同,目前看这个场景不友好



如果是文档协同,国内的飞书文档、腾讯文档等哪一个不是佼佼者,按着 Zed 锤。


如果是代码协同,显然 Git 才是主流。




Zed 太年轻,目前很基础的 markdown 预览都没有实现


VS Code 珠玉在前,用开源、插件化形成的护城河,一开放拥有大批拥趸


而 Zed 虽然同样有插件机制,但是能指望多少人贡献呢?



《重来》一书讲到,第一次创业失败的人,第二次创业失败概率一样大


Zed 的团队原先做过 Atom 编辑器,而现在 Atom 名存实亡



团队做 Atom 失败过,而卷土重来的 Zed,还不行


Zed 大概率能够圈住一部分用户,但不会成为领域的成功。




Zed 如何能破局呢?最重要的还是要顺势而为


想想 VS Code 当时,互联网的繁荣,带动开源领域的发展,Eclipses 老旧、Jetbrains 高昂收费,前端分工细化,急需轻量的编辑器,这些都是 VS Code 的势头。


而目前 Zed 最好的势头,显而易见,就是 AI 方向


而 Zed 目前显然支持不足,仅有 Copilot 代码不足和 Chat 能力



而这些 VS Code 不仅有,而且功能更加完善。


Zed 团队应该思考下了,要做一款怎么样的编辑器,适应目前的 AI 潮流,开创新的赛道。


如果继续安于微不足道的性能提升、垂直的协同,继续在垂直赛道内卷,那我祝你成功。



作者:吴楷鹏
来源:juejin.cn/post/7359469421742473225
收起阅读 »

是的,失业快一个月了

离职快一个月了,在这一个月里,也会在闲暇的时间记录一下思考。突然对于工作、对于求职、对于健康、对于生活有了新的认识。 3月30日 是的,我离职了,离开了我工作接近两年的公司。没有拍很多的照片,也没有习惯性的剪辑一个vlog。走的很平静,甚至工位上的东西,用一个...
继续阅读 »

离职快一个月了,在这一个月里,也会在闲暇的时间记录一下思考。突然对于工作、对于求职、对于健康、对于生活有了新的认识。


3月30日


是的,我离职了,离开了我工作接近两年的公司。没有拍很多的照片,也没有习惯性的剪辑一个vlog。走的很平静,甚至工位上的东西,用一个装零食的塑料袋就可以全部的拿走。


那个下午,我回忆了这两年的很多的事情。从一线回来,先租房子,然后等着毕业后的7月办理入职;随后研究起AI,做了很多的demo。后来搬到了楼上,写着用古老技术写的项目,楼下部分伙伴也相继离开了。勉强熬过了23年的冬天,年后我也得走了。


经过了漫长的离职流程,一切就绪,就差一个离职证明。


正好在那天晚上回来刷着抖音的时候,听到了飞书要裁员的消息,大约1000多人要面临着失业。


在还没毕业的大学时光里,我就满怀着焦虑。考研爹妈不支持,生活费没有着落,就业压力大。实在是没了办法,四处的海投,后来去了上海,再后来去了一线。再后来,在一线面临着裁员,又一下子回到了武汉。


回武汉-到现在的住所路上


想着过去的三年,真的像是一场梦。熬过了疫情,熬过了“二阳”,任何时候,互联网上都充斥着“互联网寒冬“的声音。而我,也在将近两年的摆烂之后,不得不面对这个残酷、血淋淋的现实。


人很容易陷入自我怀疑和沮丧的境地,在激情和麻木中徘徊。我常常在一些加班到很晚的晚上,看着车窗外的街道问自己:这一切的努力为的是什么?为了梦想、为了走出农村,为了体面的活着,仿佛内心燃起了激情。然而,第二天又得从床上爬起来,继续按部就班的上班,挤着电梯,做着乏味的工作。晚上下班了,又回来坐在电脑桌前。周而复始。


年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!终究将逃不过30岁!我也时常遥望自己的30岁,30岁是什么样子的?是有一个爱的人,有了自己的孩子,有了自己幸福的家;还是一个人在异乡狭小的出租屋等下,听着伤感的音乐,喝着咖啡抽着烟。


这次的离职给了我很多的思考时间,对于这个行业、对于接下来的选择。


四月上旬


正式开始了失业,一直呆在家里,偶尔会在晚上出去跑步。互联网行情依旧是差得很,很多的招聘平台都是已读不回,当然还有很多奇葩的HR。加上AI大模型越来越多,甚至说阿里都要用AI来代替20%的人工工作,需要传统的程序员的岗位将越来越少。于是,我开始分析各种调查报告、行业报告。最后锁定在了这几个行业:新能源领域 新材料 AIGC 化工 电驱动工艺。虽然这段时间我也没有找到合适的行业的工作,但是我总结了一个找工作的铁律:跟着资本选行业


2023Q3国内小赛道股权投资势头:来源IT桔子


投资机构基本上都是嗅觉到最新的商机的,他们的资本注入将会给新行业、新领域或者企业带来新的活力。


四月中旬


在武汉跑了马拉松之后,我想回到家乡去也跑一下。这次我全程vlog记录了:2024十堰马拉松健康跑纪实。来回两天,时间的安排上也妥妥的。


回来之后的第二天,就要去体检了。不幸的是:我的胆囊出现了息肉,而且以不可控的速度在增长。因为这几年我对于我的身体都密切的关切,每年都会体检,息肉出现在我回武汉的这两年里。


拿着最近三年的检查结果,就往我最近的军医医院去。门诊的医生建议我直接做手术将它切除了。一下子慌了神,但是又在担心它的癌变,担心每次饭后的胸闷胸胀。一番纠结,最终我入院接受手术了。


我的病房和病床


第一次手术室和重症监护室,你是什么感觉?如果问我,我会说我很害怕,害怕到浑身颤抖,害怕到忍不住哭了。


换上病号才穿的衣服,我进入了手术室,躺在了手术台上,随着手术室的大门关上,看着手术室穿着手术服的医生,我整个身体忍不住的颤抖。我不能想象锋利的手术刀割开我的肚皮,然后找到我的胆,割下来,再缝合好。上高中的时候,我就经历了不打麻药直接用针线缝补伤口(当然,那是医疗条件不是很方便的时候)。解开衣服,闭上眼睛,不知道麻药怎么注入我的身体的。我在迷迷糊糊中没了知觉。


当我再次被叫醒的时候,是我的手术已经完成了。医生告诉我:“xxx,手术做完了,手术做的很顺利。”我被几个人抱上了监护室的病床上,我的伙伴也在我身边,我才知道手术了两个多小时。


在监护室哭了两小时,这是这么多年来第一次哭,而且哭的这么久。还好诺大的监护室只有我和一个监护的护士,不至于丢掉我男子汉大丈夫的面子。她耐心的帮我多次擦干泪水,说我的眼睛都红了。


后来的两天就都是输液了。不敢咳嗽,还好也有雾化的设备。没有了痛觉,因为脖子上的止痛泵帮我麻痹了神经。


四月下旬


最后也如期的出院了,每天除了按时吃清水面条+喝药+换药外,好像也没什么事情可以做的。屏蔽了朋友圈,很少看消息,坐累了就躺着休息。一次手术,几乎花光了我三年来的积蓄,再一次是那么的怕死惜命。想着被资本家誉为996福报、单休、PUA,觉得人命在资本家面前看起来是那么的卑贱。如果资本比不上别人,那就请你一定要健康。


闲暇的时间也会去看看纪录片,楼下散步走走。


《大秦赋》-始皇嬴政


看了《大秦赋》,当然我追剧是倒着看,想起了贾谊的《六国论》,有时间的话,会出一期文章。


还有大美的天山雪山、有趣的万物生灵。


雪山


黑颈鹤



觉得地球是那么的奇妙,生命是那么的奇妙,这么多的奇妙才是神秘、才是美好、才是丰富的存在。



这个月的经历,算得上是跌宕起伏。总之:希望每一个职场人或者是同行,一定要爱惜自己的身体,按时吃饭、早睡早起。不要畏惧失业,不为各种被贩卖的焦虑而焦虑,更多的是爱护自己,珍惜眼前,享受生活。


作者:shigen01
来源:juejin.cn/post/7360711693359988786
收起阅读 »

偷偷分享下我们公司的研发规范~

有程序员朋友问:啥是研发规范?还有朋友表示:鱼皮别拿咱当外人,把你们公司的研发规范发来看看?可以,必须安排!这篇文章就给大家简单分享下我们公司的研发规范,不过在开始前必须要明确 2 点:每个团队都应该根据情况定制自己的研发规范,别人的规范仅供参考,未必最适合你...
继续阅读 »

有程序员朋友问:啥是研发规范?

还有朋友表示:鱼皮别拿咱当外人,把你们公司的研发规范发来看看?

可以,必须安排!

这篇文章就给大家简单分享下我们公司的研发规范,不过在开始前必须要明确 2 点:

  1. 每个团队都应该根据情况定制自己的研发规范,别人的规范仅供参考,未必最适合你们团队。
  2. 篇幅有限,本文仅分享一些我认为很重要的规范,并且移除了我们自己的敏感信息。

一、项目整体研发流程

1)团队共同确认目标和规划

开会讨论,产出目标和规划文档

2)产品调研和需求分析

产出调研报告和需求分析文档

3)需求评审

开需求评审会,明确要做的需求和工作,评估工作量并明确工作时间节点。

4)方案设计

产出方案设计文档,比如数据库表设计、页面设计、接口设计等。

5)研发

包括各自开发、单元测试、前后端联调等

6)测试和验收

包括研发自测、产品验收、组内验收等

7)代码提交

提交可上线的代码,需要由负责人审查,通过后可合并

8)部署上线

将代码发布到服务器上,组内进行上线通知并更新上线文档,上线后需要自行验证

9)产品迭代

持续收集用户对新功能的反馈、并进行数据分析,从而验证改动效果,便于下一轮的更新迭代。

二、开发规范

开发前注意事项

1)确保自己充分理解了业务和需求,需要先进行整体的方案设计;尤其是对于重要需求和核心业务,必须先跟组内同学核对方案并通过后,才能下手开发,避免重复工作。

2)先熟悉项目再开发,建议阅读项目文档、项目代码、接口文档、前端组件文档等。

3)慎重引入新的依赖或类库、或者升级版本,重大依赖变更需要和组内其他成员确认。

4)熟悉团队已实现的功能和代码,尽量复用,避免重复开发。

5)熟悉团队内部的研发规范,并在 IDE 中进行相应的配置,比如前端配置 ESLint、Prettier 等代码规范插件。

开发中注意事项

1)开发新功能时,确保从项目仓库拉取 最新主分支 的代码。

2)每个功能都要新建自己的分支进行开发,千万不要直接修改主分支的代码!注意分支名称要使用英文、足够语义化,不要和其他人的混淆。

3)开发时,尽量复用现有的功能、模块、类、方法、对象代码。有现成的代码,就不要再重复编写。如无法复用,可以适当通过注释说明。

4)开发时,遵循团队内部的研发规范,尽量参考现有项目代码的写法,尤其是不要使用和原项目不一致的格式、命名、写法,避免特立独行。

5)开发过程中,有任何不明确的地方,不要凭空猜测,及时去联系项目的其他成员或负责人确认。

6)开发过程中,每隔一段时间(比如 1 - 3 天)可以使用 git pull 同步一下最新的主分支代码,防止合并代码冲突。

7)开发过程中,注意整体时间进度的把控,先完成再完美,有风险时及时反馈。

8)开发时,需要格外注意对异常情况的捕获和处理。

9)每个分支尽量保证纯净,尽量减少每次开发和提交时改动的代码量。建议每次开分支只改一个功能、Bug 或模块,不要把多个不相关的功能写在一起,并且非必要不修改。

10)完成部分功能开发后,一定要自测!自测时,可以 Mock 假数据。注意一定不要在线上测试、一定不要影响线上数据!

三、代码提交规范

1)只有通过测试和产品验收的代码,才能够发起合并到主分支的 PR 请求。在这之前可以提交到自己的分支。

2)发起合并到主分支的 PR 前,一定要完整阅读 3 遍自己的代码,避免不规范的写法和无意义的改动。

3)每次合并尽量只专注于一个功能或改动,避免多个功能耦合在一起合并,提高审查效率并降低改动风险。

4)每次提交时,需要在 commit 信息中提供代码改动说明,还可以通过关联需求文档、测试用例、方案文档、效果截图等方式进行补充说明。

commit 信息可参考《约定式提交》文档,但不做强制要求。

5)除非特殊情况,否则所有的代码必须经过至少一位项目负责人 Code Review 审核通过后,才能合并;并且只有合并到主分支的代码才允许发布上线。

上线规范

上线前注意事项

1)上线前,除了严格验证功能特性能否正常运行、并符合需求外,还要格外关注程序的:

  • 健壮性。比如给用户友好的错误提示、输入校验。
  • 安全性。防止越权操作、输入校验。
  • 稳定性。尽量保证调用 100% 成功,如果有几率失败,要考虑重试或容错策略。

2)除非特殊情况,只有经过产品验证的功能、通过代码审核的主分支代码才允许发布上线。

3)除非特殊情况,尽量在工作日上线(建议周二 ~ 周四),保证上线后出了问题时能够及时修复。

上线后注意事项

1)上线后,一定要再次进行完整流程的测试,尤其要重点关注权限相关的功能测试。

2)上线后,一定要在群内及时同步上线信息,周知相关的成员,如果遇到问题第一时间反馈。

3)首次上线后,需要即时配置监控告警。

4)上线验证通过、并经过内部群成员确认后,可以在外部用户群发布版本更新公告。

5)上线后,即时更新项目的更新记录文档。

6)注意,上线不是终点。上线后的一段时间(至少一周内),一定要持续观察自己负责的功能是否正常运行、持续接受用户反馈、通过数据分析来观察新功能的效果,期间有任何问题都需要即时修复处理,并且准备好下一期的改进迭代。


作者:程序员鱼皮
来源:juejin.cn/post/7360486735798927396
收起阅读 »

这两年,我把28年以来欠的亏都吃完了...

前言 很长一段时间没有总结一下过去几个月的状态了,今天思绪万千,脑海中浮现了很多经历和生活片段,我把它记录下来。顺便今天聊一聊认知突破,分享我在买房这段时间吃过的亏,也希望作为你的前车之鉴。 买房 21年底的时候,那时刚好毕业三年,也正是互联网公司996最流行...
继续阅读 »

前言


很长一段时间没有总结一下过去几个月的状态了,今天思绪万千,脑海中浮现了很多经历和生活片段,我把它记录下来。顺便今天聊一聊认知突破,分享我在买房这段时间吃过的亏,也希望作为你的前车之鉴。


买房


21年底的时候,那时刚好毕业三年,也正是互联网公司996最流行的阶段,由于平时我不怎么花钱,也很少买衣服,上网买东西是个矛盾体,需要花很多时间对比,经常看了一件东西很久,最后又不买。加上比较高强度的工作状态,两点一线,可以说是没时间花钱,再加上自己把钱都拿去理财了,也赚了几万块,最后一共攒了几十万下来。我从小就立志要走出农村,而且认为以后有女朋友结婚也要房子,加上当时花比较多时间在理财上面,那时候其实行情已经不好了,工作上没什么突破,比较迷茫,于是想着干脆就把钱花出去了,自己也就有动力去搞各种路子尝试赚钱。在没有经过任何对比之后就在佛山买了一套房子,房价正是高峰的时候,于是我成功站岗!因为这个契机,躲过了持续了2年多的低迷股市,却没躲过低迷的房地产。


while(true) { 坑++ }


我买的是期房,当时不知道期房会有这么多坑,比如期间不确定开发商会不会破产,我这个开发商(龙光)就差点破产了,房产证无着落,相当于花了200w买了一个无证的房子,这辈子就算是搭进去了。


对于整个购房过程也是很懵逼,对流程完全不熟悉,当时去翻了政府规划文件,看那个地段后续有没有涨价空间,然后跟着亲戚介绍的销售转圈圈,当时说给我免3年物业费,合计也有几万块。在签合同之前销售都有说可以给到,但由于第一次没有录音,导致在签合同的时候销售反口,不承认,我们也没有证据,最后吃了哑巴亏。


开始的时候谈好了一个价格167w,然后销售私下打电话给我洗脑说我给点辛苦费1.5w,他可以向领导申请多几万块优惠。我知道这是他们的销售套路,但是架不住给我优惠5w啊,中间反复拉扯最后说给他8k,采用线下现金交易的方式。这一次我有录音了,因为私底下交易没有任何痕迹,也不合法,所以留了一手,也成为我后面维权时争取话语权的基础。


中介佣金是很乐观的,当时由于我亲戚推荐我去,销售承诺税前有4w,当时看中这个返佣也促使我火急火燎的交了定金。现在3年过去了,这个佣金依旧没有到账,我一度怀疑是中介搞ABC套路把我这个钱💰吃了,其他邻居的推荐佣金都到了账,加上现在地产商没钱了,同时跟那个亲戚有些过节,这个返佣更是遥遥无期。最后通过上面的录音获得了一丝话语权,知道了这个钱还在开发商手上,一直没有拨款下来到中介公司。下面是部分聊天记录:


image.png


不接受微信语音沟通,文字可以留给自己思考的时间,同时也更好收集证据。


image.png


然后去找相关人员把信息拉出来给我看,显示开发商未付款状态,这个状态维持2年了,目前看来只能再等下去。


image.png


签合同的时候,有个律师所说是协助我们签合同、备案、办房产证等各种边缘工作,糊里糊涂交了700元律师费,不交不行,甚至律师所连发票都没有给,而我都没有意识到这个最基本的法律法规问题。现在交房了可以办理房产证了,拿证下来也就80块登记费,居然收我700,其他业主有些是600多,400多,顿时觉得智商受到了侮辱,看了网上铁头各种打假的视频,我觉得自己也应该勇敢发声。现在也在收集商家各种违规证据,提交给相关部门解决。


image.png


image.png


image.png


后面市场监督管理局收到投诉,应该是有协商,意识到没有给我们发票,过来几天之后才把发票补过来,开票日期不是付款时候的2022年,而是2024年,明显属于偷税了。目前跟他要发票的应该只有我,估算2300多户业主都没有开发票的。


当时我首付需要50w,自己手上不够,我爸干建筑一辈子,辛苦供我们两个孩子上了大学,山上建了两层楼,手里没钱。我妈是一辈子没打过工,消极派,说出来没几句好话,家里不和睦的始作俑者,更不可能有钱支持。所以我还有20w是首付贷,也就是跟开发商借的,利率10%,这个利息很高了。销售当时说可以优惠到5%,但是优惠金额是补贴到总房价里面去,其实这也是他们的一种销售套路,这亏我也吃了,2年之后我连本带息还24w。当时认为自己应该一年左右能还完,但是实际远远高估自己的能力,买完房子接着我爸又生病在医院待了几个月,前后花了十几万,人生一下子跌入了谷底。


从头再来


后面2023一年,我出去创业,模式很新,很多人不赞同,期间遇到了不少小人诋毁我们两夫妻,当时我老婆还在怀孕,但我们最后都熬过来了,还生了一个儿子,6斤多。期间一年赚了十几万,但是开支也大,加上父母要养,我爸还要吃药,房子要供,最后还是选择了先稳定下来,我重新回到了职场,空窗一年后在这个环境下拿了一个还不错的offer,同时也想自己沉淀一下。


自从有了宝宝之后,生活似乎都往好的方面发展,出版社找我出书,为了契合自己的职业发展,我选择了写书《NestJS全栈开发秘籍》,从2023年11月份开始,迄今快半年了,在收尾阶段,希望尽快与各位读者们见面。同时,等了3年的房子也收房了,由于是高层,质量相对其他邻居好,没有出现成片天花掉下来或者漏水的情况。我们经常都说他是天使宝宝,是来报恩的。


由于我们公司技术部门是属于后勤支持性质的,技术变化不大,Vue2+微前端和React管理系统那一套,没有太多的新技术扩展,意味着不确定也大。业务发展不好考虑的是减少这些部门的开支,所以不出意外最近也迎来了降薪。这不是最可怕的,对于我们技术人来讲,最可怕的是我认为在业务中成长停滞了,或者没有业务来锻炼技术,所以在业余时间也选择了参与一些开源项目,如hello-alog开源算法书的代码贡献,并且这也是选择写书的原因。很简单地说,当下一个面试官问到我的时候,我不可能什么都讲不出来,最经典的问题就是:在这个公司期间你做过最有成就感的事情是什么?现在,我有了答案!


哲学


我的人生哲学是不断改变,拥抱不确定性!这么看来,我的确在这些年上了不少当,吃了不少亏,把自己搞的很累,甚至连累到家里人。但,用我老婆经常说的一句话:人生这么长,总是要经历点什么,再说现在也没有很差。的确,不断将自己处于变化之中,当不确定性降临到普罗大众时,我们唯一的优势,就是更加从容


总结


人们还在行走,我们的故事还在继续~


WechatIMG154.jpg


作者:寻找奶酪的mouse
来源:juejin.cn/post/7349136892333981711
收起阅读 »

为啥微信的更新信息大多数都是:修复已知问题,但是开发中不建议这样。

背景 可能大家平常有意或无意的注意到,微信的更新日志经常是:解决了一些已知问题。 但是开发人员日常开发中,提交的信息一般会避免这样,反而会要求把提交信息写的比较详细。 原因 首先,从用户体验的角度来看,频繁地列出所有已知问题及其修复情况可能会让用户感到困惑或...
继续阅读 »

背景


可能大家平常有意或无意的注意到,微信的更新日志经常是:解决了一些已知问题。


image.png


但是开发人员日常开发中,提交的信息一般会避免这样,反而会要求把提交信息写的比较详细。


原因


首先,从用户体验的角度来看,频繁地列出所有已知问题及其修复情况可能会让用户感到困惑或担忧,尤其是当这些问题涉及到隐私、安全等敏感话题时。其次,微信作为一个庞大的社交平台,其功能众多,更新日志如果详细到每一项改动,不仅对普通用户来说难以理解,也会增加开发团队的工作量。此外,微信的更新往往伴随着大量的内部优化和结构调整,这些内容对于普通用户而言并不重要,也不易被察觉。


而对于开发人员来说,commit信息一是给自己以后看,通过提交信息就可以知道自己修改了哪些内容,其二就是给其他开发人员查看,从而知道别人修改了哪些地方。


查看提交日志


那么关于微信相关的我们不再赘述,主要针对开发人员的提交信息进行一些讨论,比如如何查看提交信息呢,在idea中可以直接查看git log,也可以通过命令git log来进行查看,或者也可以使用命令git show commitHash针对每一个提交信息进行详细的查看,例如:


$ git show 32557725d91403ca8e5ae520a5f82a516791f5c0
commit 32557725d91403ca8e5ae520a5f82a516791f5c0
Author: test1 <test1@some.com>
Date: Wed Mar 20 16:53:56 2024 +0800

b5 commit

diff --git a/b.txt b/b.txt
index 86bd041..be62feb 100644
--- a/b.txt
+++ b/b.txt
@@ -2,4 +2,6 @@
22222

33333
-44444
\ No newline at end of file
+44444
+
+55555
\ No newline at end of file

本人代码提交方式


关于代码提交规范,相关的文章有很多,我在此先不多说,只是把我平常所用到的描述一下,大家可以参考。


针对每次的功能涉及到几个方面:代码优化,新功能开发,bug修复等。



  • 针对新功能开发:一般是git commit xxxx.java -m 'feat:用户登录限制只允许特定IP地址来登录管理员账号'

  • 针对bug修复:一般是git commit xxx.java -m 'fix:用户登录后看不到自己的工作任务'
    针对

  • 针对代码优化:,则是git commit xxx.sql -m 'refactor:把原来不存在的用户显示为ID账号,而非null'


总结


其实写好commit信息有较多好处,不单单是上面提到的个人追溯问题容易以及同事协作简单。以下我列出来我想到的。



  • 通过commit信息方便自己进行日报周报的总结

  • 方便进行某些问题的回退

  • 方便快速的梳理功能,以便于线上环境的验证

  • 有益于自己代码的精简提交,如果多个文件一起提,那么commit信息可能就会更复杂


致谢


以上就是从微信的一个更新日志,进而针对开发人员的commit信息进行了一些简单阐述。感谢你的耐心阅读,如果我的分享对你有所启发或帮助,就给个赞呗,很开心能帮到别人。


作者:bramble
来源:juejin.cn/post/7351726029322928155
收起阅读 »

为什么很多程序员会觉得领导没能力

相信很多人在职场里待久了,都会遇到自己觉得比较差劲的领导,这些人可能除了向上管理能力很强外(会舔老板),其他能力在你看来都挺一般,专业能力一般,超级缝合怪--上级给他的任何任务他都能分配给你们,然后他再缝合一遍完事。 那么遇到这种领导我们该怎么办呢?多数人想到...
继续阅读 »

相信很多人在职场里待久了,都会遇到自己觉得比较差劲的领导,这些人可能除了向上管理能力很强外(会舔老板),其他能力在你看来都挺一般,专业能力一般,超级缝合怪--上级给他的任何任务他都能分配给你们,然后他再缝合一遍完事。


那么遇到这种领导我们该怎么办呢?多数人想到的是跳槽,这确实是一个解法,但你跳到下家公司也保不齐会有这样的领导呀,今天咱们讨论的这个话题就先把条件限定成你不能跳槽,这个时候你该采用什么方法让自己的上班体验变好一些。


多元化自己的评估标准


首先,不能用鄙视的眼光去看待你的领导,觉得他只会舔老板(能舔、会舔也是一种很强的能力呀),有的时候你觉得你领导能力不行,很有可能是因为你的能力评估标准太单一了。


他或许在工作的某个方面不如你,但是他必定在某些方面有自己的长处,努力发现他的长处,认可他的长处,学习他的长处,可以更有助于你和他的相处,也有利于你的进步。


社会是一个大熔炉,你需要的不仅仅是业务能力和展现的舞台,也需要与社会中不同个体的和谐共处。包容、接纳,都是立身处世的能力。


学会变通和沟通,满足领导的存在感


领导之所以会在很多工作上提意见、瞎指挥、乱指挥,更多的情况可能是他知道自己对工作不熟悉,但觉得自己是领导,会有自己独特的见解,想刷自己的存在感。这种情况下,要学会满足领导的存在感。


举个例子说,你在工作中,领导过来给你提了个意见,这个意见明显是不合适的,那你就可以说,“领导,这个思路好,我们之前没往这个角度想,可以从这个角度延展一下……。”他走了,还不是我们自己把控,毕竟他只是过来刷个存在感的,只要最后的方案让客户满意,业绩给领导,把一些光环放在他身上,让他觉得他起到了作用,这些方案和他有关,他通常也不会计较了。


摸清领导管理的思想和套路


说到这里,找到领导心中的关键因素,是非常必要的。在一个项目里,员工承担的通常只是局部,而领导看的是整体,由于高度不同,所以你们考虑的关键因素是不同的。


所以你要知道领导心里到底想要的是什么,提前做好这方面的预期和准备,以及针对领导提出的你们没有考虑到的方面要虚心接受(毕竟领导跟高层接触的更多,有些战略方向上的事情他们会更清楚)。 


比如说,你是一个小编,你在意的是按时完成写作任务、及时发表、赚取眼球,而你的领导主编可能更在意的是你文章的各种数据真实性、转化人群、是否会产生舆情、是否zzzq这些。所以,要搞清领导在意的重要维度,工作才能更有效。


这里有三句话分享给大家:



  • 要能够分清你可以改变的事、无法改变的事;

  • 不去抱怨你服务改变的事;

  • 把精力用在你可以改变的地方。


你的上司,是你改变不了的,但你自己,是可以把握的。当然这篇文章也不是教你怎么委屈自己,只是提供一个不同的角度来讨论"领导不行” 这个事情,以及让你在无法立刻更换环境时,该怎样让当前的环境变得不那么恶劣。


想跳槽的同学还是应该按部就班的准备,骑驴找马有更合适的地方该跳就跳,跳过去了说不定今天学到的这些还能用的上……。


作者:kevinyan
来源:juejin.cn/post/7357911195946336293
收起阅读 »

既然有需求,那么就手撸一个JSON可视化组件吧

前言: 最近在公司的一个项目中遇到了一个需求,就是将读取到的JSON数据,展示成一个树形结构,并且还得给每一个节点添加一个类型标签以及复选框。好了,话不多说,直接上代码,代码的思路到时候放在代码后面。如果各位看官老爷觉得有什么可以优化的地方或者不理解的地方也可...
继续阅读 »

前言:


最近在公司的一个项目中遇到了一个需求,就是将读取到的JSON数据,展示成一个树形结构,并且还得给每一个节点添加一个类型标签以及复选框。好了,话不多说,直接上代码,代码的思路到时候放在代码后面。如果各位看官老爷觉得有什么可以优化的地方或者不理解的地方也可以在评论中说出,大家一起讨论;


代码


<script>
export default {
name: "YJsonEditer",
data() {
return {
JsonAST: {},
LiList: [],
checkBoxList: [],
checkBoxKey: 1,
// checkId:''
};
},
props: {
json: {
type: String,
default:
'{"total":18,"data":[[{"themeType":{"themeType":"dark"}}],[{"themeType":"light"}]],"rows":[{"caseCode":"9174ff6dfbc243eb931270a06c447666","institutionId":2,"arbitralCourtId":1,"nickName":"张慧","deptId":102,"applicantName":"钱红","arbitralCourtName":"第一仲裁庭","times":2,"caseNumber":"常钟劳人仲案字〔2023〕第29号","scheduleDate":"2023-05-30T00:00:00","caseName":"钱红讨薪","respondentName":"钱橙","startTime":"08:30:00","id":26,"endTime":"08:45:00","status":"1"},{"caseCode":"1c096b703b78495ea90ca13ab65258cb","institutionId":2,"arbitralCourtId":1,"nickName":"徐洋","deptId":102,"applicantName":"赵春","arbitralCourtName":"第一仲裁庭","times":1,"caseNumber":"常钟劳人仲案字〔2023〕第28号","scheduleDate":"2023-05-25T00:00:00","caseName":"赵春徐洋登记","respondentName":"赵夏","startTime":"08:30:00","id":24,"endTime":"08:45:00","status":"3"},{"caseCode":"9174ff6dfbc243eb931270a06c447666","institutionId":2,"arbitralCourtId":1,"nickName":"张慧","deptId":102,"applicantName":"钱红","arbitralCourtName":"第一仲裁庭","times":1,"caseNumber":"常钟劳人仲案字〔2023〕第29号","scheduleDate":"2023-05-25T00:00:00","caseName":"钱红讨薪","respondentName":"钱橙","startTime":"09:00:00","id":25,"endTime":"09:15:00","status":"3"},{"caseCode":"47cdbb573f354660b448d3bf55d36a69","arbitralCourtId":1,"nickName":"徐洋","applicantName":"赵春","arbitralCourtName":"第一仲裁庭","times":1,"caseNumber":"常钟劳人仲案字〔2023〕第26号","scheduleDate":"2023-05-24T00:00:00","caseName":"劳动报酬","respondentName":"赵夏","startTime":"08:30:00","id":23,"endTime":"08:45:00","status":"3"},{"caseCode":"e3a68febb9294112a85dfeffc00002d6","arbitralCourtId":1,"nickName":"周圆","applicantName":"申请人加密","arbitralCourtName":"第一仲裁庭","respondentCompanyName":"被申请单位加密","times":3,"caseNumber":"常钟劳人仲案字〔2023〕第12号","scheduleDate":"2023-05-23T00:00:00","caseName":"测试加密1111","startTime":"18:30:00","id":22,"endTime":"18:45:00","status":"3"},{"caseCode":"e3a68febb9294112a85dfeffc00002d6","arbitralCourtId":1,"nickName":"周圆","applicantName":"申请人加密","arbitralCourtName":"第一仲裁庭","respondentCompanyName":"被申请单位加密","times":2,"caseNumber":"常钟劳人仲案字〔2023〕第12号","scheduleDate":"2023-05-19T00:00:00","caseName":"测试加密1111","startTime":"08:45:00","id":21,"endTime":"09:15:00","status":"2"},{"caseCode":"9ae48862deaa4c24982b8bef5993d00d","arbitralCourtId":1,"nickName":"徐洋","applicantName":"数据库加密申请人1,申请人2","arbitralCourtName":"第一仲裁庭","respondentCompanyName":"数据库加密单位","times":1,"caseNumber":"常钟劳人仲案字〔2023〕第11号","scheduleDate":"2023-05-12T00:00:00","caseName":"加密测试案件","startTime":"09:00:00","id":19,"endTime":"09:30:00","status":"1"},{"caseCode":"e3a68febb9294112a85dfeffc00002d6","arbitralCourtId":1,"nickName":"周圆","applicantName":"申请人加密","arbitralCourtName":"第一仲裁庭","respondentCompanyName":"被申请单位加密","times":1,"caseNumber":"常钟劳人仲案字〔2023〕第12号","scheduleDate":"2023-05-12T00:00:00","caseName":"测试加密1111","startTime":"12:30:00","id":20,"endTime":"15:00:00","status":"1"},{"caseCode":"73c606f4dfca4137b3c0f4ee6ed4b9f9","institutionId":2,"arbitralCourtId":1,"nickName":"姜哲","deptId":102,"arbitralCourtName":"第一仲裁庭","times":1,"caseNumber":"常钟劳人仲案字〔2023〕第3号","scheduleDate":"2023-05-05T00:00:00","caseName":"赔偿医疗费","startTime":"08:30:00","id":18,"endTime":"08:45:00","status":"3"},{"caseCode":"793855c4cab545099752d7b4dd2ef402","times":1,"arbitralCourtId":1,"caseNumber":"常钟劳人仲案字〔2023〕第10号","nickName":"刘祥任","scheduleDate":"2023-05-04T00:00:00","caseName":"某某公司拖欠工资","startTime":"09:00:00","id":16,"endTime":"09:30:00","arbitralCourtName":"第一仲裁庭","status":"1"}],"code":200,"msg":"查询成功"}',
},
height: {
type: String,
default: "100%",
},
width: {
type: String,
default: "100%",
},
checkId: {
type: String,
default: "",
},
isEdit: {
type: Boolean,
},
},
methods: {
/**
* @description 初始化JSON数据,将其变成AST树;
*/
initJSON() {
// console.log(this.json)
if (!this.json) return;
let jsonObj = JSON.parse(this.json);
this.JsonAST = {
label: "",
type: "Object",
_id: "0",
isExpand: true,
children: this.JsonRecursionToAst(jsonObj, "0"),
};
},
/**
* @description 递归处理JSON数据,返回AST树;
*/
JsonRecursionToAst(jsonVal, _parentId, _parentKey) {
let _type = this.getType(jsonVal);
let currentArr = [];
// 通过传入类型决策使用
let _typeDecision = {
Array: () => {
if (jsonVal.length != 0) {
jsonVal.forEach((item, idx) => {
let current = {
label: String(idx),
_id: `${_parentId}-${idx}`,
type: this.getType(item),
_key: `${_parentKey}[${idx}]`,
};
if (current.type == "Object" || current.type == "Array") {
current.isExpand = true;
current.children = this.JsonRecursionToAst(
item,
current._id,
current._key
);
}
currentArr.push(current);
});
}
return currentArr;
},
Object: () => {
let currentKeys = Object.keys(jsonVal);
if (currentKeys.length != 0) {
currentKeys.forEach((key, idx) => {
let current = {
label: key,
_id: `${_parentId}-${idx}`,
type: this.getType(jsonVal[key]),
_key: `${_parentKey ? _parentKey + "." : ""}${key}`,
};
if (current.type == "Object" || current.type == "Array") {
current.isExpand = true;
current.children = this.JsonRecursionToAst(
jsonVal[key],
current._id,
current._key
);
}
currentArr.push(current);
});
}
return currentArr;
},
};
return _typeDecision[_type]();
},

/**
* @description 将AST语法树转换为显示List
*/
AstRecursionToList(AstTree) {
let list = [];
let _type = this.getType(AstTree);
let _typeDecision = {
Array: () => {
AstTree.forEach((_node) => {
const { label, type, _id, _key } = _node;
if (type == "Array" || type == "Object") {
const { isExpand, children } = _node;
if (isExpand) {
const chileList = this.AstRecursionToList(children) ?? [];
chileList.unshift({
label,
type,
_id,
isExpand,
_key,
});
chileList.push({
endTag: true,
_id,
type,
});
list = list.concat(chileList);
} else {
list.push({ label, type, _id, isExpand, children, _key });
}
} else {
list.push({ label, type, _id, _key });
}
});
return list;
},
Object: () => {
const { label, type, _id, _key } = AstTree;
if (type == "Array" || type == "Object") {
const { isExpand, children } = AstTree;
// 如果展开标志位为true,则继续递归,否则不进行递归
if (isExpand) {
const chileList = this.AstRecursionToList(children) ?? [];
chileList.unshift({
label,
type,
_id,
isExpand,
_key,
});
chileList.push({
endTag: true,
type,

_id,
});
list = list.concat(chileList);
} else {
list.push({ label, type, _id, isExpand, _key });
}
} else {
list.push({ label, type, _id, _key });
}
return list;
},
};
return _typeDecision[_type] && _typeDecision[_type]();
},
/**
* @descripotion 修改AST语法树中isExpand状态
*/
changeIsExpandInAst(tree, id) {
let _type = this.getType(tree);
let _typeDecision = {
Array: () => {
tree.forEach((node) => {
const { type, _id } = node;
if (_id == id) {
node.isExpand = !node.isExpand;
return;
}
// 如果当前层级拥有子级,并且id前缀可以匹配,则进行递归
if (
(type == "Object" || type == "Array") &&
Object.hasOwnProperty.call(node, "children") &&
id.indexOf(_id) > -1
) {
this.changeIsExpandInAst(node.children, id);
}
});
},
Object: () => {
const { _id } = tree;
// 如果匹配,则直接修改状态并返回
if (_id == id) {
tree.isExpand = !tree.isExpand;
return;
}
// 如果当前层级拥有子级,并且id前缀可以匹配,则进行递归
if (Object.hasOwnProperty.call(tree, "children") && id.indexOf(_id) > -1) {
this.changeIsExpandInAst(tree.children, id);
}
},
};
_typeDecision[_type]();
},
/**
* @description 获取数据类型
*/
getType(val) {
const type = Object.prototype.toString
.call(val)
.replace("[object ", "")
.replace("]", "");
return type == "Null" ? "String" : type;
},
/**
* @description 获取缩进长度,默认靠左多2em
*/
getIndentation(id) {
return id?.split("-")?.length * 2 ?? 2;
},
getCheckStatus(id) {
const flag = this.checkBoxList.filter((checkBox) => checkBox == id).length != 0;
if (flag) {
return true;
} else {
return false;
}
},
checkChange(e, id, key, label) {
if (Array.from(id).length == 0) return;
this.checkBoxKey += 1;
if (e) {
if (this.checkBoxList.length == 0 || this.checkBoxList.length == 1) {
this.checkBoxList = this.createIdsFromNodeId(id);
} else {
// 设置是否允许修改标志位
let canEdit = true;
let checkList = this.createIdsFromNodeId(id);
if (checkList.length < this.checkBoxList.length) {
this.$message.warning("请先取消已选中的同级字段,在进行勾选");
return;
}
for (let index = 0; index < this.checkBoxList.length - 1; index++) {
const element = this.checkBoxList[index];
if (element != checkList[index]) {
canEdit = false;
}
}
if (canEdit) {
this.checkBoxList = checkList;
} else {
this.$message.warning("请先取消已选中的同级字段,在进行勾选");
}
}
} else {
let canEdit = this.checkBoxList.filter((box) => box == id).length != 0;
if (canEdit) {
let checkBoxList = this.createIdsFromNodeId(id);
checkBoxList.pop();
this.checkBoxList = checkBoxList;
} else {
this.$message.warning("请先取消已选中的同级字段,在进行勾选");
}
}
const c_id = this.checkBoxList?.slice(-1)[0];
c_id == this.checkId ? "" : this.getKeyAndId(c_id);
},
//返回path id
getKeyAndId(id) {
const obj = this.LiList.find((item) => item._id == id);
obj ? this.$emit("change", { path: obj._key, id: obj._id }) : "";
},
/**
* @description 根据id生成数组
*/
createIdsFromNodeId(id) {
let list = [];
id.split("-").forEach((item) => {
if (list.length == 0) {
list.push(item);
} else {
list.push(`${list[list.length - 1]}-${item}`);
}
});
return list;
},
/**
* 预览模式设置选中元素
*/
setcheckId() {
const { checkId } = this;
this.checkChange(true, checkId ?? "");
},
},
watch: {
checkId(e) {
console.log(e);
},
json: {
handler(val) {
if (typeof val == "string") {
this.initJSON();
} else {
// 如果传入的值不为JSON格式,抛异常
console.error("inputDataType not JSON!");
}
},
immediate: true,
deep: true,
},
JsonAST: {
handler(val) {
this.LiList = this.AstRecursionToList(val);
this.$nextTick(() => {
this.setcheckId();
});
},
immediate: true,
deep: true,
},
},
render() {
// 单独生成一行html
let singLineHtml = (_node) => {
// const {label, type, _id} = _node;
return (
<div style={{ textIndent: `${this.getIndentation(_node._id)}em` }}>
{createLabel(_node)}
{createTypeTag(_node)}
{createExpandTag(_node)}
{createBracket(_node)}
{createCheckBox(_node)}
</div>
);
};
let createLabel = (_node) => {
if (Object.hasOwnProperty.call(_node, "label") && _node.label?.length != 0) {
return <span>{`"${_node.label}":`}</span>;
}
};
let createExpandTag = (_node) => {
if (Object.hasOwnProperty.call(_node, "isExpand")) {
const { isExpand, _id } = _node;
return (
<i
onClick={() => {
this.changeIsExpandInAst(this.JsonAST, _id);
}}
style="color:#ff9a00;"
class={
isExpand
? "el-icon-remove-outline expandTag"
: "el-icon-circle-plus-outline expandTag"
}
></i>
);
}
};
let createTypeTag = (_node) => {
if (!Object.hasOwnProperty.call(_node, "endTag")) {
const { type } = _node;
return <span class={`tag ${type}-tag`}>{type}</span>;
}
};
let createBracket = (_node) => {
const { type } = _node;
if (Object.hasOwnProperty.call(_node, "endTag")) {
if (type == "Array") {
return (
<span>
<span class="bracket-array">{"]"}</span>,
</span>
);
} else {
return (
<span>
<span class="bracket-object">{"}"}</span>,
</span>
);
}
} else if (Object.hasOwnProperty.call(_node, "isExpand")) {
const { isExpand } = _node;
// 展开
let expandStrategy = {
Array: () => {
return (
<span>
<span class="bracket-array">{"["}</span>
</span>
);
},
Object: () => {
return (
<span>
<span class="bracket-object">{"{"}</span>
</span>
);
},
};
// 关闭
let notExpandStrategy = {
Array: () => {
return (
<span>
<span class="bracket-array">{`[${_node.children.length}]`}</span>,
</span>
);
},
Object: () => {
return (
<span>
<span class="bracket-object">{"{...}"}</span>,
</span>
);
},
};
return isExpand ? expandStrategy[type]() : notExpandStrategy[type]();
} else {
return <span>,</span>;
}
};
let createCheckBox = (_node) => {
if (!Object.hasOwnProperty.call(_node, "endTag")) {
const { _id, _key, label } = _node;
return (
<el-checkbox
key={this.checkBoxKey}
style={this.isEdit ? "pointer-events:none" : ""}
value={this.getCheckStatus(_id)}
onChange={(e) => {
this.checkChange(e, _id, _key, label);
}}
></el-checkbox>
);
}
};
return (
<ul
class="json-container"
style={{ height: this.height, width: this.width }}
ref="JsonContainer"
>
<div class="json-index"></div>
{this.LiList.map((node, idx) => {
return (
<li>
<span class="line-head">{idx + 1}</span>
{singLineHtml(node)}
</li>
);
})}
</ul>
);
},
};
</script>

<style lang="scss" scoped>
.json-container {
background-color: #fff;
overflow: auto;
color: #767676;
position: relative;
.json-index {
width: 44px;
height: 100%;
background: #f5f5f5;
position: absolute;
top: 0;
left: 0;
// border-right:1px solid #E7E7E7;
}
li {
height: 35px;
line-height: 35px;
display: flex;
font-size: 14px;
position: relative;
.line-head {
display: inline-block;
height: 35px;
line-height: 35px;
width: 44px;
box-sizing: border-box;
font-size: 14px;
text-align: center;
border: solid #e7e7e7;
border-width: 0 1px 1px 0;
background: #f5f5f5;
// &:last-of-type{
// border-width: 0 1px 0px 0;
// }
}
}
}
.tag {
box-sizing: border-box;
padding: 3px 7px;
display: initial;
border-radius: 4px;
margin-left: 2px;
margin-right: 2px;
color: #fff;
background-color: #c9c9c9;
font-size: 12px;
}
.Object-tag {
background-color: #ff9a00;
}
.Number-tag {
background-color: #2b7cf5;
}
.String-tag {
background-color: #00a870;
}
.Array-tag {
background-color: #a17bd1;
}
.bracket-object {
color: #ff9a00;
}
.bracket-array {
color: #a17bd1;
}
.expandTag {
cursor: pointer;
display: initial !important;
}
::v-deep.el-checkbox {
display: initial;
.el-checkbox__input {
display: initial;
}
// .el-checkbox__input.is-disabled.is-checkId .el-checkbox__inner{
// background: #2B7CF5;
// &::after{
// border-color: #FFF;
// }
// }
}
</style>


思维导图


微信截图_20240415152236.png


主要函数解读


JsonRecursionToAst


这个方法是递归处理传入的JSON数据,首先通过getType方法获取当前节点的数据类型【getType中通过原型链方式获取数据类型】,根据数据类型决策返回数据【主要节点参数是label(key),_id(节点ID),type(节点数据类型),其余的参数为业务需求】;


AstRecursionToList


直接通过AST树去生成DOM结构的话我觉得会比较复杂,所以我就在AST树与DOM结构之间写了此方法,这个方法去监听AST树,只要树发生了变化便会执行次方法;首先进入这个方法后根据节点类型去决策进入哪个结构,然后根据isExpand判断是否展开,若不展开则直接不向下执行,若展开,则继续递归;


changeIsExpandInAst


此方法是修改展开状态的,通过_id进行匹配,只要前缀相同,则递归,直至完全相同修改状态;


checkChange


这个方法是业务逻辑的需求,可以点击节点前的复选框,但是不允许点击不同分支的复选框;


作者:用户352970449145
来源:juejin.cn/post/7357698682744143911
收起阅读 »

从字节到小县城做三份远程工作,区块链技术给我带来了什么?

2022年,我决定离开字节跳动,这一决定标志着我职业生涯的一次重大转变。我转向了区块链行业,开始了远程工作和数字游民生活。我的经历不仅是个人转型的故事,更是关于程序员如何借助区块链赛道的发展机会,摆脱国内互联网的过度内卷,像我一样成长为数字游民。 结合我自己的...
继续阅读 »

2022年,我决定离开字节跳动,这一决定标志着我职业生涯的一次重大转变。我转向了区块链行业,开始了远程工作和数字游民生活。我的经历不仅是个人转型的故事,更是关于程序员如何借助区块链赛道的发展机会,摆脱国内互联网的过度内卷,像我一样成长为数字游民。


结合我自己的经历,给大家分享的是作为程序员,如何从传统互联网行业到区块链行业的转型,特别是针对想要从事远程工作的开发同学分享一些我的思考和路线建议。



(边旅行边远程)


区块链是什么?


区块链技术自2008年比特币的问世以来,已经展示了其在多个领域的应用潜力,包括金融、供应链、医疗和艺术等。到今天,区块链不仅限于加密货币,智能合约和去中心化应用(DApps)已经成为推动技术前进的新动力。


为什么在区块链领域,一定要看海外的发展机遇?


在国外,特别是在欧美,区块链技术得到了飞速发展。例如,美国、瑞士和新加坡等国家已经制定友好的区块链政策,吸引了大量的区块链创业公司和投资。海外的区块链开发通常能享受到更加宽松的监管环境和更多的资金支持,这些因素共同促成了一个成熟的区块链生态系统。


在我们国家,大多数区块链企业会选择在香港。对于我们来说,如果短时间英文口语不太能提升,可以多关注香港、新加坡的远程机会。企业和项目还是非常多。



(在安吉DNA)


学习区块链是选老牌公链还是新链?


区分老牌公链和新链是入门并理解区块链的关键。


老牌公链如比特币和以太坊,已经建立了坚实的基础,拥有庞大的用户和开发者社群。新链,如Solana和Polkadot,虽然起步较晚,但在技术创新(例如更快的交易处理速度和更低的手续费)和特定应用场景上可能有更具吸引力的优势。


对于开发而言,选择专注于老牌公链还是新链,应根据个人的兴趣和市场需求来决定:



  • 老牌公链开发:更适合那些喜欢稳定、渐进式创新和长期投资的开发同学。

  • 新链开发:适合追求技术创新边界,愿意在新兴技术上投入时间和精力的开发者。


作为区块链的从业者,我建议新手还是先学一下老牌公链技术,对你后续的发展更有利,也相对更容易转型。


不同技术栈如何转型区块链


对于希望从传统技术栈转型至区块链开发的程序员,每个技术栈的转型路径都会有所不同。我给大家列了一个详细的指南,包括推荐的步骤、大概所需的时间周期以及可能的目标岗位。这样的规划旨在为有志于区块链领域的开发者提供清晰的职业发展路径。



(远程公司寄来的礼物)


一、区块链转型指南


我用一张表详细描述了从不同web2技术栈转型至区块链开发的具体步骤、周期和目标岗位:


3.png



  • 智能合约 开发:对于绝大多数开发同学来说,转型区块链开发,建议先学区块链技术原理集合智能合约,就业方向是智能合约开发。

  • 区块链前/后端开发:如果具备web经验,比如前端、后端Go/Node/Java等,建议转区块链后端开发。



    • Java的解决方案:Java技术栈同学可以先用Java技术栈拆解区块链项目,然后直接去求职。工作中再切换语言。语言难度并不大。

    • 对于前端同学,如果原本不具备后端 Node 能力,那就学 DApp 前端,也够用。



  • 相对转型周期更长的技术栈:C#、Android、iOS、Php、Python大数据、算法、运维开发等。



    • 直接转智能合约也可以,但是建议可以先补充点 web 开发能力,这样更好就业,这件事也可以通过我们训练营的资源。

    • 其次,你同时学习区块链基础课程和任务,包括智能合约相关课程并不冲突。只是在第六周之后的项目实战阶段,会比较依赖你的web开发能力,否则项目任务没办法完成。




二、转型步骤解析


Step1 学习 区块链技术 原理,建立认知

对所有技术栈的开发同学来说,第一步都是建立区块链技术的基础知识,理解其工作原理、主要特性以及实际应用场景。


Step2 技术深入和框架学习

不同的技术栈应侧重于学习与其专业相关的区块链技术。例如,Java开发可以专注于区块链后端开发,最好掌握主流区块链框架,而前端开发则应学习如何通过Web3.js等库与区块链交互。


Step3 项目实战

理论学习后,参与实际项目是检验和加深技术理解的最好方式。实战经验不仅能帮助巩固学习成果,也是提高市场竞争力的关键,帮助求做好铺垫



(在数字游民公社)


远程工作带来的机遇


远程工作为程序员提供了前所未有的自由度。我在小县城通过远程工作不仅实现了生活和工作的平衡,还能参与到全球项目中。


远程也带来了挑战,尤其是在沟通和协作方面。对于非英语母语的开发同学,提升英语能力是关键,这包括进行模拟面试、加强专业术语的使用,以及在实际工作中不断实践英语沟通。


建立远程工作社群


基于我这些年的经验,以及我曾经合作过的身边大厂同学转型的案例。我们正在建立一个远程工作社群,这不仅是一个远程工作技术交流的平台,更是相互支持和资源共享的社区。


我们希望通过这个社群帮助更多开发者顺利过渡到区块链领域,尤其是那些对远程工作感兴趣的朋友们。


最后要说的话


转型的道路充满了不确定性和挑战,但也充满了机遇。从字节跳动辞职,到在小县城同时做三份远程工作,我的经历或许能给正在考虑转型的你一些启示和勇气。


区块链不仅是技术的革新,更是职业生涯的一个新起点。如果你对区块链感兴趣,或许现在是跨入这个领域的最好时机。



作者:C2N数字游民部落
来源:juejin.cn/post/7356326955929075712
收起阅读 »

哭了,朋友当韭菜被割惨了

最近我的朋友,被某些知识付费坑得很惨。全程毫无干货可言。内容仅仅只适用于初级、或者说部分中级的程序员。为此,我的朋友交了大几千的学费,却收获甚微。 当然,你可能说,是你的朋友问题啊?你朋友烂泥扶不上墙,学习方法不对,别人都有很多成功的案例。什么offer收到...
继续阅读 »

最近我的朋友,被某些知识付费坑得很惨。全程毫无干货可言。内容仅仅只适用于初级、或者说部分中级的程序员。为此,我的朋友交了大几千的学费,却收获甚微。



当然,你可能说,是你的朋友问题啊?你朋友烂泥扶不上墙,学习方法不对,别人都有很多成功的案例。什么offer收到手酸,外包入大厂。




我买这些课就是为了学习,入门一些语言。知识付费很合理呀!!



于是我跟我朋友在微信彻夜长谈,有了如下分析


先说结论



请擦亮你的慧眼,你的一分一毫来之不易。不到迫不得已,才当学费



为什么这么说?


首先,不管你是想就业,还是想学习一些新的技术,网上都有例子,github上也会有前沿的项目提供学习。


类型结论
学习新技术某项技术开源出来,作为技术的布道者,恨不得你免费过去学习,然后你再发一篇文章,越来越多人学习你的技术。
就业简历包装无非就是抄抄抄,抄别人的优秀代码。github开源项目就非常合适

其次,你学费,一定要做到利益最大化。必须要有以下两点



  • 能学到大部分人都学不到的技术亮点。记住,是大部分人,一定要做到差异化

  • 能学到优秀的学习方法,push你前进。


开启慧眼


现在市面的学习机构,鱼龙混杂。,B站大学,某识xin球,某ke时jian 甚至,在某音上,都有那种连麦做模拟面试,然后引导你付费学习。


就业环境不好,买方市场竞争激烈,某些人就抓住你的焦虑心理,坑你一把。回想你的求学生涯,是否也有类似被坑经历?醒醒吧,少年。能救你的,只有你自己


当然,小海也会有潜龙。不可否认,知识付费为我们提供了便利性。



  • 原本散乱无章的知识点,人家给你整理好了,你尽管就是学习,实践

  • 面对焦虑,你觉得很迷茫,需要一个人指点你前进

  • 能认识更多同样诉求的人,为以后学习,就业,甚至做生意提供可能


但是,某些不法分子,就是抓住你的这个心理,疯狂ge你韭菜。什么10块钱知识手册,19.9面试题,100块钱的项目视频。天天一大早,就转发一些公众号到你群上,dddd。


这些内容,不是说没有用。我们讨论适合人群,这类东西不适合中高级程序员



说那么多,你得学会判断这个人是不是大佬




你都可以简历包装,为什么‘大佬’就不会是被包装的



那就稍微整理一下,哪些是真大佬,伪大佬


真伪大佬


某佬博客开源项目学习人群是否顺眼
伪大佬面试题居多,很多基础内容,没有干货无,或者很少。动不动就是商城,博客应届生占比较多可能顺眼
真大佬博客、论坛内容干货。整理分类完善,你能学到东西有,某些大项目的贡献,同时也有优秀开源项目应届生,中高级都有大多数不顺眼,因为实在优秀

就学习人群做一个说明



  • 在就业容易程度上,相对于初中高级别的程序员,应届生无论从考察的内容,招聘的人数。都会容易丢丢。

  • 他说跟着他学,offer赢麻了。但是其中,找到工作的大多数都是应届生


就这些点,我们其实可以能判断个大概了。


记住,你想知识付费。一定要摸清他的底细,不能认为他说得都是对的。人家也是会包装的


你的hello world


或许每个程序员的第一行代码,都是


    print("hello world")

我想说的是,请你记住你的初心。



  • 转行过来当程序员,就是为了狠狠赚他一笔

  • 喜欢写代码,苦中作乐


情况每个人都不太一样,这里不细说。明白你是谁,你还是否有动力能坚持下去。明白这一点,远比你在迷茫的时候病急乱投医更为重要,请勿过度焦虑


为此,后面会说一下如何学习,以及找工作如何不被骗


力量大会


事关钱包的问题,我们都得谨慎谨慎。就业市场那恶劣,朋友找不到工作还被坑了一把。骗子实在可恶。请你先自身强大,先自己找出问题,不花冤枉钱,避免传销式编程


如有雷同,纯属巧合,没有针对任何人,也没有动某些人的饭碗。


作者:Goland猫
来源:juejin.cn/post/7357231056288055336
收起阅读 »

24清明节咋过的?

头一天在朋友家呆了一天,下午又去武汉最负盛名的公园溜达了一会。 晚上回家,打算出去骑车,一直没想到目的地,想去大山里,但是总感觉自己的行李不顺心,帐篷太长,也没有炊具,没有视频里up主们那种风餐露宿,悠然自得的感觉。 这估计就是典型的i人了。只要有一点不顺遂...
继续阅读 »

头一天在朋友家呆了一天,下午又去武汉最负盛名的公园溜达了一会。


东湖.jpg
晚上回家,打算出去骑车,一直没想到目的地,想去大山里,但是总感觉自己的行李不顺心,帐篷太长,也没有炊具,没有视频里up主们那种风餐露宿,悠然自得的感觉。


这估计就是典型的i人了。只要有一点不顺遂,就会变的犹犹豫豫,然后大概率放弃。


然后我就放弃了原本打算去大山里待两天的计划。当然,我还是朝着大山所在的方向出发了。


打开地图,切换到地形模式,就可以看到藏在平面图里的山川河流了,我发现了一条沿着长江边伸展出去的小路,于是把这条路当做了我的目的地。


应该的假期的缘故,早上出发的时候难得的没有遇到堵车,很多路我都没有开导航,全凭感觉在走。有时候看到有趣的小路我还会直接拐进去。


有一回我拐到了一个小山下面,上山的小路就在眼前,但是因为前几天下雨的缘故,路上还有积水和泥泞的车辙印,休闲骑不越野,遂放弃上山。


后来又经过一个小镇,就跟着前面一辆小电动车一起穿街走巷,最后到路的尽头,发现正是长江,而我也终于拐到了那条沿江的小路上。这条路同时是长江的防洪堤,路边每隔几百米就有一块牌子,提醒过路的人们防洪的重要性。


我沿着江堤一直走啊走,左边是缓慢流淌的长江,右边是无边无际的田野。往左边看,是孤帆远影碧空尽,往右边看又是莽莽沃野,风吹草低。


微信图片_20240409134731.jpg
骑了大约半个小时左右,感觉有点尿急了,可是在江堤上,找个厕所是不可能了,但是也不能随地就解决啊,路上时常还有车辆经过。


又骑了一会看到了一个破房子,就在路边不远处,掩在杂草丛中,心想这里算是比较隐蔽的了,下车走过去。可是越靠近那破房子就越觉得恐惧,脑子里开始蹦出来一些恐怖片的情景。其实我是不怕鬼怪的,咱是一个坚定的唯物主义者,当然我也不怕活人。但是我怕尸体,动物的就算了,这万一。


这还要从大学那会说起,学校后面有座小山,山上有几座破房子,那时候大家经常爬山去上面看日落日出,我也去过几次,对那个房子也算记忆深刻。后来有一天学校突然开始统计人数,一个一个的查,态度之庄重坚决,行动之迅速果断,前所未见。最后才得知原来有学生在后山的破房子里发现有人上吊了,这事给我留下了极大的阴影。以至于后来我都不敢去那座山上了。


言归正传,我还是壮着胆子靠近了这座破房子,这是一座典型的南方小楼,好像是两层,门洞很窄,门窗都没有了,一楼很干净,有一条狭窄的楼梯可以通到二楼。我也就到此为止了。当然我也不敢在这上厕所了。


又骑了一会,油灯开始闪烁了,上周加了50块钱的油,当时就跑了大约180公里,今天又跑了大约60公里,一合计50块钱的油跑了240公里,心里又快乐了,比之前50块钱跑200公里的时候还快乐。经过半年的磨合,我和车子终于要人车合一了。


打开地图搜索了一个最近的加油站,十几公里,又加了50块钱的油。冬天的时候一个月就加一次油,春天了基本两周就要加一次,这么一想我又不快乐了。


加完油已经到饭点了,果然人车合一了,要饿一起饿。在小镇上点了一份炒菜,一个人吃就点了一份鱼香肉丝,分量还挺足的,竹笋很脆嫩,现在是吃春笋的时节。


微信图片_20240409134748.jpg
吃完饭,又开始漫无目的的骑车,没有开导航,只是这次长江在我的左手边,因为小镇所在的位置是长江转弯处突出的一块洼地上,所以我以为我正在沿小镇绕圈,也可能是一路上的风景同质化太严重了,以至于我一直没发现正在走回头路。


然后就在我又一次尿急,开始搜寻合适的放水地的时候,我又看到了那座老房子。


作者:渡人先渡己
来源:juejin.cn/post/7355433339547664403
收起阅读 »

降本增笑,领导要求程序员半年做出一个金蝶

关于降本增效的事,今天在网上看到一个帖子,虽然有点搞笑,但是对于打工人(特别是技术同学)来说,可挖掘的东西也不少,特别分享给大家。 真的是好多年没听说这样的事了,记得以前总有老板让做个淘宝、做个京东,然后预算只有几千块,最多几万块。 这些故事程序员谈起来往往...
继续阅读 »

关于降本增效的事,今天在网上看到一个帖子,虽然有点搞笑,但是对于打工人(特别是技术同学)来说,可挖掘的东西也不少,特别分享给大家。



真的是好多年没听说这样的事了,记得以前总有老板让做个淘宝、做个京东,然后预算只有几千块,最多几万块。


这些故事程序员谈起来往往都是哈哈一笑,并疯狂吐槽一番。



不过笑过之后,大家是否想过如何去解决问题?或者真的去评估下可行性,探索一下可能的实现路径。


找到问题


首先我们看下老板的问题。老板的根本问题并不是想要做金蝶,为什么这么说呢?


我们看看网友的描述就知道了:经济下行,领导不想出金蝶系统的维护费,不想为新功能花大价钱。这才是根本问题,用四个字来说就是:降低成本。


然后才是老板想到能不能用更少的钱达到金蝶系统的使用效果,再之后才是自己能不能做一个类似金蝶的系统,并思考了自己可以承担的成本:一个前端、一个后端,半年时间。


最后问题被抛到了这位网友的手里。可以看得出来这位网友也不太懂,还去咨询了朋友。不知道它有没有向朋友说清楚问题,还是只说了老板想自己做一个金蝶系统,结果是朋友们都说不可行。


遇到问题时,我们得把这个问题完完整整的捋一遍,找到最根本的问题,然后再说怎么解决问题,否则只是停留在表面,就可能事倍功半。在这个上下文中,根本的问题就是:降低成本。



解决问题


明确了老板的根本问题,我们就可以琢磨方案了。既然是降低财务系统的成本,可行的方案应该还是有几个的。


使用替代产品


假如公司只使用产品的部分功能,是不是可以选择金蝶的低版本?是不是可以降低一些人头费?


金蝶的服务贵,是不是可以选择一些小厂的产品?国内做财务系统的应该挺多的,小厂也更容易妥协。


或者选择SaaS服务,虽然SaaS用久了成本也不低,但是可以先撑过这几年,降低当前的支出。


当然替换财务系统也是有成本的,需要仔细评估。不过既然都想自己做了,这个成本应该能hold住。


找第三方维护


金蝶的服务贵,是不是可以找其它三方或者个人来维护修改?根据我之前的了解,金蝶这种公司有很多的实施工作是外包出去的,或者通过代理商来为客户服务,能不能找这些服务商来代替金蝶呢?或者去某些副业平台上应该也能找到熟悉金蝶系统的人。


当然这个还要看系统能不能顺利交接,金蝶有没有什么软硬件限制,第三方能不能接过来。


另外最重要的必须考虑系统和数据的安全性,不能因小失大。


自己开发


虽然自己开发的困难和成本都很高,但我仍旧认为这可能也是一个合适的解决方案。理由有下面两点。



  • 功能简单:如果公司的业务比较简单,使用的流程也简单,比如不使用涉及复杂的财务处理,那么捋一捋,能给开发人员讲清楚,也是有可能在短时间内完成的。

  • 迭代渐进:长城不是一天建成的,系统也都是逐渐迭代完善的。自己开发可以先从部分模块或者功能开始,然后逐步替换,比如前边的流程先在新系统中做,最后再导入金蝶。即使不能做到逐步替换,也可以控制系统的风险,发现搞不定时,及时止损。相信老板也能明白这个道理,如果不明白或者不接受,那确实搞不了。



当然我们也肯定不能忽视这其中的困难。我之前做过和金蝶系统的对接,订单的收付款在业务系统完成,然后业务系统生成凭证导入到金蝶K3。依稀记得业务也不算复杂,但是需求分析做了好几遍,我的代码也是改了又改,上线之后遇到各种问题,继续改,最终花了几个月才稳定下来。


事后分析原因,大概有这么几点:



  • 产品或者需求分析人员没接触过类似的业务,即使他对财务系统有一些经验,也不能准确的将客户的业务处理方式转换到产品设计中;

  • 财务人员说不明白,虽然他会使用金蝶系统,但是他不能一次性的把所有规则都讲出来,讲出来也很难让程序员在短时间内理解;

  • 程序员没做过财务系统,没接触过类似的业务,系统的设计可能要反复调整,比如业务模块的划分逻辑,金额用Long还是用BigDecimal,数据保留几位小数,这都会大幅延长开发周期,如果不及时调整就可能写成一锅粥,后期维护更困难。


这还只是和金蝶系统做一个简单的对接,如果要替代它,还要实现更多的功能,总结下,企业可能会面对下面这些困难:


业务复杂:财务规则一般都比较复杂,涉及到各种运算,各种数字、报表能把人搞晕。如果公司的业务也很复杂,比如有很多分支或者特殊情况,软件开发的难度也会很大,这种难度的变化不是线性增加的,很可能是指数级增长的,一个工作流的设计可能就把人搞死了。


懂业务的人:系统过于复杂时,可能没有一个人能把系统前前后后、左左右右的整明白。而要完成这样一个复杂的系统,必须有人能从高层次的抽象,到具体数字运算的细枝末节,完完全全的整理出来,逻辑自洽,不重不漏,并形成文档,还要能把程序员讲明白。


懂架构的人:这里说的是要有一个经验丰富的程序员,不能是普通的码农,最好是有财务系统开发经验的架构师。没走过的路,总是要踩坑的。有经验的开发人员可以少走很多弯路,极大降低系统的风险。这样的人才如果公司没有,外招的难度比较大,即使能找到,成本也不低。


灵活性问题:开发固定业务流程的系统一般不会太考虑灵活性的问题,如果业务需要调整,可能需要对系统进行大幅修改,甚至推倒重来。如果要让系统灵活些,必然对业务和技术人员都提出了更高的要求,也代表着更强的工作能力和更多的工作量。


和其它系统的对接:要不要和税务系统对接?要不要和客户管理系统对接?要不要和公司的OA对接?每一次对接都要反复调试,工作量肯定下不来。


总之,稍微涉及到财务处理的系统,都不是一个前端和一个后端能在短时间内完全搞出来的。


对程序开发的启示


搞清楚需求


日常开发过程中,大家应该都遇到过不少此类问题。领导说这里要加个功能,然后产品和开发就去吭哧吭哧做了,做完了给领导一看,不是想要的,然后返工反复修改。或者说用户提了一个需求,产品感觉自己懂了,然后就让开发这么做那样改,最后给用户一看,什么破玩意。这都是没有搞清楚真正的需求,没有触达那个根本问题。


虽然开发人员可以把这些问题全部甩给产品,自己只管实现,但这毕竟实实在在的消耗了程序员的时间,大量的时间成本和机会成本,去干点有意义的事情不好吗?所以为了不浪费时间,开发也要完整的了解用户需求。在一个团队中,至少影响产品落地的关键开发人员要搞懂用户的需求。


那么遇到这种问题,程序员是不是可以直接跑路呢?


也是一个选择, 不过对于一个有追求的程序员,肯定也是想把程序设计好、架构好的,能解决实际问题的,这也需要对用户需求的良好把控能力,比如我们要识别出哪些是系统的核心模块,哪些是可扩展能力,就像设计冯诺依曼计算机,你设计的时候会怎么处理CPU和输入输出设备之间的关系呢?


对于用户需求,产品想的是怎么从流程设计上去解决,开发需要考虑的是怎么从技术实现上去满足,两者相向而行,才能把系统做好。


当然准确把握用户的需求,很多时候并不是我说的这么容易,因为用户可能也说不清楚,我们可能需要不断的追问才能得到一些关键信息。比如这位网友去咨询朋友时,可能需求就变成了:我们要做一个财务系统,朋友如果不多问,也只能拿到这个需求,说不定这位朋友也有二次开发的能力,错失了一次挣钱的好机会。还有这位老板上边可能还有更大的老板,这位老板降低成本的需求也可能是想在大老板面前表现一下,那是不是还有其它降本增效的方法呢?比如简化流程、裁掉几个不关键的岗位(这个要得罪人了)。


我们要让程序始终保持在良好的状态,就要准确的把握用户需求,要搞懂用户需求,就需要保持谦逊求知的心态,充分理解用户的问题,这种能力不是朝夕之间就可以掌握的,是需要修炼的。


动起来


任何没有被满足的需求都是一次机会。


我经常会在技术社区看到一些同学分享自己业余时间做的独立产品,有做进销存的、客户管理的、在线客服的,还有解决问题的各种小工具,而且有的同学还挣到了钱。


我并不是想说让大家都去搞钱,而是说要善于发现问题、找到机会,然后动起来、去实践,实践的过程中我们可以发现更多的问题,然后持续解决问题,必然能让自己变得越来越强。在经济不太好的情况下,我们才有更强的生存能力。




啰里八嗦一大堆,希望能对你有所启发。




作者:萤火架构
来源:juejin.cn/post/7317704464999235593
收起阅读 »

腾讯云:颜面尽失的草台班子

昨天下午,2024年04月08日,腾讯云出现了一场全球性的大故障,用腾讯云官方的说法,崩了 74 分钟(15:31 - 16:45),波及全球 17 个区域与数十款服务。事实影响是什么但这与我观察到的事实不符 —— 从故障范围上来说,这次的故障几乎是去年阿里云...
继续阅读 »

昨天下午,2024年04月08日,腾讯云出现了一场全球性的大故障,用腾讯云官方的说法,崩了 74 分钟(15:31 - 16:45),波及全球 17 个区域与数十款服务。

事实影响是什么

但这与我观察到的事实不符 —— 从故障范围上来说,这次的故障几乎是去年阿里云双十一史诗级大故障的翻版 —— 小道消息是整个管控面 GG,云 API 挂了,所以现象与去年阿里云如出一辙:依赖云 API 的云产品控制台不能用了。

被管控的纯资源,如云服务器 CVM,云数据库 RDS, 设置了公开读写访问对象存储 COS 不受影响可以继续使用。然而依赖认证与API 的各种云 PaaS 服务,例如标准的私有读写的对象存储 COS,就抓瞎了。

因为阿里云至今没有做一个像样的事后故障复盘,因此在《我们能从阿里云史诗级故障中学到什么》中,我为阿里云的这次故障做了非官方的技术复盘。同样的判断逻辑完全也适用于这次故障 —— 这样的爆炸半径,根因出在 Auth 上的概率很大。目前,腾讯云仍然没有给出官方的事后故障复盘报告,也可能不会有了。


忽悠人的状态页

我的朋友杨攀曾写过一篇《中国云服务走向全球?先把 Status Page 搞定》,讨论了 Status Page (服务健康状态页)对于公有云服务的重要性,各家本土云厂商也跟进了这一特性,包括腾讯云。—— 状态页能在服务宕机的情况下有效减少客户的焦虑,降低沟通成本,但它的核心价值在于 “建立与客户的信任关系”。

看上去,腾讯云与阿里云的 Status Page 反应都比较迟缓,在故障发生后三四十分钟才开始更新。而不是像Cloudflare 等产品一样及时更新故障,或采用自动化方式监测到故障后立即推送。但不同于阿里云 —— 虽慢却诚实地标记了所有服务受到影响,腾讯云的 Status Page 连基本的真实性与准确性都堪称稀烂。

例如,受到影响的对象存储 COS 服务,在有用户上报问题的几个可用区中,我并没有看到 Status 标红。而这样的例子还有更多。事实上如果问题真出在管控 API 上,那么影响的范围应该和阿里云一样 —— 所有服务的控制面。因此,这样鸡贼的做法只会给客户留下:“不透明、有猫腻“ 的负面印象。


撒谎的三无公告

在故障出现 40 ~ 50 分钟后,腾讯云终于发出了第一份故障公告,也是截止到目前 Status Page 上唯一一份公告。但其内容就一句话 —— 三无公告:无时间(故障时间),无地点(可用区/AZ),无范围(影响服务)。而且姗姗来迟,比我替它发的公告《【腾讯】云计算史诗级二翻车来了》还晚了十分钟。

但这份公告最致命的问题是真实性与准确性:首先,故障绝对不仅仅是“控制台”,而是整个控制面。作为一个专业的云计算服务供应商,一字之差天壤之别,混淆两者区别的原因,要么是蠢(缺乏专业素养,台面混为一谈)。要么是坏(避重就轻,推卸责任)。

请问,一个全身休克的人,说他 “面色异常”,这是一个真诚的回复吗?请问,一台被砸烂的笔记本电脑,说它“敲击键盘没有反应”是一个有意义的描述吗?同理,一个控制面爆炸的公有云,说自己“控制台异常”,是一个认真的回复吗?

其次,从事后官微的发布与用户群的反馈来看,在这个时间,“目前故障已恢复”  是在撒谎。至少相当一部分服务的可用性事件是在 16:45 标记恢复的,在17 点前后,腾讯云产品吐槽群中也仍然有一些问题上报。

我认为这份对腾讯云带来的伤害远比服务宕机要大的多 —— 首先,在及时性,准确性上体现出了极差的专业素养。其次,在真实性上有意做手脚,会伤及公有云,或者说一切生意的根本 —— 诚信这对品牌形象是一个摧毁性打击。


灾难级别的公关


按理说,出现了这么严重的故障,应当用诚恳认真的态度去处理,但腾讯云官方微博居然还在抖机灵 —— 堪称灾难级别的公关水平

这条微博也再次扇了腾讯云自己官网公告的大嘴巴子 —— 16:45 分发第一条帖子时,“工程师仍在紧急修复中”,17:16,距离第一次报告故障的 15:31已经过去近两个小时,“已经整体恢复”。然而,根据腾讯云官网 16:21 发布的公告[1]声称:“故障已恢复”。从实际情况来看,再次证明了官网公告在说谎

阿里云双十一大故障的时候,刚刚开完云栖大会,打脸了吹下的极致高可用的牛逼,但毕竟隔了一周了。而腾讯云这次大故障的同时还在开发布会吹牛逼,还找特大号发了一篇软文:太意外了!国内80%大模型都存在鹅厂!》,发布时间 16:19,2分钟后官网发出故障通告,堪称光速打脸二次方

与之形成鲜明对照的是,去年 11 月 Cloudflare 的故障,Cloudflare CEO Matthew 亲自出来对故障进行道歉与复盘,相比之下,国内云厂商的危机公关堪称灾难级别 —— 彻底做实了草台班子的称号。

实锤的草台班子

请允许我引用瑞典马工的一句名言 :“阿里云是个工程质量差劲的正经云,但腾讯云是一群业余销售加业务码农玩游戏”。所谓光鲜亮丽的大厂,在里面也不过是一个又一个的草台班子。

Reference

公告: https://cloud.tencent.com/announce/detail/1995

https://www.oschina.net/news/286685

https://www.v2ex.com/t/1030638

https://www.v2ex.com/t/103061


云计算泥石流
曾几何时,“上云“近乎成为技术圈的政治正确,整整一代应用开发者的视野被云遮蔽。就让我们用实打实的数据分析与亲身经历,讲清楚公有云租赁模式的价值与陷阱 —— 在这个降本增效的时代中,供您借鉴与参考。



作者:非法加冯
来源:mp.weixin.qq.com/s/PgduTGIvWSUgHZhVfnb7Bg
收起阅读 »

WiFi万能钥匙突然更新,网友炸了

时至今日,机哥已记不清,七八年前曾用过哪些家喻户晓的手机软件。若不是最近看到这样一篇新闻。我都差点忘了,有一个名为“WiFi万能钥匙”的App曾风靡全国。当时机哥身边的亲朋好友,只要是有智能手机的。基本都会安装上这个App。原因倒是不复杂,在那个流量资费偏高的...
继续阅读 »

时至今日,机哥已记不清,七八年前曾用过哪些家喻户晓的手机软件。


若不是最近看到这样一篇新闻。


我都差点忘了,有一个名为“WiFi万能钥匙”的App曾风靡全国。


当时机哥身边的亲朋好友,只要是有智能手机的。


基本都会安装上这个App。

原因倒是不复杂,在那个流量资费偏高的年代。


咱们上网冲浪,主打一个“能蹭WiFi,绝不用流量


恰好,WiFi万能钥匙对用户最大的贡献,也是帮忙蹭网。


不管是人流量爆满的商城,还是学校办公室。


WiFi万能钥匙,总是能如它的名字般神奇,帮用户成功连上WiFi。


关键是,这软件还免费使用。


多少给当时懵懂的机哥,来了点小小的互联网震撼。



也是靠着“随时随地,免费上网”的优势。


WiFi万能钥匙发布不到三年,就拥有超过5亿的激活用户。


公司发的年终奖更是重量级。


给所有入职超过4个月的员工,送一台价值近百万元的特斯拉跑车。


什么叫风头无两啊,就是。


可随着时间推移。


越来越多用户也发现了,所谓的“免费蹭网”,是需要付出代价的。


在这些年的发展中,WiFi万能钥匙翻车过好几次。


包括被官方点名批评。


被华为小米轮番整治。


当时两大手机厂商,标记它为恶意应用,还把它赶出了自家应用商店。


再加上App内部,出现了各种离谱的广告。


不仅在形式上,集百家之所长。


摇一摇跳转、伪装跳过按钮、多图层套娃全凑齐了。


具体到广告内容,更是大杂烩乱炖。


不知道的,还以为下了个病毒软件呢...


尽管官方最近宣布,给WiFi万能钥匙减少70%广告。


但它这些年,积攒起来的崩坏口碑。


可不是一两个优化减负,就能抹掉的。


当然啦,如果只是广告讨人嫌。


那WiFi万能钥匙,还不至于被喷成这程度。


整个App的争议点,就在于它那“共享热点”模式。


没错,虽然它大名叫WiFi万能钥匙。


但它能帮咱们连上各种场合的WiFi,原理并不是暴力破解。


而是从自家密码数据库中,找到与该WiFi相匹配的密码。


等配对成功后,我们就成功蹭上别人的网络了。


官方也很清晰明了地介绍过,该App的运行原理:


软件基于共享经济,利用热点主人分享的闲置WiFi资源,向所有用户提供免费上网服务。

听起来,似乎是个不错的模式对吧。


这就好比,我在某个餐厅输入密码连上了WiFi。


然后WiFi万能钥匙,又把我手机记录下来的WiFi密码,上传到云端数据库,下次别人再来这家餐厅,直接打开App就能连上。


你帮我,我帮你,天下就没有难办的事儿了。


但理想很丰满,现实很骨感。


这共享模式,实际是很难落实下来的。


机哥举个例子啊。


在知乎上,有一个问题写着:


“如果每个人都给我一块钱,那我不就有13亿了吗?”


而且每人只需掏一块钱,也不是啥很大的损失对吧。


可这事儿就和共享WiFi密码一样,有一个大前提:


凭什么?


我凭什么无缘无故,给一个陌生人一块钱?


我又凭什么无缘无故,给一个陌生人,提供自家的WiFi密码?


更何况,是密码上传到一个装机量8亿的App。


对于WiFi万能钥匙来说,运营初期就面对着这个问题。


不过出来混,总得有两把刷子。


很快啊,就有网友对Wi-Fi万能钥匙做出了分析。


他表示,App可以直接从用户手机拿到WiFi密码。


搞机佬都知道,安卓系统在获取Root权限后,可以通过使用Re管理器等App,直接查看存放WiFi密码的文件。


可谓是明文存放,点开就送。


当然,能访问到这个文件夹的前提是,手机得有Root权限。


可很凑巧的是,早期的安卓手机获取权限非常简单。


随便在网上下载个“一键Root”工具,重启手机就完事儿。


所以在那个时候,用户第一次安装打开WiFi万能钥匙,都会被这App索取Root权限。


紧接着,最关键的问题来了。


它到底有没有,通过申请Root权限,来查看用户手机里的WiFi密码保存文件呢?


当时有位知乎老哥,特意反编译了1.0版本的WiFi万能钥匙。


发现了以下这几行代码。


作为一个,只会输入“Hello World”的代码废柴。


机哥还是很自觉地,把代码交给了AI去分析。


结果AI给出的分析,和那位知乎老哥的结论,几乎一模一样。


WiFi万能钥匙1.0版本,会在获取Root权限后,把手机上的WiFi配置文件,复制到了自己的缓存文件夹中。

嗯?难道说...


不过在后续的版本更新中。


WiFi万能钥匙的玩法严谨得多,主打一手正儿八经的“共享”。


比如把用户主动输入的密码存到云端库。


或者和运营商合作,把一些公共区域的免费WiFi给收录进去。


如果实在遇到一些,数据库里配对不上的WiFi。


WiFi万能钥匙还会提示你,可以尝试一下【深度连接】。


而所谓的【深度连接】呢,是App用内置的几千个弱密码,逐个连接同一个WiFi。


机友们都懂的,其实很多家庭路由器,密码都设置得很简单。


诸如12345678、1122334等朗朗上口的密码,简直不要太常见。


所以在很多时候,【深度连接】还真能帮你连上WiFi。


但后来的事情,咱们都知道了。


流量资费便宜了,用户对蹭WiFi的需求日渐下降。


再加上手机厂商和路由器厂商,也开始注重隐私安全。


Wi-Fi万能钥匙作为一个工具类应用,也就失去了解决问题的场景。


用户量减少、入下滑,都是板上钉钉的事儿。


为了维持收支平衡,WiFi万能钥匙加大了软件招商的力度。


我们可是有9亿用户总量的,欢迎来合作啊喂。


具体到可以塞广告的位置。


不能说克制,只能说处处皆是广告位。


横幅、图文、弹窗,基本上能塞内容的位置,都有广告的一席之地。


而WiFi万能钥匙,对于广告的内容筛选,更是让人汗流浃背。


比如说,以美女为诱惑,吸引你点开广告。


早期还有用户吐槽,App内部的信息流推送,有很多擦边低俗资讯。


讲道理,以它如此庞大的用户总量。


这么多广告的接入,肯定能让它在短时间内,赚得盆满钵满。


但这操作,多少有点饮鸩止渴的味道。


更何况,现在早就不是,流氓App能随意践踏手机的时代了。


你看这两年,手机厂商都在集中整治,WiFI类和清理类App存在的问题:


包括违规收集个人信息、频繁弹窗自动下载第三方软件等。


可能是意识到,只靠广告营收走不通。


WiFi万能钥匙在宣布改版后,广告确实少了很多。


那它现在又能靠啥维持生计呢?


机哥带着好奇,安装了新版打开体验。


结果发现,它现在往App塞了个短剧板块。


emmm...机哥也没啥好说的,祝它一切顺利吧。



作者:好机友
来源:mp.weixin.qq.com/s/9IfrA6ilpOit4dVAjH6U4Q
收起阅读 »

靠维护老项目度中年危机

最近靠维护老项目度过中年危机的话题挺火,刚好最近也在维护一个PHP开发的CRM的老项目,项目由于数据量比较大, 导致查询速度很慢, 经常出现超时的情况, 下面记录一下具体的优化过程。 优化老项目,老生常淡的几点: 1. 数据库优化 2. 代码结构优化 3. 缓...
继续阅读 »

最近靠维护老项目度过中年危机的话题挺火,刚好最近也在维护一个PHP开发的CRM的老项目,项目由于数据量比较大, 导致查询速度很慢, 经常出现超时的情况, 下面记录一下具体的优化过程。


优化老项目,老生常淡的几点:


1. 数据库优化
2. 代码结构优化
3. 缓存优化
4. 资源优化
...

数据库优化


众所周知, MySQL 优化第一步,就是建索引, 看了一下整个系统的表, 发现有大量的表都没有索引, 建了索引的表,索引名称有点花里胡哨, 如下:


contractId	`contacts_id`	NORMAL	BTREE	27599	A		0		
customer_id `customer_id` NORMAL BTREE 27599 A 0

--

index_group `role_id`, `callDate` NORMAL BTREE 4359069 A 0
business_id `business_id` NORMAL BTREE 518 A 0
status_id `status_id` NORMAL BTREE 43 A 0


于是,优化第一步,规范一下索引的命名,MySQL索引的命名虽然没有硬性的规范,但是修改一下自己看着舒服, 个人理解:


普通索引:idx_字段1_字段2
唯一索引:uk_字段1_字段2
主键索引:pk_字段1_字段2


于是 上面的索引改成了:


idx_contacts_id	`contacts_id`	NORMAL	BTREE	27599	A		0		
idx_customer_id `customer_id` NORMAL BTREE 27599 A 0

--

idx_role_id_callDate `role_id`, `callDate` NORMAL BTREE 4359069 A 0
idx_business_id `business_id` NORMAL BTREE 518 A 0
idx_status_id `status_id` NORMAL BTREE 43 A 0


一下看起来舒服多了, 于是, 优化第二步, 就是给没有索引的表加上索引, 这个工作量比较大, 先把几个 常用功能模块的 表给加上索引, 于是 吭哧吭哧的 分析了 2天的 慢日志, 给需要加索引的表加上索引,本以为 加完索引后, 查询速度会快很多,结果发现, 并没有什么卵用. 一个页面 虽然快了点, 但是 不是太明显.


本着能加 配置 绝不改代码的原则,先去问了一下运维 Mysql 运行的机器内存是多大 64G. 这么大,那好办,先分析一下 数据库中的表引擎. 上了一段代码:


/** * Author: PFinal南丞 * Date: 2023/12/28 * Email:  *//** 确保这个函数只能运行在 shell 中 **/if (!str_starts_with(php_sapi_name(), "cli")) {    die("此脚本只能在cli模式下运行.\n");}/** 关闭最大执行时间限制 */set_time_limit(0);error_reporting(E_ALL);ini_set('display_errors', 1);const MAX_SLEEP_TIME = 10;$hostname   = '';$username   = '';$password   = '';$connection = mysqli_connect($hostname, $username, $password);if (!$connection) {    die('Could not connect: ' . mysqli_error($connection));}$query  = "SELECT table_name,engine FROM informati0n—schema.tables WHERE table_schema = 'smm';";$result = mysqli_query($connection, $query);if (!$result) {    die("Query failed: " . mysqli_error($connection));}$InnoDB_num = 0;$MyISAM_num = 0;while ($process = mysqli_fetch_assoc($result)) {    echo $process['table_name'] . " " . $process['engine'] . PHP_EOL;    if ($process['engine'] == 'InnoDB') {        $InnoDB_num++;    }    if ($process['engine'] == 'MyISAM') {        $MyISAM_num++;    }}echo "InnoDB " . $InnoDB_num . " MyISAM " . $MyISAM_num . PHP_EOL;mysqli_close($connection);

得出结果:


表引擎 MyISAM 的表 176 张 InnoDB的表引擎 88张. 要了一份 线上MySql 的配置发现:


...

key_buffer_size = 512M
innodb_buffer_pool_size = 2048M

...


都知道 innodb_buffer_pool_size 针对的 是 InnoDB的表引擎,key_buffer_size 针对的 是 MyISAM的表引擎. 这配置不得修改一下. 果断打申请, 申请修改线上配置.


...

key_buffer_size = 2048M
innodb_buffer_pool_size = 2048M

...


重启服务后,果然比原来快了好多.能撑到 同事不在群里 打报告了.


艰巨的长征路迈出了第一步,接下来,本着 死道友不死贫道的原则, 厚着脸皮,让运维帮忙整了一台mysql 的机器,来做了个主从分离。 速度一下,不影响业务的正常使用了.


接着 开启漫长的 优化之路.


缓存优化



  1. 项目没有开启数据缓存, 只有 代码编译的缓存


所以这一块是一个大的工程, 所以先不动, 只是 给 几个 常用的功能加了一个 数据 的 缓存。后续的思路是:


  a. 加一个 redis, 使用 把代码中的统计数据 缓存到 redis 中

b. 把客户信息,客户的关联信息,组合到一起, 然后缓存到 redis中.
....


代码结构优化


开始挖开代码, 看看 查询慢的 功能 代码是咋写的,不看不知道,一看直接上头:



  1. 几乎全是 foreach 中 的 SQL 查询:


    foreach($customer_list as $key=>$value){        # ......        $customer_list[$key]['customer_name'] = $this->customer_model->get_customer_name($value['customer_id']);        $customer_list[$key]['customer_phone'] = $this->customer_model->get_customer_phone($value['customer_id']);        $customer_list[$key]['customer_address'] = $this->customer_model->get_customer_address($value['customer_id']);                # ......    }


  2. 由于 ORM 的方便复用, 大量的 表关联模型 复用,导致查询的 废字段特别多.比如:


    <?php    class CustomerViewModel extends ViewModel {        protected $viewFields;  public function _initialize(){   $main_must_field = array('customer_id','owner_role_id','is_locked','creator_role_id','contacts_id','delete_role_id','create_time','delete_time','update_time','last_relation_time','get_time','is_deleted','business_license');   $main_list = array_unique(array_merge(M('Fields')->where(array('model'=>'customer','is_main'=>1,'warehouse_id'=>0))->getField('field', true),$main_must_field));   $data_list = M('Fields')->where(array('model'=>'customer','is_main'=>0,'warehouse_id'=>0))->getField('field', true);   $data_list['_on'] = 'customer.customer_id = customer_data.customer_id';   $data_list['_type'] = "LEFT";   //置顶逻辑   $data_top = array('set_top','top_time');   $data_top['_on'] = "customer.customer_id = top.module_id and top.module = 'customer' and top.create_role_id = ".session('role_id');   $data_top['_type'] = "LEFT";   //首要联系人(姓名、电话)   $data_contacts = array('name'=>'contacts_name', 'telephone'=>'contacts_telephone');   $data_contacts['_on'] = "customer.contacts_id = contacts.contacts_id";   // 检查是否存在部门库字段            $warehouse_id = I('warehouse_id', '', 'intval');            if ($warehouse_id) {                $warehouse_id = D('Fields')->isExistsWarehouseTable(1, $warehouse_id);                if ($warehouse_id) {                    $customer_warehouse_data_table = customer_warehouse_table($warehouse_id);                    $warehouse_data_list = M('Fields')->where(array('model'=>'customer','is_main'=>0,'warehouse_id'=>$warehouse_id))->getField('field', true);                    $warehouse_data_list['_on'] = 'customer.customer_id = ' . $customer_warehouse_data_table .'.customer_id';                    $warehouse_data_list['_type'] = "LEFT";                    $this->viewFields = array('customer'=>$main_list,'customer_data'=>$data_list,$customer_warehouse_data_table=>$warehouse_data_list,'top'=>$data_top,'contacts'=>$data_contacts);                } else {                    $this->viewFields = array('customer'=>$main_list,'customer_data'=>$data_list,'top'=>$data_top,'contacts'=>$data_contacts);                }            } else {                $this->viewFields = array('customer'=>$main_list,'customer_data'=>$data_list,'top'=>$data_top,'contacts'=>$data_contacts);            }  }    ?>


  3. 代码中的业务逻辑一直再叠加,导致废代码量特别的大需要重新梳理逻辑


针对以上的代码做修改:


a. 第一点, 把所有foreach 中的 sql拆出来,先去查询到内存中,然后组合减少sql语句 

b. 第二点, 简化 ORM的乱用,比如只需要查询一个字段的 就直接用原生sql或者新的一个不关联的orm 来处理

资源优化



  1. 由于录音文件过大, 找运维 做了一个专门的文件服务器,移到了文件服务器上


最后


最后,给加了个定时任务告警的功能, 方便及时发现异常, 优化的 第一步 勉强交活。剩下的 优化 需要再花点时间了,慢慢来了.


作者:PFinal社区_南丞
来源:juejin.cn/post/7353475049418260517
收起阅读 »

高龄程序员转换开发语言的心酸历程

高龄程序员转换开发语言的心酸历程 35岁,对于大多数程序员来说,正处于职业生涯的黄金时期。然而,对于我来说,却是一个充满挑战的转折点。在做了10年的PHP开发工程师之后,我决定转战Java开发。 初衷: 做出这个决定并非易事。一方面,我对PHP已经积累了...
继续阅读 »

高龄程序员转换开发语言的心酸历程


35岁,对于大多数程序员来说,正处于职业生涯的黄金时期。然而,对于我来说,却是一个充满挑战的转折点。在做了10年的PHP开发工程师之后,我决定转战Java开发。


初衷:


做出这个决定并非易事。一方面,我对PHP已经积累了丰富的经验,拥有稳定的工作和收入。另一方面,随着互联网技术的不断发展,Java以其强大的性能和广泛的应用前景,逐渐成为主流开发语言。为了不落后于时代,我意识到学习Java是势在必行的。


挑战:


然而,转行并非一帆风顺。与初出茅庐的年轻人相比,我面临着更大的挑战:




  • 学习压力:Java与PHP有着很大的不同,需要从头开始学习新的语法、框架和生态系统。


  • 时间成本:除了日常工作,我还要抽出时间学习Java,这对我来说是一项巨大的考验。


  • 心理压力:年龄和经验带来的压力,让我一度怀疑自己是否能够成功转行。


心酸:


在学习的过程中,我经历了许多心酸的时刻:





  • 为了理解一个概念,我连续熬夜几天,最终还是一头雾水。



  • 在面试中,被年轻的求职者比下去,让我感到深深的自卑。


坚持:


尽管困难重重,但我从未想过放弃。我深知,只有坚持才能实现自己的目标。





  • 我制定了详细的学习计划,并严格执行。



  • 我积极参加技术交流活动,向优秀的程序员学习。



  • 我不断给自己打气,鼓励自己坚持下去。


转机:


上天不负有心人,经过一年的努力,我终于掌握了Java开发的基本技能。





  • 我顺利通过了Java工程师的面试,获得了新的工作机会。



  • 我在新的岗位上快速成长,得到了同事和领导的认可。



  • 我用自己的经历证明了,年龄不是转行的障碍,只要坚持不懈,就一定能够成功。


感悟:


这次转行经历让我深刻地体会到:





  • 学习是程序员的终身事业,只有不断学习才能保持竞争力。



  • 年龄不是问题,只要有决心和毅力,就能够克服任何困难。



  • 坚持不懈是成功的关键,只有坚持才能实现自己的目标。


希望我的经历能够鼓励更多高龄程序员勇敢追梦,在职场上取得更大的成就!


忠告:


如果你也想转行,以下几点建议或许对你有所帮助:





  • 做好充分的准备,了解目标语言的技术体系和发展前景。



  • 制定详细的学习计划,并严格执行。



  • 积极参加技术交流活动,向优秀的程序员学习。



  • 不要害怕失败,坚持不懈才能实现目标。


最后,我想说的是,年龄只是一个数字,只要你有一颗热爱编程的心,就永远不会被时代淘汰!


作者:源梦倩影
来源:mdnice.com/writing/48740efaaeaf48128397471867705c9a
收起阅读 »

一碗水永远不可能端平

和一些朋友聊天的时候,他们总是会说领导对自己是怎么不公平了,脏活累活丢给自己干,好处还一个也没拿到,而对别人是如何如何好了,表现得自己很无辜,很委屈的样子。 我觉得如果感觉不舒服,要么寻求其他方式来平衡,要么趁早离开,因为想寻求所谓的公平,那简直是说笑话。 很...
继续阅读 »

图片


和一些朋友聊天的时候,他们总是会说领导对自己是怎么不公平了,脏活累活丢给自己干,好处还一个也没拿到,而对别人是如何如何好了,表现得自己很无辜,很委屈的样子。


我觉得如果感觉不舒服,要么寻求其他方式来平衡,要么趁早离开,因为想寻求所谓的公平,那简直是说笑话。


很现实的问题,一个女人生下两个孩子,虽然表面都会公平对待,但是内心肯定都会更加喜欢长得好的那个,这就是人性的私心。


读书的时候,你成绩好不一定能赢得老师的喜欢和照顾,但是如果你家境很好,并且父母经常给老师拿烟拿酒,经常约老师出去吃饭喝酒,那么大多数老师肯定都会对你照顾。


这就是人性,哪里有那么多公平对待,无非是价值提供得多不多而已。


这个社会无论情感还是物质,都是十分倾斜的,钱都是流向越有钱的,爱都是流向越不缺爱的。


你说以前的政策是农村包围城市,先富带动后富,大家都觉得行,但是现在看一下,真的带动了吗?


从教育资源就能看出来,北京的一所公立学校和贵州乌蒙山区的一所公立学校的基础设施,经费,师资力量,那简直是一个在天上,一个在地下。


社会层面尚且都不能做到一碗水端平,更何况个人呢?


记得刚工作的那一年,我和一个女同事同一天入职,另外一个架构师比我们早十来天,但是到了第二年,发年终奖的时候唯独没有我们两个,并不是我们工作不辛苦,不努力,但是不给你就是不给你。


当时我还找领导理论,说为啥不一碗水端平,为啥要区别对待?


但是有用吗?合同上也没有明确规定要给你发年终奖,所以你再怎么说也没用,只有不欢而散。


另外一个早入职的同事虽然拿了年终奖,但是是别的同事四分之一,并不是他工作不努力,做的活没别人多,奉献的力量没别人大。


但是在人性和资本面前,并不是你像一头老牛一样辛苦你就能得到和别人一样的对待。


可能有一些没做啥事,但是会来事,在关键节点上会露面的人,人家却得到了不错的对待。


这时候你作为一个底层的小员工,可有可无的人,你去谈公平对待是会显得很无力的。


所以要尽早走出一碗水端平这个误区。


无论是工作,家庭还是社交,把价值进行可视化才能占风头,低头苦干只有感动自己。


因为我们如果把角色进行转换,自己可能还不如别人做得好,只是自己段位比较低,容易去做一些无力的咆哮而已。


因为人这种生物在自己没有受益的时候,都是会说别人不好,别人不公平公正,但是自己受益了,别人怎么做都觉得对。


就像我们经常说有些人在某些岗位上拿着钱不作为,简直是吃皇粮不干事,无情的骂别人。


但是当你到了那个位置,你就能保证你有作为,你认真负责,也不见得吧!


所以想清楚这一点就不会活得那么累,就会泰然自若面对身边发生的事情,就会摒弃那些自以为是和幼稚的想法!


作者:苏格拉的底牌
来源:juejin.cn/post/7337188759059824655
收起阅读 »

调了个方法导致接口变慢好多,真实原因有点坑。

前言 这篇文章是按照我的记忆梳理的,然后解决方法其实很简单,主要是梳理一下当时的排查思路,所以请大家多多指教。错误之处或表述不清楚的地方,欢迎评论指出或建议,感谢。 背景 事情发生在一个正常的下午,领导对我说:有项目组汇报说一个创建的接口变的比较慢,让我...
继续阅读 »

前言



这篇文章是按照我的记忆梳理的,然后解决方法其实很简单,主要是梳理一下当时的排查思路,所以请大家多多指教。错误之处或表述不清楚的地方,欢迎评论指出或建议,感谢。



背景



事情发生在一个正常的下午,领导对我说:有项目组汇报说一个创建的接口变的比较慢,让我尽快排查一下。我一听,这个功能不是我写的,心里首先放松一下,那就排查吧!



验证线上


首先,当然是和领导确认,什么情况下,访问这个接口慢,因为有时候可能在某个特殊的场景下才会导致此类问题,或者是偶发情况,确定了这一点,也方便排查,然后我就按照领导说的,找到所属的数据页面,进行同样的操作。发现果然比较慢(这是我工作中学到的,不管别人怎么说,自己验证一遍),F12看了下,返回时间差不多快2s了,这个速度确实是有点慢的,因为这个添加的处理逻辑按理来说是不复杂的,不应该这么慢。


本地排查


接下来,就是排查的步骤,首先本地先启动一下,连接测试库看看是否有慢的问题,如果本地也慢,就比较方便一些,可以通过日志来打印每一部分花费的时间(我一般用StopWatch类),就可以知道哪里慢了。但是遗憾的是本地没有复现这种情况。


代码排查


既然无法复现,就只能看代码了,对比了下涉及到这个文件的提交记录,大概伪代码如下:


...
...
String name = xxxService.getMember(name);
...
Project project = prjService.getProject(code);
...
project.getProjectId();
...
...

看见的第一眼,我直接忽略了这一段,觉得没啥问题啊,然后事实证明,事出反常必有妖。


最终原因


其实慢的原因就是我直觉忽略了的这一段代码中的Project project = prjService.getProject(code);,当我点进去后我才发现,里面别有洞天,我没法给大家复制代码,还是给大家一个伪代码:


....
Project project = prjDao.getObject(code);
String pId = project.getProjectId();
List<Task> list = prjDao.queryTaskList(pId);
for (Task task : list){
String taskId = task.getTaskId();
Work w = prjDao.getObject(taskId);
....
s = s.apend(w.getName());
}
project.setExtend(s);
....


以上代码存在的问题主要就是在for循环中进行对数据库的查询,如果list的长度很长的话,就会导致查询慢的问题,当时发现的时候真的是无语了,你如果有扩展,可以在方法中进行清晰的标识(比如:queryprojectExtend),并且代码也不必这么写,可以提取所有的taskId到一个list中,然后作为参数进行查询。


另外还有一个坑的点就是,其实原来的人调用这段方法本身其实就是为了拿一个project.getProjectId();,所以完全可以另外写一个简单获取的方法即可。


解决并验证


因为知道了原因,所以从数据库找了数据比较多的一个来进行复现,果然复现成功,也证明了问题就是出在这里。
首先把代码进行修复,修复后的伪代码如下:


....
Project project = prjDao.getObject(code);
String pId = project.getProjectId();
List<Task> list = prjDao.queryTaskList(pId);
List<String> idList = list.getIdLIst(list);
List<Work> works = prjDao.queryObjectsByIds(idList);
for (Work task : list){
s = s.apend(w.getName());
}
project.setExtend(s);
....

以上虽然也使用了for循环,但是内部只是做了字符串的拼接,也可使用Stream,会更简洁。
更改完后,继续测试该接口,发现是正常的。


思考总结



其实这次的问题很简单,没有涉及到高大上的一些问题来调整,要避免其实也很简单,调用其他人写的方法时,大概点进去观察一下。写方法的时候多想一下,是否会造成查询慢的问题,就可以了。




  • for循环查询这种情况,尽量避免。

  • 调用他人方法时需要知道内部大概的逻辑,切勿望文生义。

  • 不要想当然,觉得没问题就不排查。


致谢


感谢你的耐心阅读,如果我的分享对你有所启发或帮助,就给个赞呗,很开心能帮到别人。


作者:bramble
来源:juejin.cn/post/7348842402826321961
收起阅读 »

为什么马斯克能扭曲现实

好多人看完Elon的新传记开始扯现实扭曲立场,聊虚头巴脑的东西都没用,关键是为什么Elon有这种来扭曲现实的能力。   马斯克手下的工程师的bar都非常高,早期在SpaceX为了不雇二流工程师宁愿自己上,想要push下面这些人拼命工作,要没点真本事基本不可能,...
继续阅读 »

好多人看完Elon的新传记开始扯现实扭曲立场,聊虚头巴脑的东西都没用,关键是为什么Elon有这种来扭曲现实的能力。


 


马斯克手下的工程师的bar都非常高,早期在SpaceX为了不雇二流工程师宁愿自己上,想要push下面这些人拼命工作,要没点真本事基本不可能,分享几个例子(在实际的工程和制造过程中大概率是常态):


 


Gega Factory流水线上,本来用6颗螺丝固定的地方,Elon觉得4颗就够了,下面的工程师解释说再少的话强度不够,Elon说他在脑子里模拟了一下冲压强度,感觉4颗螺丝就顶得住,改完后一切正常运行,这种判断需要大量的工程经验和物理直觉。


 


SpaceX开始制造星舰的时候,火箭材料的选择上争议很多,团队告诉他用不锈钢会比用猎鹰9号上的锂铝合金或者碳纤维更重,Elon的直觉告诉他不是这样,要求团队把具体数字算出来,结果Elon是对的,而且不锈钢在极寒条件下强度会增加50%,更适合装载超低温液氧和液氮,再者他可以雇佣没有碳纤维经验的工人(用工的成本更低),更进一步不锈钢的熔点高,星舰的外壁不用额外设置隔热层,最后焊接还更容易(锂铝合金需要超净焊接环境,不锈钢直接露天大棚咔咔焊)。更细节的是,要确认星舰外壁的厚度时,一线的焊接工人给Elon的反馈是4.8mm,Elon觉得4mm就行,不顾一线人员的担忧拍板了,后来证明没问题。


 


Elon在SpaceX内部普及了一个概念叫"白痴指数",指的是一个零件或组件的总成本和原材料成本之间的比值。他在会上问下面的工程师根据⽩痴指数,猛禽发动机中做得最好的部分是什么,结果下面的人答不上来,试探性地答了一个喷管护套,说成本大概13000美元,由一种钢整块制成,Elon追问这种原材料的价格是多少,对方回答说大约几千美元,Elon立马纠正说200美元现场打脸并表示对方错的离谱。


 


现实扭曲立场是什么?就是你老板在你的工作领域很多地方比你还懂,角度比你还新奇,考虑比你还全面,对细节数据掌握比你还扎实,在过往的技术方向,工程方案,成本控制的争论中超出大家的预期,证明他更正确。假想一下这种老板要求员工把某个指标在某一期限内优化xx%,或者彻底拿出一个更好的方案,员工说不可能,然后老板自己住在工厂加班最后有理有据prove you wrong是什么感觉?下一次他再提一个看起来是扯淡的需求,团队就会觉得这是可能的,然后work hard on it,这就是现实扭曲立场。


 


如果leader本人没有这种身先士卒的精神,以及让最好的工程师都赞叹的专业能力,能扭曲个啥?喊几句cheap slogan谁都会


 


不是说Elon是神,他也会犯错误,比如2018年Model3产能爬坡的时候在工厂自动化上面做的过于激进,反而降低了效率(比如某些机械臂在搬运物件的时候出现意外导致整个产线停滞,用手工可靠得多),最后为了最大化生产效率又开始"去自动化"。类似地,在收购SolarCity早期,他疯狂push下面的人增加屋顶太阳能面板的安装效率,搞了半天也没什么成效后来不了了之。但这些错误都是可以接受的,都不妨碍他在团队塑造硬核文化然后drive整个公司往前走。


 


那些故事性很强的鸡汤鸡血都是扯淡,事实很简单,就是Elon在技术和商业上认知几乎比所有人都好。


作者:数据智能老司机
来源:juejin.cn/post/7351430820715266074
收起阅读 »

生命里每一段记忆,可能都伴随着DNA的断裂与修复

周末的时候刷到一篇论文,可能揭示了人类长期记忆的形成机制。而这机制的背后似乎是生命的本质。 Nature上的新研究 这是一篇新鲜热乎的Paper,3月27号刚发的。(P.S.:Paper原地址我放原文链接里了) 图源:Nature ...
继续阅读 »

周末的时候刷到一篇论文,可能揭示了人类长期记忆的形成机制。而这机制的背后似乎是生命的本质


Nature上的新研究


这是一篇新鲜热乎的Paper,3月27号刚发的。(P.S.:Paper原地址我放原文链接里了)



图源:Nature

图源:Nature


这个题目是说记忆构成和TLR9通路中的DNA感知的关系





不是说最近大模型Kimi很火,支持200万字无损上下文了么,于是我直接上Kimi试一下。



图源:Kimi

图源:Kimi


嗯,上传上去稍微问一下整体架构和结论,还是挺有意思的。说的似乎是记忆和DNA的关系。但来来回回问Kimi感觉还是挺花时间,算了还是自己看看吧。


我尽量试着给大家解释解释。


长期记忆和DNA损伤


这篇Paper里的核心是一个反直觉的结论是:在人类大脑海马体形成记忆的过程中,一些细胞会产生损伤,尤其是双瓣DNA会产生断裂和重组


也就是说,记忆的产生本身对人体来说,并不是获得,而是损伤。


是不是非常反直觉?


这个Paper里的研究思路很明确。结论也非常直接。


就是在记忆形成的短期内(大概1-2个小时内),大脑中负责记忆的部分会经历一个“破坏的过程”。这个过程堪称惨烈。比如双链DNA会产生断裂、细胞的瓣膜会产生破裂,甚至还有一些细胞核里的组蛋白会流到细胞核外,同时伴随着一些“炎症反应”。



图源:Nature

图源:Nature


很多人看到“炎症反应”会觉得是发炎,但其实不完全是。学术上的炎症反应指的是“损伤、抗损伤和修复的动态过程”。


那么,在记忆产生这个撕裂的过程中的炎症反应里扮演重要角色的就是这个论文的主角:TLR9


它是一个特定的免疫机制,正是它在这个过程里去修复DNA断裂,修补破裂的细胞并且应对炎症反应。



图源:工作细胞

图源:工作细胞


这也就是说,每一次记忆的形成,都是一个DNA断裂、细胞破损、然后TLR9处理炎症反应、最后身体恢复正常的一个过程。


研究人员还尝试了移除TLR9。于是发现在没有TLR9的情况下是无法形成长期记忆的,也就是说这个作用链条没有TLR9的参与就没法闭环。


听起来这有点像健身锻炼肌肉,肌肉的增长前提是轻微肌肉撕裂


但不同的是,对于锻炼肌肉而言,只有在训练和运动的时候才会出现这样的情况,并且是轻微肌肉撕裂。对于记忆过程中这都不是轻微撕裂了,这是双链DNA断链再重组。


锻炼=断链了属于是。


Viva La vida


我并不是一个专业的医学生,也不是生物专业的研究人员。我只是看到这篇Paper,突然对人类的生命再一次肃然起敬。


我们都觉得体育运动和锻炼带来的酸爽是一种正向反馈,因为这是你的身体在经受一次又一次的挑战与自我修复。


但是在我们看不见的地方,在你记住一些知识、一些任务和一些事情的时候,每一分每一秒身体里都有数以万计的细胞再断裂、产生炎症、再重组。


涅槃在时时刻刻都确实发生着。原来不思考的生命就没有意义,这不是一句鸡汤。


生命的自然机制本身就在挑战、摧毁并重塑自己。我的身体比我自己对自己可狠多了。


Viva la vida是一句西班牙语,意思是生命万岁/致敬生命。



图源:Google

图源:Google


这幅画的名字就叫做《Viva La Vida》,受这幅画和一些历史故事的启发,ColdPlay乐队创作了他们的经典专辑《Viva La Vida》.


所以现在我知道了,那些所谓刻在脑子里的事情,是真的literally的“”在了我的生命里。


作者:wayne3200
来源:mdnice.com/writing/84234c4f5f1c479a920b9103bf1f09f3
收起阅读 »

研究生真的会勾心斗角嘛?

背景 我感觉我是一个有点大大咧咧的人,有时候看不出来别人对我耍心眼,大学期间也有几次是事后才反应过来,而且我很容易对别人真心相待,我觉得我对他好他也会对我好,起码不会坏我,但是并不是这样,最近被好多研究生勾心斗角的言论吓到了,真的很怕 编者语 但什么东西...
继续阅读 »

背景


我感觉我是一个有点大大咧咧的人,有时候看不出来别人对我耍心眼,大学期间也有几次是事后才反应过来,而且我很容易对别人真心相待,我觉得我对他好他也会对我好,起码不会坏我,但是并不是这样,最近被好多研究生勾心斗角的言论吓到了,真的很怕


编者语


但什么东西有利益分配的时候,那么心眼就已经在耍起来了。


大家虽然,但也不会有啥坏心眼,不至于为了自己利益给其他人使绊子。


所以,放宽心,一切都是纸老虎。勇敢面对。


对了。多数人都很单纯,大家都是好朋友,以心换心,你是什么样的,你身边的人也会是什么样的。





把“嘛”字去掉





答案是肯定的,研究生真的会勾心斗角!


有人的地方就会有江湖,你的寝室就四个人还会有好几个小群,更何况一个有好多人的课题组呢?


举个例子:某校大牛课题组学生加职工共计100人,其中小导5个,博士10个,科研助理类工作人员3个,剩下的都是硕士和本科实习生。


大导分配任务给小导的时候会把同一个课题给到两个人,这不就出现矛盾了么?这两个人都需要成果,肯定谁做的快谁能留下,那他们带的研究生不就被迫跟着站队了么?难道你敢私下跟另一个导师的同学说你们组课题进展?或者说实验计划?


加上课题组内部的博士名额有限,想要读博的硕士本身就有很大的竞争关系,这不要靠谁的科研成果多,或者说谁能更得导师的心来决定了?


然后就是奖学金啊、课题组里面的资源啦、实验排期啦、仪器使用啦………能产生利益冲突的不要太多了好不好。


没有永远的朋友,只有永远的利益不仅仅适用于国家之间的关系,在职场或者读书阶段也是如此。


9个女生,1个男生


我们组研123年级一共9个女生,1个男生。1女博5。勾心斗角情况数不胜数。尤其是读到博士阶段且在校时间很长的尸姐(兄),及其擅长利用师弟师妹帮其做实验push 你控制欲极强,然后和老板聊天笑着就把你告了。说你经常找不到人做实验粗去玩。。。


大虎不怕,苍蝇难防


大部分人都是好的。但难免遇到一两个苍蝇。一个人能做到让组内的其他人都对他有意见有看法,是真的不容易。


大勇若怯,大智如愚。


会有的,而且同门有可能会成为打到你的主谋。我读研的时候,当年考研初试复试第一的女生就因为锋芒尽显,在上课做pre和各种提问中锋芒毕露,在组会上也比较积极,给人一种远超同门的气场。结果就被同门联合她的舍友诱导说了一些质疑导师的话,被录音给了她的导师,直接被逼退学,后面运作了好久才转组成功(也没有科研前途了,去给别人当耗材牛马去了,成果不给她的那种)。


大勇若怯,大智如愚。我反正就不会在没啥用的课堂演讲上锋芒毕露或者提问把同学问的下不来台。自己学点喜欢的东西,不争不抢,期末考试考好点,科研做好点,能在没人指导和导师起副作用情况下能写出大小论文通过答辩就行了。


研究生是否勾心斗角甚至是导学关系是否勾心斗角很大程度上取决于学院的整体生态和科研环境。如果你的学院和课题组大部分人都容易沟通、实事求是、科研风气积极向上,那必然不需要花很多时间处理所谓的人际关系。但如果你所在的学院和课题组学风不正,大部分事情讲的是丛林法则,凡事一看关系二看派系三看资源的。那大概率是要花很多时间在人际关系、派系斗争和做局坑人上。毕竟你勤勤恳恳做1000个小时得到的结果,可能别人花2小时编一个谣言或者给导师拍拍马屁就可以直接抢走,换谁会愿意真正的干活呢?


恶心


自己的idea被实验室同学拿去发了论文,顶会,作者没有我,甚至都没有收到一句感谢,并且所有场合提到这个idea的时候都变成了他的,老师不知道会当着我的面说那个同学idea怎么怎么好可以用在什么什么上拓展一下,我该如何自处?!实验室的同学还劝我大度,我大度你个鬼啊!不知道算不算恶心?


还有人明明知道某个代码怎么回事,还故意告诉你错的,实验室有锅往你身上甩,有功劳自己抢的可快了,肆无忌惮的的欺骗,偷抢功劳,算不算恶心?


本人一直秉着实验室都是好同学的思想,大家有求一定100%努力相助,从不欺骗谁,不抢别人功劳,觉得实验室应该互相帮助,一起科研进步,最后却还是遇到上述那些人,呵呵呵。


最难的地方是老板


有感而发。


说几句吧。


国外实验室呆过,感觉就是没有什么勾心斗角。


一个团队的人都很乐于互相帮助。


发文章一块发,有工作贡献就可以。当然主要作者都是博士生。


实验室的人际关系,很简单,很和谐。从无欺负人现象。


听说,国内什么都很卷。


就想说说,到底什么是卷。


有的人说,是蛋糕不够分。


有的人说,是美国卡脖子。


什么的。各种说法都有。


看过各位的回答,有点明白到底什么是内卷了。


就是一个实验室的人,没有爱心,也缺乏互帮互助的精神。


当然,很多精力就要花费在维护人际关系,维护实验室基本操作规范方面了。


这个比较普通与简单的方面,其实都没人重视,也不认真去履行。


实际上,是实验室人员缺乏职业道德,缺乏职业精神。


另外,感觉国内实验室人员缺乏主人翁意识,别人的事情不管,其实别人的事情很大程度也是与自己有关的。因为一个实验室嘛,互帮互助,这是人性。


还有,精力浪费在人际关系方面,就是没有很多精力用于科技研发,科研想法的创新了。


这是个人理解的所谓内卷。


我觉得不是硬件的问题,是软件的问题,就是人之根本的问题。


科学的发展,其实是人的发展。


科学之所以在西方,欧美发展的繁荣,也是因为这些地方,首先是人得到了发展。


人性得到了发展,人的本能得到了发挥与发扬。


人有哪些本能呢?


作为国外观察,我觉得人的本能有很多就是根本性的,却在国内一些实验室可能严重缺乏了。


比如,敬业,负责,有爱心,互帮互助,团队精神,自我批判与质疑,对待他人宽容与谅解,等等。


这些人的本能是维护一个实验室正常高效运转的基本要素,实验仪器其实反而是次要。


实验室里最宝贵的财富,是人。仪器什么的,都可以造,买,借。


只有人,如果本能受到了破坏,则就很难修复。想让一个不负责任各种撒谎的人突然就负责然后特别的敬业严谨,可能需要好几年的培养。而一个出了问题的仪器,花钱修理或者直接购买就行了。


可见,人的本能,难以重建与塑造。


那么发生在一个实验室里的各种内卷情况,则会层出不穷。


一个人的环境良好的实验室,哪怕实验仪器老旧,只需要多付出一点精心维护,实验室还是可以正常运作的。甚至可以发挥出更大的价值。


一个人的环境不好的实验室,哪怕是几百万几千万的大价钱购买的顶尖仪器,恐怕也难以得到足够的维护与修养,从而得不到一个实验仪器应有的功效。


那么如何解决实验室勾心斗角难题呢?


我觉得挺难的,不过还是可以尝试一些办法去解决。


第一,多去国外实验室打工,交流,学习。谦虚点,多观察,尤其多观察国外实验室他们如何管理的。人与人如何搞关系的。肯定和国内不一样。另外,不要觉得在国外,类似国内不好的事情也一样发生,就对国外实验室或科研产生看不起瞧不上的心态,这样只能自己心浮气躁,什么都学不到。最多混个履历或者文章。


第二,提高一下心性。其实冥想之类的挺管用。别人的批评听听,多吸取积极的批评,负面的批评就早点忘记,不要影响自身的积极性。


第三,多阅读一些有关,心灵,精神,方面的书籍。最好还是看国外翻译的。国内很多都是比较假的鸡汤。


第四,组织实验室共同学习,共同进步,多互相帮助,做事有规则有原则,就可以减少很多根本不必要的勾心斗角与内卷。


第五,以身作则,遇到原则问题需要自己去维护自己的利益,同时,要影响实验室其他成员给积极的影响。


当然,最难的部分实际上是实验室老板。这个,我们就无法解决了。如果老板愿意听你的,可以自己去与老板谈谈如何更好构建实验室。也是一个办法。


如果老板固执的不行,只能换地方了。


往大了说,这个内卷问题其实是一个文化问题。


这就太难解决了。谁也解决不了。


到了自己头上


本来以为自己不会有这样的问题的,一年以后发现实验室可真是卧虎藏龙小型帮派现场啊。


实验室大概有两个势力集团,一靠权力,二靠暴力,剩下我们普通人苦苦挣扎,现在新生还好真怕和他们的师兄师姐变得一样。作为有很多老师的大课题组,财产掌握在刚刚留校的实验室大师兄手中,暴力是指实验室有两位博士(男女朋友)逐渐将财产私有化专门化并欺压师弟师妹们。还有其它普通人分在别的老师名下我觉得我们同病相怜惨兮兮。还有师妹实验数据的文件夹被整个删了不知道是谁。


先说大师兄手下的特权,因为大师兄享有采购权所以在导师极度抠门的情况下,资源优先分配到人家那里。一个实验室手套都不能随时供应你敢信?三角瓶也不够要到处借,洗衣粉没了也不及时买(我去一楼借洗衣粉人家说只有洗衣液留下了羡慕的泪水。)试剂随时就没了,还有各种耗材没有是正常操作,(称量纸没了撕笔记本,洗手液没了就不用,甘油管没了找别的实验室借,枪头没了洗洗灭菌,橡皮筋没了把断了的打个结继续用,冰箱保菌装甘油管盒子没了拿硬纸盒装)


但是到了大师兄手下就不一样了,反正我一问就是没有了买了还没回来,但是人家就有一箱一箱的新三角瓶,随时可用的手套,有充足理由实验需要采购各种东西。还有年度大会两三千的奖励为实验室做贡献而其它师兄师姐比如负责每晚安全检查和新生培训的就没有。


那两口子不属于大师兄管但是是博士入学久,所以就自己给自己特权。两口子有自己专属的超净工作台,工作台要预订,我们也可以用但是只要人家要用没定也会在旁边赶你。PCr要预订,一个学弟延伸时间久,师姐就直接把他的PCr管扔了出去扔了出去还给负责学弟的师兄(有事不在学校)打电话骂了半个小时问反应体系延伸时间是放迟了还是超时了,此时还有半小时反应完成。他们组所有公用的东西自己都会私藏一份作为人家专用的东西,小到量筒,浮漂,放三角瓶的框,大到蛋白胶的电泳槽,写了他们名字的别人都不能用,用完放自己柜子里,→_→可是这些都是公用的。至于抢别人定的摇床也是正常操作,以至于他们带的本科生师弟也飞扬跋扈,在下午抢了一个博士师姐的电泳槽说他着急看结果,师姐生气说着急为什么不中午看才立马道歉。两口子的厚脸皮程度就连大师兄也要退让三分,更何况他们还会在大组会上怼大老板自己的导师你敢信?导师给提意见会打断说自己知道。


不过两口子的实验能力有目共睹,师姐洗瓶子要洗到没有肉眼可见的一点点污渍反复清洗十几遍不聚成水滴也不成股流下,这一点是我们做不到的。所以两口子实验效率特别高。


作者:时问桫椤
来源:mdnice.com/writing/d841b81020b94d57821fa484883a2e14
收起阅读 »

《青春咖啡馆》书籍推介

《青春咖啡馆》书籍推介 摘要 一些书籍的阅读往往能带来自我心灵的疗愈,《青春咖啡馆》就是这样的一本书,书中描写了一个和20岁左右的女孩子关于心中幸福的追索,反映出那个年代探索人生意义的青年群像。20世纪60年代,法国存在主义兴起,青年在这些思...
继续阅读 »

《青春咖啡馆》书籍推介





摘要


一些书籍的阅读往往能带来自我心灵的疗愈,《青春咖啡馆》就是这样的一本书,书中描写了一个和20岁左右的女孩子关于心中幸福的追索,反映出那个年代探索人生意义的青年群像。20世纪60年代,法国存在主义兴起,青年在这些思潮的引导下渴望摆脱人生的束缚,不断逃离那些既定的轨道,在“去存在”中获得自由。可是,一味地追求“存在”、“自由”,真的可能吗?故事的女主人公就是如此,她最后选择存在于另一个世界……


点评


《青春咖啡馆》是莫迪亚诺最令人心碎的作品之一。作品一如既往地充满了调查与跟踪,回忆与求证,找不到答案的疑问。“您找到您的幸福吗?”可是,露姬到哪里去寻找她的幸福呢?咖啡馆?书籍?大街上的游荡?婚姻中?逃跑?她全试过了,包括毒品和神秘学,可她像其他许许多多的人一样,最终消失在时间的长河中。


历史背景


本书的故事发生在20世纪60年代的法国巴黎,正是各种青年学生运动盛行的时期。当时有一位重要的思想家居伊·德波,他的思想曾对1968年的法国青年学生运动“五月风暴”产生过巨大影响。本书的作者莫迪亚诺也引用了他的这样一句话放在小说开头:



在真实生活之旅的中途,


我们被一缕绵长的愁绪包围,


在挥霍青春的咖啡馆里,


愁绪从那么多戏谑的和伤感的话语中流露出来。 ——居伊·德波



国际情景主义者认为,“在这个被商品和景观统治的社会中,创造精神和人生梦想失去了自己的家园,人生活在这样的环境里感到窒息”,所以他们主张用创造生活取代“被动生活”,呼吁“毫无拘束地生活、毫无节制地享受”和游戏人生,并进行人生的“漂移” (dérive)。居伊·德波在《漂移理论》一书中指出,漂移是“一种快速通过各种环境的技巧”,是指对物化的城市生活,特别是建筑空间布局的凝固性的否定。《青春咖啡馆》的故事发生在六十年代初,正是情景主义者活动最如火如荼的时期。作品中的人物似乎都在按照情景主义者的规则生活着,跟那些情景主义者一样,他们都认为工作和学习是束缚人的,“永远也别工作”,写在墙上的标语非常醒目。


小说结构


这部小说以上世纪六十年代的巴黎为背景,巴黎塞纳河左岸的拉丁区,一家名叫孔岱的咖啡馆,吸引了一批年轻人。他们四处漂泊,居无定所,放荡不羁,过着今朝有酒今朝醉的生活,他们之中有作家、艺术家、大学生,他们沉湎于酒精和毒品。故事就从他们当中一个名叫露姬的女子出现、失踪、追忆到后来她自杀的过程来展开故事的。整个故事并不完全是以线性方式展开,而是通过四个人的视角来讲述一个相互交叉的故事。读完这本书,我有一个疑问,这种叙述方式是否已经成为当代文学的一种常态,福克纳、略萨的作品都用了这种方式。


叙述者一(巴黎高等矿业学院的学生)


第一个叙述者是一名巴黎高等矿业学院的学生,他也是孔岱咖啡馆的常客,通过他的视角我们第一次见到本文的女主角,“露姬”这个名字也是他给取的。他还带领我们参与了咖啡馆的日常,认识了咖啡馆的服务生和客人,其中一个人称“船长”的客人连续三年记录了咖啡馆客人到达的时间和他们的住址,“船长”离开巴黎时将记录的笔记本留个了这位讲述者,他不断的翻阅笔记本,露姬在他的追寻下,一步一步的清晰起来。露姬是一个蓝眼睛,棕色头发,指甲修长的美女。她身体笔直,形态优雅,一言不发,谨小慎微,手里经常拿着一本《消失的地平线》,与咖啡馆的其他人格格不入。叙述者因此断定“她到孔岱这里,是来避难的,仿佛她想躲避什么东西,想从一个危险中逃脱。”这是从一个陌生人的角度对女主角的描述。


叙述者二(盖世里,一名私家侦探)


第二个叙述者名叫盖世里,是一名私家侦探。他讲述了一个名叫让-皮埃尔·舒罗的人,委托他寻找舒罗离家出走几个月的妻子雅克林娜,据舒罗说,他是在自己的房地产公司结识雅克林娜的,她是他的秘书,为了“建立关系”,他们二人结婚,婚后雅克林娜觉得丈夫无趣,狠心离家出走。盖世里很快查明雅克林娜的真实身份,她二战时期出身于索洛涅,没有父亲,由母亲单独抚养,母亲在红磨坊当服务员。她幼年时,母亲上班时经常将她一人留在家里,她因孤单和恐惧,时常在母亲上班时外出闲逛,并沾染上毒品,两次因“未成年流浪”被警察抓走。在盖世里的深入调查下,雅克林娜就是露姬这一事实得以解开。随着了解的进行,盖世里被雅克林娜的经历打动,似乎理解了她离家出走的缘由,最后,放弃侦查,不再干扰她的生活。这是从一个侦探的角度让人物从模糊走向清晰的过程。


叙述者三(女主人公,本人)


第三个叙述者是露姬(雅克琳娜)本人。她讲述了她在十八区拉谢尔大道10号度过的童年和少年时光。晚上,她母亲上班不在家,她就偷偷溜出去闲逛。一次在九区,一次在十八区,一个男人和一个女人,为她提供了战胜恐惧的“良药”,她尝试吸毒,吸过之后她不再感到恐惧。在克里希林荫大道,她结识一家专门售卖科幻和天文学书籍的书店的老板,老板送了一本《无限之旅》的书给她,让她体验了阅读的乐趣。她解释了自己为什么总想逃走“每次我和什么人断绝往来,我都感到一种沉醉。”不管是年少时的离家出走,还是从丈夫家的逃离,都是居于这样的原因。这是从当事人角度的叙述,部分回答了第一叙述人和第二叙述人的疑惑,让谜一样的露姬逐渐的立体丰满起来。


叙述者四(罗兰,露姬的情人)


第四个叙述人是露姬的情人罗兰。罗兰是一个刚入门的作家。他与露姬在一个名叫居伊·德·威尔组织的聚会上认识,威尔是一个神秘学家,也是这群年轻人的精神导师,他推荐露姬阅读《消失的地平线》和《不存在的路易斯》。罗兰和露姬相识相爱,露姬不想光顾能勾起她痛苦回忆的拉丁区,十六区又离她丈夫家很近,他们因此生活在中立地区,但也并不感到安全,于是谋划出国旅游,还未成行,露姬突然跳窗自杀,故事戛然而止。


哲理


《青春咖啡馆》作者是2014年诺贝尔文学奖得主,他生活在法国,深受法国哲学思想的熏陶,他在这本书中大段引用了法国哲学家吉尔·德勒兹的“逃逸线“概念。


“逃逸线”(ligne de fuite)是法国哲学家德勒兹(1925-1995)经常使用的概念,在后期经典之作《千座高原》中,他详细区分了三种类型的“线”:坚硬线、柔软线和逃逸线。





  • 坚硬线指质量线,透过二元对立所构建僵化的常态,比如说人在坚硬线的控制下,就会循规蹈矩地完成人生的一个个阶段,从小学到大学到拿工资生活到退休。





  • 柔软线指分子线,搅乱了线性和常态,没有目的和意向。





  • 逃逸线完全脱离质量线,由破裂到断裂,主体则在难以控制的流变多样中称为碎片,这也是我们的解放之线,只有在这条线上我们才会感觉到自由,感觉到人生,但也是最危险之线,因为它们最真实。




故事的主人公露姬就是一个摆动在坚硬线和逃逸线之间的女孩子,她说:



后来,我每次与什么人断绝往来的时候,我都能重新体会到这种沉醉。只有在逃跑的时候,我才真的是我自己。我仅有的那些美好回忆都跟逃跑或者离家出走连在一起。但是,生活总会重新占据上风。当我走到迷雾街时,我深信有人约我在此见面,这对我来说又会是一个新的起点。(p82)



露姬的心理


一方面她渴望逃脱出坚硬线的束缚,追求自己认为的幸福,自己认为的“真正的生活”,每当她逃离的时候,她都会感到一种沉醉、自由。另一方面,她不断逃跑,但是后来生活总会占据上风,这是一个从“逃逸线”回归“坚硬线”的过程。


从她的逃跑经历来看,在露姬十三四岁的时候,她母亲上班要上到凌晨两点,于是露姬喜欢一个人在半夜出门,在大街上走来走去。这导致她曾两次因未成年流浪被警察叔叔送回了家,这就是她最开始体会到,她离家出走后生活总会重新占据上风,她又会进入一个有明确意义的事件中。


之后她母亲去世,露姬与一个名叫舒罗的受过良好教育的中产结婚了,她的结婚又是一种对“坚硬线”的回归。



可她为什么要嫁给舒罗?结婚之后再次出逃,但这一次却是朝左岸逃,就好像过河之后,她就逃脱了迫在眉睫的危险,并得到了保护。可是,这桩婚姻对她来说不也是一种保护吗?假如她有足够的耐心呆在诺伊利,久而久之,人们就会忘记在让-皮埃尔·舒罗夫人的底下还藏着一个雅克林娜·德朗克。(p53)



露姬不断逃离,不断融入新的关系之中,“他们只是尝试建立关系”。露姬总是在逃离那个幸福不在的地方,但当她到了一个新的地方,她又觉得幸福不在那里。



她说,真正的生活,不是这样的。可当他问她那种“真正的生活”到底是什么样子时,她就一直耸肩膀,不置一词,就好像说了也是白说。(p39)



结合拉康精神分析


可以说,露姬是一个在不断逃离大他者和小他者的女孩子。她在逃离那些社会规范,比如家庭、婚姻、学校,即所谓的大他者。她也在逃离他人的想象,比如她尝试与她原来在酒吧的那些朋友绝交。



我的心中充满了沉醉的感觉,这种沉醉是酒精或者那雪什么的永远给不了的。我往上一直走到迷雾城堡。我已经痛下决心永远也不和康特尔酒吧里的那帮人见面了。



她希望逃离一切束缚,但是她根本没有意识到她无法逃离大他者和小他者,她从家庭逃到婚姻再逃到友情、爱情,永远都有一个大他者存在。同时,她伪造自己的真实身份,骗别人说自己是学习东方语言的大学生,说自己母亲是会计师。她认为在社会中,“学习东方语言的大学生”似乎比中学辍学更加体面,会计师比红磨坊夜总会的服务员更加体面。她始终没有逃离那个大他者带给她的评价标准,那个无处不在的大他者。因此,她的逃离最终必然以失败告终,也正是如此,最后露姬选择以跳楼自杀的方式,逃离那个无处不在的重力,逃离这个无处可逃的世界。


那么,您找到您的幸福了吗?


这句话贯穿了全书,最开始是书店老板莫名奇妙地一句话,这句话深深地印在露姬的脑海里。



有人言之凿凿地告诉我:人唯一想不起的东西就是人说话的嗓音。可是,直到今天,在那些辗转难眠的夜晚,我却经常能听见那夹带巴黎口音——住在斜坡街上的巴黎人——的声音问我:“那么,您找到您的幸福了吗?”



译后记·四


这本书的译者是金龙格先生,他在译后记中这样分析“那么,您找到您的幸福了吗?”这句话。


《青春咖啡馆》以一种既写实又神秘的笔调,交织谱出青春岁月的青涩、惶惑、焦虑、孤独寂寞与莫名愁绪,描写一个弱女子从不断探寻人生真谛到最终放弃生命追寻的悲剧命运,这个悲剧发生在一个既有着迷人的魅力又像谜一样难以捉摸的年轻美丽女子身上,更使全书充满一种挥之不去的忧伤情调。书中的一句问话像哲学命题一样尤其发人深省:“您找到了您的幸福吗?”,可是,人能找到自己的幸福吗?人终其一生到底能够得到什么?小说中的主人公什么都尝试过了,最终却一无所获。莫迪亚诺的小说似乎在告诉我们,幸福只是昙花一现的东西,人生寻寻觅觅,到头来得到的只有落寞、失去、不幸、迷茫,只有时时袭来的危机与恐慌,只有萍踪不定的漂泊,只有处在时代大潮中身不由己的无奈和顾影自怜的悲哀。


总结


《青春咖啡馆》的法语原文是Dans le café de la jeunesse perdue,意思是“在咖啡馆里青春消逝”,作者以一种伤感的笔调描述了露姬消逝的青春,但是在我们的一生中,青春虽然过去了,但并不会消逝,它只会永远的封存在我们的记忆之中。


在我们的青春年代,或许学业、社会的压力,父母、老师的规训让我们也有点想要逃离,去追寻自己所认为的幸福所在。虽然露姬生活在20世纪60年代,但其实人们的心底或多或少都有露姬的影子,就比如那个巴黎高等矿业学校的大学生、侦探盖世里、情人罗兰,包括你我。我们或许向往着那种不断逃离的生活,这就是当时情景主义者的生活,但作者并没有站在道德制高点对这种生活做出评判,只是如实进行记录,让读者跟着他的笔触,去认识去感受曾经有那样一群人、一个人这样生活过。探讨人生价值的文学作品屡见不鲜,网络发达的今天,许多人也会在网上总结、抱怨、指导、感悟人生的意义,不同的人会有不同的答案,这个答案不可能统一,也没有必要统一,千差万别的人生才是真正的人生。


作者:yueyh
来源:mdnice.com/writing/e894ad0fefa54767a64e22f5a7ac50ff
收起阅读 »

回县城躺平,感觉我的人生过得好失败

从春节前到现在,一个半月没更新了,做啥都提不起劲来。 越来越感觉我的人生过的好失败。 去年我爸因为癌症去世了,家里的门头房用不到了,就想卖掉,找好了买家,价格谈了 140 万。 当时想买我们这个房子的人很多,那个买家怕我们卖给别人,就拿了 20 万定金,和我们...
继续阅读 »

从春节前到现在,一个半月没更新了,做啥都提不起劲来。


越来越感觉我的人生过的好失败。


去年我爸因为癌症去世了,家里的门头房用不到了,就想卖掉,找好了买家,价格谈了 140 万。


当时想买我们这个房子的人很多,那个买家怕我们卖给别人,就拿了 20 万定金,和我们签了一个买房合同。


没想到因为这个房子因为在我爸名下,涉及到继承,需要我奶奶放弃继承才可以过户。


我奶奶现在生活不能自理,由我大娘二大娘养着,然后他们提出条件来,要我们的宅基地,也就是村里的老房子。


我妈开始不同意,因为她想之后从那里出殡,和我爸合葬。


后来也同意了,在哪不能殡出去呢?


然后我这边准备好了材料之后,我堂姐跳了出来,一拍桌说,不行,老房子我们也要,另外你还要给我们 25 万。


她们说咨询了律师要是打官司的话,我们青岛的房子也要分,那个门头房也要分,另外我爸的银行流水也要查,起码得分她们 40 万。


我给讲价到了 20 万,但是我妈不同意,说是她和我爸辛苦攒下的家业凭什么白给他们。


我妈这边也找了律师,给出的意见就是拖着就行,一辈子不卖了。


这时候买房子的不干了,说是合同上写了,如果违约,要双倍返回定金,也就是赔她们 20 万。


当时我们以为就是个收到条就签了,没想到在这等着呢。


其实我们早就把定金返给她了,也说了我们家的情况,但她就是不行。


年前就一直威胁我们要告,刚过完年,马上又来了:



我妈问了下和谈的话怎么谈,她说起诉你赔我 25 万,和谈赔我 18 万。



两头挤我们,家里就要我们老房子 + 21 万,卖房子的就要我们 20 万违约金。


我们夹在中间,几度濒临崩溃。


我想了下,这件事早晚得解决,反正都是一家人,给家里人点钱也没啥。


然后我前几天去找我大爷二大爷,还有堂姐、堂哥坐在一起谈了,我说我同意这 21 万。


最终转了她们 18 万(老房子折合了 2 万块),然后又拿了 1 万律师费(他们请的律师让我拿律师费),还有同意给他们老房子。


但我提的要求是和我妈只能说是 10 万 + 老房子,不然我妈不会同意的。


就这样,我们顺利公证过了户。


公证放弃继承那天,我奶奶才刚知道这个事,她说她只要老房子,不要我爸的其他遗产。


但没办法,她不要不行,我大爷二大爷要啊。


这个房子卖了,到手 120 万。


然后还有青岛的房子,这个房子我买的时候是 70万首付 + 100 万贷款,一共是 200 万下来的,最近我妈又花了 7 万装修。


因为不去青岛住,也打算卖了,中介说价格不到 80 万还是可以卖掉的。



这么一算,这边亏了 120 万,那边房子卖了剩下 120,相当于我爸就给我留下了 70 多万还不好卖的房子。


其实我爸这辈子攒了不少钱,差不多 300 万,都是省出来的,从小我跟着他就是一天吃一顿那种,从没感觉到家里是有钱的。


再就是他对我妈也不好,前几年的时候经常打骂,后来我妈离家出走了,但是他生病了还是会来照顾他。


我爸癌症住院那段时间,生活不能自理,都是我妈没日没夜的照顾他。


临走之前,我爸一只手抓着我的手,一只手抓着我妈的手,然后让我们好好相处,他一直觉得对不起我妈,口里一直喊着“从头再来、从头再来”。


我送我爸去火葬场的时候,送我骨灰盒爸入土的时候,我也一直在说,“爸,你别怕,我们从头再来”。


其实我爸葬礼上,我没有咋哭出来,可能当时没大反应过来。


但是之后好长一段时间,我在村里别人家坐着聊天,一谈起我爸,就再也忍不住了,哭的稀里哗啦的。


我有个干兄弟,在村里拜了干爹,因为疫情好多年也没走动了,但是我爸的棺材是他帮忙抬出去的。


而我大爷二大爷就在一边看着。


我今年过年给他家送了礼,我说,我妈说我爸是你们抬出去的,让我一辈子记得你们的好。


当时说到这里,没忍住,又哭的稀里哗啦的。


我想我爸这辈子,是攒了不少钱,但是不舍得吃不舍得喝的,还在房子上亏了半辈子的积蓄。


对老婆孩子不好,临走前才后悔想着从头再来。


我想我前五年是赚了不少钱,但因为工作,好多年没回家,和家人一年待在一起也就几天。


而且最后都赔在青岛的房子上了。


人这一辈子,到底图啥呢?


年后这几周我找了找工作,有几个不错的 offer,都是 base 40+ 那种。



但我又不那么想出去了。


我这一年没工作,其实和我妈在一块生活还是很踏实的。


而且家里房子卖了,青岛的房子也快了,这样我的存款差不多能到 300w。存定期的话每年银行利息 8w 左右,够我生活了。


就这样在家躺平一辈子是不是也不错。


王小波说,那一天我二十一岁,在我一生的黄金时代,我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云,后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消逝,最后变得像挨了锤的牛一样。可是我过二十一岁生日时没有预见到这一点。我觉得自己会永远生猛下去,什么也锤不了我。


韩寒说,平凡才是唯一的答案。


小的时候,我希望长大后的自己会光芒万丈。


长大以后,我希望自己有个好的工作打工到退休。


现在的我只想躺平。


我觉得我自己的人生很失败:


打工这些年,钱都赔在房子上了。


我比较社恐,永远达不到我妈对我的会来事、会察言观色的期望。


人家都在大城市结婚生子、买房定居了,而我又回到了小县城。


当年和我同时入职高德的朋友都升 p7 了,我现在啥也不是:



我是 94 年的,今年就 30 了,人生的各种机会和可能性越来越少。


后半辈子,我应该就是在小县城躺平,度过余生了。


但文章我还是想继续写,毕竟人这一生总要坚持点什么。


作者:zxg_神说要有光
来源:juejin.cn/post/7343503718183059471
收起阅读 »

年会结束,立马辞职了!

那是发生在多年前的一件事,当时我也是在那家公司做 Java 开发。公司很大,大到去了很长一段时间都感觉毫无存在感。 那年年会,作为技术部的我,依然被安排到一个比较边缘化的桌子,这么多年走来,早已经习惯了这样的安排。 可能只有我们做技术人的心里才会觉得“技术...
继续阅读 »

那是发生在多年前的一件事,当时我也是在那家公司做 Java 开发。公司很大,大到去了很长一段时间都感觉毫无存在感。


那年年会,作为技术部的我,依然被安排到一个比较边缘化的桌子,这么多年走来,早已经习惯了这样的安排。


可能只有我们做技术人的心里才会觉得“技术牛逼,技术万岁!”,但在公司领导层看来,这技术研发部就是整个公司开销最大的一个部门,又不能直接产生效益,但开除了又不合适,还要靠他们干活呢,这真是一件即讽刺、又无奈的事儿啊。


说回正题,那年公司所有人依旧是尴尬的、极不情愿的、又不得不碍于情面凑在一起,听完了所谓的又毫无意义的年终总结,然后又敷衍的敬完酒之后,才能装模作样的挥手告别亲爱的同事。


我之所以,要等待年会的第二天才告诉我的顶头上司“我要离职”的主要原因是,年会的时候才给大家集中发年终奖。


我也是领到钱之后就不装了,我摊牌了,第二天就找到了领导,告诉他,我要离职了。这个时候上司也知道你的心思,话已经收出来了,尤其是离职的事,大概率是劝不回来了,毕竟覆水难收。大家都是明白人,寒暄了几句之后,就签了离职的申请。


工作就像谈对象,合不来也没必要勉强。那时候开发的行情还很好,出去面试 4 家公司,最少也能拿 3 个 Offer,所以跳槽基本都是裸跳,一副此地不留爷,自有留爷处的傲娇姿态。


然而,年终奖是拿到手了,新工作也很快又着落了,薪资每次跳槽也能涨到自己满意的数,但干着干着发现,好像还是原来的配方,还是原来的味道,好像也不是理想中的工作嘛。


于是,在周而复始的折腾中才发现,只要是给别人上班,永远不会有理想中的工作,因为上班的本质是你替别人办事,别人给你发薪水,工作从来都是简单的雇佣关系,那来的别人要为你的理想来买单嘛,这本来就不合理,只是想明白这点时,以是上班了十年之后(此处可见自己的笨拙)。


理解了这点之后,我才发现,给任何公司上班的区别不会太大,无非是钱多钱少、活多活少、周围人好相处与否的细微差别,但碍于生计,又不得不苟延残喘的上下班,这可能是大部分打工人的真实感受和现状了。


但即使这样,你依然会发现,你的岗位正在被新人所替代,你的选择也变的越来越少,你的挣钱能力也变的越来越弱,这可能就是所谓的“中年危机”吧。所以说“中年危机”这个词,不是那个行业的专属名称,而是所有行业共性,那要怎么解决呢?


三个小小的建议:




  1. 尽量不要买房:不要和自己过不去,买房一时爽,还贷“火葬场”。我有一个朋友,一个月 2.1W 的房贷,生活中哪怕有一点点小小的变动,对于他来说都是不可承受之殇。“如履薄冰”也不过如此吧?


  2. 培养自己的第二职业:找到自己感兴趣点,并且它能帮你长久的带来经济收益最好,不求大富大贵,只要能够日常开支已经很不错了。任何时候有准备都比没准备要强很多。还有,在做之前,不要怕起步晚、进步慢,只要肯坚持,终会有收获。路虽远,行则将至;事虽难,做则必成。


  3. 提升自己主业的能力:任何时候,提升自己主业的能力,都是收益最大的投资,也是最明智的投资,当你看不清前进的道路时,当你感觉人生黯淡无光事,唯有干好自己目前本职的工作,才是最优的选择,这也能让你为以后的新计划积攒足够的能量。


最后,愿新的一年里:奔赴热爱、享受自由,找到自己热爱的事,并为之努力。加油,XDM~


作者:王磊
来源:mdnice.com/writing/728744844d414145b2efa61ec218606c
收起阅读 »

产品经理的多维度划分

产品经理的进阶是一个涉及专业技能提升、经验积累、视野拓宽以及领导力培养的过程。一.产品经理的层次划分以下是一些产品经理进阶的关键步骤和能力要求:初级产品经理阶段:需求细化与执行:学会撰写高质量的产品需求文档(PRD)、绘制产品原型,具备基本的设计理解和一定的技...
继续阅读 »

产品经理的进阶是一个涉及专业技能提升、经验积累、视野拓宽以及领导力培养的过程。

一.产品经理的层次划分

以下是一些产品经理进阶的关键步骤和能力要求:

  1. 初级产品经理阶段

    • 需求细化与执行:学会撰写高质量的产品需求文档(PRD)、绘制产品原型,具备基本的设计理解和一定的技术背景知识,能够准确传达并跟进需求的执行。
    • 沟通协作:与开发、设计、运营等部门紧密合作,确保需求被正确理解和实施。
    • 基础技能:掌握需求分析、文档编写、原型设计工具使用、基本的用户研究和竞品分析。
  2. 中级产品经理阶段

    • 主动挖掘与项目管理:具备独立进行用户研究、数据分析、竞品分析的能力,主动寻找和验证市场需求,制定并执行产品策略。
    • 产品决策:开始涉及产品方向的选择与功能优化的取舍,具有更全面的产品视角和全局观。
    • 项目管理:有效管理产品生命周期中的各个阶段,保证项目的进度和质量。
  3. 高级产品经理或产品专家阶段

    • 战略规划:负责产品体系的整体规划,形成独特的产品方法论,能够预见和引领行业趋势。
    • 领导力:带领产品团队,负责整个产品线的战略布局和生命周期管理,影响团队成员成长和决策。
    • 成功案例与影响力:拥有成功的产品案例,能通过实践提炼出可复制的产品模式和最佳实践,对外输出方法论和思想领导力。
  4. 管理线进阶

    • 团队建设:组建和管理高效的产品团队,培养人才梯队,进行有效的团队激励和绩效管理。
    • 业务拓展:推动产品商业化进程,对市场反馈敏感,根据市场变化调整产品战略。
  5. 专业线深化

    • 领域专家:在某一细分领域成为专家,深入研究行业规则和技术发展趋势,指导复杂产品解决方案的构建。

此外,产品经理在进阶过程中还需要不断学习和适应新技术、新商业模式的变化,持续提升跨部门协调、解决问题、创新思维和决策能力。同时,良好的自我管理和情绪智商同样是职业发展中不可忽视的素质。随着职位的提升,产品经理可能面临更多战略层面的问题,因此需要不断提升自身的商业洞察力和战略规划能力。

二.高级产品经理能力模型

高级产品经理的能力模型通常涵盖了以下几个关键领域:

  1. 战略思维能力

    • 深入理解行业发展趋势,能够制定长远的产品发展战略和路线图。
    • 能够结合公司整体战略目标,明确产品定位,设定并达成有挑战性的产品愿景和目标。
  2. 用户洞察与需求提炼

    • 具备深入的用户研究和洞察力,能精准把握用户痛点与需求,并转化为产品特性。
    • 利用数据分析手段,量化用户行为,驱动产品迭代优化。
  3. 数据驱动决策

    • 强大的数据解读和分析能力,利用A/B测试、用户行为数据等工具,以数据为基础做出科学决策。
    • 能够建立和完善数据指标体系,用于衡量产品性能和市场表现。
  4. 跨部门协同与领导力

    • 出色的团队管理和组织协调能力,能有效调动内外部资源,推动跨职能团队合作。
    • 具备卓越的领导魅力,激发团队潜能,带领团队完成复杂项目。
  5. 创新与解决问题能力

    • 在面对复杂问题时,能够提出创新解决方案,突破现有框架,引领产品创新。
    • 对技术和市场变化保持敏锐度,预见并应对潜在的竞争威胁和市场机会。
  6. 专业技术能力

    • 深厚的产品设计理论基础,熟练掌握产品生命周期管理、敏捷开发流程等专业技能。
    • 能够深入参与产品设计和技术实现细节,与工程师团队有效沟通。
  7. 商业敏感性与财务知识

    • 具备较强的商业头脑,能从经济和盈利角度考虑产品发展,平衡用户价值与商业价值。
    • 了解财务模型和成本效益分析,能够在产品设计中合理权衡投入产出。

综上所述,高级产品经理不仅需要具备扎实的产品设计和管理能力,还需要有很强的跨领域整合能力、领导力以及对市场、技术、用户和商业的深刻理解,从而成功引领产品的长期发展和市场竞争。

三.产品经理的多维分类

产品经理的角色可以根据多个维度进行分类,以下是几个主要分类方式及其具体类型:

1. 按照服务对象划分:

  • B端产品经理 (Business-to-Business, B2B):主要负责为企业级客户提供产品和服务,例如企业软件、SaaS解决方案、云服务、后台系统等,这类产品经理需要深入理解客户业务流程,解决企业级痛点,注重产品的易用性和效率提升。

  • C端产品经理 (Business-to-Consumer, B2C):专注于为消费者打造产品,这涵盖各种消费级应用、网站、游戏、电商产品等,要求产品经理深入了解用户需求、偏好及行为模式,提供优秀的用户体验。

  • G端产品经理(Business-to-Government, B2G):G端产品经理是指专为政-府机构服务的产品经理,他们聚焦于政务信息化领域,负责设计、优化和管理面向政-府内部或公众的政务类数字产品。核心任务包括:依据政-府业务需求定制信息化解决方案,如搭建行政审批、公-文处理等内部管理系统;开发一站式便民政-务服务产品,如政-务服务网、政-务APP等,实现政-策查询、在线办理等功能

2. 按前后端划分:

  • 前端产品经理:专注于用户界面和交互设计,确保用户能够直观地使用产品,关注用户体验的全流程,包括UI/UX设计、页面跳转逻辑、信息展示结构等。

  • 后端产品经理:主要关注产品后台系统的设计和维护,包括但不限于数据存储、服务器架构、API接口设计、性能优化等非用户直觉感知的功能部分。

  • 中台产品经理:主要负责设计和规划公司的业务中台产品,确保中台系统的稳定、高效运行,并赋能前台业务快速发展。业务中台作为一种重要的IT架构模式,旨在沉淀和复用企业的核心能力,如用户中心、订单中心、商品中心等,为多个前台业务提供通用、灵活且可配置的服务。

3. 按照职能分类:

  • 功能型产品经理:主要职责是设计和优化产品功能,确保功能满足用户需求和业务目标。

  • 战略型产品经理:负责产品整体战略规划,确定产品定位、发展方向,以及基于市场分析、竞争态势作出前瞻性决策。

  • 运营型产品经理:侧重于产品与运营相结合,将运营策略转化为产品功能,关注用户增长、活跃度、留存等运营指标的提升。

  • 数据驱动产品经理:利用数据驱动产品优化和决策,熟悉数据分析工具,能从海量数据中发现规律并指导产品迭代。

  • AI/算法产品经理:在AI、大数据等领域,负责设计和优化基于算法和模型驱动的产品功能。

4. 按照行业分类:

  1. 电子商务产品经理
    • 负责电商平台的产品规划和优化,比如淘宝、京东等综合电商平台的商品管理、订单系统、支付系统、物流跟踪等模块,以及垂直细分市场的电商解决方案。
  2. 社交网络产品经理
    • 主要负责社交产品如微信、微博、QQ等的策划与迭代,关注社交互动、社区运营、信息传播、用户关系链构建等。
  3. 金融产品经理
    • 设计和优化金融服务产品,包括银行应用、证券交易平台、金融科技产品(如P2P借贷、众筹平台、区块链应用)、支付工具等,涉及资金流转、风险管理、合规要求等内容。
  4. 教育科技产品经理
    • 开发在线教育平台、教育管理软件、智慧校园系统等,关注课程设计、学习路径规划、教学资源管理等功能。
  5. 健康医疗产品经理
    • 专注医疗健康管理、电子病历系统、远程诊疗平台、智能穿戴设备配合的健康管理APP等产品的研发,需对接医疗资源、遵循医疗规范和隐私保护法规。
  6. 游戏产品经理
    • 负责游戏产品的策划、更新、运营,关注游戏玩法设计、用户体验、付费模型、社交元素等。
  7. 企业服务(B2B)产品经理
    • 包括CRM、ERP、HRM、SCM等各种企业管理软件,以及云服务、大数据分析工具等,需了解企业运营流程并提供针对性的解决方案。
  8. 物联网(IoT)产品经理
    • 负责智能家居、智能城市、工业自动化等领域的软硬件一体化产品设计,涉及传感器、智能设备、数据分析平台等。
  9. 媒体娱乐产品经理
    • 从事视频流媒体平台、音乐播放器、新闻资讯App等产品设计,关注内容分发、版权管理、个性化推荐等功能。
  10. 人工智能(AI)产品经理
    • 专门从事AI产品如智能语音助手、图像识别系统、自动驾驶系统等的研发,需理解机器学习原理、数据训练过程并转化为用户友好的产品形态。

5. 按照层级划分:

  • 初级产品经理:通常负责较具体模块或任务,配合上级完成产品设计与迭代。
  • 中级产品经理:可以独立承担某个产品线或子产品的规划与执行。
  • 高级产品经理乃至产品总监:负责整个产品部门或多个产品线的战略规划与执行,具备较强的战略眼光和团队管理能力。

6. 按照产品领域分类:

  • 软件产品经理:负责软件产品的规划、设计和管理。
  • 硬件产品经理:专注于硬件产品的开发和推广。
  • 互联网产品经理:管理互联网产品,如网站、移动应用等。
  • 电商产品经理:负责电商平台或相关产品的策划和运营。

以上分类并不绝对孤立,实际工作中产品经理的角色可能会结合多种分类特征,且随着行业的发展和市场需求的变化,还会出现新的产品经理角色类型。


作者:西边一山
来源:mdnice.com/writing/f1f3d57fedef4800932a6afd643809f1

收起阅读 »

需求分析

产品经理在进行需求分析时,首先需要明确需求分析的目的和重要性,即从用户需求出发,挖掘用户的真正目标,并转化为产品需求的过程。接下来,可以通过以下文了解如何来做好需求分析。image-202403070006130051.什么是需求分析需求分析也称为软件需求分析...
继续阅读 »

产品经理在进行需求分析时,首先需要明确需求分析的目的和重要性,即从用户需求出发,挖掘用户的真正目标,并转化为产品需求的过程。接下来,可以通过以下文了解如何来做好需求分析。

image-20240307000613005
image-20240307000613005

1.什么是需求分析

需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。

需求分析是软件计划阶段的重要活动,也是软件生存周期中的一个重要环节,该阶段是分析系统在功能上需要“实现什么”,而不是考虑如何去“实现”。需求分析的目标是把用户对待开发软件提出的“要求”或“需要”进行分析与整理,确认后形成描述完整、清晰与规范的文档,确定软件需要实现哪些功能,完成哪些工作。此外,软件的一些非功能性需求(如软件性能、可靠性、响应时间、可扩展性等),软件设计的约束条件,运行时与其他软件的关系等也是软件需求分析的目标。

2.需求分析的重要性

需求分析指的是在建立一个新的或改变一个现存的产品时,确定新产品的目的、范围、定义和功能时所要做的所有工作。这个过程通常涉及多个部门和团队成员,包括产品经理、设计师、开发者、销售团队和潜在用户。产品需求分析的目的是确保产品满足市场的需求,为用户提供价值,并与公司的战略目标和愿景保持一致。

img
img

需求分析的重要性在于:

  • 确保产品方向正确:帮助团队确定正确的产品方向,避免开发与市场和用户需求不符的产品。
  • 提高资源利用效率:需求分析能够明确需求,而明确的需求可以帮助团队更加高效地分配资源,避免浪费时间和资金在不必要或优先级较低的功能上。
  • 降低项目风险:需求分析需要我们去深入了解用户需求和市场趋势,所以它可以帮助团队识别潜在的风险,并提前采取措施来应对。

除此以外,需求分析还能够起到提高产品质量加强团队沟通提高用户满意度等等。

3.需求分析的时机

  • 产品规划阶段:在确定产品方向和目标时,进行需求分析以了解市场和用户需求。
  • 产品设计阶段:在设计产品功能和界面时,根据需求分析结果进行具体的设计。
  • 产品迭代阶段:在产品上线后,根据用户反馈和市场变化,持续进行需求分析以优化产品。

需求分析贯穿整个产品生命周期,但尤其重要的是在项目启动阶段和迭代更新时进行。在项目开始前进行全面的需求分析;在产品上线后根据用户反馈和市场变化不断调整优化需求。

4.需求分析的方法

4.1需求分析的最佳实践和方法论

主要包括以下几个方面:

  1. 业务分析而非系统实现:需求分析的任务不仅仅是分析系统如何实现用户的需要,而是更广泛的业务分析,这包括了对业务知识、问题列表等方面的定义。

  2. SERU框架:《软件需求最佳实践》一书中提倡的SERU框架是一套重要的需求分析方法论,它将目标系统分解为主题域,再分解为流程,最后得到用例以及业务实体。

  3. 需求定义和捕获:需求定义是需求分析的起点,涉及到从用户需求中提炼出产品需求的过程。需求捕获则是在此基础上进一步细化需求,确保需求的准确性和完整性。

  4. 需求分析与建模:在需求分析的第一阶段完成结构框架和行为脉络的梳理后,第二阶段的工作任务是填充需求的细节,即根据前面的框架进行需求细节的填充。

  5. 功能分解、结构化分析、信息建模、面向对象分析:需求分析的主要方法包括功能分解方法、结构化分析方法、信息建模方法以及面向对象的分析方法。这些方法有助于从不同角度深入理解和描述需求。

  6. 深入理解需求并调整认知:需求分析的本质是根据认知进行假设,然后给出判断。核心是不断深入理解需求,调整需求认知,让自己的假设尽可能贴近客观事实,以得出更加准确的判断。

需求分析的最佳实践和方法论是一个综合性的过程,涉及到业务分析、需求定义、捕获、分析与建模等多个环节。通过采用SERU框架等方法论,结合功能分解、结构化分析、信息建模、面向对象分析等方法,可以有效地进行需求分析和建模,从而确保软件开发项目能够满足用户的真实需求。

这里,以下对第5点进行简单阐述包括以下几点:1、功能分解方法;2、结构化分析方法;3、信息建模方法;4、面向对象的分析方法。功能分解方法是将新系统作为多功能模块进行组合。各功能亦可分解为若干子功能及接口,子功能再继续分解。

4.3 功能分解方法在需求分析中的具体步骤和技巧有哪些?

  1. 分解步骤:功能分解首先需要将复杂系统分解为更小、更简单的功能单元。这些步骤可以是具体的功能点,也可以是更抽象的操作流程或用户界面元素。例如,通过用户故事切分流程图来准备待切分的需求,或者通过功能分解法将业务功能和辅助功能分开。

  2. 分析技巧:在进行功能分解时,需要分析每个用例之间的约束关系、执行条件,并组织出各种业务流程图。这有助于清晰地理解每个功能单元之间的关系和相互作用。

  3. 评估与优化:在完成功能分解后,需要对分解后的功能单元进行评估,以确定哪些是核心需求,哪些是次要需求。根据评估结果,可能需要对需求进行进一步的调整和优化。

  4. 技术应用:功能分解方法不仅限于软件开发领域,它还可以应用于其他复杂系统的设计、分析和实现过程中。通过对系统功能的分解,可以简化设计和实现的复杂性,提高效率。

  5. 实践案例:在业务场景分析中,功能分解方法结合从场景到挑战再到方案的思考模型,可以有效完成分析过程,输出初步的解决方案。这种方法强调了从具体场景出发,逐步深入到问题挑战和解决方案的整个过程。

功能分解方法在需求分析中的应用涉及到分解步骤的制定、分析技巧的运用、评估与优化的过程,以及技术应用和实践案例的分享。这些步骤和技巧共同作用于需求分析的各个阶段,帮助团队更高效、准确地理解和满足用户的真实需求。

4.4结构化分析方法在识别关键需求时的有效性如何评估?

  1. 需求分析的重要性:首先,需要认识到对软件需求的深入理解是开发成功的前提和关键。这意味着在进行结构化分析时,必须确保需求分析的准确性和全面性。

  2. 结构化分析过程:结构化分析方法包括与用户沟通获取用户需求的方法、分析建模与规格说明、实体—关系图、数据流图、状态转换图等内容。这些过程有助于确保对需求的全面理解和准确描述。

  3. 图形工具的应用:结构化分析中常用的图形工具包括层次方框图、Warnier图和IPO图等。这些工具有助于清晰地展示需求之间的关系和逻辑结构。

  4. 需求结构化的目标:结构化的目标是在业务需求向代码开发转换时,建立一个数字化标准,统一表达方式。这样做可以减少信息损耗,提高开发效率。

  5. 系统分析师的角色:结构化分析方法假定系统分析师理解问题域的全部,并且有能力正确地识别和分解问题。这种方法通过一次性将系统的功能分解到位,有助于提高分析的深度和广度。

  6. 系统体系结构的有效性评估:虽然结构化分析方法主要用于软件需求分析,但其有效性也可以扩展到评估系统体系结构。这需要考虑业务需求、适应性、可靠性、安全性等多个方面。

  7. 结构化数据分析:对于数据分析而言,确立明确的目标和提出假设是进行有效分析的重要第一步。这同样适用于结构化分析,有助于明确分析的方向和目标。

  8. 功能模型、数据模型和行为模型的使用:结构化分析中通常采用软件的功能模型、数据模型和行为模型来建模用户需求。这种方法有助于更准确地捕捉用户需求。

  9. 从可行性研究阶段得到的数据流图出发:结构化分析方法从可行性研究阶段得到的数据流图为起点,有助于确保需求分析的合理性和有效性。

结构化分析方法在识别关键需求时的有效性可以通过需求分析的重要性、过程的完整性、图形工具的应用、需求结构化的目的、系统分析师的角色、系统体系结构的有效性评估、数据分析方法的应用以及功能模型和行为模型的使用等多个方面进行评估。

4.5 信息建模方法在需求分析中的应用

它从数据角度对现实世界建立模型。大型软件较复杂;很难直接对其分析和设计,常借助模型。模型是开发中常用工具,系统包括数据处理、事务管理和决策支持。实质上,也可看成由一系列有序模型构成,其有序模型通常为功能模型、信息模型、数据模型、控制模型和决策模型。有序是指这些模型是分别在系统的不同开发阶段及开发层次一同建立的。建立系统常用的基本工具是E—R图。经过改进后称为信息建模法,后来又发展为语义数据建模方法,并引入了许多面向对象的特点。 信息建模可定义为实体或对象、属性、关系、父类型/子类型和关联对象。此方法的核心概念是实体和关系,基本工具是E-R图,其基本要素由实体、属性和联系构成。该方法的基本策略是从现实中找出实体,然后再用属性进行描述。

4.6 面向对象的分析方法在需求分析中的使用

面向对象的分析方法的关键是识别问题域内的对象,分析它们之间的关系,并建立三类模型,即对象模型、动态模型和功能模型。面向对象主要考虑类或对象、结构与连接、继承和封装、消息通信,只表示面向对象的分析中几项最重要特征。类的对象是对问题域中事物的完整映射,包括事物的数据特征(即属性)和行为特征(即服务)。

5.需求管理

5.1如何有效地进行需求管理以避免项目延误和资源浪费?

  1. 建立综合性需求框架:这是精细化管理的基础,有助于统一和明确需求的范围、质量要求等关键信息。

  2. 采纳迭代式需求优化:需求不是一成不变的,通过迭代优化可以更快地响应市场变化和用户反馈,同时也能减少因需求不明确而导致的项目延误。

  3. 运用数据分析提高预测准确性:利用数据分析工具来预测项目完成所需的时间和资源,可以帮助管理者合理规划项目进度,减少不必要的等待和返工。

  4. 构建跨部门沟通机制:良好的沟通是需求管理成功的关键。跨部门之间的有效沟通可以确保信息的准确传递,避免误解和重复工作,从而提高工作效率。

  5. 维护产品需求变更的历史记录:对于不断产生的新需求,需要有一个清晰的需求变更历史记录,以便追踪每一次需求变更的原因、影响以及解决方案,确保需求管理的准确性和一致性。

  6. 使用资源管理工具:通过资源管理工具,确保资源的分配与项目的优先级和实际需求相匹配,避免资源的过度分配和浪费,同时也能及时发现资源分配中的问题并进行调整。

  7. 实施版本控制与管理策略:有效实施版本控制可以帮助团队更好地管理需求变更,确保需求文档的准确性和一致性,降低沟通成本和避免冲突。

  8. 区分需求类别并制定优先级规则:在制定优先级规则之前,需要先区分需求类别,并根据“产品管理权”和“需求确定性”来划分需求类型,以确保资源的有效分配。

通过上述步骤,可以有效地进行需求管理,避免项目延误和资源浪费,从而提高项目管理的效率和成功率。

5.2敏捷开发方法在需求分析中的应用及其效果如何?

敏捷开发方法在需求分析中的应用主要体现在其迭代、增量式的方法论上,强调团队成员的自我管理、面对变化时的快速适应能力,以及持续的沟通和协作。敏捷需求分析在需求时机与过程、文档要求、变更、参与者角色等方面与传统方法有所不同,能够更好地参与到项目的生命周期演进中。通过合理的需求收集、需求分析与细化、需求优先级排序和需求跟踪等方法,可以更好地管理和满足项目的需求,提高团队的开发效率和产品质量。

敏捷开发的效果表现在多个方面。首先,敏捷指标的引入为软件开发生命周期中的不同阶段提供了对生产力的洞察,有助于评估产品质量并跟踪、优化团队绩效。其次,敏捷实践可以量化分析多种效能指标,如工作效率、可预测性、质量和响应程度等,这些指标有助于团队和项目管理者了解敏捷实践的实际效果。此外,敏捷开发中的过程度量指标,如业务指标和敏捷指标的跟踪,对于衡量开发过程的各个方面非常重要,这不仅侧重于解决方案是否满足市场需求,也包括衡量开发过程的各个方面。

敏捷开发方法在需求分析中的应用通过其独特的迭代和增量式方法论,结合合理的需求收集和管理方法,有效提升了团队的开发效率和产品质量,同时通过敏捷指标的应用,实现了对项目效能的全面评估和优化。

6.需求分析的关键点

6.1需求分析的关键点主要包括以下几个方面:

  1. 明确用户需求与产品需求的区别:这是需求分析的基础,需要区分用户需求和产品需求,确保产品或服务真正满足目标用户的需求。

  2. 将用户需求转化为产品需求的方法:通过深入细致的调研和分析,将用户非形式的需求表述转化为完整的需求定义,确定系统必须做什么。

  3. 深入挖掘用户动机:在需求分析中,了解和分析用户的动机是非常重要的,这有助于更好地理解和满足用户的需求。

  4. 筛选和优化需求:产品经理需要筛选和优化接收的需求,确保需求的质量和优先级,以提高产品质量和用户满意度。

  5. 收集需求、整理需求、分析需求、确认需求和编写需求文档:这是需求分析的一般流程,包括收集、分类、筛选需求、分析需求等步骤[[3]]。

  6. 使用合适的需求分析方法和工具:根据不同的项目需求和使用场景,选择合适的需求分析方法和工具,如HWM分析法、功能分解方法等。

  7. 考虑需求的业务诉求、目标用户的用户诉求、分析总结需求目标:合理地归类接收的需求,明确需求的业务诉求,明确目标用户的用户诉求,分析总结需求目标,并给设计提供依据。

  8. 需求评估分析方法:包括模糊聚类分析、质量功能展开、KANO模型分析、A/B测试等,这些方法可以帮助评估需求的质量和可行性[[22]]。

综上所述,需求分析的关键点是多方面的,涉及到从明确用户需求到优化需求的整个过程,以及在此过程中采用合适的方法和技术来确保需求的准确性和有效性。

6.2需求分析中的HWM分析法具体是什么,如何应用?

HWM分析法,即"How Might We"(我们可以怎样),是一种用于需求分析和问题解决的方法。它的全称为"How Might We",即"我们可以怎样"。在这个过程中,我们假设问题是可以解决的,只是我们尚不知道如何解决。这种方法强调的是通过头脑风暴的方式,最大范围地搜集产品的各种可能性,然后抽象地整理出这些想法背后所隐藏的核心概念和产品需求,快速梳理出正确的产品设计方向。

应用HWM分析法时,可以分为五个步骤:首先是明确用户场景问题,其次是HMW分解问题,然后是扩展思路,接着是使用不同的分解思路如积极、转移、否定、拆解、脑洞等来拆解许多不同的解决方案,最后是抽象地总结这些想法并确定解决方案。这一过程中,工具的使用也很重要,例如思维导图可以帮助清晰地展示问题和可能的解决方案。

此外,HWM分析法不仅仅局限于产品需求分析,它还涉及到对人类行为和社会系统的分析,以识别存在的问题和潜在的风险,并制定出相应的应对策略和措施。这表明HWM分析法具有较强的综合性和灵活性,能够适应不同领域的需求分析。

HWM分析法是一种通过广泛探索和思考各种可能性来解决复杂问题的方法论,它要求团队成员共同参与,通过明确问题、分解问题、扩展思路、采用多种分解思路以及最终的抽象总结,来寻找最合适的解决方案。

7.需求收集技巧

7.1 需求收集技巧有哪些,特别是在多渠道反馈收集方面的策略?

需求收集技巧在多渠道反馈收集方面的策略主要包括以下几点:

  1. 多渠道反馈收集:企业可以提供多种反馈渠道来确保用户能通过多种方式进行反馈。这包括但不限于在线调查问卷、社交媒体平台、用户论坛等,以确保能够覆盖到不同的用户群体和使用场景。

  2. 观察法:通过观察目标用户的日常行为来理解他们的真正需求。这种方法可以是主动的,即观察用户的行为和工作流程,也可以是被动的,如收集用户对设计原型的反馈。这种方法有助于深入了解用户的实际操作习惯和需求,从而提供更准确的产品改进建议。

  3. 访谈和问卷调查:通过与利益相关者进行沟通和访谈,了解他们对于产品或服务的需求和预期。同时,设计有效的问卷调查也是需求收集的重要手段,可以帮助收集更广泛的需求信息。

  4. 文档分析:利用文档(如用户手册、操作指南等)进行分析,可以发现那些不易直接表达但对产品改进至关重要的需求。这种方法适用于那些需要详细说明或解释的产品功能。

  5. 用户反馈渠道:除了上述提到的多种渠道外,还应考虑建立专门的用户反馈机制,如定期发布用户调查问卷、开放日活动等,以直接从用户那里获取反馈。这些反馈可以帮助团队及时了解当前产品或服务的不足之处,以及潜在的用户痛点。

多渠道反馈收集策略要求企业综合运用多种技术和方法,既要注重面对面的沟通和观察,也要充分利用网络和数字工具,同时不忘通过文档分析等方式深入挖掘用户需求。这样的策略能够帮助企业构建更加全面和准确的需求收集系统,为产品和服务改进提供坚实的基础。

7.2 如何有效地进行用户访谈以收集需求?

有效地进行用户访谈以收集需求,首先需要确保访谈环境轻松愉快,避免给受访人带来社会压力。用户访谈是一种有计划、有目的、有意识的过程,通常有明确的时间安排和谈话主题。在准备阶段,应具备正确的预备知识,具备细致的洞察力、耐心和责任感。

在访谈过程中,应积极倾听受访者的意见,不要害怕沉默,也不要强制用户回答。可以在用户回答后以自己理解的方式重复答案,以避免对用户的回答产生误解。此外,正确并恰当地提出问题是解决困惑的第一步,用户访谈首先是一门艺术——说话和倾听艺术,也是提问的艺术。

有效的访谈需要满足提对问题、正确沟通、提炼转化三个条件。这意味着在访谈中,不仅要提出正确的问题,还要通过访谈技巧有效获取用户信息,并将调研信息转化为洞察分析。

观察法也是理解用户真正需求的有效方式之一。通过观察用户的日常行为,可以主动或被动进行访谈,以理解他们当前的工作流程。这种方法有助于深入了解用户的需求和偏好。

总之,有效地进行用户访谈收集需求的过程包括创造友好的访谈环境、准备充分的预备知识、积极倾听和正确提问。同时,结合观察法等其他方法,可以更全面地理解和满足用户需求。

8.需求分析的误区

避免需求分析常见误区的具体步骤和方法:

  1. 目标驱动,结构分解:首先,明确需求分析的目标是非常重要的。这包括了解项目旨在达成的目标,如吸引新用户、保留老用户、提高用户活跃度或产生营收等。接着,根据这些目标,结构分解出为了达成这些目标而需要的需求。

  2. 避免把用户描述当作需求:在需求分析中,不应该仅仅基于用户的描述来确定需求。这种做法很容易导致需求偏离实际业务目标,从而无法满足核心业务的要求。

  3. 避免把数据表象当需求:需求分析时,不应只关注数据表现,而忽视是否有偏离业务的情况。过分依赖数据可能会误导需求分析,导致开发出来的产品与预期目标不符。

  4. 避免把竞品功能当需求:在需求分析过程中,不应该简单地将竞品的功能照搬过来。每个产品的市场定位和目标用户群体都有所不同,直接复制竞品的需求可能会导致产品失败。

  5. 关注用户及业务目标并重:在进行需求分析时,不仅要关注用户需求,还要关注业务目标。确保需求分析能够支持业务目标的实现,而不是单纯地迎合用户需求。

  6. 使用严谨而科学的分析方法:需求分析不应该是一种随意的思考过程,而是需要遵循一定的科学方法和步骤。例如,可以使用马洛斯需求模型来分析需求,然后分析用户和场景,最后分析用户期望。

  7. 识别伪需求:通过学习和实践,学会辨别哪些是需求分析中的常见伪需求。这包括识别那些看似合理但实际上并不符合业务逻辑或目标的需求。

需求分析的误区包括没有进行有效的需求管理、对需求理解不够深入、忽视了需求的可追踪性和变更控制机制等。为了避免误区,产品经理应该采用敏捷开发方法,建立严格的需求变更管理流程,对任何需求变更进行详细讨论、评估、记录。此外,正确分辨用户提出的是需求还是解决需求的方案也是避免的一个误区。

综上所述,产品经理在进行需求分析时,需要从宏观到微观全面考虑,利用多种工具和方法进行深入分析,同时注意需求管理的各个方面,以确保产品能够满足市场和用户的真实需求,与公司的战略目标和愿景保持一致。


作者:西边一山
来源:mdnice.com/writing/b3ea0873bba04ab98767930c4d9a268b
收起阅读 »

2023总结:30岁,结束8年北漂回老家,降薪2/3,我把人生过的稀烂

一转眼又快过年了,回想整个23年,简直是我人生中最黑暗的一年(之一)。 23年,我30岁,在北京干了8年程序员。30岁这年我做了一个决定:结束8年北漂生涯,回老家(一个三线城市)自己创业,去做自媒体。 一、为何做出这个决定 这个决定也不是一时拍脑袋做出的决定...
继续阅读 »

一转眼又快过年了,回想整个23年,简直是我人生中最黑暗的一年(之一)。



23年,我30岁,在北京干了8年程序员。30岁这年我做了一个决定:结束8年北漂生涯,回老家(一个三线城市)自己创业,去做自媒体。


一、为何做出这个决定


这个决定也不是一时拍脑袋做出的决定,导火索是在22年:


那时候大环境不好,大家都越来越卷,下班的时间也越来越晚。


放假回家亲戚朋友总说,你在北京996这么累,图啥啊,工资是高点,但是完全没有生活啊。而且你在北京漂到啥时候是个头?你又买不起房,又没户口,早晚得回来吧。


我仔细想想也有道理,活了这么多年了都在当牛做马,被pua,还得面临35岁危机,真的受够这种生活了!所以那时候心里埋下了一颗种子:我要去浪浪山的那边看看!


其实我本身就是一个喜欢自由的人,这么多年那句“打工是不可能打工的,这辈子都不会打工”一直激励着我,我想自己有一天也能实现不打工这个目标。


于是22年底我做了一个决定:23年去山的那边看看大海的样子!拿完年终奖就辞职!去创业,去开启我的新的人生!


在准备辞职前的几件事情,都让我更加坚定了辞职的决心:



  1. 那时候还没有放开,在家线上办公,本来在公司办公是995,晚上9-10点下班了基本就没啥事情了,但是在家就不一样了,每天各种电话、视频会议,甚至十一二点都要开会,恨不得让你24h都在线,生活和工作基本都没有边界。那个时候只要听到会议呼叫的声音,内心就一紧,心中默默祈祷不要出什么幺蛾子,都快成心理阴影了。

  2. 当时得了新冠也只敢请了一天假,第二天晕晕乎乎的就继续开始工作了。因为我知道,落下的工作最后还得你自己加班完成,否则领导最后还会赖你延期。

  3. 周末也需要随时在线,需要及时回复群里的消息,需要随时解决线上的问题,否则就会打上工作态度不好的标签,绩效肯定低。导致我周末基本不敢出去,出去也得随时看着手机,看有没有@你的消息,整天提心吊胆,玩也玩不好,还不如在家躺着。


我觉得这不是我想要的生活,每天太累了,身体累不算,心还累,生怕自己负责的业务出了什么问题,如坐针毡,如芒刺背,如履薄冰。


二、我辞职了


终于,熬到23年,拿到年终奖后,我决定提出离职。


当时身边有些人劝我不要辞职,说现在环境不好,更不应该放弃你的老本行,去做啥自媒体。


我当时内心嗤之以鼻,心想程序员这行也就干到35岁,而且现在卷的不行,加班加的身体都快废了,这行岁数大了没前途!我趁现在30岁还年轻,创业正值当年,辞职改行的选择非常有战略眼光!(当时真的是感觉杰克马附体,准备在这个三十而立的年纪,大干一场!)


2b5f9de5dbc7cd40403819a50d693574.jpeg


当然我也不是脑袋一热就想着辞职去做自媒体,辞职前我做了充足的准备,和很长时间的调研&分析:



  • 我作为一个互联网人,做实体店肯定不是我擅长的,肯定只能从互联网上选择行业,互联网项目有很多:个人工具站,知乎好物,闲鱼二手书,小红书带货,抖音带货,抖音个人ip,公众号写作,短剧cps,小说推文,知识付费等等的项目,我可以说都看了一个遍,其中抖音现在流量最大,要做风口上的猪,做抖音相关肯定要容易很多。

  • 然后我也学习了一些创业相关的知识,比如如何找对标,如何分析对方商业模式,参加了很多知识付费的圈子,然后还报了小红书和抖音的培训班,总共加起来得有1w多呢。

  • 而且我还预留了充足的资金,我做了最坏的打算,就算我一分钱不挣,也够我活3年呢,我不会3年都创业不成功吧!(此处白岩松表情包:不会吧!.jpg)


u=1021210702,2199782272&fm=253&fmt=auto&app=120&f=JPEG.webp


三、想象很美好


为了这次创业,我还制定了计划,年度计划,季度计划,月计划,周计划,天计划,真的非常详细。


我也要很自律,每天按时起床,锻炼,学习,做业务。这次我真的抱着必胜的决心来做!


当然我也提前列出可能要遇到的风险,并思考解决方案:


比如项目进展慢怎么办,拖延症怎么办,家人反对怎么办,朋友约吃饭打乱我的计划怎么办,遇到困难我该怎么应对等等


这么一套组合拳下来,我觉得已经万事俱备,只差开干了!


四、现实很残酷


4月我如期辞职,当时正值清明节,淅淅沥沥的小雨并没有浇灭我开启新生活的热情。辞职后,我就按计划开始早睡早起,锻炼,学习,搞创业的事情。


但是马上就被打脸了,这是我创业中遇到的第一个难题,也是我万万没有预料到的


就在我创业后的不久,我患上焦虑症,失眠了,而且还很严重,就是那种从晚上11点躺下,躺到早上6点才睡着的那种失眠,而且还时不时的心悸。


我万万没想到会患上失眠症。因为我觉得没有上班的压力了,想啥时候干活就啥时候干活,想干多少干多少,想啥时候下班就啥时候下班,也没人pua我了,还有时间锻炼,应该睡得更好才是。


但实际并不是这样,对于一个从小被学校管,长大了被公司管的芸芸众生来说,创业实际是这样的:



  1. 你会非常忙,比上班还要忙,因为你之前是螺丝钉,做好自己的本职工作就好了,现在事无巨细,都你一个人。比如做自媒体,从开始的账号定位-》内容选题-》写脚本-》置景&拍摄-》后期剪辑-》选品-》商务对接-》客服-》用户社群运营,所有的环节,都得你自己一个人。然后视频没流量怎么办,违规了怎么办,付费转化率低怎么办,还是只有你自己去解决。(之前公司让你干啥你干啥,你只需要规定时间完成你的任务就好了)

  2. 面对大量的自由时间,你根本不会支配时间,因为很多环节你都是小白,要学习的东西太多,但是你天天光学习了,每天看似很忙,但是看不到产出,导致你就很沮丧。(之前你只做熟悉的工作,产出是有保证的)

  3. 行动困扰,没有目标感,没有人给你一个目标&方向,你不知道你现在做的事情对挣钱有没有价值,你会迷茫,你会时常自我怀疑。(之前你只是专注领导安排的任务,至于这个任务能不能帮公司挣到钱,那是公司的事情,你关心到手的工资而已)

  4. 没有成就感,认同感。因为现在你很多事情要从0开始,比如写文案要求写作能力,拍视频要求表现力,搞流量要求你有运营&营销的能力 ,相比之前做熟悉工作,感觉上会有落差(之前工作中都是做你擅长的领域,每完成一项任务也很有成就感,做的出色还能收获同事和领导的认可)

  5. 和社会断了链接,没有存在感,归属感(这是人类的基本需求之一),你不属于任何一个群体,没有人赞扬,尊重,接纳你,甚至你想被骂两句也没人鸟你(之前在公司,做的好了领导或者同事会夸你两句,做的不好了可能会给你建议,起码有人能倾诉,能交流,能寻求帮助)

  6. 没有了收入,眼见钱包一天天变少,你肯定会焦虑。但是更让你焦虑的,是你不知道未来什么时候能挣到钱。更更让你焦虑的,是不知道最后能不能挣到钱。(之前工作压力不管有多大,多累,起码你还有工资,你还有吃饭的钱,这是底气)


所以在此奉劝有裸辞创业想法的人,千万不要裸辞!裸辞创业九死一生! 正确的做法是一边工作愿一边做副业,等副业的收入和工资差不多甚至超过工资了,再去辞职。有人会说,我工作那么忙,根本没时间搞副业啊。我之前也是这么想的,但是现在我会告诉你:没有时间就去挤出时间,每天晚睡或者早起一会,周末也抽出时间搞。这点问题都解决不了?创业的遇到问题会比这难十倍!如果这个你觉得太难了,那我劝你还是老老实实打工吧。


但是我已经裸辞了,没办法,只能去解决问题,我开始吃助眠药,喝中药,有些好转,但也没治好,只是比之前好点。


就这么拖着残血的半条命,我坚持了半年多,一半时间学习,一半时间实践,搞了两个自媒体号,第一个号违规被封了,第二个号流量也没啥起色。这条路是越走越看不到希望,每天晚上都不想睡觉,因为害怕明天的到来,因为明早一起床,眼前又是一片黑暗。


五、彻底崩溃


11月,因为种种原因和媳妇生了一场气,我觉得对于我创业,她不鼓励也就算了,在我状态这么差的情况下还不能对我包容一点,甚至有点拆后台的感觉,那几天我就像一个泄了气的皮球,内心被彻底击垮了。(所以现在有点理解每个成功男人的背后,都有一个伟大的女人这句话的含义了)


终于,在创业的压力,8个月没有收入的恐慌,焦虑失眠心悸的折磨中,我决定放弃了。


失败了,彻彻底底的失败。回想这次经历,就好像之前在一艘航行的货轮上打工,然后受不船上的种种压榨,终于鼓起勇气,自己带着一艘救生艇,跳海奔向自己想要的自由。结果高估了自己的目前的实力,经不起茫茫大海狂风骤雨,翻船了。。濒临溺亡。。。


六、重新找工作


放弃后的那几周,我开始熬夜,开始暴饮暴食,之前的运动也放弃了。整天在家里拉着窗帘,除了吃饭就是躺在床上刷手机,让我尽可能分散注意力,减少内心的痛苦。


但是这样的状态也不是事儿啊,目前肯定是不想再去面对创业的事情了,那只能去找个工作先干着了。


刚开始找工作内心又有不甘,因为一个三线城市比起北京来说,不管是工作机会,环境,薪资来说,都差太多。


但是没办法,我现在的感觉就是快溺死了,我现在急需一个救命稻草,活下来,是我目前的首要任务。


于是在网上海投了一遍,结果惨不忍睹,根本没几家公司招人,前前后后一个月,真正靠谱的面试就一家,是的,只有一家。


好在这家也顺利拿了offer,是一家刚创业的公司,一共十几个人,薪资只有原来1/3多点,但是拿到offer那一刻我依然有些激动,我感觉我活下来了,不管怎样,现在能喘口气了。


七、迷茫的未来


现在上班已经一个多月了,公司挺好,不加班,基本上7点前就都走了,离家也挺近,骑个共享单车也就10分钟。这一个月,焦虑没了,不心悸了,失眠也好了。每天就是按部就班上下班,完成老板给的任务,其他的事情也不用自己操心,终于又做起自己熟悉且擅长的事情。


但是内心还是有落差,本来北京好好的工作自己作死给辞了,要不这一年也能攒不少钱呢,现在不但钱没了,这几个月还花了好几w,最后还差点嘎了。


其实入职这家公司前,北京之前的同事问我要不要回去,说现在正忙,我说你先问问吧。


我当时也纠结,如果真的能回去,我还要不要回去,毕竟在那边挣一个月顶这边仨月。但是回都回来了,再去北京可能就一辈子留北京了吧。


不过后来同事说年前没有招人计划了,可能要年后了,如果招人到时再联系我。正好我不用纠结了,这可能就是命运的安排吧。


不过真的想问问你们,如果到时有机会,是继续北漂呢,还是选择在老家呢?


八、结语


说实话,我现在知道了,山的那边还是山,我不知道什么时候才能看到海,甚至我可能一辈子都看不到海了。不过目前想的就是,调整好状态,先走一步算一步吧。


30岁的年纪,学会和自己和解,学会接受自己的平庸,但是依然要努力,毕竟在这个阴雨连天的环境下,没有伞的孩子只能努力奔跑。


作者:骆驼箱子
来源:juejin.cn/post/7330439494666453018
收起阅读 »

7年Android仔的逆袭人生

1.引言 最近在代码人生模块,看到了很多优秀的同行分享自己的人生经历。有感情的,有创业的,有独立开发者的。看完后感慨良多。为此我也想讲讲我的成长经历。相信能给各位一定的启发。 2.毕业 我是一个来自湖北农村的少年。从小到大学费都是父母卖粮食,卖棉花,找亲朋好友...
继续阅读 »

1.引言


最近在代码人生模块,看到了很多优秀的同行分享自己的人生经历。有感情的,有创业的,有独立开发者的。看完后感慨良多。为此我也想讲讲我的成长经历。相信能给各位一定的启发。


2.毕业


我是一个来自湖北农村的少年。从小到大学费都是父母卖粮食,卖棉花,找亲朋好友,东拼西凑的。要不是勉强考上二本大学。可能现在的我就在工厂搬砖。我记得大四快出去实习的时候,家里没有钱给我路费,硬是卖掉家里十几袋麦子,给我凑的。同期的同学别人家里都是给5000.6000的。而我只有2500。就这样我带着仅有的2500,拉着一个破旧的行李箱踏上南下之旅。怀揣着兴奋,对未来美好的期待来到深圳。运气比较好,很顺利的找到一家公司。那家公司给我开了10000/月的工资。你们知道吗。我是多么多么的兴奋啊。1万啊!,我从来没有掌管过这么多钱。甚至我家里从来没有过1w。过去的二十多年,我的物质生活一直没有被满足过。吃的,用的,都是差人一等。第一台华为手机,也是硬生生用了4年。哪一年我22岁。现在想起来,依旧很兴奋。当时把工作的事情,告诉了父母。父母开心的不得了。我爸在家对我妈说:“我就知道儿子,会有出息”。


3.动荡


本来一切都在向好的方向发展,可是老天爷却给你开了一个玩笑。2017年7月份的一天,一通电话彻底打乱了我的生活节奏。就像一块砖头一下子丢进水里,“咚”的一声。砸在我的心里。电话那头,我姐姐哭着叫我回去,叫我赶紧回去。她告诉我:“爸爸去世了,你赶紧回来,赶紧回来”。面对突如其来的恶耗。经历过的人,应该都知道。那一刻大脑实际上是懵的。呼吸紧促,仿佛喘不过气。内心会质疑这个消息的准确性。觉得不可能,不可能。在家里好好的,好好的,为什么会突然间走了。时至今日,即使过去多年,回想到这些。我依旧会泪流满面。哪一年我22岁。本该幸福的家庭,却发生这样的变故。父亲是一个家庭的基石。是子女坚实的靠山。哪一年,我失去了依靠。也失去了一个完整的家庭。
往后的这些年,我时常梦见我父亲。梦见他还活着,梦到他再和我说话。


父亲是因为急性心肌梗塞走的。发生心肌梗塞的时候,实际上身体会有反应的,例如 四肢无力,例如心跳加速。在出事的前几天,他因为身体不舒服,去过诊所问诊,但是因为医疗条件的不足,加上之前整个家族没有这样的例子。所以没有检测出来。这件事让我意识到世上很多事,我们无能为力,唯有学会的接受


同时,我也会不断的追问自己,为什么会出现在我的身上。因果因果,有这个果,必然有这个因。这个因在哪里呢。我想是这几个因:1.农村人的健康意识差 2.身体不舒服 总觉得自己扛扛就过去了 3.本身存在各种疾病,例如高血压。4.农村的医疗条件差


同样世上很多事,也可以用因果来解释。例如溺水身亡,触电,交通事故。一桩桩悲惨的事件的后面,肯定是有很多因。触电之前,可能有过多次,湿手触碰电器的行为,进而养成习惯; 交通事故之前,可能经常抢红绿灯,经常超车。


也正是因为这个意识的养成。帮助了我改变人生,当然这都是后话。在我父亲去世的三个月之后,爷爷因为接受不了打击,也去世了。仿佛是潘多拉魔盒被打开了,让这个家族饱受磨难。


4.工作


处理完家里的事之后。又匆匆返回深圳,继续当螺丝钉。整个人思想压力也变重了。我未来结婚,买车,买房,给母亲养老都得靠自己。每当我望向身后,我看到的是深渊。我不敢松懈,我不敢像一个正常人那样生活,因为我没有依靠,我只有自己,我得努力,拼搏,奋斗。周六周天会抽出一天的时间去图书馆学习。现在想想,自己能坚持下来,也挺佩服曾经的自己。或许是上天的眷顾,也或许是运气好。在面试OPPO的时候。面试官的问题,正好是我前两天写的博客。于是顺理成章的进入了大厂。在OPPO呆了2年多,技术上得到很大的提升,经历过裁员,经历过背锅,经历过职场的勾心斗角。这段工作经历,拔高了我的世界观,让我从懵懂的少年,蜕变成一个合格的职场人。同时这段经历也间接的改变了我的人生轨迹。


5.感情


自从家里发生变故后,我对未来的规划更加清楚。不管是工作,还是感情上的事。都会提前做准备。例如在oppo的时候。注意到当时一个表现优异,绩效A的同事,来年却转岗了。通过他,我知道了部门发展不顺利,未来可能有裁员的风险。于是就开始私下准备面试的工作。21年一整年,我私下面试了接近40家公司。22年又面试了10多家。当时就明显感受到市场的寒冷。意识到22年假如不跳槽。可能就要一直待在OPPO,等待被裁。于是就果断的跳槽到顺丰。拿到了将近40%的涨幅。虽然后面又离开了顺丰。但是现在来看,当初的选择是没有错误的。


在我年仅26岁的时候。我就在考虑结婚的事,因为我笃信 一个好的伴侣抵得上百万资产,抵得上几十万的高薪工作,她直接决定了你下半生的生活质量。同时我也知道自己一无所有,无存款,无家庭,甚至攒下的钱都不够房子的首付。但是我审视了自己一番。发现自己还是有一些优点的,例如 五官不差,身高1.8,工作也还行,年薪30多万。了解了自己的优点和缺点之后。就开始着手改变自己。


例如跑步减肥从180减到150,每天5公里户外跑步。同时也积极参加一些穿衣打扮课程。了解自己的穿衣风格。 有时间就去相亲会相亲。
说到相亲,我可是相亲界老手了。😁😝 前前后后相亲了 20多场。最后找到了现如今的老婆。


在这段经历当中,一个意识深深的插入到了我的脑海中。那就是 任何事都是有俩面性的,看待事情,争取看到事情的俩面性。这样自己才能提前做准备。


例如:程序员以高薪著称,但是反面就是,肥胖,脱发,油腻。这在相亲市场上是非常不利的。


工程型人才,往往看不上溜须拍马,耍嘴皮子那套。但是随着自媒体的盛行,发现自媒体做的好的人,恰恰都是耍嘴皮子,能放下身段,脱下长衫的人。这个认识正对应了一句话:”当你凝视深渊的时候,深渊正在凝视着你"


6.后记


写这篇分享的时候,老婆已经怀孕8个月了,再有2个月,我就要当爸了。孩子的名字都已经想好。目前定居于深圳,因为老婆家庭条件好,老丈人给了一套豪宅居住。让我免于房贷的压力。有充足的精力为下一个10年奋斗。说到这里我很感谢老婆一家人。他们没有嫌弃我穷,反而时时刻刻照顾我的自尊心。他们一家是我的人生贵人。我问了老丈人很多问题。他都能给我带来不一样的视角,耐心讲给我听。这是多少钱都买不来的。以后有机会可以在聊聊他的一些观点。有一些深深的刻在我的脑海中了。


作者:薯条1492738192844
来源:juejin.cn/post/7351658802393546802
收起阅读 »

反转反转再反转,揭秘人心深处的“恶意”

“……真是过分,我每天可是难过得要死。有个爱管闲事的邻居,每天都来找我,我没办法,只好去上学,都快给他烦死了。” “老师和学生的关系建立在一种错觉上。老师错以为自己可以教学生什么,而学生错以为能从老师那里学到什么。重要的是,维持这种错觉对双方而言都是件幸福的...
继续阅读 »

“……真是过分,我每天可是难过得要死。有个爱管闲事的邻居,每天都来找我,我没办法,只好去上学,都快给他烦死了。”


“老师和学生的关系建立在一种错觉上。老师错以为自己可以教学生什么,而学生错以为能从老师那里学到什么。重要的是,维持这种错觉对双方而言都是件幸福的事。因为若看清了真相,反而一点好处都没有。我们在做的事,不过是教育的扮家家酒而已。”


是什么样的经历让他说出这样的话呢?我不明白。


大家好,我是杰哥


昨天晚上凌晨三点,我终于第三次翻完了《恶意》。这本书,真的让我欲罢不能!每次阅读都像是一次心灵的冒险,让我惊叹不已。


作者东野圭吾巧妙地运用手记的方式,将故事的发展娓娓道来。那些看似简单平实的文字,却隐藏着令人震撼的真相。他对复杂人性抽丝剥茧的深刻描画,简直让我眼花缭乱,哑口无言。


故事围绕着一起谋杀案展开:畅销书作家在出国的前一晚于家中被杀,凶手很快便落网了。但别以为这只是个简单的“谁是凶手”的故事,其实更多的是”我为什么要杀他“的故事。


凶手对作案动机语焉不详,倒是引起了著名侦探”加贺“的兴趣,他凭借自己一贯对于人性觉察比较敏锐的”直觉“,以及自己曾经作为老师所亲身经历过的“校园暴力”事件,对”作案动机“展开了缜密的分析与调查。经过层层曲折的调查,终于将真实的动机呈现在我们的面前(此处故意不剧透,以免影响了大家的阅读体验)。我只能说,得知真相的你,一定会被震撼到,从而陷入深思。


我是一个悬疑推理类书籍的书迷,看过很多悬疑推理类的书籍,而这本则是一本题材与故事都很新颖且富有创造力,结局也会很让人意外的其中之一。


读这本书的过程中,我就像是坐过山车一样,情绪起伏不定。每当我以为抓到了真相的尾巴,作者就会巧妙地用一个新的情节把我甩回去。反转再反转,直到最后,我才恍然大悟:哦,原来真相是这样的!大概真正优秀的悬疑推理类小说的作家的仅有的几部作品中,才可以与读者的互动达到这样的效果吧。


这本书不仅仅是悬疑,它更深刻地探讨了人性。恶意,这个看似抽象的概念,在书中被具象化,变得触手可及。它让我不禁深思,人心的黑暗面到底能有多深,我们又该如何面对和控制自己内心的恶意。


东野圭吾的笔下,每个人物都有自己的秘密,每个线索都可能是个陷阱。他的作品,让人读起来往往感觉惊险又刺激,恨不得一口气读完,甚至连旁边的手机也被冷落了。


总之,如果你喜欢心理悬疑,喜欢深度剖析人性的作品,那《恶意》绝对不容错过。它会让你在紧张刺激的阅读中,体验到心灵的震撼!


作者:舒米勒
来源:mdnice.com/writing/924e74e14de748d3b72493d7224aba0d
收起阅读 »

跳舞的人

跳舞的人 从我们大学的老校区南院门口进入,迎面便能看到庄严的主楼。 河北大学主楼 主楼后面是一段有花草树木的路,旁边是多功能馆。在主楼和多功能馆中间,有一块空旷的场地,人们清晨、傍晚常常在那里嬉戏玩耍。 大学一年级下半年、...
继续阅读 »

跳舞的人


从我们大学的老校区南院门口进入,迎面便能看到庄严的主楼。



河北大学主楼

河北大学主楼


主楼后面是一段有花草树木的路,旁边是多功能馆。在主楼和多功能馆中间,有一块空旷的场地,人们清晨、傍晚常常在那里嬉戏玩耍。


大学一年级下半年、大学二年纪一整学年我都是在主楼内的我们学院的机房里值班的。所谓值班就是,我晚上需要在机房对面的小屋里睡觉,白天需要管理好机房的日常使用工作。


因为早晨经常需要帮在机房上课的老师学生开门,所以在主楼住的时候,我会醒的比较早。


醒来后,我会先去食堂吃饭,然后在主楼后面散散步,转一圈。


有天在散步的过程中,听到了主楼前的方向有音乐的声音,我对这音乐比较好奇,便循着声音来到了主楼和多功能馆旁的空旷场地。这里放着一个看起来又大又重的音响,音乐便是从这个音箱里传出来的。在大音箱旁边,一个男生在跟随着音乐跳着舞。


早晨的时间是比较充分的,我便在这站了一会,发现跳舞的男生,每个舞蹈都会重复很多遍。我并不懂跳舞,只是能够感觉出来每一遍舞蹈,都是那么认真、那么投入,我猜他很热爱跳舞吧。


后面每每有时间,我都会走到那块空旷的地方,也经常能够看到他在这里跳舞。我想,这块空旷的场地就是他的舞台吧。


有天早晨,雨下得很大,我很早便被雨声吵醒了,我突然想看看「那个跳舞的人,下雨天会不会来练习跳舞呢?」


我便穿好衣服、鞋子,来到主楼不会被雨淋到的台子上。不一会,我便看到一个打着大伞的男生,拉着音箱走了过来。随着男生越来越近,我看清了,就是他——那个跳舞的人


他把音箱拉离地面,一步一步地走上台阶。我心里想,这么大的音箱,拉到台子上,不重吗?


他慢慢近了,来到了我旁边,我和他互相说了声你好,他便打开了音箱,放起了音乐,跳起了舞来,依旧那么认真、那么投入。


外面很冷,看到他来了,心里的疑问算是解开了,我便向主楼里面走去,回到了机房。


在回机房的路上,我便想,因为热爱,音箱便不会重了吧。


作者:随机的未知
来源:mdnice.com/writing/6882be2b53a04567a77d7be826eef49c
收起阅读 »

Redis不再 “开源”

Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始,...
继续阅读 »

Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。


具体来说,Redis 将不再遵循 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始,Redis 采用 SSPLv1 和 RSALv2 双重许可证。Redis 源代码将通过 Redis 社区版免费提供给开发者、客户和合作伙伴。

SSPL:Server Side Public License

RSAL:Redis Source Available License Redis 产品家族的具体许可证如下:


根据新许可证的条款,托管 Redis 产品的云服务提供商将不再允许免费使用 Redis 的源代码。例如,云服务提供商只有在与 Redis(Redis 代码的维护者)达成许可条款后,才能向用户交付 Redis 7.4。

Redis 官方表示:

实际上,Redis 开发者社区不会发生任何变化,他们将继续拥有双重许可证下的宽松许可。同时,Redis 负责的所有 Redis 客户端库将保持采用开源许可证。 Redis 将继续支持其庞大的合作伙伴生态系统(包括托管服务提供商和系统集成商),并独家访问 Redis 通过其合作伙伴计划开发和提供的所有未来版本、更新和功能。 现有 Redis Enterprise 客户没有变化。 总的来说,对于使用 Redis 开源版本和新版本的 Redis 的最终用户(使用双重许可证进行内部或个人使用),没有任何变化。

对于使用 Redis 构建客户端库或其他集成的集成合作伙伴,同样没有任何变化。 Redis 对这次修改开源协议的举措十分坦诚,他们承认 Redis 不再是 OSI 定义下的“开源”项目。但他们仍是开源理念的支持者,并会继续维护开源项目。


原文:https://mp.weixin.qq.com/s/9_-w6lF7ffiu49WbEORPtQ

收起阅读 »

我不敢把水烧的太开

我不敢把水烧开,那样家里会有两个沸物。我也不敢把房间打扫的很干净,我怕太干净,垃圾只剩下我。我常坐在窗口看着窗外发呆,这悲伤来的没有油头。床上有两个枕头,一个是我的,另一个也是我的,因为我裂开了。我也经常熬夜,因为天冷了,时间就不说了。白天面对的是生活,夜晚面...
继续阅读 »

我不敢把水烧开,那样家里会有两个沸物。我也不敢把房间打扫的很干净,我怕太干净,垃圾只剩下我。我常坐在窗口看着窗外发呆,这悲伤来的没有油头。床上有两个枕头,一个是我的,另一个也是我的,因为我裂开了。我也经常熬夜,因为天冷了,时间就不说了。白天面对的是生活,夜晚面对的是灵魂,一半的时间来生存,剩下的时间拿来滋养灵魂!我熬的不是夜,是我短暂的自由。青春献给了梦想,梦想败给了现实。小时候无忧无虑,倒头就睡,长大后忙于生计,失眠怎么常态。背井离乡的颠沛流离,不过是为了碎银几两。习惯了一个人的独处,也慢慢接受了自己的平庸。我们不是故事里的主角,也没有主角光环!我们只是茫茫人海中的渺小一个。不曾坐过飞机,也没喝过星巴克,更没有用过奢侈品。小时候的自由人,长大后的笼中鸟。以前叫醒你的是父母,现在叫醒你的是生活。我们变得好像是机器人,每天起床的意义就是重复的工作。 我似乎感受到那袭来的风划过,渴望度图欣赏,但更吹醒了我的意识,要继续生存下去,夜深人静是自由醒来清晨是生活,朋友人间自由身,却非人间自由人,看似自由自在,实则身不由己。


我不敢轻易点燃热情,以免世界再添两个燃烧的灵魂。我也不敢让心扉过于透彻明亮,只怕纯净得只剩下自我孤独。我常常倚在窗前凝望星空,那份寂寥悄无声息地蔓延。床榻上有两个梦乡,一个属于清醒时的我,另一个属于深夜里破碎的我。我时常与黑夜为伴,仿佛只有此刻,才握住了片刻的宁静。白昼应对的是繁杂尘世,夜晚则是对内心世界的对话,一半的生命为了生存而奋斗,另一半则用来沉淀和丰盈心灵。我熬的不只是夜,更是那一份难能可贵的自我空间。青春曾向理想倾注所有,而理想最终却在现实中折戟沉沙。儿时懵懂无知,酣然入梦,成人后疲于奔命,反倒是失眠成了常态。远离故土、四海为家,无非是为了那些散落各处的铜板。渐渐习惯独自行走,也逐渐接纳了自己的平凡无奇。我们并非小说里的主人公,身上也没有主角光环庇佑,我们只是芸芸众生中的一员。未曾体验云端飞翔,亦未尝品鉴星巴克的香醇,更谈不上拥有奢侈品牌的光环。曾经那个随性率真的孩子,如今已变成囚禁在生活牢笼中的飞鸟。过去的黎明由父母唤醒,现在的黎明却是生活的催促。我们如同被设定程序的机器,日复一日只是为了重复的工作奔波。


我恍若感受到那阵疾风吹过,虽有心去追逐欣赏,但它更像是一记警钟,提醒我要坚韧地活下去,深夜的清醒是对自由的领悟,破晓的苏醒则是对生活的担当,身边的朋友皆似世间自由行者,却非人人能真正活得洒脱。表面看似悠然自得,实则都身陷无形的生活枷锁之中。


作者:Young_
来源:mdnice.com/writing/ac9b73a2a7f84f1eb843a6c404a82701
收起阅读 »

《健听女孩》——一部感人的电影

故事 《健听女孩》的主人公是一个听力正常爱唱歌的女孩鲁比。这里为什么强调听力正常呢?因为她的父母和哥哥都是聋哑人,家里只有她自己一个人具有听力。这个家庭以捕鱼为生,渔船通知响应,渔获交易,与人沟通等事情都是由她进行翻译来进行的。这个家庭很需要她。 她有去伯...
继续阅读 »

故事


《健听女孩》的主人公是一个听力正常爱唱歌的女孩鲁比。这里为什么强调听力正常呢?因为她的父母和哥哥都是聋哑人,家里只有她自己一个人具有听力。这个家庭以捕鱼为生,渔船通知响应,渔获交易,与人沟通等事情都是由她进行翻译来进行的。这个家庭很需要她。


她有去伯克利音乐学院面试的机会,这是她的梦想,本片就是主要讲述了她在梦想与家庭进行抉择的过程和家庭成员的看法、处理方式等。


被“嘲笑”


鲁比出生在聋哑家庭,可想而知,她的家人没有办法教她讲话,她的发声很难听,这遭到了她的同学们的嘲笑、欺凌。她每天凌晨三点便起床与家人一起捕鱼,有时会来不及换衣服,同学也会嫌弃她身上的鱼腥味,进行讥讽。


种种这些,让她幼小的心灵受到了很大打击,所以她害怕面对她们,同时也造成了她的自卑、敏感。


师生情


在报课程的时候,她选择了合唱课,因为她热爱唱歌。但是第一节课,老师让大家开唱的时候,她却逃避得跑出去了。后来和老师讲明因为自己得经历,不敢在同学面前唱歌,害怕被嘲笑。老师给了她鼓励,让她有了自信。


老师发现她的天赋,推荐她去伯克利面试,同时教她唱歌。


在家庭不同意她去伯克利学院时,对她进行惋惜。


友情和爱情


鲁比得闺蜜是她参加合唱团前唯一的好友,闺蜜帮她分担心事,支持她唱歌。


参加合唱团后,她又有了一个男性朋友,是她的二重唱的搭档,当然也发生了一些小插曲。这位朋友家庭也存在一些问题,他的爸妈关系不和,他选择唱歌也并不是自己本意。后来她俩互相了解,互谈心事。 成为了男女朋友。


亲情


这部电影主要还是讲解亲情的。


在得知鲁比想去读大学时,她的妈妈特别反对,她说,“她不能离开我,她是我的宝宝”,爸爸说,“可是她从来没有当过宝宝”。是啊,她从小就帮家里进行翻译,是这个家与外界沟通的桥梁。她这么小就承担了这么多。她的爸爸希望她去,但是这个家庭没有她是没办法运作的。她的哥哥在看到父母把鲁比当成最重要的沟通媒介时,他心事重重,他认为他是哥哥,这些事情他也是能做好的。


虽说她的妈妈开始不支持唱歌,但是在她要进行表演的时候还是送了她一条红色裙子。她俩谈心过程中,妈妈在生孩子时希望鲁比是聋哑人,因为妈妈怕如果是正常儿童的话,自己的聋哑会成为一个“坏妈妈”。 在闺蜜和鲁比哥哥讲述了鲁比唱歌方面的天赋后,他很希望她去参加面试。


她还是没有选择去面试。这是她想成全家庭,因为她知道家庭对她的需要。


一家人一起去看了她的表演,看着台下人的感动,鼓掌,落泪等行为,爸爸心事重重,回到家后爸爸让她为她又唱了一遍,在星空下,他摸着她的振动,感受歌曲。


后来一家人一起去参加了伯克利的面试。这是家庭成员对鲁比的成全。


总结


这是一部很感人的电影,故事的讲述行云流水,每一个转折恰到好处。能够让我们聆听到悦耳的声音。


作者:随机的未知
来源:mdnice.com/writing/4a81248164b4409f8be55c27575fbf3b
收起阅读 »

勇闯天涯-程序员小哥哥,来婚介所试一下嘛(七千字长文预警!)

前言 今天技术博主不聊技术,聊聊生活聊聊情感。先叠个甲,我纯纯乐子人,对婚介所无任何恶意,可能后面还得用上,本次纯纯试探下婚介所是个什么路数!事件源于上周五的一通红娘电话,我一听要给我介绍有钱有颜的小姐姐,直接挂断,这天底下哪有这样的好事。当天下午的时候,又给...
继续阅读 »

前言


今天技术博主不聊技术,聊聊生活聊聊情感。先叠个甲,我纯纯乐子人,对婚介所无任何恶意,可能后面还得用上,本次纯纯试探下婚介所是个什么路数!事件源于上周五的一通红娘电话,我一听要给我介绍有钱有颜的小姐姐,直接挂断,这天底下哪有这样的好事。当天下午的时候,又给我来了一通电话,仿佛不知道我给她挂断了一样,基于一些奇妙的想法,我想尝试以及找找素材,我决定让她微信跟我聊。然后因为博主工作比较忙,打了招呼后,就没理她,最关键是到晚上下班后,我也忘了这档子事。周六的下午四点左右,一通电话开启了本次的故事,即使315曝光了相关产业,但是博主依然要冲,就是头铁。


阳光下午的微醺时光


接到电话的时候,我挺疑惑的,这次上来就问我现在是不是有空,出于礼貌,并且我也听出了她是昨天那个红娘,我就没有挂断电话。上来就说,弟弟,我是XX老师,今天来电话主要是聊一下,看能不能进一步推荐小姐姐。说她那里看资料我是97年的程序员,年收入XX,对吗?然后我说是,她就跟我说这里有个小姐姐挺合适的,北京XX工作的,身高165身高,本地的,收入XX。哥们一听就懵了,本地的,心里OS是,那咋遭得住,咱也不是高富帅,纯纯普男。红娘一听就问我有没有考虑常驻北京,然后就问我老家哪里的,我说四川的,她就在资料库里找了找,说真有个四川在北京的,快速给我念了一遍女生的资料。


接着就离谱了,问我怎么称呼?我说姓王,哪里工作,海淀XX公司?红娘直接薄纱,诶,没听过耶( •̀ ω •́ )y,咱们一般服务百度、阿里和字节的比较多。好好好,北京人中龙凤就是多,哥们就是菜中菜,脸都绿了。接着问我加班如何,公司福利啥的,然后说我这个181cm的身高在四川挺高的,她知道的四川男生都不太高来着。然后聊到了哥们的毕业学校,说前两天有个大连理工的女孩,真绝了,大家都这么爱走婚介所吗?我感觉聊到啥,都有女孩能配上,后面说到工作,又聊到一个大二的姑娘还没工作就来找对象了,好好好,走上了人生快车道。


然后聊到了我父母的职业,就说哥们的条件在当地不错,怎么没找上对象?我当时就说到了我的前对象,网恋的,就在掘金找的,一说到这个,好兄弟们,掘金真的能找对象的,不骗人。我的失败不是网恋的问题,纯属我自己的问题,第一次谈吧,不知道咋谈,自己也是摸不准进度,达不到对象的期待,慢慢地就淡了。我也是无脑纯爱战士,这是红娘听了之后的评价,哈哈,不过我觉得前对象确实挺不错的,当时要是硬扛着也能继续,但是我感觉可能是热情燃尽了,她也算是太忙了太累了,无论是生活还是工作,我都挺佩服,主动退出,我感觉应该是我被甩了。不后悔,男人就该当断即断,她也不小了,继续耗着,对她不公平。说远了啊,核心意思就是,网恋也有靠谱的,掘金这质量高的离谱,大家多去相亲角看看。


说着说着,突然红娘聊到了星座,说我应该了解了解星座,也说到了一些星座的小知识。然后顺嘴提到了应该门当户对,不只是能力,还有三观,阶层之类的。接着说道,我条件还行,为啥这么晚谈恋爱,是不是打游戏了?我说姐,没毛病,游戏真好玩!又接着问我单身多久了,身边还有没有介绍的呀,同事父母啥的资源。接着就进入正题了,就说小弟弟你呀,身边没有资源,姐姐这里有呀,你又有点慢热,男人花期这么短,这不得抓紧时间。你没谈就是没有遇到合适的人,圈子太小,北京这边初婚太晚了,25岁才准备开始,你想想四川重庆那边20左右就开始准备结婚了,你回去那就是大龄青年了,不是市场上最合适的那一批了。姐姐之前认识一个大哥,一年给女生花了七八万,环球影城去哈尔滨各种礼物砸下去结果手都没牵上。我???这不是大冤种嘛,移动ATM。红娘就跟我说,弟弟你啊,现在这恋爱能力,跟女生比划比划半年结果嘴都亲不上,咱们也不要浪费时间,选对人比胡乱去试强多了。姐姐我这啊,适合你的资源还蛮多的呀,你是B站来的资源,这种比较少,一般只占15%,我们婚介所大部分都是线下和国企政府合作的,所以需要你提供一定的身份和征信资料,因为我们这的姑娘都是认证过的,要对大家负责。接着又说觉得我性格比较好,很坦诚,就问我对女生有没有什么要求,我说年龄上不超过我三岁吧,不抽烟不去酒吧夜店,然后红娘跟我说,你这就没别的要求啦,那还挺低的,然后就问我三观、家庭情况之类的要求,问的很细。然后谈笑间,红娘给我猛推三个女生,嘎嘎读资料,听得哥们心里发慌,动不动就是大厂,家里有矿,问女生条件是否符合我的要求.......我真蚌埠住了,哥们真的配嘛,这条件谷歌,父母地方小领导或者开公司,问我符不符合,好好好,我能傍富婆不?


有一说一,专业红娘就是能聊,我俩聊了得有一小时,最后说让我去线下谈,给我预约了她明早10点半的时间。她想要了解下我这个人的衣着品位、谈吐举止、再做下深度的了解,以及一些信息的认证,同时也给我一些情感上的建议,让我少走些弯路。哥们听到情感上的建议,真的心动了,教练,俺就缺这个,确认了下这次聊天不收钱,就是个单纯的信息认证,我就决定去了。


小雨霖霖的春日午前


因为约好的时间是10点半,我住在石景山,婚介所在朝外SOHO那里,差不多一小时十几分钟的路程,我就九点出发了。到了地方之后,周围有好几个SOHO,没有明显指示牌,而且感觉周日早上那里人也少,当时就觉得奇怪了。因为事前的时候,跟亲友和群里的小伙伴下过军令状,不掏一分钱,实时播报进度,没消息就赶紧救我,所以我倒也没有特别慌。我的想法就很纯粹,想通过红娘的眼睛来认识我在相亲市场中是什么样的,因为我接触的人相对少嘛,所以也算是练练胆,特别是这种情感上的,多积累积累经验总没错。没找到地方,我就拍了个附件的标识给红娘老师,她就指挥我上了楼,上楼之后还蛮吓人的,左边黑的,右边就她家灯亮的。


进门之后有个助理来接待,给了我一张表单去填,相对详细哈,但是身-份-证这敏感信息可以选择不填,其实这会儿我觉得还挺不错,放下了防备,但是打开了录音,哈哈。把我领到一个逼仄的会议室,大概两平米吧,首先给我拍了一张坐着的照片,然后在我填表的时候,说要看下我的征信,简单点的就看芝麻信用就行,看了我的八百多分吧,就说你这还蛮高的。又试探性的问了能不能看下花呗借呗之类的,我寻思着也没多少额度,那就看呗,他一看就挺奇怪的,就说按你这个分数应该有好几万才对呀,你是自己调了吗?我说是呀,没事搞那么多干啥,又问我有没有信用卡,我说就拿花呗当信用卡。又说想看我支付宝里的资产,我寻思着没几个钱,那就看呗。他一看就说,你没炒基金股票啥的嘛,我说没,他就顺着话说,昨天有个姑娘和你一样,也是这样的,她就喜欢这种稳赚不赔的。浅聊了一下就说,去给我叫红娘老师,说红娘老师特别看重我,昨天周六来了好多姑娘,很多都不错的,让我跟红娘老师好好学学。哥们一听这个就来劲了,好啊,就是要这个,我不就缺这套恋爱情商嘛。


热情似火的夏日狂欢


红娘老师进来首先点评了我的头发,有点长还有点凌乱,说怎么还没理发呀。这一点说的挺对,我快一个月没理了,因为头发烫过,又有点长,显得乱。然后又说我好白呀,南方人皮肤就是好,因为我有痘痘嘛,就聊了聊油性皮肤。然后就跟我说想看看我短发的照片,说比较难想象我短发的照片,又说我这个是不是渣男锡纸烫,认出来了我这是前刺发型,感谢我的四川托尼,摩根前刺音容犹在。然后又说我字写的还不错,我说着就没必要硬夸了吧,她说跟其他人对比算是工整了。因为看到我手机壳了,就问我是个什么图案,我给她看了是二次元,她就问我是不是老爱玩B站,是不是博主,我说我哪是啊,只是喜欢看。她就说你声音还蛮好听的有点像肖战,可以整点视频啥的,说不定还能火。我说没那颜值,哈哈,谈笑间我就给她发了几张我的生活照,还有全身照片。她就说没有很胖呀,看着还好,而且家里还蛮干净的,弟弟习惯不错。


我也比较能说嘛,我就说红娘老师怎么不开个号啥的,吐吐槽啥的,比如B站上的XX说媒啥的。她跟我说她们上班很忙的,周一周二休息,平时都是快九点才下班,哪有时间开视频吐槽,都是朋友之间聊聊。然后她就很好奇我之前电话里说的前对象嘛,就聊了聊我前对象的事。因为我是抱着想要咨询的目的来的,所以我也说的相对比较详细,红娘比较在意的点是各阶段时间点、怎么认识的、告白怎么做的、准备了什么样的礼物和GG的理由。大致说了一遍,我觉得我前女友挺好的,无奈博主高攀不上,也没有达到人家的期望,就选择了默默退出。前女友说实话很不错的,情侣头像是我先换她才换的,我说话她也会回我,是我感觉被甩了,也是她有点冷吧,就放弃了。说这些呢,也是跟前面一样,说一下兄弟们要勇敢冲,掘金相亲角也靠谱,哪有那么多渣女,大部分还是好女孩,希望大家都把握得住,找到合适的另一半!


红娘老师跟我说了几个之前来聊的哥们,就说谈恋爱不能太晚,有一些大哥因为圈子比较小,导致来婚介所就想找个合适的姑娘一步到位。但是哪有这么合适的呀,一点攻略和目标都没有,怎么可能一口吃个胖子!我也附和老师说,对啊,心急吃不了热豆腐。然后就跟我说,昨天来了两哥们,一个京东一个百度的,还有00年来找对象的,我一听都懵了,这不都是人中龙凤嘛,这还愁对象,有没有大厂哥们来现身说法的,让小弟我长长见识。聊着聊着,就跟我看了个小姐姐,大四左右吧,想找个大五岁左右工作稳定的哥们,本身条件很优秀的,北交大硕士进国企,所以想要个稳定的生活。反正红娘老师意识就是说,现在女生吧,恋商普遍比男生多个三五年,现在这么卷,考虑得都比较现实。然后就说现在女生都是要求有钱有颜,小弟弟你也没钱,正在发展期嘛,颜的话还算周正,需要打理打理。然后就说想看看我之前的照片,要看我手机,emmm,这时候我没发现这是个套路,应该之前有哥们也做过这事儿。我有开录音嘛,左上角有小标,很烦,红娘应该是特意盯了这个地方,一开始问我怎么不给她看手机,而是直接发给她。我也没在意,她就老找理由看我手机,然后我也不小心被她看见了,她就问我是不是忘了关导航,哈哈,我打了个马虎眼就过了,然后后面过了一阵又看到了,就直接问我是不是录音。我非常坦诚的告诉她就是在录音,有顾虑,然后我也当着她面关了,我俩嘻嘻哈哈也就把这事过了。


想要摸一下秋天的老虎


聊了聊我的家庭,跟我聊了聊她最近咨询过的男生,有成功也有失败案例,反正都是会员。比较隐晦地指出了我这个水平在北京不够看,在成都也不算特别优秀地类型,但是结合家庭和年龄来讲,也算是还不错,至少还有操作空间。我一开始就想知道我在婚恋市场是个什么档次,以及从红娘视角来看我是什么样的,所以我就直球问她了。或许是基于职业素养,或者我问的有点子收费味道了,她顿了一下,从两方面给了我建议,一是从我初恋这段历程总结出来的,说我就是没有技巧的纯爱战士,需要提高情商,反正套话居多。二是不要乱撒网,要精准定位,选择自己合适的人,基于星座啥的跟我聊了半天,我这金牛座适合什么样的人。然后就说我这个改是来不及了,27也不小了,没救了,就从选对人开始,然后就开始围绕她们的服务开始聊。


总共聊了得有三小时左右吧,前一个半小时唠家常,根据你的资料聊细节,时不时说说女生的资料。后面就开始猛攻,围绕中介所的两项核心服务,一是心动女生匹配筛选,二是全程跟踪指导,结合真实案例开始跟我介绍。比如女生这个,真的是拿了五六份女生的资料,就跟简历似的,问我有没有眼缘,又跟我说这几天来了什么什么姑娘,有还没毕业的,有点子真实案例掺点焦虑的感觉。比如全程指导,给我看了她手下成功的案例,放了点截图和视频啥的,让我看效果。


中间插一下哈,聊聊我对红娘的看法,真的很强。能干这行的都是社牛,还有很强的气场,我确实能感觉出来她是很快乐地在撮合,觉得是在做正确的事,收的钱理所应当。说真的,要不是我去之前就抱着分文不出的想法,她一顿吹我真给了,业务能力太强了。她聊天的话,目的性很强,总是往婚介服务,这个筛选方向去带,会弱化你的劣势,不会很明显地贬低你,但也不会特别夸耀你的长处,就把你当作一个朋友一样,所有都是围绕我们能给你找一个天造地设的对象这一核心点展开。说实在的,动不动认个亲弟弟这操作也太骚了,见面第一次,这社交强度直接拉满,很热情。


聊聊收费啥的,好像每个人都不一样,给我的标准是1年49990,半年29990,3个月19990,后面我说不用了,拉扯半小时,认我做亲弟弟,然后给我亲属价对赌协议,先交10100等成功了再补9890或者给她介绍2个就不用给尾款了。最后博主一是领导在催干活,嘎嘎电话,朋友在催吃饭,也微信电话不停,就想润了,红娘就说要不先交500定金,不行再退,我确实没这想法,就发了50红包给姐买奶茶。反正这吃相一出来就有点尬住了,我这确实是很好说话,没有一甩脸子直接走了,就这么耗着。说实在的,我确实觉得人家说了3小时,这总得有点收益,50块钱在北京不是什么大钱,但是我本来也是抱着聊聊的想法,没想到上来就这么狠,直接2W起步,真恐怖,润了润了。


又到了白色相簿的季节


最后聊聊博主的收获,有用信息不多哈,大部分是一些套话,这大概就是免费内容吧。她给我看了客户的跟踪记录,红娘会全程指导男生的行为,会推一些书或者情感内容啥的,当然,这都是收费内容。怎么说呢,这一次三小时的激烈battle,我也能感觉出来,我还是该在情商上做一些提升,红娘有提到男女之间的情商和朋友之间的情商是两码事,说我上一次挂了就是技巧不足,竟然半年连嘴都没亲,这还是人???跟我说她们那里的都是一个月速通,我这样的已经没救了,好好好,这年头纯爱战士就是鲨BEE。


我其实对这家婚介所没啥意见,我也是想着既然聊上了那就去看看呗,没想到第一次这强度就这么大,哈哈,离谱。我看了下女生资源都很不错,男生也很厉害,都是人中龙凤,不知真假。XX爱恋,她跟我说主要还是线下,我的资料是从B站过去的,就离谱,不知道我填啥了,一开始就知道我的性别年龄和手机号,其他一概不知,可能是我资料被卖了吧,根据年龄给我推送的。喔,对了,说是每周给政府或者国企办公益相亲会,我之前倒是没怎么了解,不知道她家是不是在北京属于厉害的了,还是纯诈骗,摸不清楚,这也是我没交钱的理由之一。因为我在B站上看过XX说媒嘛,我就问她,怎么不开个自媒体号吐吐槽,还能挣点外快。哈哈,这姐非常真实,说剪辑、化妆、文案太累了,线下就够赚了,没必要混线上。


写着写着,突然想起来这姐还说过我一个坏毛病,说我没有底线,有点舔狗,女生一般不喜欢姿态放低的男生,希望我有点神秘感,或者说装一点。哈哈,下一个更好,咱们有的是资源,看得出姐是相当洒脱,成年人不改变只选择这话倒是诠释的清清楚楚。还说我应该有个底,不要一上来就跟人托底,比如她一看我就是个逗比的人,结果跟我一聊还真是个嘻嘻哈哈的乐天派,这样就没有神秘感,她说女生一般不太喜欢这种。


最后的最后,她把经理叫来了,做个回访,我是很欣赏红娘老师的,因为我这次没谈成业绩我也是相当抱歉,所以当着经理面说了很多红娘的好话,没有谈成也确实是我的问题。哈哈,经理直接问我,免费给我介绍同意不,我都懵了,这太狠了,我也没答应,这种形式还是太超前了。相亲说实话还是摆条件,看见女生资料搁面前一遍遍刷,人中龙凤太多啦,哈哈,不由得想起了我初恋也就是我前对象,我也得好好努力呀!


锵锵!我闪亮登场!


今天突然想到,好像真是在B站一个UP那里填过资料的,是我错怪人家了。红娘这姐姐挺有意思的,我是真的觉得她干这行很快乐,她还问我对这行有没有兴趣,哈哈。这种撮合有情人就能收钱的事可太行了,我也蛮喜欢这种做好事的感觉。不过骗人的也不少,315曝光过了,大家也长个心眼吧,学会识人。


最后做个总结吧,博主从昨年开始琢磨男女大事,经历了人生第一次相亲会、初恋、婚介所,虽然都只有一次,但都是挺有意思的。哎,母胎SOLO真的太难了,不会谈啊,盲目冲锋的纯爱战士真的不是版本答案了,红娘老师也跟我说,女生感情上比男生早熟三四年以上,难难难,但是博主依旧对生活抱有期望,哈哈,毕竟我是个乐子人。


我的人生信条是,我要让这痛苦压抑的世界绽放幸福快乐之花,向美好的世界献上祝福!!!


作者:云雨雪
来源:juejin.cn/post/7350123500936986674
收起阅读 »

祖传屎山代码平时不优化,一重构就翻天覆地

写作背景 写背景之前先放一张网图,侵删。 有一个活跃应用包含了2个相似业务场景,所以共用了底层模型。 前期在开发过程中,强行将两波研发组正在研发的产品底层模型和能力统一。底层能力统一遇到了挺多问题,比如数据库字段适配、转换、冗余;repo 层 SQL...
继续阅读 »



写作背景



写背景之前先放一张网图,侵删。



image.png


有一个活跃应用包含了2个相似业务场景,所以共用了底层模型。




  1. 前期在开发过程中,强行将两波研发组正在研发的产品底层模型和能力统一。底层能力统一遇到了挺多问题,比如数据库字段适配、转换、冗余;repo 层 SQL 条件拼接用了大量 if else,导致建索引困难…等等。

  2. 一些历史原因,该应用经手了十多个研发,代码是垒了又垒,出现一个很有规律的现象,大家都是只增代码不减代码。

  3. 代码性能随着数据规模增加不断降低,靠着优化补丁缝缝补补支撑着,业务高峰期经常被运维同学拿着 SQL 光顾。



重构该项目想法不止10次,想逮着机会拉着各方大佬商讨重构事项,因为重构对业务是没有收益的,并且重构难度相当大,所以迟迟没有下定决心。


最近刚好产品需要打磨下一个版本,需要挺长时间,几个后端研发商讨要不重构吧。嗯,我想可以,于是我找上前端负责人沟通拉他入伙,找上前端之前测试已经同意了。


于是一场重构拉开序幕了。




  1. A 同学负责梳理和收敛模型、数据订正、向上提供能力。

  2. B 同学负责梳理前端接口,编排底层能力,提供原子接口给前端(最复杂,直接面向Web端业务,接口有很多特殊逻辑)。

  3. C 同学负责引擎层,和一些计算类逻辑,另外就是打打杂。



重构


大型重构耗时不说还费人力,搞不好重构完你拿不到业务结果,所以重构前你要明确收益是啥?无非就是下面几种




  1. 性能提升产品体验更好;

  2. 简化架构并提升架构扩展性(后面迭代基于重构后架构能快速开发上线);

  3. 历史债清理,历史代码可读性差维护费劲(大部分程序员看别人代码都是这样吧)。



我们是三种情况都中,下面简单总结重构的思路吧。


模型梳理和能力收敛


底层模型我认为最重要,要可靠、稳定且变动少,如果在迭代中你的模型变来变去,上层业务根本开发不了或者边开发边改,到项目收尾就是另一坨屎山。


上层业务是根据底层模型长出来的,所以一定要跟产品讨论确定最终模型,若有好的竞品参考更好了,你的设计可能会看的更远,以防过度设计,架构设计满足未来1-2年迭代即可。


模型设计需要预估数据规模,数据规模决定是否采用分库分表/分区表。如果不好预估采用简单原则先上线看看业务效果,但基础框架这些能力一定要预留好,上量后能快速开发上线。


底层模型和能力收敛了,上层业务编排对能力的复用性更高。ps:这次模型梳理我们干掉了 2 张千万级表。


数据订正


模型梳理和收敛一般会涉及数据订正,特指线上模型对应的数据割接在新模型。一般会有下面几种方式




  1. 写脚本从数据库捞数据订正数据,一般会先 select 查询到内存中,重新组装数据再 insert 新模型。数据量小场景完全可行,但数据量大是跑不动(已踩过坑,线上数据几天没跑完最后发布失败)。

  2. 写 SQL 直接操作数据表,简单的数据处理场景、数据量小场景可行,数据量大场景不可靠,容易超时并且会有数据库稳定性风险,另外订正逻辑复杂是搞不定的(已踩过坑,线上跑数据失败导致发布失败)。

  3. oplog、binlog.... 日志采集同步到消息队列(kafka、pulsar 等),启消费组消费订正数据(我最常用也是最可靠的),数据量大的场景特别爽,处理存量数据的同时还能保证增量数据同步处理。



数据订正是清理过期数据最佳时期。假若平台过期数据体量大,这部分数据不迁移新表,留在历史表中当备份就行,亦可快速恢复。ps:本次重构过期数据预估是千万级别。


API 接口


接口是你对外的门面,应该提前规划明确,不能新增需求就干一个接口,需求迭代到后期,大大小小接口加起来几十上百个维护成本是很高的。


我们一般会按照下面几个原则:




  1. 按操作分类比如:增、删、改、查是一类,只会定义4个接口上游业务方调用需传入 source 区分调用源。

  2. 接口保持简洁,不耦合非当前业务的复杂数据。比如业务上需要回显组织架构数据(员工名称、部门、员工上级等),这类数据需要业务方自行编排组织架构 byids 接口。

  3. 接口具备降级能力,不能因为接口内部编排的非重要接口、逻辑报错导致整个接口不可用。
    降级指将某些业务或者接口的功能降低,可以是只提供部分功能,也可以是完全停掉所有功能。



这次重构 B 同学和前端面临了巨大压力,接口多、混乱、逻辑不清晰,决定梳理业务逻辑按照上面 3 个原则重写接口。


代码重构技巧


代码重构也是本次重构重点,经过长时间迭代已经闻到了坏代码味道。怎么重构早就心中有数,很早就盘点和推演了,下面是我常用的一些重构技巧,这些技巧都是非常经典的,如果看过「重构改善既有代码设计」应该都不陌生。


内联临时变量

项目里有一些临时变量,只被简单赋值了一次。将这些临时变量的赋值语句直接嵌入到使用它们的地方,而不是创建一个新的变量来存储这个临时值。


func Publish() error {
// ... 省略一部分代码
err = Producer(context.TODO()).ProducerOne(&obj)
if err != nil {
return err
}
return nil
}

临时变量内联改造后👇👇👇


func Publish() error {
// ... 省略一部分代码
return Producer(context.TODO()).ProducerOne(&obj)
}

魔幻数字"(Magic Number)

指代码中使用未经解释或定义的常数值,这些值通常没有命名并且没有给出其含义或用途。这样的数字使代码难理解和维护,项目里面很多魔幻数字使用。


func Update(ids []string, nodeID string) {
// ... 省略一部分代码
Report(context.TODO(), nodeID, "6", ids)
}

要解决魔幻数字比较简单,只需你把业务逻辑理解定义成枚举就可以了,这个数字6表示朋友圈类型,魔幻数字改造后👇👇👇


type TargetType int

const (
QWMoment TargetType = 6
)

func Update(ids []string, nodeID string) {
// ... 省略一部分代码
Report(context.TODO(), nodeID, QWMoment, ids)
}

删除注释、未引用代码「俗称死代码」

根据我 review 代码的经验,不少研发同学会把已注释、未引用代码保留,这部分代码是非常影响后面维护者思路的,我们在重构过程中遇到不少这类代码,来来回回找测试和研发确认为什么会保留,哪些业务常用在用?带来了不小负担。(尤其是越上层的死代码引用了一堆下层代码,比如controller 引用 service,service 再引用 repo ,若重写 repo 非常上头)


所以我强烈建议,一旦代码不用了,应该立刻删除。若删除这部分代码后面迭代可能会使用,我建议重新开发。我列一些删除代码后的收益。




  1. 清晰度和简洁性;

  2. 减少维护成本;

  3. 减少冗余和混乱;

  4. 避免误导。



卫语句取代条件表达式

卫语是用来提前结束方法执行的结构。通常情况下,卫语句用来检查某些前置条件是否满足,如果条件不满足,则立即退出方法执行,以避免进入后续的代码块。有助于减少代码嵌套深度,增加代码的可读性和可维护性。


按照我的经验,卫语句应该有下面 2 种情况:




  1. 两个条件分支都属于正常行为;

  2. 有一个条件分支是正常行为,另一个分支则是异常的情况。



我们review过的代码一般是第二种情况比较严重。


func Recall(exclusion constant.ExclusionType)error  {
if exclusion == constant.OnlyOneExec {
if detail.TargetID == "" {
return nil
}
_, err := repo.Update(ctx,....)
if err != nil {
return xerrors.Wrapf(err, "Update")
}
}
return nil
}

调整后代码👇👇👇


func Recall(exclusion constant.ExclusionType)error  {
if exclusion != constant.OnlyOneExec {
return nil
}

if detail.TargetID == "" {
return nil
}
_, err := repo.Update(ctx,....)
return err
}

变量改名

好的命名能让读者一目了然,变量名可以很好的解释一段代码干了什么。我发现项目里面很多字段名、类名、包名很模糊,很难理解具体的业务(包括我自己也经常命名错)。


下段代码是我整理的坏的命名


TaskCommand 是 Kafka 消费者依赖的实体,收到消息后根据 Type 和 Status 撤回数据。但你看 struct 名 跟撤回没有任何关系。


// TaskCommand 任务相关命令
type TaskCommand struct {
Type   int8 `json:"type"`   // 执行类型
Status int8 `json:"status"` 
}

所以我选择把 TaskCommand 替换成跟业务更贴切的名称👇👇👇


type RecallDataParam struct {
Type   int8 `json:"type"` // 执行类型
Status int8 `json:"status"`
}

引入参数对象

以一个对象取代一些参数,可以改善代码的可读性和维护性,尤其是在函数参数列表较长或者参数之间存在复杂关系的情况下。将一组相关的参数封装到一个对象中,将该对象作为函数的参数传递,简化函数签名并提高代码的清晰度。


在一些历史比较久的代码里过长参数真的很常见,从 controller 透传到 service 再透传到 repo 层,代码复用性也非常低。


type AppImpl struct {
}

func (app *AppImpl) List(tp []int, status, page, pageSize int, keyword string, domain string) ([]interface{}, error) {
// .... 省略业务逻辑
return nil, nil
}

上段代码我一般会在 controller 和 service 中间抽一个 dto 实体。👇👇👇


type AppImpl struct {
}

func (app *AppImpl) List(listDTO *ListDTO) ([]interface{}, error) {
// .... 省略业务逻辑
return nil, nil
}

type ListDTO struct {
tp []int
status, page, pageSize int
keyword, domain string
}

提炼类

一个类应该是一个明确的抽象,它的职责是单一的,只处理一些明确的职责。


提炼类一般是下面两种情况




  1. 需求是在不停变化和累加,你会这儿加一个函数,那儿加一个方法。导致某些文件或者类非常臃肿。

  2. 相似的能力,散落在不同的业务板块,涉及的开发都在重复建设,有一个需求建一个烟囱。



典型案例是项目中事件上报能力,本应该是一个通用能力集中收敛上报代码,据我梳理代码散落在多处,上报触点有 10 来个,每个触点都在写同样的上报代码,假设某一天上报逻辑变化必须在这 10 多处做出许多小修改。


所以我决定把上报能力收敛在一个类,将复杂逻辑封装到该类,定义有限参数露出给使用方。


上报通用能力封装在 EventTracking。👇👇👇


// Tracker 埋点上报接口
type Tracker[T any] interface {
EventTracking(in T) error
}

type CMSReachDTO struct {
}

type CMSReachTracking[T any] struct {
ctx context.Context
}

func NewCMSReachTracking[T any](ctx context.Context) Tracker[*CMSReachDTO] {
return &CMSReachTracking[T]{ctx: ctx}
}

func (t *CMSReachTracking[T]) EventTracking(in *CMSReachDTO) error {
// ....逻辑省略

return nil
}

提炼超类

如果两个类在做相似的事,可以利用基本的继承/组合(GO 只有组合)机制把它们的相似之处提炼到超类。一般会把字段、方法都搬移过去。


我遇到的 case 在 entity 上会多一些,比如下面这两个 struct。


type Task struct {
ID string `gorm:"column:id"`
Tenant string `gorm:"column:tenant"`
SubDomain string `gorm:"column:sub_domain"`
IsDel int8   `gorm:"column:is_del;default:1" `
CreateAt int64  `gorm:"column:create_at;autoCreateTime:milli"`
UpdateAt int64  `gorm:"column:update_at;autoUpdateTime:milli"`
CreateUserID string `gorm:"column:create_uid"`
UpdateUserID string `gorm:"column:update_uid"`
// ... 省略其他字段
}

type TaskDetail struct {
ID string `gorm:"column:id"`
TargetID string `gorm:"column:target_id"`
Tenant string `gorm:"column:tenant"`
SubDomain string `gorm:"column:sub_domain"`
IsDel int8   `gorm:"column:is_del;default:1" `
CreateAt int64  `gorm:"column:create_at;autoCreateTime:milli"`
UpdateAt int64  `gorm:"column:update_at;autoUpdateTime:milli"`
CreateUserID string `gorm:"column:create_uid"`
UpdateUserID string `gorm:"column:update_uid"`
// ... 省略其他字段
}

上面这段代码他们都有共性的代码,并且我非常熟悉业务是不可能更改的,所以我会提炼一个超类。👇👇👇


type SuperParty struct {
Tenant string `gorm:"column:tenant"`
SubDomain string `gorm:"column:sub_domain"`
IsDel int8   `gorm:"column:is_del;default:1" `
CreateAt int64  `gorm:"column:create_at;autoCreateTime:milli"`
UpdateAt int64  `gorm:"column:update_at;autoUpdateTime:milli"`
CreateUserID string `gorm:"column:create_uid"`
UpdateUserID string `gorm:"column:update_uid"`
}

type Task struct {
ID string `gorm:"column:id"`
SuperParty
// ... 省略其他字段
}

type TaskDetail struct {
ID string `gorm:"column:id"`
TargetID string `gorm:"column:target_id"`
SuperParty
// ... 省略其他字段
}

当然某些场景还有一些配套的方法,也可以一并搬迁到 SuperParty 里面。


提炼方法/函数

提炼函数/方法是我常用的一种手段,我不喜欢长函数/方法。我看过一个说法,一个函数/方法应该能在一屏中显示,我一直奉为经典语录(我写的代码函数/方法基本不会超过一百行);另外只要有一段代码不止被用一次,我就会把他们单独放进一个函数。


有这样一个场景,调用外部 byids 查询员工信息获取 externalId 执行业务逻辑,封装外部接口调用。


type Client struct {
ctx context.Context
}

func (c *Client) GetByIDs(id []string) ([]*User, error) {
// ....省略业务逻辑
return []*User{}, nil
}

type User struct {
ID         string `json:"id"`
ExternalID string `json:"externalId"`
}

下面是业务方使用 GetByIDs() 方法


func TestGetUserByIDs(t *testing.T) {
ids := []string{"1""2"}

client := &Client{}
users, err := client.GetByIDs(ids)
if err != nil {
panic(err)
}

l := make([]string0len(users))
for _, v := range users {
l = append(l, v.ExternalID)
}

// ...执行业务逻辑
}

 业务方调用 GetByIDs() 方法,遍历 users 获取 ExternalID 执行业务逻辑。在业务上这种操作还真不少,所以决定优化复用一部分代码。👇👇👇




  1. 定义 Users 切片。

  2. GetByIDs() 方法返回 Users。

  3. Users 提供 GetExternalIDs 方法。



type Client struct {
ctx context.Context
}

func (c *Client) GetByIDs(id []string) (Users, error) {
// .... 省略业务逻辑
return Users{}, nil
}

type Users []*User

func (u Users) GetExternalIDs() []string {
out := make([]string0len(u))
for _, v := range u {
out = append(out, v.ExternalID)
}

return out
}

type User struct {
ID         string `json:"id"`
ExternalID string `json:"externalId"`
}

下面是业务方使用 GetByIDs() 方法


func TestGetUserByIDs(t *testing.T) {
ids := []string{"1""2"}

client := &Client{}
users, err := client.GetByIDs(ids)
if err != nil {
panic(err)
}

l := users.GetExternalIDs()
// 执行业务逻辑
   // ....
}

代码空行

我非常非常不喜欢代码从头到尾写下来没有任何空行,难以阅读让读者很难提起兴趣。空行在我看来是必不可少的,在代码中使用空行来分隔不同功能或逻辑块之间的代码,空行使得代码更易读。


下面段代码是没有任何空行的,代码比较短阅读起来可能并不费劲。
image.png


适当进行空行优化后👇👇👇
企业微信截图_25861264-b69d-48eb-bd5c-eb2e4e9f87aa.png


上段代码先不关注逻辑,优化后可读性更强了,代码分为3段逻辑,每段逻辑都有各自的职责。


空行是用来区分不同逻辑块的,过度空行也会影响代码阅读,如下:
image.png


引入设计模式

设计模式是被大佬们验证过的、开发经验的总结,可以帮助我们更好地组织和管理代码,并提高代码的可维护性、可读性、可扩展性和可重用性。下面链接是我最常用的设计模式,也在这次重构过程中全部用上了,有兴趣可以看看。


最后总结




  1. 如果你的项目不是外包项目(交付了就完事儿),一定要多回头看看自己写的代码,跟着版本迭代持续优化和改进,你才能进步。另外对代码一定要有洁癖。

  2. 重构是持续的过程,如果是重要项目,每个版本我们都会推进代码优化,保证代码可维护性、可扩展性、另外就是高性能。千万别堆积最后,那可是大工程到后面很多人是没有决心干这个事儿的,所以大家应该平时迭代中不断优化和完善,才可持续性。

  3. 大型重构时,一定要明确收益并且是可量化的,比如重构后 qps 提升了10%,应用消耗资源降低了…等等,你才有跟老板谈判的筹码。



作者:彭亚川Allen
来源:juejin.cn/post/7344290391989485578
收起阅读 »

业务开发做到零 bug 有多难?

大家好,我是树哥,好久不见啦。 作为一个工作了 10 多年的开发,写业务代码总是写了不少的。但你想过做到零 bug 吗?我可是想过的,毕竟我还是有点追求的。不然每天都是浑浑噩噩地过,多没意思啊。 大概在一年多前,我给自己立下一个目标 —— 尽量将自己经手的业务...
继续阅读 »

大家好,我是树哥,好久不见啦。


作为一个工作了 10 多年的开发,写业务代码总是写了不少的。但你想过做到零 bug 吗?我可是想过的,毕竟我还是有点追求的。不然每天都是浑浑噩噩地过,多没意思啊。


大概在一年多前,我给自己立下一个目标 —— 尽量将自己经手的业务需求做到零 bug。不试不知道,一试吓一跳,原来零 bug 还真的还不容易。今天,树哥就跟大家分享关于「业务开发零 bug」的一些思考。


要做到业务开发零 bug,其实挺难的。这涉及到非常多方面,有些方面可能还不只是你能控制的,例如:产品 PRD 详尽程度,产研组织的稳定性等等。经过一段时间的思考与摸索,我自己总结出一些影响因素,分别是:



  1. 产品需求文档的清晰程度

  2. 需求的复杂程度

  3. 开发人员的细心程度

  4. 开发人员是否详细自测过

  5. 开发人员对项目的熟悉程度

  6. 开发人员开发时间是否充足


针对上面说到的影响因素,我们一个个详细聊聊。


需求文档清晰程度


对于研发、测试人员来说,他们获取信息的源头就是产品的 PRD 文档。因此,需求文档是否写得清晰、明确,就显得非常重要。


如果产品自己对功能都不了解,那么输出的需求文档肯定「缺斤少两」,到时候就是边开发边补充需求,甚至是在测试过程中补充需求。遇到这种情况,想要做到零 bug 真的非常难。


因此,清晰明确的需求文档,是我们实现业务开发零 bug 的重要前提。如果这个前提保证不了,那要做到零 bug 真的很难。毕竟想做成啥样都不知道,程序员又不是神仙,咋能猜出你想要什么。但这块内容,更多是对于产品人员专业能力的要求,开发人员无法控制。


在一些公司,会再需求评审之前先对需求文档进行一次初审,筛除那些有明显重大问题的需求,这样可以减少一部分劣质需求。


但初审的作用还是有限的,它没办法对功能的细节做较多的判断。很多时候恰恰就是一些功能细节的缺失,导致了一些 bug 的诞生。


需求的复杂程度


需求的复杂程度,对于实现业务开发零 bug 也有很大的影响。举个简单地例子:一个改文案的需求,和一个完全重新做的功能。


这样的两个需求,其复杂程度差别很大,肯定是改文案的需求实现业务开发零 bug 的难度低很多。对于一个完全重新做的功能,要做到完全零 bug,对于开发人员的要求非常高。


对于越复杂的项目,零 bug 的可能性就越低。因此,很多项目为了追求产出功能的高质量,会采用将功能点拆得非常细的方式,来减少单个需求的复杂度。


笔者公司在去年做过这个尝试,确实是可以较大地提高产出功能的质量。


细心程度


前面说到需求文档的清晰程度很重要,这取决于产品人员对于业务的理解程度,以及对于对于功能的熟悉程度。开发人员的细心,就像是一个质检关卡一样,在开发之前就对产品的需求内容进行详尽的思考与提问。


对于粗心的开发人员来说,其可能不看需求文档就直接参加需求评审,等到开发的时候边写代码边看需求文档,其写得代码也是一边熟悉需求一边改。这样写出来的系统功能是比较差的,没有一个统一、全局的设计与思考,很容易在细节处发生问题。


一个细心的开发人员,其会在评审之前就详细阅读需求文档,甚至会前前后后翻阅好几次。他甚至会逐字逐句地阅读,弄懂每个文字、句子的意思,甚至有时候会让你觉得他是在玩文字游戏(但不得不说,确实有必要细致一些)。


最后会联系上下文思考功能的合理性。如果发现一些不合理的地方,他会积极与产品沟通反馈,以确保其对于需求的理解,与产品经理对于需求的理解是一致的。


通过对比,我们知道细心的开发人员对于产品经理来说,是一个莫大的帮助,可以帮助他查漏补缺,让其对于功能的考虑更加细致、严谨。


这里的开发人员不仅仅指的是后端开发人员,也包括前端开发、移动端开发,他们都会从不同角度提出问题。


对于后端开发人员来说,他们可能会提出性能问题。对于前端开发以及移动端开发同学,他们可能会提出交互问题、样式统一等问题。


简单地说,细心的开发人员可以弥补需求文档的缺陷,从而让大家对于需求的理解更趋于一致,从而减少 bug 的发生。因此,开发人员的细心程度也是决定业务开发能否实现零 bug 的关键因素!


是否详细自测过


即使写过 10 多年代码的开发人员,刷 Leetcode 也不敢说 bug free 一把过,对于更加复杂的业务代码更是如此。因此,要做到业务开发零 bug,其中一个很重要的操作便是 —— 自测。


自测可以帮你再次检查可能出现的问题,从而提高零 bug 的概率。对于我而言,我习惯性在自测的时候再次对照一遍需求文档,从而避免自己遗漏一些功能的细节点。


对于自测而言,业界有很多种自测方法,包括:单测、集成测试、功能测试。一般情况,建议自己选择适合自己的自测方法。


很多时候,功能测试是相对来说性价比较高的方式。除此之外,自测的详细程度也根据实际情况有所不同,例如有些人只会测试正常情况,但有些老手会测试一些边界情况、异常情况。


毫无疑问,你越能像测试人员一样测试,你的提测质量肯定就越高,bug 当然也就越少。


对项目的熟悉程度


这里说的项目熟悉程度,既指技术层面的熟悉程度,也指业务功能层面的熟悉程度。


技术层面的熟悉程度,指的是项目之间是用什么技术栈搭建的,你对这些技术是否都熟悉。举个很简单的例子,项目中采用了微服务的方式进行调用,那么你是否清楚是什么微服务调用?


如果采用了 ElasticSearch 进行搜索,那么你是否对 ElasticSearch 有一些了解,知道一些基本使用及最佳实践?等等。


这些算是技术层面的熟悉程度,你对这些越熟悉,你在技术层面发生问题的可能性就越小。


业务功能层面的熟悉程度,指的是你对项目其他模块的业务是否熟悉。例如你经常负责 A 模块的功能,你对 A 模块肯定很熟悉。


但下个迭代你就要去做 B 迭代的需求了,这时候你肯定不是很熟,相对来说出错的可能性就更大一些。


无论是技术层面,还是业务层面的熟悉程度,都会随着你做了更多的需求,变得更加熟悉。到了后面某个阶段,你基本上就不存在踩坑的问题了,也为你业务开发零 bug 奠定了基础。如果你是一个刚刚进入公司的新手,那么做到零 bug 还是很难的。


开发时间是否充足


开发时间是否充足,决定了你是否有充足的时间去熟悉需求,去和产品经理确定细节。有了充足的时间,你也才能有一定时间去进行更详细的自测。更为关键的一点,有充足的时间,你写代码才能写得更好。因此,开发时间是否充足是很重要的。


在实际的开发过程中,会因为各种各样的原因,其实并没有办法给你留出特别理想的开发时间。这时候该怎么办?有些人选择接受,去压缩自己的时间。


有些人则会选择去沟通,或者协调资源,保证自己有充足的时间。其实,正确的做法还是第二种,这样会更好一些。


这需要开发人员有更强的综合能力(沟通、协调能力),但并不是每个开发人员都具备的。关于这点,又是可以聊的一个话题 —— 当你的需求被压缩工时的时候,你应该怎么做?这里暂不展开,后续有时间可以聊聊。


简单来说,开发时间是基础,没有合理、充足的时间保障的话,要做到业务开发零 bug 是不可能的事情。


总结


要做到业务开发零 bug,其实就是要消除功能开发过程中的所有不确定性,包括:需求功能的不确定性、自己写错代码的不确定性等等。而发生这些不确定性的地方,可能就有:



  1. 产品需求文档的清晰程度

  2. 需求的复杂程度

  3. 开发人员的细心程度

  4. 开发人员是否详细自测过

  5. 开发人员对项目的熟悉程度

  6. 开发人员开发时间是否充足


除了上面说到的 6 个影响业务开发零 bug 的因素之外,肯定还有其他影响因素。


你能想到什么影响业务开发零 bug 的因素吗?欢迎在评论区留言与大家分享。


好了,今天的分享就到此为止,希望大家都能做到业务开发零 bug,业务开发代码一把过!


如果你觉得今天的文章对你有帮助,欢迎点赞转发评论,你的转发对于我很重要,感谢大家!


作者:树哥聊编程
来源:juejin.cn/post/7347668702029971475
收起阅读 »

职场上的人情世故 - 初入公司的第一个项目

说下背景 来公司的第二周,上面下发了新需求,也是我参与公司的第一个项目。 我先说下公司一个项目的大体配置 产品经理 1~2人 一般中小版本就1人 UI 1~2人 研发前端 1~3人 研发后端 1~5人(包含协同团队) ps:其中后端中1...
继续阅读 »

说下背景


来公司的第二周,上面下发了新需求,也是我参与公司的第一个项目。


我先说下公司一个项目的大体配置


产品经理 1~2人  一般中小版本就1人
UI 1~2人
研发前端 1~3人
研发后端 1~5人(包含协同团队)
ps:其中后端中1人为项目负责人,负责整体项目进度和协调资源
测试 1~2人

好的,故事由此开始。先铺垫下,该项目是我从业以来最无力最绝望最想扯呼的一个。


需求评审


周一刚来公司,就被公司给我安排的导师L 叫到身边


导师L:「一会儿有个需求评审,我文档先发你,你先抓紧时间看看」


懵懂的我:「好的,我先熟悉下任务」


说实话文档看起来真的有点头疼,主要是上面的一行字我真的无语至极【与线上保持一致】。公司的项目还是比较大的,我上哪儿去了解保持一致是个啥意思......问下导师吧,他也在排查线上问题;问下其他同事吧,也刚来没多久不了解这块业务....


好吧时间应该够,我先打开系统,看看这功能到底在哪里。


「走,A2评审会」 导师L给了我一个眼神


大哥,我才看了不到20分钟,功能我都没看完......


我的情况稍微有点特殊,一般来说,大家跟随导师的节奏,问题都不大
看不懂的需求,一定要整懂了在动手,否则返工风险很大
时间不允许?那要再考虑下该公司是不是适合你了哦!!!总不能说能跑起来就行吧

过程我全程梦游,大家都在提问题:各种数据的兼容方案、功能冲突怎么兼容、有类似功能是否能套用、数据权限是否考虑、特殊逻辑的兜底方案.......


开始还能记一下笔记,后面发现 跟不上,根本跟不上 直接 弃笔,从容 面对现实了


从会议室走出来,嗯~~ 怎么形容心情呢。我高考语文作文那一页名字忘了写出考场都没这么忧虑过(当然作文最后还是有得分)。


分配任务


直接上对话详情,后端加上我一共3人


导师L:「任务我这边大概分配了下,你们先选吧」


我内心很慌,我一个都看不明白要怎么做


不知所措的我:「要不我拿剩下的」


同事P:「那把这个、这个、这个给我吧,剩下的你们分?」


导师L看着我:「那就这样分,你做那个、那个、那个,有问题随时找我」


不知所措的我:「好的,我主要是不熟悉这块业务,有问题我先整理出来再一起问下你呗」


这里有个关键点,整理完问题再一起咨询,切记遇到一个问一个
态度摆正,表现得自信点,第一次在同事面前“刷脸”,印象要留好一些

研发阶段


我的任务主要是客户群统计模块


导师给我开了两个服务的权限,让我先看看代码


懵逼的我:「L哥,要不大概说下在那部分写的统计数据?我应该从哪些表出结果?」


导师L:「你先看代码,里面都有逻辑,你看得懂」


无语的我:「好的」 内心(这么玩儿是吧)


知道那代码有多难懂吗?全都是A队列推到B队列,判断后再推C队列,并且还有了很多观察者模式。可能有兄弟姐妹问:「看不懂注释?」。注释少得可怜,也就一些字段含义,不过看单词也能看出来。


队列和队列之间很难看懂,并且很多跨服务的队列,给我开的两个服务根本不够,前后一共加上4个服务才把统计的逻辑串起来,我还专门画了个流程图出来


不管代码设计和质量如何,作为新人别公开喷前辈的代码
前期不要加入太多个性化的代码和设计,每个公司的要求不一致,最好的方式还是模仿
逻辑复杂的话,建议画一个流程图or时序图,架构图的话还是问下老同事,自己画可能不准确
不要轻易下手编码,确保自己很明确整体逻辑了再跟熟悉的同事复述一遍先

好吧,我终于找到逻辑线了(花了1天半时间,留给我开发的时间很近很近),但我发现,结果表很多很多,有AAA_statistics、BBB_statistics、CCC_statistics...... 我拿不定主意,刚好我也对这几个服务熟悉得差不多了,于是我拿着这些成果去问导师L


诚恳的我:「L哥,帮忙看看这几张表,我感觉有一些数据是重复的,还对不上数,帮忙看看呢?」


导师L:「逻辑都捋清楚了吗?」


我直接掏出了我的流程图


导师L:「这是JW(我们组的TL)给你的吗?」


求知的我:「我自己画的,不晓得准确性怎么样,帮忙check下呢」


导师L:「主要是我这还有点事,你再看看吧,晚点我们过一下」


前期难免会有很多问题,但自己也要有点准备,否则被问成麻瓜,印象分直接拉低
不知道的不要说"不知道",可以说"我还不太熟悉,我先去看看逻辑,X哥要不跟我说下大概位置或则有啥文档?"

到了晚上7:00左右,我发现L哥不见了,后来才晓得那天他溜得挺早的。只剩我原地爆炸,明天要联调了,我关键的数据组装service还只有一行//TODO。没招了,我按照我的想法和数据指标,找了几张最合适的表,把数据产出了。


第二天


我早早地来公司,重新check了下代码并又调试了几次,除了数据对不上没啥其他问题。导师L带着早饭来到公司,我还等到吃完早饭再去问了下。


疲惫的我:「L哥,你看我用这张统计表去输出功能有问题没?」


导师L:「就那么几张表,你造几条数据不就看出来了」


疲惫的我:「我造了几条数据,但是昨天的数据我看今天才过来,昨天忘了记录过程」


导师L:「怎么可能,你怎么造的数据,算了等会儿我看一下」


......


过程就不细讲了,总之,不好受...... 最后问题也定位到了,是导师L当初做测试,把定时任务往后延了1天。好吧,这还有定时任务的事儿?我只能看代码看到一堆数据同步的接口,真的是应征了那句话:【最怕的是:我不知道我'不知道'】。


时间允许的话,着手开工前还是留一份概要设计的存档,别把坑都留给后面的人了
流程图、时序图、架构图等,前期多花时间,少走弯路
心态摆好,我们是来打工挣钱的,交不交朋友是其次而已,关系不恶化怎么着都行

而后,比较顺利地进行到提测阶段,bug真的是多得要命,主要是以下几点:


1、数据权限没加(就是prd文档上写的跟xxx模块保持一致逻辑)


2、数据同步时好时坏,排查后发现是定时任务不稳定,大家都在一个环境提测版本,都在修改功能


3、未做改造的功能点测出历史bug(功能类似,故测试同学也纳入了测试范围)


4、服务被其他版本覆盖


导致最终版本交付时,我个人产生了大概20+个bug。周五下午TL专门找我谈话,约谈此事,大概意思是版本复杂度不高,但bug数过多,对我的版本质量不满意。对此,我也阐述了我的解释,这里我就不细说解释的话,大概从以下几点去阐述


不要丢锅,先把由自己粗心产生的bug讲一下,记得提一下数据,因自身代码质量产生了X个bug,后续会加强编码质量,多自测
也不要背锅,说下由于环境问题导致了X个bug的产生,并给出自己的建议,是否能做环境隔离,一个环境只能容纳服务不冲突的1~2个版本
注意下,TL直接对话的机会并不是很多,可以结合自身入职以来的经历,提一些建议(不用管是否重要)
总之,事事多总结,否则像这种情况下TL突然找咱们约谈,说不出个123,印象分会很差

项目总结


在项目研发中,不一定能得到公司前辈们的"关照",这时候就需要先自己憋一下(注意合理安排时间),怎么着也能憋出点内容,那这这些内容再去咨询,效果会好很多。像我这种被孤立的情况,我也不好说是不是常态,我个人还是认为好同事还是居多的。总之还是与同事搞好关系,或者关系一般遇事能帮忙也行,不要跟任何同事把关系闹僵(哪怕脾气差、技术菜、背后勾心斗角)。


还是那句话,遇事不要慌,先调整好心态(道理都看得懂,但希望大家都能做得到),尽力吃透项目再开始施工,否则返工或者低质量产出不好避免。


多做总结,不甩锅不背锅,不管是项目总结还是转正答辩还是晋升答辩,都能有个有条理有依据的总结出来。这点在职场中至关重要。


作者:snowlover
来源:juejin.cn/post/7347542133610364980
收起阅读 »

低谷期可能是在救你

怎么来定义低谷期? 我觉得真正的低谷期是迷茫,挫败,痛苦,自我怀疑等等,反正一定是比肉体上的痛苦更煎熬! 可能你会觉得暂时性找不到工作,面试受挫,分手等是你的低谷期,实则不然,这大概是一个不敢面对自己的借口。 因为多数人找到工作后,只要能在温饱线上,那么90%...
继续阅读 »

怎么来定义低谷期?


我觉得真正的低谷期是迷茫,挫败,痛苦,自我怀疑等等,反正一定是比肉体上的痛苦更煎熬!


可能你会觉得暂时性找不到工作,面试受挫,分手等是你的低谷期,实则不然,这大概是一个不敢面对自己的借口。


因为多数人找到工作后,只要能在温饱线上,那么90%的人就会心安理得摆烂,和男女朋友复合后,依然是维持原样,不会被爱情去刺激自己成长。


如果用工作和分手这两件事情来描述真正的低谷期,那么我觉得应该是这样描述的:


自己付出了很多,每天都像一条疯狗干,工作和学习的时长维持在18个小时左右,坚持了很久,但是没有收获自己想要的东西,希望还是如此渺茫,于是产生严重的自我怀疑,挫败,深圳绝望!


自己一直在努力,在慢慢成长,目标越来越近,但是自己爱得死去活来的女朋友实在等不了自己成长,自己变强,所以无情的选择离开。


经过上面的描述,成为了毋庸置疑的低谷期。


因为没经过描述之前其实你是没有任何斗志的,目的就是能安心混日子,可以用摆烂来形容,和女朋友在一起,自己也不需要啥成本,她也没有啥诉求,所以算得上是互相将就。


但是经过描述后,实际上你的努力近乎疯狂,对于成功是无比的渴望,但是迟迟没降临到你的身上,而女朋友是在你身上压了筹码的,而你又非常爱她,但是迟迟不能让她压的筹码赚个翻倍,所以离开成了定局。


这下就一目了然了吧。


所以这时候你再去回想一下自己所谓的低谷期,是否真的是低谷期?还是自己矫情?


从上面的场景我们能看到深刻二字,第一个是根本谈不上深刻,而第二个是无比的深刻,如果你经历过,那么你自然能理解!


只有让自己刻骨铭心和痛苦的事情才能让自己成长,其他的基本不能。


就像你比较肥胖,三高找上你,家里人叫你不要再吃垃圾食品,不要喝饮料,但是这时候你还没真正躺在病床上,你基本上不会去听。


但是如果此刻你躺在病床上,插着呼吸管,医生给你说,如果你再不注意饮食,那么你很快就会死掉。你看你还会不会再去吃垃圾食品,喝饮料。


所以说,只有让自己脱一层皮,自己才会意识到问题的所在。


那么低谷期里,也自然会脱一层皮,甚至还会换骨头,那么你觉得这难道不是最佳的成长期吗?


所以一个人能遇上真正的低谷期,其实是一种幸运,应该要感谢这个遭遇。


就像一个朋友,因为一些原因导致自己不能再继续读书,家里为了自己的事情而负债累累,自己承受巨大的压力,想死的心都有了。


但是在这段堪称被恶魔惩罚的时期,他没有一蹶不振,反而置之死地而后生,最后无论是财富还是个人能力,阅历都有很大的提升!


后面和他聊天的时候,他说那是自己最痛苦,最无助的时候,但是自己庆幸没有放弃,才造就了一身钢筋铁骨?


所以你说这个低谷期是不幸的吗?


不是,这算的上是恩赐,因为并不是谁都有这种机会。


所以我们在低谷期的时候,如果能有把它作为翻盘的机会的思想,那么它一定是很难得的机会!


但是如果把它作为上天对自己的惩罚,从而一蹶不振,那么其实是错失一次很好的机会,并且也学让自己越陷越深!


作者:苏格拉的底牌
来源:juejin.cn/post/7349750846900125748
收起阅读 »