或许,找对象真的太难了……
找对象真的太难了,我不由地发出这个感慨
但其实说着也奇怪,明明我每天两点一线,上班了去工位、下班了回宿舍,根本没有其他社交,但我为什么会发出这样的感慨呢?
- 是因为总是在无聊时感到了孤独才希望有个伴,还是看见大家都有伴了才觉得自己孤独?
- 是因为看到了别人功成名就家庭和谐的嫉妒,还是吊儿郎当无所事事地调侃?
- 是因为信息茧房导致我对婚姻产生了偏见而刻意疏远,还是无能狂怒般自卑不敢去尝试?
- ……
如果是针对我个人的话,那应该是自卑了吧。这辈子30多年没什么情感经历,就只有一次相亲后“交往”的经验。那次相亲后异地聊了9个月,中间节假日只有我回去见了3次面,没有矛盾,每天都在线上花个两三个小时也都聊得很开心,但我却总觉得彼此都像个不熟的人,以至于最后“分手”时内心也毫无波澜。
“或许我根本不需要为了找个伴才选择想找对象吧。”我总是这样安慰自己,其实安慰的次数不多,因为我没有经常想。
我每天两点一线的生活很规律,很轻松,最重要的是,我已经非常习惯了。所以从某种程度来讲,“客观上”,我并没有真的想找对象、也没有主动去尝试结交新朋友,“主观上”,现在的社会风向和经济形势,不太利于我尝试告别单身,即便 A 股沪指最近持续性突破十年新高。
光是想,不去做,那可不就是“太难了”。
其实,有那么一瞬间我也想结婚
可怜的是,这并不是基于我个人的想法,而是外界的干扰。我记得我31岁生日那天,凌晨6点过还在睡梦中,外公外婆就打来电话,祝我生日快乐。我很诧异,因为我没想到农忙时节呢,他们还没忙忘了,也因为居然这么早,鸡鸭才刚叫。然后一如既往地说:不要太节约了,吃点好的,照顾好自己……然后,快点找对象,天天瞌睡都睡不好,揪心得很哦。结了婚他们就放心了,不然他们死了都不安心哦。

或许80多岁的老人家觉得,任何事情,只要你想要,那就能发生。我想要天上掉金子,天上就会掉金子;我想要地里喷石油,地里就会喷石油;我想要找对象,自然就有对象……
我倒是习以为常了,只不过那一整天,就没有第二个人祝我生日快乐了。不管是朋友同事,还是父母亲戚,即便是早我一天过生日、而我在生日前一天给她发去生日祝福的堂姐,都没有。
其实我也是习以为常了,可能因为我的生日也是我爷爷的忌日,我总是刻意淡忘它,大部分时候过生日我自己都会忘记,10岁之后就没有任何一次庆祝生日的行为——10岁那年父母要都外出打工,自此再次成为留守儿童。
但今年有那么一瞬间,突然觉得难得只有两个80多岁的老人还记得我生日,一直让他们失望有点于心不忍,更何况,正常来讲,我还能“忤逆”他们多少年呢?
可惜的是,就和那些贩卖焦虑的短视频、营销号一样,总是提出问题、夸大问题、制造矛盾、激化矛盾,但从来不会提供解决方法一样:想结婚了,然后呢?
独身一人在无聊的时候确实是无聊的
最近不知道是上班天天盯着电脑看久了,还是下班游戏玩多了,眼睛特别酸痛,于是我难得的又在下班之后出去逛了逛。
正常的话吃了饭我就玩游戏了,先玩几把NBA 2K,再玩几把英雄联盟手游,再玩几把王者荣耀。
其实曾几何时,我从生理上都厌恶王者荣耀的,因为它把很多中国历史人物文化名人,搞成游戏中乱七八糟的角色,让我无法接受。以至于这么多年来,从同学同事、到堂表兄弟等,都没有机会跟我一起玩。
我也没想到我居然突然之间就接受了,即便这曾经让我生理上讨厌的东西。我记得很清楚,2025年7月2日,我新历生日那天,我下载了王者荣耀,建立了账号,开始游玩,持续十几天有空就一直在玩,一百来把、十几级的账号打到最低等级的王者段位,觉得差不多入门了,想着和老同学、老朋友、老同事们一起玩时,才发现他们都不上线了。或许,随着年龄的增长,这种“年轻时的生理厌恶”都敌不过“无聊时的孤单寂寞”。
所以每次当我一个人出去小道散步闲逛消磨时间时,总会特别在意那些跑步锻炼身体的人、散步话家常的两公婆、坐在摊位小车后面玩手机的摆摊老板……感觉他们都有目的地在做什么,而只有我在漫无目的地走着。
其实这条路我之前走过,至少在我今年生日之前,只不过那个时候,这马路边的行人道,没有这么多杂草、灌木。就像人生路,总是在回忆的时候,才觉得曾经如此宽阔,才懊悔当时未曾踏入。可是,时光一直向前流逝,回忆永远迭代更新。

可能现在生活没有达到预期的我们总是有这样的想法,要是能回到过去就好了。实际上只是想带着现在的记忆回到过去,去弥补一些错过或者错误。似乎真像有多元宇宙,回到过去之后会有新的时间线,补足那些遗憾,每一次的回溯,终究会得到一条完美符合心意的时间线。实际上我觉得,即便我们能回到过去,那也是会失去所有记忆,然后完完整整重复之前做过的事情,又一次的错过或者错误,不会有多条时间线,即便你回去再多次,都只会重复同样的事情,都只是同一条时间线。但只有这一条时间线,其实也就够了。
正因为消极,所以才乐观
其实我一直是希望传播积极乐观心态的,从我以往的文章总能看到有这样的痕迹。但就像那些奢侈品广告一样:你买得起不重要,你买不起才重要。
就像我当年创业板3600多点最高峰买入了很多和创业板强关联基金一样,那时总觉得中国经济一定是蒸蒸日上,最后一路跌倒了1500点,一点点割肉,最后全盘清掉,赔了一些钱,然后不敢再入场。所以我也没赶上或者说是错过了今年大半年的牛市,有点难受。与之相对的,为了求稳买入了大量的债券,却债市正熊,又套在手里,更难受了。
可能这都不是什么大事,毕竟只是对我造成了一些经济损失,并不会影响到我的一如既往平凡普通的物质生活;但是焦虑、担忧、烦闷的心态,却非常影响我的精神状态,严重损坏我本就低迷的精神生活。
我一直有个想法,希望尽量在35岁前能多攒一些钱,这样如果35岁之后某天丢了工作,我就徒步去环游中国。并不是他们那种雄心壮志地环游,什么“朝圣“”啊、“远离浮躁净化心灵”啊。就跟平时一样,大街小巷,散步流浪,随便走走看看,不过变成了走到哪里黑,就到哪里歇。等到钱花光了,人老了走不动,客死他乡,也算得偿所愿了。
如果真的能到这个时候,身后没有拖拽、肩上没有负担,该是多么舒服的境况。
发现了吗,其实我就是这么矛盾,一方面安慰自己钱财乃身外物,不必强求;另一方面又觉得钱财乃必需品,多多益善。原因非常简单,因为我缺这东西,所以看得很重;又因为没本事挣到更多,所以才安慰自己它不重要。
这就是别人说的,看清问题根源比无法解决问题更让人窒息,也就是“无知是福”或者”无知者无畏”的感悟了。
每个人都应该有自己的活法,即便大同小异
正如写代码的人,总是会重复造轮子,偶尔还会乐此不疲。世上的人这么多,大部分的人的都是千篇一律的,事实上,大家都在做的事情,说不定才是对的。大家都重复着读书、工作、结婚、生子、工作、退休、等死的生活,正是因为在和平年代这就是一个非常典型且应该让人轻松愉悦、容易接受的平凡人的人生。
同样功能、完全适配你项目的工具包,一个周下载几百万、上次更新1个月前,一个周下载几十、上次更新5年前,只考虑下载使用的话,你会怎么选呢?
就像正因为他是魔丸才敢高喊“我命由我不由天”,就像有人说对钱不感兴趣;也就像也有人觉得“奋斗用多大劲啊?”就像我以为“忠诚的不绝对就是绝对的不忠诚”只是一个战锤40K的梗而已……这个世界本来就因为科技发展而不断更新,止不住的时代洪流,纷纷扰扰的世界,何必太关注别人关心的事情,兜兜转转可能发现,你特别在意的东西别人根本没放在心上,你漫不经心地言语却刺穿了别人的心脏。所有的一切,在心脏停止跳动之前,其实都无关紧要;而在心脏停止跳动之后,更是毫无意义。
所以我平时有空的时候,也会更新一下我 Github 仓库中几个开源的小项目,虽然没什么技术含量,还借助了很多AI辅助编码,但我在写完测试完成之后的那一刻感觉很舒服,就算之后很久都没再更新、测试,还发现了bug,但那完成时的一瞬间很舒服,就成了我持续不断更新的主观能动性之一。
人总有一死,我一直强调不要太在意他人的眼光,为自己而生活。但如果你根本不知道自己想要过什么样的人生,那么从众并不是什么丢人的行为。 人生短暂,不值得斤斤计较,浪费也是它应该存在的过程片段。
坐在厂门口的女子
我今天出去散步的时候,经过了隔壁厂,恰巧看到一位女士蹲在门口马路牙子上,左手拿着装炸土豆片套着塑料袋的小盒子,右手拿着手机看小说。我在外面溜达了个把小时,回去的时候发现她还蹲着那马路牙子上,可能是同一个位置,只不过只有右手拿着手机继续看着小说。
但我猜测她“可能”并没有一直蹲着那里看小说,因为那装炸土豆片的小纸盒没有在她左手上继续拿着,也没有放在她的身旁……
为什么只是“猜测和可能”呢?谁知道呢,或许她站起来走几步丢到垃圾桶后又蹲回去了,或许只是她吃完了空纸盒子放在旁边被风吹走了;或许她没吃完揉吧揉吧纸盒子随手丢到马路对面去了,又或许甚至可能她变身奥特曼打走了怪兽又变回正常人继续在厂门口看小说了……
如果不是因为间隔这么久,看见她还呆在同一个位置,我可能根本就没在意。就像如果不是出来工作了10年依旧还在原地,我也不必过度“揣摩自己”。
可能因为总是太在意,所以才觉得一切都太难了…… 毕竟“得不到的永远在骚动……”
很难了,一个陌生人有两次遇到的机会。
多数情况下都只有一次机会。换成是我,如果我一开始也是蹲在厂门口的马路牙子上,估计没人会注意到。但我要是一开始就跪在厂门口不停在磕头,说不定就有人会注意到了……
结尾
哈哈,Gotcha!要不是我这几天玩游戏多了眼睛有点酸痛,需要休息一下,我才不会在这里长篇大论无病呻吟呢,都这么久没有更新了是吧,那我玩游戏看视频啥的时可是乐在其中、忘乎所以的,佝偻成一团都还在哈哈大笑呢。
所以,赶紧去做那些让你自己开心的事情吧,享受生活,这才是我们活着的原因之一,其他的事情,fxxk off。
来源:juejin.cn/post/7544259368277852175
当上组长一年里,我保住了俩下属
前言
人类的悲喜并不相通,有人欢喜有人愁,更多的是看热闹。
就在上周,"苟住"群里的一个小伙伴也苟不住了。

在苟友们的"墙裂"要求下,他分享了他的经验,以他的视角看看他是怎么操作的。
1. 组织变动,意外晋升
两年前加入公司,依然是一线搬砖的码农。
干到一年的时候公司空降了一位号称有诸多大厂履历的大佬来带领研发,说是要给公司带来全新的变化,用技术创造价值。
大领导第一件事:抓人事,提效率。
在此背景下,公司不少有能力的研发另谋出处,也许我看起来人畜无害,居然被提拔当了小组长。
2. 领取任务,开启副本
当了半年的小组长,我的领导就叫他小领导吧,给我传达了大领导最新规划:团队需要保持冲劲,而实现的手段就是汰换。
用人话来说就是:
当季度KPI得E的人,让其填写绩效改进目标,若下一个季度再得到E,那么就得走人
我们绩效等级是ABCDE,A是传说中的等级,B是几个人有机会,大部分人是C和D,E是垫底。
而我们组就有两位小伙伴得到了E,分别是小A和小B。
小领导意思是让他们直接走得了,大不了再招人顶上,而我想着毕竟大家共事一场,现在大环境寒气满满,我也是过来人,还想再争取争取。
于是分析了他们的基本资料,他俩特点还比较鲜明。
小A资料:
- 96年,单身无房贷
- 技术栈较广,技术深度一般,比较粗心
- 坚持己见,沟通少,有些时候会按照自己的想法来实现功能
小B资料:
- 98年,热恋有房贷
- 技术基础较薄弱,但胜在比较认真
- 容易犯一些技术理解上的问题
了解了小A和小B的历史与现状后,我分别找他们沟通,主要是统一共识:
- 你是否认可本次绩效评估结果?
- 你是否认可绩效改进的点与风险点(未达成被裁)?
- 你是否还愿意在这家公司苟?
最重要是第三点,开诚布公,若是都不想苟了,那就保持现状,不要浪费大家时间,我也不想做无用功。
对于他们,分别做了提升策略:
对于小A:
- 每次开启需求前都要求其认真阅读文档,不清楚的地方一定要做记录并向相关人确认
- 遇到比较复杂的需求,我也会一起参与其中梳理技术方案
- 需求开发完成后,CR代码看是否与技术方案设计一致,若有出入需要记录下来,后续复盘为什么
- 给足时间,保证充分自测
对于小B:
- 每次需求多给点时间,多出的时间用来学习技术、熟悉技术
- 要求其将每个需求拆分为尽可能小的点,涉及到哪些技术要想清楚、弄明白
- 鼓励他不懂就要问,我也随时给他解答疑难问题,并说出一些原理让他感兴趣的话可以继续深究
- 分配给他一些技术调研类的任务,提升技术兴趣点与成就感
3. 结束?还是是另一个开始?
半年后...
好消息是:小A、小B的考核结果是D,达成了绩效改进的目标。
坏消息是:据说新的一轮考核算法会变化,宗旨是确保团队血液新鲜(每年至少得置换10%的人)。
随缘吧,我尽力了,也许下一个是我呢?

来源:juejin.cn/post/7532334931021824034
真正的乐观,是做好被裁员的准备 | 跳槽决策四步法
引言
进入社会后,除了结婚、买房这类重要的事情外,跳槽、选择工作是我们最重要的决策。
每次跳槽,都决定了未来一段时间你处于的行业、岗位、收入,在一定程度上影响你的生活方式。
可就是如此重要的事情,我过去几次换工作,做的都不是太好。
我或许会每天都刷招聘网站,可就算刷到了意向的职位,也迟迟不敢在软件上点下“发送简历”按钮,可能是怕准备不充分、怕行情不好、怕离开熟悉的环境……结果拖到最后某一刻,被动离开。
最近看了一本书叫《怎样决定大事》,里面提到了一些做决策的方法,我试着把这套理论用在跳槽上,聊聊怎么样做出最清醒的跳槽决策。
核心用十六个字可以概括:看清处境,把握时机,避免直觉,适应局面,下面正文开始。
看清处境
马云说过员工离职就两个原因:钱没到位,心委屈了。
但真正让人下定决心离职的,从来不是这么简单的二选一,而是一连串复杂又难以理清的现实。
- 比如年底一到,领导又说你没达预期,绩效一如既往地一般;
- 办公室政治让你无所适从,干着最多的活,背着最大的锅;
- 甚至公司的方向都让你怀疑未来是否值得继续坚持。
这些都让你有离职的想法,但是很多小事也不是不能忍。工资算不上多吧,但也是符合市场水平的。繁琐的工作干着有点烦, 但起码已经轻车熟路。
如果你也在犹豫和纠结,首先要弄清楚你自己的处境,你需要有「情景意识」,情景意识分为三个层次

第一层,了解已经发生了什么。
这里就是刚刚提到的,比如不涨薪、领导pua、工作对自己没有任何成长,这些是已经发生的事情。
第二层,了解为什么会发生这种情况。
这里你思考导致现状的原因,比如技术水平不足,领导并没有给你涨薪。也有可能是公司所处的行业发展停滞,公司大量裁员,导致你工作越来越累。也有可能是你的领导没有眼光,发现不了你的优秀。
但需要注意的是,你要分析两到三种可能性,不是一种,也不是十种。
为什么不是一种?因为如果你头脑中只有一种解释,一旦判断错了,你的努力可能就毫无意义,甚至走向错误的方向。
比如工作经验比较少的程序员在遇到工作瓶颈时,常常会下意识归因为“我是不是太菜了?”。
毕竟程序员天生有技术思维,认为技术可以解决所有问题,性能问题?优化代码。bug频发,重构核心逻辑。
但你以为的问题,不一定是问题的全部。
比如现实世界有很多种可能:你的领导根本没打算提拔你,无论你多努力;你所在的部门业务边缘化,再怎么出色也没有舞台;公司战略转向AI,传统技术深耕已经不再受重视……
为什么不是十种?因为你如果考虑的原因太多,你的大脑就会陷入“分析瘫痪”,最终你什么决定也做不了。你需要抓大放小,找准核心矛盾,忽略那些无关紧要事情。
理清发生了什么、为什么发生,我们才能看清——未来会发生什么。
第三层,据此预测接下来会发生什么。
预测未来可能发生的情况,有一个反人性的技巧,是主动思考最坏的结果。
举个例子,你的公司因为经营原因,已经经历了两轮大规模裁员了,幸运的是一直没有裁到你,领导也安慰你好几次:“放心,你很重要。”
你该因为自己没被裁而庆幸吗?事实上你必须做好最坏的打算,那就是你会出现在下一轮的裁员名单上。
你需要提前思考对应的策略,比如开始评估外面的机会,更新简历,提前做准备。那么即使最坏的情况出现,你也不会猝不及防、惊慌失措。
未来是有不确定性的,我们往往会回避思考可怕的结果,但这会让自己在最坏的事情发生时,带来更多的伤害。
就像现在AI快速发展,几年内随时都有可能替代绝大部分基础性岗位,甚至高级的程序员也会被替代,那么我们必须做好现有岗位随时被替代的准备。
真正的乐观,是认真思考最坏的结果后,发现自己扛得住。
把握时机
毕业后我在济南工作,由于工资略显寒酸,互联网发展火热,我便有了去北京工作的念头。
念头归念头,回到现实我就怂了。那时候我根本没有工作经验,异地找工作这件事对我也很陌生,我不知道自己能不能找到工作,更不知道面试都会问什么技术问题。
我一想到这些就感觉头脑一片空白,想准备却无从下手。于是,我的选择是靠打游戏麻痹自己,开始拖延。
拖延了差不多半年,最后因为频繁出差,冲动之下选择裸辞去了北京。由于没有充分的准备,也是历经一番波折。
回顾这段经历,因为离职这件事没有明确的截止时间,我陷入了两种极端:要么因为恐惧未知,反复拖延,最后什么也没做;要么因为短期情绪,冲动行动。
决策不只是决定做什么,还有决定什么时候做。
先说说怎么避免冲动,那就是在做出离职决定之前,你需要先问自己一个简单的问题: “我需要现在离职吗?”
如果答案是否定的,就不着急做出决策。
这是因为我们很容易陷入情绪当中。

比如你给领导提的好几个建议都不被采纳,感觉收到了冷落;技术不如你的同事拿到了比你还好的绩效,或者项目突然增加导致频繁加班。
程序员一定都听过“不要裸辞”这个忠告,一开始我认为这是因为离职后你可能会以为没有收入,导致面试的心态越来越不稳。后来我觉着这个忠告最大的作用,就是避免我们陷入情绪当中,一上头选择裸辞。
就像我当时裸辞后去了北京,由于没有任何准备,投了半个多月简历,一共就接到4个面试,绝大部分投递的简历都是已读不回。
你可能会说我技术很强,面试准备的非常充分,那我是不是可以随时选择离开呢?
你的确会有更多的底气,但是招聘是有招聘旺季的,比如所谓的“金三银四、金九银十”,因为正好处于企业全年、半年总结,企业会根据未来的计划进行人力盘点,释放岗位。但过去这两个节点,比如十一月份到来年一月份,那就是企业的招聘淡季,甚至是裁员季,如果你十月份离职,极容易遇见投递的简历大部分都未读未回。
诸葛亮已经万事俱备,那也得等等东风。
但是,等一等不意味着你什么也不做,你需要积极收集和换工作相关的信息。
改简历、刷题就不说了,现在什么行业比较火热?招聘的要求比起几年前有什么变化?未来什么样得企业最有发展前景?如果离职找工作不顺利,财务状况有没有什么影响?
这些都需要大量信息,并且充满不确定性,所以你需要去主动收集和了解。
当然了,你也不能一直准备下去,就像刷算法、刷面试题这件事,准备的越久,就会陷入边际效应递减,你不可能把所有的知识都学会,对吧?
这时候你就需要给自己制定一个时间框架,比如专心准备3个月,这期间不去面试。3个月后无论准备的如何,都必须让自己开始投递简历面试,避免回避和拖延。
避免直觉
你可能已经了解过很多认知陷阱:确认偏误让我们只寻找支持自己观点的信息;可得性启发让我们高估容易想起的事件发生概率;首因效应让我们过度依赖最初信息。
我举几个找工作容易陷入的认知陷阱。
第一个是「投射偏差」,比如把过去跳槽必涨薪的经验,投射到现在和将来,忽视了市场环境的变化。
18年我去北京时,互联网发展依旧火热,大厂扩招、抢人,程序员跳槽涨薪50%、80%都不是什么难事,如果你在大数据、P2P火热的时候进入相关企业,薪资翻倍的例子屡见不鲜。
可后来随着互联网增速放缓,涨薪越来越难,疫情之后各类企业发展不顺,别说涨薪了,如果被裁员被动找工作,平薪、降薪也都是有可能的。
如果你还按老的认知来,发现怎么涨薪总是不如预期,自然是心理落差极大,如果因为这个拒绝了一些各方面都不错的offer,那就太可惜了。
第二个是「短期结果焦虑」,过于关注短期结果成败,忽略了长远目标和发展。
你做足了准备,兴致勃勃的开始投简历,一连投了十几家都没接到面试,好不容易接到几个面试,结果全都在一面就挂了。
也许你的简历有硬伤,也许是没有准备充分,这很正常,查缺补漏,继续前行就好。
但你不能陷入焦虑和自我怀疑:我履历太差了,好公司根本不会看我的简历;我能力太差了,大厂的面试我根本不可能过。
最可怕的情况就是,因为面试不顺利,仓促入职一家并不满意的公司。

第三个是单一维度决策,面对offer选择时,我们有可能陷入单一维度决策,比如是否大厂,薪资是否足够高,这是我自己总结出来的。
假设你这时候已经拿到了好多个offer,你该选择哪家企业入职呢?你可能特别关注薪资情况,你强烈的倾向于最高薪资的那个offer。你特别在乎名气,于是选择市场上名气最大的那个。
事实证明只考虑一个因素肯定不行,薪资最高的那个可能工作时间长还996,时薪并不比别的offer高。你的确入职了名气最大的那个企业,但做的不是核心业务,绩效不行,技术也没有什么成长。
我之前写过一篇文章,里面介绍了一个简单公式。比如在职业发展中,我觉着几个比较重要的是行业前景、公司文化和具体岗位,薪资当然也是我们衡量的一个重要指标,但其他的因素我们只做参考,而不能作为决策的决定因素。
对于选择offer这件事,我们也可以借助这个思路,识别几个你认为最重要的核心因素进行打分,选择总分最高的那一个。
别考虑太多,也不能考虑太少,这样才能做出最佳决策。
适应局面
即使决策已经做出,一切也并没有结束,你需要持续评估和调整,不断适应新的局面。
而我们面对新局面的反应,在很多时候是有点慢的。
这里我不得不提到AI,我谈不上对AI有着多深的见解,但当今AI巨头的模型,都已经具备了“完成小块的复杂代码”的能力。
我看到网上的一个预测,不出两年,就可以训练出一个可以自我迭代、不断尝试的AI编程高手。
高级程序员,将是最早一批开始被替代的。
当然,被替代的不仅是程序员行业,绘画、设计、金融、编辑,都面临着这个局面。
我提到AI,就是想提醒大家,对于处在行业第一线的我们,对于AI的适应能力有多高?
适应能力强的人,已经逐步用AI去完成越来越多的工作。而适应能力差的人,甚至现在遇见问题还是习惯性的打开搜索引擎,一点一点的翻看别人的资料。
我刚毕业时,深钻技术对职业生涯只有好处,没有坏处。但现在的局面是,如果还一股脑的让自己陷入到源码里面,不如用好AI,解放自己。
面对技术变革,就算没有应用,也要强迫自己了解。
最可怕的就是认为一些变化都与自己无关。
说在最后
做重大决策,主要分四步:看清处境,把握时机,避免直觉,适应局面。
这四步并不只用于跳槽,职业转换、城市迁移、关系选择、生活方式改变,都可以依靠这个模型去思考和行动。
你或许觉着这太麻烦了,但想想我们花了多少时间在鸡毛蒜皮的小事上?可能网购一件物品,为了价格货比三家;吃午饭订外卖,在各种美食间反复纠结;早上为了选择穿什么衣服,不断尝试。
把时间浪费在这些上面,却在重要的决策上匆匆决定,岂不是本末倒置吗?
这是东东拿铁的第88篇原创文章,欢迎关注,喜欢请三连。
来源:juejin.cn/post/7538357382453657626
老黄预言成真!全球首个 AI 原生游戏引擎,一句话秒出 GTA 级神作

「【新智元导读】谁曾想,「AI 竟能实时生成」** GTA 级大作。刚刚,谷歌、英伟达等机构联手,震撼发布全球首款 AI 原生 UGC 游戏引擎——Mirage,没有预设关卡,一句话即生游戏,超长十分钟沉浸式体验。」**
全球首款 AI 原生 UGC 游戏引擎诞生了!
今天,谷歌、英伟达、微软等八大机构联手,一同祭出了这款实时 AI 游戏引擎——Mirage。

它不同于传统游戏引擎,而是玩家想象力的「放大器」,任何人可以随心所欲「造」游戏!
如今,团队直接上线了两个超燃的实时演示(试玩版本),一个是 GTA 风格的都市乱斗(Urban Chaos)。
游戏操作延用传统风格,你可以自由走动,移动视角并且奔跑。

另一个是极限竞速:地平线风格的海岸漂移(Coastal drift)。

AI 原生 UGC 游戏的神奇之处就在于,你可以任意改变游戏内容。
比如在 GTA 风格的都市乱斗中,可以通过 Enter 键调出「世界控制」面板后,选择「阴云密布大雨降至」。
游戏画面马上就从晴空万里变成了黑云压城。

比如,在上面的海岸漂移中,通过 Enter 键调出「世界控制」面板后,可以输入「进入沙漠」。

然后游戏画面就会从绿洲直接变成沙漠!简直比《头号玩家》还要一颗赛艇!

老黄曾预言,「用不了十年,我们就能看到游戏中每个像素都是由 AI 实时生成的」。

Mirage 的登场,不仅让这一愿景更近一步,也预示着未来的游戏产业将迎来巨变。

就连 Hassabis 也很看好 Veo 3 生成的视频游戏

「「动嘴」实时体验 GTA 大作」
「10 分钟超长游玩」
传统游戏中,城市布局、任务剧情,一般都是事先设定好的,体验终究有限。
Mirage 彻底打破了这一局限,让玩家在游戏过程中动态创造全新的体验。

AI 大神谢赛宁大赞:太酷了
现在,仅通过自然语言、键盘输入,或是游戏柄,玩家即可请求一条逃生的小象、生成一辆载具,或即时扩展的城市天际线。
举个栗子,来一场倾盆大雨,动动嘴皮子就成了。

再比如,玩超级马里奥时,一句「出现砖块」,Mirage 就会为你实时生成。

可以看到,游戏会立即给出响应,将生成的元素,无缝融合到正在进行的模拟中。
这个 AI 游戏世界不仅仅是可交互的,还能与玩家「共同演化」。

此前,初创公司 Decart 和 Etched 上线的实时神经游戏引擎 Oasis,实现了 20 帧 / 秒的零延迟交互。

这一次,Mirage 的强大能力,直接掀翻了天花板,究竟有多硬核?
· 16 FPS 流畅可玩:在标准清晰度下,享受实时交互体验。
· 动态用户生成内容(UGC):玩家可以用自然语言指令改变世界。
· 更长游戏时间:Mirage 可生成长达数分钟、且视觉效果连贯的交互式游戏体验。
· 云端串流:无需下载,随时随地享受即时跨平台游戏。
· 无限可玩性:每一次游戏,都是独一无二的体验。
· 多模态操控:支持文本、键盘及手柄输入。
从今天起,玩家可以彻底告别千篇一律的预设关卡,在 Mirage 中无限编辑、扩展,甚至从零打造全新的世界。
更令人惊艳的是,Mirage 的画面和操作感,直逼 GTA、Forza 风格的沉浸式体验,远超「我的世界」、「毁灭战士」那样简约化的风格。
它还能支持 5-10 分钟,甚至更长时间的持续游玩,打破了短短几秒的片刻体验。
不论是赛车游戏、角色扮演游戏,还是平台跳跃游戏,Mirage 都能一键生成。
接下来,一起看看 Mirage 如何重塑 UGC 2.0。

「UGC 2.0」
「生成式游戏崛起」
什么是生成式游戏?
就是游戏的未来并非由专家设计师设计,而是完全靠你的想象实时生成、实时游戏。
比如你输入「一辆黄色计程车突然从街角出现,出现在主角右边」。
然后游戏画面中就会实时「生成」一辆描述中的黄色计程车。

再比如输入「一辆灰色轿车从街道右边出现,并停在主角身边」,然后你就会发现游戏画面中「真的出现」一辆灰色轿车。
你甚至可以跳到轿车的车顶。

传统游戏,不论是休闲游戏还是开放世界的 3A 大作,都是预先创作好的。
城市布局、任务剧情都是事先设定好的,玩家的体验最终有限。
Mirage 打破了这一界限,通过自然语言和控制器,玩家可以如同开了「外挂」一般,可以随时随地按照想象扩展游戏。
比如请求一条逃生的小巷、或者生成一辆载具。
MIRAGE 可以生成各种类型的游戏——从竞速游戏到角色扮演游戏再到平台动作游戏。
你可以驾驶未来战机飞行于空旷的末日世界。
这就是 AI 原生 UGC 2.0,在这里,你就是造物主。
在这里,任何人都可以通过简单的文本提示生成属于自己的游戏。
在这里,玩家可以在游戏过程中实时创造、进化并重塑游戏内容。
并且,每一次体验都是独特、动态且无需预先编写脚本的。

「背后技术」
「「世界模型」立大功」
Mirage 的核心是一个实时的交互式「世界模型」,基于 Transformer 和扩散模型完成训练。
该框架整合了多项关键创新,由此能够生成可控、高保真的视频游戏序列。

Mirage 的强大体验,是建立在训练基础之上。
最关键因素,便是从互联网上收集的大规模多样化的游戏数据,提供了足够的广度来捕捉各种游戏机制和风格。
为此,研究团队开发了一款专用的数据记录工具,用于捕捉高质量的人类录制的游戏互动。
这些精心整理的会话,通过细微且高保真的示例丰富了数据集,对于训练模型理解复杂的玩家行为和情境化游戏逻辑至关重要。
然后,收集和记录的数据随后会被输入到一个「垂直训练」流程中——这是一种专注于游戏领域的特定领域训练方法。
这使得模型能够深入内化游戏世界的规则、系统模式和交互动态。
最终,便得到了一个能够生成连贯、真实且灵活的游戏内容的模型,突破了传统预设游戏的限制。
「
」
「「交互式生成」与「实时控制」完美融合」
Mirage 将帧级提示词处理集成至其核心,重新定义了实时交互。
这使得玩家输入的键盘指令和自然语言提示词,都能在游戏过程中被即时解析。

对于玩家来说,通过云游戏实现了随处可玩:
· 动态输入系统:Mirage 以超低延迟处理玩家的输入(主要通过键盘和文本),实现近乎即时的响应。
· 实时输出:视觉更新通过一个全双工通信通道流回浏览器,输入与输出并行处理,从而消除延迟,确保流畅交互。

其底层技术架构是一套定制化的因果 Transformer 模型,并通过以下技术实现了增强。
其中包括,专门的视觉编码器、经过优化的位置编码、专为长时间交互序列而优化的结构。
值得一提的是,Mirage 继承了大模型和扩散模型的优势,支持生成连贯的高质量内容。
这里,研究团队对扩散模型组件采用了先进的蒸馏策略,以同时确保生成速度与内容质量。
玩家可随时通过自然语言重塑游戏环境,触发世界的即时更新。
由 KV 缓存支持的长上下文窗口,能够确保即便世界在实时演变,视觉效果也能保持连贯一致。

「八大顶尖机构联手」
「造出最强 AI 游戏引擎」
Mirage 由一支技术深厚且富有创造力的团队打造,团队成员包括了 AI 研究人员、工程师和设计师。
他们来自谷歌、英伟达、Amazon、SEGA、苹果、微软、卡内基梅隆大学和加州大学圣地亚哥分校。
通过 UGC 2.0,Mirage 致力于推动生成式世界模型的边界——每一次边界的拓展都将颠覆我们的想象力。

同时,生成式玩法不仅仅是一个功能,更是一种全新的媒介。
从报纸、广播到电视、手机,再到 3A 大作和 4K 视频,人类的媒介正在不断进化。
沃顿商学院 CS 教授 Ethan Mollick 实测后表示,Mirage 虽未完全到位,但已取得了进展。


还有网友被 Mirage 实时生成效果彻底惊艳了——这简直像 PS2!

Mirage 指向一个全新的未来,在那里游戏无需下载或者等待设计——它们将被想象、被提示、被生成,并被我们亲身体验。
一切才刚刚开始。
参考资料:
来源:juejin.cn/post/7522421979534835738
聊聊我们公司的AI应用工程师每天都干啥?
过去两年间,随着我们团队落地和升级的AI产品越来越多,团队中逐渐出现了专门负责AI应用的工程师。
时间一长这些AI应用工程师们也分出了个三六九等,甚至有一些AI应用工程师因为思路无法转变,又退回到了普通工程师的岗位,不再负责AI应用。
今天这篇文章,给大家聊聊,AI应用工程师每天都在干点啥? 优秀的AI应用工程师到底优秀在哪里?
AI应用工程师的生态位
AI应用工程师是处在只会大模型API调用和大模型算法工程师之间的一个生态位,目前还没有一个非常完善的岗位职能,不同的企业对于AI应用工程师的要求也有所不同。
我们这边之所以会需要AI应用工程师这样一个岗位,主要原因是我们要做AI产品的落地,和原有产品的AI化升级,在程序实现时会需要大量的大模型能力和一些特定的AI应用落地方案。
这时,团队中就需要有人对大模型的各项落地方案有所了解,能够配合产品在合适的节点设计合适的方案进行升级,负责将大模型能力转化为实际可用的产品功能
所以AI应用工程师不能只会简单的API调用,同时也不需要去了解太多的大模型底层技术,甚至Python基础都可以不需要(虽然会一些python有好处,但是这不是决定性的能力)。
目前在我们的团队中,他们主要负责:
- 利用代码实现Agent或者workflow的流程
- 实现具体的AI应用落地方案,联网搜索、RAG、微调等
- 与提示词工程师对接完成大模型能力的接入
- 与原有的程序进行结合
- 极简版的流程验证逻辑实现
- 复杂RPA + AI的落地
在其他企业的团队中,对AI应用工程师的要求还有:
- AI工程系统设计,配合产品制定Agent流程
- 编写项目中使用到的提示词
- coze、dify的搭建
- 等等
虽然说像搭建coze、写提示词这类工作,我并不认为这些工作应该是AI应用工程师工作,但是当下这个岗位的职责还没有固定,所以接下来我还是会把这些内容写进应具备的技能中。
大家全都了解一下,以备不时之需。
AI应用工程师需要具备的技能
要完成以上这些职责,AI应用工程师自然也要具备相应的技能, 但是对于Python基础、Pytorch框架、机器学习与深度学习的技术点,要不要进行学习呢?
不鼓励花大量时间学习,但是建议了解
不鼓励学习是因为:你学了你未必也用的到,我带团队在AI领域,TOC、TOB、新产品、新功能上线了不少了,没有用到python语言,并且也没看到python的必须性。当然了,你的团队主要语言是python,那你肯定是应该学的。
建议了解是因为:你毕竟是在做AI相关的内容,有相应的基础知识和技能点,的确在某些时候能带给你一些清晰的思路或者节约一些时间。
反过来再考虑你自己:深入Python基础、Pytorch框架、机器学习与深度学习这些技术点,你想做什么? 当你去深入学习这些的时候,你的目标不应该是AI应用工程师,而是人工智能算法相关的岗位。
学会了你就会不甘心,想去做更高级的岗位,但是那些岗位对学历、经验的要求不是一个半路出家自学能胜任的。
学不会你就是在浪费自己宝贵的生命和本次AI变革中的机会。
所以啊,认准自己的目标,别让自己难做。
那应该掌握的技能是哪些呢? 我们一条一条来说
利用代码实现Agent或者workflow的流程
需要了解Agent和workflow的区别,能够掌握是程序实现Agent和workflow的能力。
简单来说Agent和workflow的区别就是:
- workflow是通过预定义的代码路径协调 LLM 和工具的系统。人类可以在其中的某些节点进行人为的干预。
- Agent是 LLM 动态指导其自身流程和工具使用情况的系统,从而保持对其完成任务的方式的控制。完全有LLM主导,人类无法干预。
在程序上的实现区别:
Agent实际上最核心的代码只有九行, Agent所谓的动态指导其实就是一个while(true)。
async function loop(llm) {
let msg = await userInput();
while (true) {
const { output, tool_calls } = await llm(msg);
if (tool_calls && tool_calls.length > 0) {
msg = await Promise.all(tool_calls.map(tc => handleToolCall(tc)));
} else {
msg = await userInput();
}
}
}
workflow的核心代码流程是提前写好的逻辑流程。
async function main(){
// 流程1:例如上下文处理
const query = await handleContext()
// 流程2:例如RAG
await handleRAG(query)
// 流程3:例如Function call
await handleFC(query)
// 流程4:例如调用API
await handleAPI()
}
实现具体的AI应用落地方案
在流程实现中,AI应用工程师需要把用到的技术点都做好,例如:联网搜索、RAG、微调等
联网搜索:当我们的产品需要用的联网搜索的时候,我们有两个选择:
- 用云端的联网搜索能力,缺点就是收费并且可控性不强,优点是方便省事。
- 自己实现联网搜索能力,优点是可以按照自己的需求指定搜索引擎、检索网站等。缺点就是需要自己编写代码。
RAG:当我们需要用RAG的时候,AI应用工程师应该做的:
- 实现RAG的完整流程
- 告知数据同事,需要怎样的数据,切片、QA、等
- 测试并保证RAG的召回率和准确率
- 对RAG的产出结果负责
微调:当我们需要用到微调的时候,AI应用工程师应该做的:
- 知道要微调什么样的任务,然后协调数据同事去准备相关的数据,并告知准备多少数据量、数据结构是怎样的、内容分布是怎样的
- 拿到数据后选择微调模型、微调平台,进行微调的工作
- 对微调结果进行测评,最终得到满意的结果
- 部署并调用模型
与提示词工程师对接完成大模型能力的接入
这一点不同的企业要求不一样,我们团队是专门培养的提示词工程师,有的团队是需要AI应用工程师来进行提示词的编写和调优
不过无论是不是AI应用工程师来编写提示词,他们都需要了解提示词工程,否则就没办法和提示词工程师进行有效沟通。
AI应用工程师需要与提示词工程师就当前节点提示词的输入、输出的结构和内容进行确定。
AI应用工程师保证输入的准确性,提示词工程师来保证输出的概率。
为什么是概率呢? 众所周知,提示词是不会百分百保证效果的。所以优秀的AI应用工程师在编写程序时会具备这一点的考虑:
例如下面这个例子:
提示词是用来判定当前输入的评论内容是否表达了善意,返回N或者Y。
也就是说这个提示词提示词的输入是评论内容,输出是N或者Y。
请问:AI应用工程师要怎么对输出的Y或者N进行判断?
if(res === 'Y'),这样么?
不,他们写if(res.includes('Y'))。
这里用全等就没有考虑到提示词输出的不确定性,所以有经验的工程师会在这里使用includes
极简版的流程验证逻辑实现
当下的阶段,通常在产品初期设计的流程都不会是最终生成环境的流程,因为在产品处理考虑的一些节点可能不全面,也因为需求会变动。
所以当我们在正式开始编写代码之前,都需要有一个极简版的流程实现,来验证我们的逻辑
有的团队使用coze一类的Agent搭建流程来实现这个验证逻辑, 但是对于一些复杂的流程,coze之类的产品就无能为力了
这时候,就需要AI应用工程师用代码快速实现一个简单流程来验证逻辑。
复杂RPA + AI的落地
随着AI能力的提升,目前最新的思路有RPA + AI来实现近乎全自动的部分工作,这就需要有专门的搭建这套流程的工程师。
这需要了解RPA的能力和AI能力,并且了解如何结合。
这个其实并不应该交给AI应用工程师来做,更适合专门的RPA工程师。
这个看发展吧。
AI工程系统设计,配合产品制定Agent流程
AI工程的系统设计,有些团队会要求AI应用工程师来做。
AI工程的系统设计,也就是应用的Agent或者workflow的设计,这一步是在产品出原型之前,就要设计好。
所以想要设计这部分内容,需要有两个能力:懂业务、懂技术。
这一点还是很难的,能够胜任的AI应用工程师,通常已经不是单纯意义上的工程师了。
给大家补一个当下AI产品落地的流程图:

coze、dify的搭建
coze和dify的搭建,也是部分团队要求的任务,这一点会要求大家按照要求搭建智能体。
这个我这边就不细说了,网上到处都是搭建教程。
结语
AI应用工程师和普通工程师比起来,上下游关系人多了两个提示词工程师、数据人员
提示词工程师需要和AI应用工程师进行沟通,关于提示词的输入、输出。
AI工程师需要了解当前节点的提示词是做什么的,有什么用? 就像了解原型中某个功能节点是做什么的一样。
就是说,AI应用工程师虽然只是做整个产品中的一部分工作,但仍然要了解全景的信息
这也是优秀的工程师优秀的地方,他们不仅能做好自己的工作,还能配合上下游关系人一起,让整个产品实现的更好。
哦对了,最后说一下:
AI应用工程师是一个新的岗位,并没有替代传统工程师,而是在传统工程能力基础上增加了新的维度。
加油!共勉!
☺️你好,我是华洛,如果你对程序员转型AI产品负责人感兴趣,请给我点个赞。
你可以在这里联系我👉http://www.yuque.com/hualuo-fztn…
已入驻公众号【华洛AI转型纪实】,欢迎大家围观,后续会分享大量最近三年来的经验和踩过的坑。
专栏文章
# 从0到1打造企业级AI售前机器人——实战指南三:RAG工程的超级优化
# 从0到1打造企业级AI售前机器人——实战指南二:RAG工程落地之数据处理篇🧐
# 从0到1打造企业级AI售前机器人——实战指南一:根据产品需求和定位进行agent流程设计🧐
来源:juejin.cn/post/7512332419203727371
这样代码命名,总不会被同事蛐蛐了吧
1. 引言
....又好笑,又不耐烦,懒懒的答他道,“谁要你教,不是草头底下一个来回的回字么?”孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……回字有四样写法,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己刚用指甲蘸了酒,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子
针对于同一个代码变量或者函数方法,张三可能认为可以叫 xxx,李四可能摇头说 不不不,得叫 yyyy ,好的命名让人如沐春风,原来是这个意思;坏的代码命名,同事可能会眉头紧锁,然后送你两斤熏鸡骨头让你炖汤
比如隔壁小组新来的一个同事,对字符串命名就用 s,对于布尔值的命名就用 b,然后他的主管说他的变量名起的跟他人一样。如何做到信雅达的命名,让同事不会再背后蛐蛐,我是这样想的。
2. 代码整洁之道
2.1 团队规范
“我在上家公司都是这样命名的,在这里我也要这样命名”
小组里张三给 Service 起的名字叫 UserService 实现类是 UserServiceImpl;小组里李四给 Service 起的名字叫 CustomerService 实现类 CustomerServiceImpl
你跳出来出来说,统统不对,接口需要区分对待 得叫 IUserService 和 ICustomerService
但是组里成员都不习惯往接口类加个 I;或许这就是 E 人编码吧,不能写 I(我承认这个梗有点烂)
双拳难敌四手,亲,这边建议你按照 UserService 和 CustomerService 起名
这只是个简单的例子,还有就是你认为 4 就是 for,2 就是 to,如果小组内的成员表示认可你的想法,那你就尽管大胆的使用,但是小组成员要是没有这一点习惯,建议还是老老实实 for 和 to,毕竟你没有一票否决权
诸如此类的还有 request -> req、response -> resp 等
以下所有的代码命名建议都不能打破团队规范这一条大原则
2.2 统一业务词汇
在各行各业中,基于业务属性,我们都有一些专业术语,对于专业术语的命名往往在设计领域模型的时候已经确定下来,建议有一份业务词汇来规范团队同学命名,或者以数据库字段为准
比如在保险行业中,我们有保费(premium)、保单(policy)、被保人(assured)等,针对于这些业务词汇,务必需要统一。被保人就是 assured 不是 Insured Person
2.2 名副其实
“语义一定要清晰,不然后续接手的人根本看不懂,我的这个函数名是用来对订单进行删除操作,然后进行 MQ 消息推送的,我准备给他起名为 deleteOrderByCustomerIdAndSendMqMessage”
对,函数名很长很清晰,虽然我的屏幕很宽,但是针对于这样的命名,我觉得不可取,函数名和函数一样应该尽量短小,当你的命名极其长的时候你需要考虑简化你的命名,或者 考虑你的函数是否遵循到了单一职责。
bad😭
deleteOrderByCustomerIdAndSendMqMessage(String userId)
good🤭
deleteOrder(String userId)
sendMq()
我们在做阅读理解的时候,需要结合上下文来作答,同样,我们的命名需要让下一个做阅读理解的人感受到我们的上下文含义。在我们删除订单的时候,假设我们需要用到订单的 ID,那么我们的命名需要是 orderId = 123,而不是 id = 123
bad😭 这个 id 指代的是什么,订单ID 还是用户 ID
id = 123
good🤭
deleteOrder(String userId)
orderId = 123
人靠衣装马靠鞍,变量类型需“平安”,我们在起名的时候需要对的起自己的名字
bad😭 tm的喵,我以为是个 list
String idList = "1,2,3"
good🤭
List<String> idList = ImmutabList.of("1", "2", "3")
默认我的同事的英文水平只有四级,我们变量命名的时候,尽量取一些大众化的词汇,可以四级词汇,切莫六级词汇
bad😭
actiivityOrchestrater
good🤭 活动策划人
actiivityPlanner
普通函数、方法命名以动词开头
bad😭
messageSend
good🤭
sendMessage
减少介词链接,考虑使用 形容词+名词
productListForSpecialOffer -> specialOfferProductList
productListForNewArrival -> newArrivalProductList
productListFromHenan -> henanProductList
productListWithGiftBox -> withGiftBoxProductList \ giftBoxedProductList
productListWithoutGiftBox -> withoutGiftBoxProductList \ noGiftBoxProductList \ unGiftBoxedProductList
消除无意义的前后缀单词: userInfo、userData,info 和 data 的含义过于宽泛,没有实质性意义所以我们可以不用写。或者诸如在 UserService 类中,我们可以可以尝试将 selectUserList 更换为 selectList,因为我们调用的时候,上下文一定是 userService.selectList,阅读者是可以感受到我们的语义的
userInfo -> user
userService.selectUserList -> userService.selectList
做有意义的方法名的区分:在我刚入职的时候,有一个 OrderService 中,存在 4个方法,enableOrder、enableOrderV2、enableOrderV3、enableOrderV4,我问组里的同事,有什么区别,他们告诉我,现在各个外部服务用的不同,不知道有啥区别。所以为了避免给类似我这样的菜鸟产生歧义,建议在方法起名的时候做好区分,以免埋坑
3. 常见开发词汇

来源:juejin.cn/post/7449083760618684467
理想正式官宣开源!杀疯了!
最近,新能源汽车制造商「理想汽车」面向业界搞了一个大动作,相信不少同学也看到了,那就是:
正式宣布开源「理想星环OS」操作系统,并且欢迎各位开发者参与验证开源组件的功能和性能。
作为一名开发者和理想车主,说实话第一眼看到这个信息时还是挺意外的,万万没想到,如今汽车制造商也开始玩开源这一套了。

「理想星环OS」是理想汽车历时3年所研发的汽车操作系统,在车辆中担任“中央指挥官”这一角色,向下管理车辆硬件,向上支撑应用软件。

具体来说,「理想星环OS」包含如下四个组成部分,用于高效调度全车资源并确保汽车功能稳定运行。
- 辅助驾驶OS(大脑):用于处理复杂的思维过程,以确保辅助驾驶又快又好地工作。
- 智能车控OS(小脑):用于控制车辆“肢体”,快速执行各种车辆基础控制命令。
- 通信中间件(神经系统):负责车内各个模块(如刹车、屏幕、雷达)间的高效可靠通信。
- 信息安全系统(免疫系统):负责数据加密保护以及身份认证和权限管控等信息安全的保障。

早在今年3月份的时候,理想汽车CEO李想就曾在2025中关村论坛年会上宣布过,理想汽车自研整车操作系统 ——“理想星环OS”将会开源,而这一承诺终于在最近开始逐步向外兑现。

按照理想官方发布的开源计划时间轴来看,「理想星环OS」的开源将会分为三个阶段来逐步落地。
- 第一阶段主要是开源星环OS 0.1.0版本,包含安全实时RTOS以及通信总线Lite。
- 第二阶段开源星环OS 1.0.0版本,包含完整的智能车控系统以及智能驾驶系统基础能力,时间节点为今年的6月30号左右。
- 第三阶段开源则将会包括完整的智能驾驶系统以及虚拟化引擎,时间节点定在了2025年的7月后。

并且理想承诺,星环OS将会采用宽松型的Apache License,既不会通过开源来收取费用,也不会干涉代码的使用方式,更不会控制使用者的数据。
按照官方的说法,第一阶段的开源目前已经正式兑现,代码已经托管于国内的Gitee平台之上。
出于好奇,我也特地去Gitee平台上搜了一下。
果然,理想汽车已经在Gitee平台上创建了一个名为「HaloOS」的开源组织,里面包含了一阶段开源相关的多个代码仓库和文档仓库。

具体来看,目前的开源代码主要是 智能车控OS(VCOS) 和 通信总线lite(VBSlite) 两大部分,并且其开源仓库划分得非常细,文档是文档,代码是代码,配置是配置,示例是示例。

文档仓库我们以智能车控OS(VCOS)文档为例,其专门搞了一个文档仓库和详细文档说明,并且附有详细的快速跳转链接,大家可以感受一下这个文档仓库的组织风格,还是非常便于开发者使用的。

docs
├── OVERVIEW.md # 项目概述
├── README.md # 文档结构简介(即本文)
├── _static/image # 文档中用到的图片资源
├── api_reference # API参考文档
├── configuration_reference # 配置项参考文档
├── key_technical # 关键技术说明
├── porting # 芯片移植文档
├── quick_start # 快速入门指南
└── user_manual # 开发者手册与详细说明
├── components # 功能组件使用说明
├── kernel # 内核模块文档
└── studio # Studio集成开发环境相关文档
而代码仓库这一块,我们以通信总线lite(VBSlite)工程核心组件之一的MVBS代码仓库为例,仓库说明里给出了详细的代码架构组织,大家也可以感受一下。
mvbs
├── README.md # 这个是MVBS仓库的readme
├── build.mk # 用于构建的makefile文件
├── CMakeLists.txt # cmake编译脚本
├── posix_aux # 为linux和windows平台提供扩展支持库
├── include
│ ├── mcdr # 序列化接口
│ ├── mvbs # MVBS头文件集合
│ │ ├── adapter # 适配层头文件
│ │ ├── core # MVBS内部核心的实体定义和操作
│ │ ├── diag # 诊断相关的头文件
│ │ ├── rte # RTE接口文件
│ │ ├── rtps # RTPS协议元素定义文件
│ │ ├── sections # 用于支持内存layout
│ │ └── utils # 常用的工具文件
│ └── rpc # RPC头文件
└── src
├── adapter # 适配层实现
│ ├── auto # 基于VCOS 适配层的参考实现
│ └── posix # 基于POSIX提供的适配层实现
├── core
│ ├── diag # 诊断工具的实现
│ ├── discovery # 实体发现协议的实现
│ ├── entities # MVBS内部实体的实现
│ ├── include # 提供给MVBS内部的头文件
│ ├── messages # 报文组装的实现
│ ├── mvbs # MVBS内部接口层的实现
│ ├── netio # 网络接口的封装实现
│ ├── qos # E2E和WLP的实现
│ ├── storages # CacheChange和History的实现
│ ├── transport # Transport的实现
│ └── utils # 常用工具的实现
├── mcdr # 序列化库的实现
├── rpc # RPC的实现
└── rte # RTE接口的实现
再看一下具体代码,函数和代码组织都比较宽松,是我个人比较喜欢的风格,另外关键步骤或关键字段设有代码注释,阅读起来也便于理解。

并且仓库里还给出了非常详细的快速入门开发者手册,内容我看了一下,内容甚至从安装 git-repo 工具开始,确实给得非常详细。

追了其中几个比较核心的代码仓库后我们会发现,这几个核心项目源码都是基于C语言来实现的,这也再次说明了 C 语言在某些关键系统中不可撼动的核心地位。

大家感兴趣的话也可以上去学习学习相关的代码,研究通了以后想进新能源智能车企做核心系统研发那不就是分分钟的事情了。

众所周知,这两年新能源智能汽车领域的竞争也进入到白热化阶段了,各家新能源车企都在不断地进行产品优化和技术摸高,这个趋势在未来很长一段时间内想必还会继续保持。
按照理想官方的说法,此次开源的主要目的是促进行业合作,旨在破解行业“重复造轮子”的困局,同时通过生态的共建来实现车企之间、车企与其他厂商之间的互利共赢,最终普惠到每个用户。
当然不管他们怎么去说,作为一名开发者我们都清晰地知道,开源的背后其实也是生态的建设和博弈,说实话这一步,理想在新能源车企阵营里走得还是非常超前的。
最近这两年,我自己一直都挺关注新能源汽车市场的,线下也试驾和体验过诸多品牌的新能源汽车产品,也切实感受到了这几年技术和产品的飞速迭代。希望国产智能新能源汽车能持续崛起,为用户带来更多技术普惠和感动人心的好产品。
注:本文在GitHub开源仓库「编程之路」 github.com/rd2coding/R… 中已经收录,里面有我整理的6大编程方向(岗位)的自学路线+知识点大梳理、面试考点、我的简历、几本硬核pdf笔记,以及程序员生活和感悟,欢迎star。
来源:juejin.cn/post/7503810377554984998
云计算大佬揭秘AI如何改变程序员未来,这些技能将成关键
近日,亚马逊云科技副总裁兼首席布道师Jeff Barr受邀来到上海,与当地开发者社区进行了深入交流。在这场以“AI驱动的开发新模式”为主题的分享中,他基于多年来对开发者生态的观察和实践,详细阐述了生成式AI正在如何重塑软件开发的各个环节。
Jeff Barr在云计算和开发者工具领域拥有丰富经验,他的见解往往能够准确反映技术发展的趋势。此次分享中,他不仅展示了当前AI编程工具的最新进展,更为在场开发者描绘了一幅清晰的职业发展路线图。

AI正在改变开发者的工作方式
在Jeff Barr看来,AI驱动的开发模式已经从概念走向实践。他提到,现在的AI编程助手能够理解开发者的自然语言描述,并将其转化为可工作的代码。这种转变不仅提升了代码编写的效率,更改变了开发者与计算机交流的基本方式。
传统的软件开发需要开发者掌握特定的编程语言和框架,然后将业务需求转化为精确的代码逻辑。而随着大语言模型在代码生成方面的进步,开发者现在可以用更接近人类思维的方式表达意图,让AI助手处理具体的实现细节。
这种变化并不意味着程序员将被取代。相反,Jeff Barr强调,程序员的重点将从具体的语法和API记忆,转向更高层次的问题分析、架构设计和系统优化。能够清晰定义问题、评估AI生成代码质量、进行系统级思考的程序员将更具价值。

全面提升开发效率与质量
在实际开发过程中,AI助手正在多个环节发挥作用。从代码补全、错误检测到测试用例生成,AI工具能够显著减少开发者的重复性工作。Jeff Barr展示的数据表明,使用AI助手的开发者在完成常规任务时效率提升了30%到50%。
更值得注意的是,AI在代码优化和重构方面也展现出强大能力。它能够分析现有代码库,识别潜在的性能瓶颈和安全漏洞,并提出改进建议。这种能力使得经验相对较少的开发者也能写出高质量的代码。
在团队协作方面,AI工具可以帮助新成员快速理解项目架构和代码规范,缩短上手时间。同时,它们还能协助进行代码审查,确保团队保持一致的编码标准。
开发者需要培养的新能力
面对AI带来的变革,开发者需要主动调整自己的技能组合。Jeff Barr建议开发者重点培养以下几个方面的能力。
首先,问题分析和拆解能力在今天变得更为重要。由于AI擅长处理明确定义的任务,开发者需要学会将复杂问题分解为AI可以理解和处理的子任务。这种能力决定了开发者能否充分利用AI工具的潜力。
虽然现在的AI工具对自然语言的理解越来越强,但能够编写清晰、具体的提示词仍然可以显著提升输出结果的质量。因此,提示工程也成为必备技能。
同时,学会读懂代码,并与AI、客户进行有效沟通的能力也尤为重要。

系统设计和架构能力的重要性进一步提升。当基础的编码任务可以由AI辅助完成时,开发者的价值将更多体现在对整体系统的把握上,包括技术选型、模块划分、接口设计等关键决策。
展望未来,Jeff Barr认为AI对软件开发的影响还将持续深化。他预测,在不久的将来,AI助手将能够理解更复杂的业务需求,并参与从需求分析到部署运维的全流程。
另一个重要趋势是个性化AI开发助手的出现。随着模型训练技术的进步,开发者将能够根据自己的编码风格和项目特点定制专属的AI助手,从而获得更加精准有效的协助。
同时,低代码/无代码平台与AI技术的结合也将打开新的可能性。业务专家将能够更直接地将自己的想法转化为可运行的应用程序,而开发者则可以专注于更复杂的技术挑战。
基于Jeff Barr的分享,可以预见的是,在这个快速变化的时代,拥抱AI、学习与AI协作将成为开发者的核心竞争力。
正如Jeff Barr所说,最成功的开发者不是那些抗拒变化的人,而是那些能够预见变化、适应变化并引领变化的人。在AI重塑软件开发的新时代,这一洞察显得尤为珍贵。
来源:juejin.cn/post/7564607094554050603
入职三年半,涨薪三次,依旧没能逃过裁员
随笔闲聊
今天是在公司的最后一天,工作已基本交接完毕,下午闲来无事,随笔写写。
2019 年毕业后进入工作,幸遇良师,进步飞速,仅用两年时间就开始担任起前端小组长的角色。
后来为了更好的发展,2021 年跳槽来到新东家。
那会刚经历疫情,大家对未来依旧充满期待,叠加新东家刚上市,股价涨势正酣,于是开出颇为吸引的薪资。
入职之后,对公司的文化理念、领导的做事风格都十分认同,不管做什么事情都能得到多方面的支持。在实习期结束后,由于表现突出,迎来第一次涨薪。
半年后,前端组长跳槽去了更好的公司,我逐渐接手前端组长的工作。在此期间,职级成功晋升,迎来第二次涨薪。
慢慢时间来到 2022 年,疫情的影响加剧,期间房价大幅下跌,公司股价遭遇滑铁卢。
翻翻那段时间大老板的周报,提到最多的词就是改革转型和降本增效,紧随其后的是部门裁员潮的开始。
这个状态一直维持到了 2024 年,今年初我还跟家人开玩笑说,这次真要裁到我了,要不然没人能动了。年后果不其然,领导找我谈话。
结果谈完没想到却是加薪......亲身经历了一把年会不要停......
加薪幅度虽说不大,但是在公司连年亏损的情况下加薪,心里还是挺感激的。
......
今年总体感受就是业务需求不多,所做的业务大都是对原有系统的修修补补。大环境见不到好转,公司开展业务困难,我们做技术的也只能反复优化代码,做一些技术需求。
刚听到裁员通知的时候,心里还是有一丝窃喜的。一是公司给的赔偿方案非常可观,二是自己也打算换一个行业方向重新开始。
窃喜过后也有一些担忧,担忧现在的就业环境,担忧未来的一些不确定性,喜忧参半吧。
接下来的打算
先好好调整状态,健健身,旅旅游,然后对这几年的工作好好做一个复盘。
剩下的时间打算做一些一直在计划中的:
- 好好学习剪辑视频,买的相机在家吃灰好几年,是时候让它出去见见世面了
- 将之前做的情绪量化交易系统整理成文字分享开源出来,分享给更多需要的朋友
- 对前端体系系统性的梳理一遍
- ......
最后
暂时就这些吧,今天是在公司的 last day,中午和领导们一起吃了个便饭,聊了很多公司的近况,更加感受到公司最近几年的不易。
最后,祝愿老东家越来越好,兄弟们有缘再见!
来源:juejin.cn/post/7429626822868336649
破防了!传统 Java 开发已过时,新赛道技能速看!
引言
在这个科技飞速发展、日新月异的时代,人工智能(AI)无疑是最耀眼的那颗星,正以排山倒海之势席卷整个软件开发领域。身为企业级开发领域的中流砥柱,Java 工程师们如今正站在命运的十字路口,面临着前所未有的机遇与挑战。
曾几何时,Java 凭借其 “一次编写,到处运行” 的卓越特性,在电商、金融、政务等诸多关键领域,构建起了坚如磐石、规模庞大的应用生态。从支撑起双十一期间万亿级交易量的电商后台,到确保金融数据安全、高效流转的核心系统,Java 以其无与伦比的稳定性与可扩展性,成为了大型项目开发的不二之选。然而,随着技术生态的持续演进,新技术如雨后春笋般不断涌现,Java 工程师们原有的技能体系,正遭受着前所未有的冲击与考验。
在这个科技飞速发展、日新月异的时代,人工智能(AI)无疑是最耀眼的那颗星,正以排山倒海之势席卷整个软件开发领域。身为企业级开发领域的中流砥柱,Java 工程师们如今正站在命运的十字路口,面临着前所未有的机遇与挑战。
曾几何时,Java 凭借其 “一次编写,到处运行” 的卓越特性,在电商、金融、政务等诸多关键领域,构建起了坚如磐石、规模庞大的应用生态。从支撑起双十一期间万亿级交易量的电商后台,到确保金融数据安全、高效流转的核心系统,Java 以其无与伦比的稳定性与可扩展性,成为了大型项目开发的不二之选。然而,随着技术生态的持续演进,新技术如雨后春笋般不断涌现,Java 工程师们原有的技能体系,正遭受着前所未有的冲击与考验。
一、危机四伏:Java 工程师的严峻现状
(一)业务需求智能化,传统技能捉襟见肘
在过去,Java 开发主要聚焦于业务逻辑的实现、系统架构的搭建以及性能的优化。但今时不同往日,如今的用户对软件系统的要求,早已从单纯的 “能用就行”,转变为追求极致的 “好用” 体验。就拿电商行业来说,用户不再满足于仅仅浏览商品,他们期待平台能够根据自己的浏览历史、购买行为,精准推送契合个人喜好的商品;而在金融领域,企业迫切需要能够实时分析海量交易数据,快速、精准地识别异常行为与潜在风险的智能系统。这些智能化的业务需求,其复杂程度与技术难度,已经远远超出了传统 Java 技术栈所能企及的范围。
在过去,Java 开发主要聚焦于业务逻辑的实现、系统架构的搭建以及性能的优化。但今时不同往日,如今的用户对软件系统的要求,早已从单纯的 “能用就行”,转变为追求极致的 “好用” 体验。就拿电商行业来说,用户不再满足于仅仅浏览商品,他们期待平台能够根据自己的浏览历史、购买行为,精准推送契合个人喜好的商品;而在金融领域,企业迫切需要能够实时分析海量交易数据,快速、精准地识别异常行为与潜在风险的智能系统。这些智能化的业务需求,其复杂程度与技术难度,已经远远超出了传统 Java 技术栈所能企及的范围。
(二)技术生态多元化,竞争压力与日俱增
当下的技术人才市场,呈现出一片百花齐放的繁荣景象。新兴技术人才如潮水般涌入,他们不仅熟练掌握 Java 开发技能,还对大数据处理、云计算、自动化运维等前沿技术了如指掌。据某权威招聘平台发布的数据显示,那些同时具备 Java 与数据分析能力的岗位,其薪资水平相较于纯 Java 岗位,足足高出了 30% - 50%。这一数据清晰地表明,在激烈的人才竞争中,如果 Java 工程师不及时拓展自己的技能边界,提升综合竞争力,那么在技术人才市场中,他们的立足之地将会越来越小,逐渐被时代的浪潮所淹没。
当下的技术人才市场,呈现出一片百花齐放的繁荣景象。新兴技术人才如潮水般涌入,他们不仅熟练掌握 Java 开发技能,还对大数据处理、云计算、自动化运维等前沿技术了如指掌。据某权威招聘平台发布的数据显示,那些同时具备 Java 与数据分析能力的岗位,其薪资水平相较于纯 Java 岗位,足足高出了 30% - 50%。这一数据清晰地表明,在激烈的人才竞争中,如果 Java 工程师不及时拓展自己的技能边界,提升综合竞争力,那么在技术人才市场中,他们的立足之地将会越来越小,逐渐被时代的浪潮所淹没。
(三)开发模式敏捷化,传统方式难以为继
随着敏捷开发、DevOps 等先进理念的广泛普及,企业对工程师的能力要求也发生了翻天覆地的变化。如今,企业更加青睐那些具备全栈开发能力,能够快速响应市场变化,实现产品快速迭代的复合型人才。在传统的 Java 开发模式下,工程师往往专注于单一模块的开发,这种工作方式在如今快速变化的市场环境下,显得过于僵化和低效,难以满足企业的实际需求。
随着敏捷开发、DevOps 等先进理念的广泛普及,企业对工程师的能力要求也发生了翻天覆地的变化。如今,企业更加青睐那些具备全栈开发能力,能够快速响应市场变化,实现产品快速迭代的复合型人才。在传统的 Java 开发模式下,工程师往往专注于单一模块的开发,这种工作方式在如今快速变化的市场环境下,显得过于僵化和低效,难以满足企业的实际需求。
二、破局之道:转型所需的关键技能
面对来势汹汹的技术变革浪潮,Java 工程师们唯有主动出击,积极拓展自己的技能边界,构建起一个多元化、多层次的技术能力矩阵,才能在这场激烈的竞争中立于不败之地。而其中的核心技能,就包括熟练掌握 Python 等数据处理语言、深入钻研机器学习与深度学习算法,并将这些新兴技术与 Java 开发进行有机融合。同时,Spring AI 的出现,也为Java工程师转型提供了新的助力。
面对来势汹汹的技术变革浪潮,Java 工程师们唯有主动出击,积极拓展自己的技能边界,构建起一个多元化、多层次的技术能力矩阵,才能在这场激烈的竞争中立于不败之地。而其中的核心技能,就包括熟练掌握 Python 等数据处理语言、深入钻研机器学习与深度学习算法,并将这些新兴技术与 Java 开发进行有机融合。同时,Spring AI 的出现,也为Java工程师转型提供了新的助力。
(一)Python:数据处理的神兵利器
Python,凭借其简洁优雅的语法、丰富强大的库以及蓬勃发展的生态系统,已然成为了数据处理与科学计算领域的首选语言。对于 Java 工程师而言,学习 Python 可以从基础语法入手,逐步深入,掌握其核心的数据处理库。
- Python 基础语法:简洁而强大 Python 采用独特的缩进方式来表示代码块,变量类型无需显式声明,系统会自动进行动态推断,这一特性极大地简化了开发流程。以下通过几个简单的示例,让大家感受一下 Python 基础语法的魅力:
# 定义变量
a = 10
b = 3.14
c = "Hello, Python"
# 条件判断
if a > 5:
print("a大于5")
# 循环结构
for i in range(5):
print(i)
# 函数定义
def add(x, y):
return x + y
- 核心数据处理库:助力数据挖掘
- NumPy:高性能数值计算的引擎 NumPy 提供了高性能的多维数组对象以及丰富的数学函数,是进行数值计算的得力助手。例如,使用 NumPy 计算数组均值,只需简单几行代码:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr)
print("数组均值:", mean_value)
- **Pandas:数据处理与分析的神器**
Python,凭借其简洁优雅的语法、丰富强大的库以及蓬勃发展的生态系统,已然成为了数据处理与科学计算领域的首选语言。对于 Java 工程师而言,学习 Python 可以从基础语法入手,逐步深入,掌握其核心的数据处理库。
- Python 基础语法:简洁而强大 Python 采用独特的缩进方式来表示代码块,变量类型无需显式声明,系统会自动进行动态推断,这一特性极大地简化了开发流程。以下通过几个简单的示例,让大家感受一下 Python 基础语法的魅力:
# 定义变量
a = 10
b = 3.14
c = "Hello, Python"
# 条件判断
if a > 5:
print("a大于5")
# 循环结构
for i in range(5):
print(i)
# 函数定义
def add(x, y):
return x + y
- 核心数据处理库:助力数据挖掘
- NumPy:高性能数值计算的引擎 NumPy 提供了高性能的多维数组对象以及丰富的数学函数,是进行数值计算的得力助手。例如,使用 NumPy 计算数组均值,只需简单几行代码:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr)
print("数组均值:", mean_value)
- **Pandas:数据处理与分析的神器**
Pandas 主要用于数据的读取、清洗与分析,功能十分强大。以下代码演示了如何使用 Pandas 读取 CSV 文件,并对其中的缺失值进行处理:
import pandas as pd
# 读取CSV文件
data = pd.read_csv('data.csv')
# 查看数据前5行
print(data.head())
# 处理缺失值
data = data.fillna(0)
- **Matplotlib:数据可视化的魔法棒**
Matplotlib 能够将枯燥的数据转化为直观、美观的可视化图表,让数据说话。比如,绘制柱状图展示数据分布,代码如下:
import matplotlib.pyplot as plt
x = ['A', 'B', 'C']
y = [10, 20, 15]
plt.bar(x, y)
plt.xlabel('类别')
plt.ylabel('数值')
plt.title('柱状图示例')
plt.show()
(二)机器学习与深度学习:开启智能之门
机器学习与深度学习技术,赋予了计算机从海量数据中自动学习规律、实现精准预测与智能决策的能力。Java 工程师要想在这一领域有所建树,就必须掌握基础算法原理,并通过大量实践,将其应用到实际项目中。
- 机器学习基础:探索数据规律 以监督学习中的线性回归算法为例,它通过建立自变量与因变量之间的线性关系,实现对未知数据的预测。下面使用 Scikit - learn 库,展示如何实现线性回归预测房价:
from sklearn.linear_model import LinearRegression
import numpy as np
# 准备数据
area = np.array([[100], [120], [80], [150]]).reshape(-1, 1)
price = np.array([200, 240, 160, 300])
# 创建模型
model = LinearRegression()
# 训练模型
model.fit(area, price)
# 预测新数据
new_area = np.array([[130]]).reshape(-1, 1)
predicted_price = model.predict(new_area)
print("预测房价:", predicted_price[0])
- 深度学习实践:构建智能模型 深度学习中的神经网络,通过多层神经元的连接,能够学习到数据中复杂的特征表示。以 Keras 库构建全连接神经网络进行手写数字识别为例(假设已有 MNIST 数据集):
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
import numpy as np
# 加载数据
x_train = np.load('x_train.npy')
y_train = np.load('y_train.npy')
x_test = np.load('x_test.npy')
y_test = np.load('y_test.npy')
# 数据预处理
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
# 构建模型
model = Sequential()
model.add(Dense(128, input_dim=x_train.shape[1], activation='relu'))
model.add(Dense(10, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=32)
# 评估模型
loss, accuracy = model.evaluate(x_test, y_test)
print("测试集损失:", loss)
print("测试集准确率:", accuracy)
(三)Spring AI:Java开发者的AI利器
Spring AI是Spring框架在人工智能领域的延伸,旨在帮助开发者更高效地构建和部署AI应用。它无缝集成Spring Boot、Spring Cloud等广泛使用的Spring项目,充分利用Spring生态系统的强大功能。通过Spring原生的依赖管理机制(如Maven/Gradle配置),开发者可以快速引入AI功能模块,避免复杂的环境配置问题。
- 标准化API抽象层 Spring AI提供了一套标准化的API抽象层,将复杂的AI模型操作封装为易于使用的服务接口。以自然语言处理(NLP)为例,Spring AI定义了统一的TextGenerator、TextClassifier接口,开发者无需关心底层模型(如DeepSeek、OpenAI GPT、Google PaLM)的实现细节,只需通过配置文件或注解即可切换模型提供商。这种抽象设计极大降低了AI开发的技术门槛,即使是缺乏机器学习经验的Java开发者,也能通过简单的代码实现智能问答、文本生成等功能。
- 支持多种AI服务 框架支持集成多种AI服务和模型,如DeepSeek、ChatGPT、通义千问等,为开发者提供了丰富的选择。在一个基于Spring Boot的电商系统中,只需添加spring - ai - core依赖,即可快速集成文本分类模型,实现商品评论的情感分析功能。
- 企业级特性保障 针对企业级应用的高可用性、安全性需求,Spring AI内置了一系列关键特性。它支持将AI模型调用纳入Spring事务管理体系,确保数据操作与模型推理的一致性,如在金融风控场景中,带款申请的风险评分计算与数据库记录更新可视为同一事务。同时,集成Spring Security框架,支持OAuth2、JWT等认证机制,保障AI服务的访问安全,例如在医疗影像分析系统中,可通过权限控制确保只有授权医生才能调用图像识别模型。此外,Spring AI还与Micrometer、Spring Boot Actuator集成,提供模型调用频率、延迟、错误率等监控指标,方便开发者通过Prometheus、Grafana等工具构建全链路监控体系。
三、实战演练:Java 与 Python 协同开发及Spring AI的应用
当 Java 工程师掌握了上述新技能后,接下来的关键任务,就是将这些技能巧妙地融入到实际开发中,通过技术融合,攻克复杂的业务难题。
(一)架构设计:优势互补
在项目架构设计中,可以采用 Java 负责开发后端服务,借助 Spring Boot、Spring Cloud 等先进框架,高效处理业务逻辑、管理数据库以及提供稳定可靠的 API;同时,利用 Python 进行数据处理与模型训练,将处理结果及时返回给 Java 服务。这种 “Java + Python” 的创新架构模式,既能充分发挥 Java 在企业级开发中的稳定性与可靠性优势,又能借助 Python 强大的数据分析能力,为项目注入智能的活力。而Spring AI则可以在这个架构中,作为连接Java与AI模型的桥梁,进一步简化AI功能的集成与使用。
(二)智能客服系统实战:技术融合的典范
以智能客服系统为例,该系统的核心功能是根据用户输入的问题,快速、准确地返回相应答案。
- Python部分:自然语言处理的魔法 使用NLTK和TextBlob库,可以轻松实现简单的自然语言处理功能。代码如下:
from textblob import TextBlob
def analyze_text(text):
blob = TextBlob(text)
keywords = blob.noun_phrases # 提取关键词
sentiment = blob.sentiment.polarity # 情感分析
return keywords, sentiment
在此基础上,若结合Spring AI,利用其提供的自然语言处理工具,可以进一步提升处理能力。例如,通过Spring AI集成更强大的语言模型,对用户问题进行更精准的理解和分析。
- Java部分:服务搭建与调用的桥梁 利用Spring Boot搭建Web服务,并实现对Python脚本的调用:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@RestController
public class ChatbotController {
@GetMapping("/chat")
public String chat(@RequestParam String question) {
try {
// 执行Python脚本
Process process = Runtime.getRuntime().exec(new String[]{"python", "chatbot.py", question});
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String result = reader.readLine();
reader.close();
process.waitFor();
return result;
} catch (IOException | InterruptedException e) {
e.printStackTrace();
return "处理出错";
}
}
}
若引入Spring AI,Java部分可以通过其标准化接口,更便捷地调用AI模型来处理用户问题。比如,通过配置Spring AI,直接调用OpenAI或其他模型服务,获取智能回答,而无需复杂的Python脚本调用流程。
(三)优化与扩展:持续提升系统性能
在实际应用过程中,还可以通过以下几种方式,对系统进行优化与扩展,进一步提升系统性能与稳定性:
- 模型部署:高效运行的保障 使用TensorFlow Serving、ONNX Runtime等专业工具部署机器学习模型,能够显著提升模型的调用效率,确保系统在高并发场景下的稳定运行。Spring AI同样支持多种模型的部署,并且可以与这些专业工具协同工作,为模型部署提供更全面的解决方案。例如,通过Spring AI的配置,将训练好的模型轻松部署到生产环境中,并利用其提供的监控功能,实时监测模型的运行状态。
- 异步处理:提升响应速度 在Java中运用异步编程(如CompletableFuture)调用Python脚本,有效避免阻塞主线程,大大提高系统的响应速度与用户体验。当结合Spring AI时,Spring的异步处理机制可以与Spring AI的模型调用进行更好的整合。比如,在调用AI模型进行复杂计算时,通过异步方式执行,让用户无需长时间等待,提升系统的交互性。
- 容器化:环境一致性的守护 借助Docker进行容器化部署,能够确保Java与Python运行环境的一致性,方便项目的部署、运维与扩展。Spring AI项目也可以轻松实现容器化部署,通过Docker镜像将Spring AI相关的依赖和配置打包,确保在不同环境中都能稳定运行,为企业级应用的部署提供便利。
四、持续学习:通往成功转型的阶梯
技术转型并非一蹴而就,而是一个漫长而艰辛的过程。Java 工程师们需要始终保持对学习的热情与渴望,通过多种途径不断提升自己的能力。
(一)学习资源推荐:知识的宝库
- 书籍:《Python编程:从入门到实践》《机器学习实战》《深度学习》等经典书籍,是系统学习相关知识的不二之选。同时,对于Spring AI,虽然目前专门的书籍可能较少,但可以通过Spring官方文档以及相关技术博客来深入了解其原理与应用。
- 社区平台:积极参与CSDN、稀土掘金、GitHub等技术社区,与全球开发者交流经验、分享见解,参与开源项目,在实践中不断成长。在这些社区中,也逐渐有关于Spring AI的讨论和开源项目,Java工程师可以从中获取最新的信息和实践经验。
- 书籍:《Python编程:从入门到实践》《机器学习实战》《深度学习》等经典书籍,是系统学习相关知识的不二之选。同时,对于Spring AI,虽然目前专门的书籍可能较少,但可以通过Spring官方文档以及相关技术博客来深入了解其原理与应用。
- 社区平台:积极参与CSDN、稀土掘金、GitHub等技术社区,与全球开发者交流经验、分享见解,参与开源项目,在实践中不断成长。在这些社区中,也逐渐有关于Spring AI的讨论和开源项目,Java工程师可以从中获取最新的信息和实践经验。
(二)实践路径规划:从理论到实践
- 个人项目:从简单的数据处理脚本开始,逐步挑战完整的机器学习项目,如电影推荐系统、异常检测工具等,在实践中积累经验,提升能力。在个人项目中,可以尝试引入Spring AI,探索如何利用它为项目添加智能功能,比如在电影推荐系统中,使用Spring AI集成推荐模型,提高推荐的准确性。
- 企业实践:在日常工作中,主动请缨参与涉及数据分析、算法优化的项目,将所学知识应用到实际工作中,通过解决实际问题,积累宝贵的实战经验。若企业已经采用Spring技术栈,Java工程师可以提议引入Spring AI,对现有业务系统进行智能化改造,在实践中掌握Spring AI的应用技巧。
- 个人项目:从简单的数据处理脚本开始,逐步挑战完整的机器学习项目,如电影推荐系统、异常检测工具等,在实践中积累经验,提升能力。在个人项目中,可以尝试引入Spring AI,探索如何利用它为项目添加智能功能,比如在电影推荐系统中,使用Spring AI集成推荐模型,提高推荐的准确性。
- 企业实践:在日常工作中,主动请缨参与涉及数据分析、算法优化的项目,将所学知识应用到实际工作中,通过解决实际问题,积累宝贵的实战经验。若企业已经采用Spring技术栈,Java工程师可以提议引入Spring AI,对现有业务系统进行智能化改造,在实践中掌握Spring AI的应用技巧。
(三)职业发展方向:广阔的未来
当Java工程师成功掌握了新技术,他们的职业发展道路将变得更加广阔,有多个极具潜力的方向可供选择:
- 全栈工程师:融合前后端开发与数据处理能力,深度参与项目全流程开发,成为企业不可或缺的复合型人才。掌握Spring AI后,全栈工程师可以在项目中更好地实现智能化功能,从前端交互到后端逻辑处理,都能融入AI元素,提升产品的竞争力。
- 数据工程师:专注于数据采集、清洗、分析与建模,为企业的业务决策提供坚实的数据支持,成为企业数据驱动发展的核心力量。
- 架构师:负责设计复杂的系统架构,协调多技术栈的协同工作,确保企业技术战略的顺利实施,引领技术团队不断创新发展。
五、总结
在这场波澜壮阔的技术变革浪潮中,Java工程师的转型之路虽然充满挑战,但同时也蕴含着无限机遇。只要我们能够系统学习Python、机器学习等新兴技术,将其与Java开发进行深度融合,并始终保持持续学习的热情与决心,就一定能够突破职业发展的瓶颈,在数字化转型的浪潮中,开辟出属于自己的一片新天地,为企业和行业的发展创造更大的价值!你准备好踏上这一充满挑战与机遇的转型之旅了吗?
来源:juejin.cn/post/7518304768240287796
破防了!传统 Java 开发已过时,新赛道技能速看!
引言
在这个科技飞速发展、日新月异的时代,人工智能(AI)无疑是最耀眼的那颗星,正以排山倒海之势席卷整个软件开发领域。身为企业级开发领域的中流砥柱,Java 工程师们如今正站在命运的十字路口,面临着前所未有的机遇与挑战。
曾几何时,Java 凭借其 “一次编写,到处运行” 的卓越特性,在电商、金融、政务等诸多关键领域,构建起了坚如磐石、规模庞大的应用生态。从支撑起双十一期间万亿级交易量的电商后台,到确保金融数据安全、高效流转的核心系统,Java 以其无与伦比的稳定性与可扩展性,成为了大型项目开发的不二之选。然而,随着技术生态的持续演进,新技术如雨后春笋般不断涌现,Java 工程师们原有的技能体系,正遭受着前所未有的冲击与考验。
在这个科技飞速发展、日新月异的时代,人工智能(AI)无疑是最耀眼的那颗星,正以排山倒海之势席卷整个软件开发领域。身为企业级开发领域的中流砥柱,Java 工程师们如今正站在命运的十字路口,面临着前所未有的机遇与挑战。
曾几何时,Java 凭借其 “一次编写,到处运行” 的卓越特性,在电商、金融、政务等诸多关键领域,构建起了坚如磐石、规模庞大的应用生态。从支撑起双十一期间万亿级交易量的电商后台,到确保金融数据安全、高效流转的核心系统,Java 以其无与伦比的稳定性与可扩展性,成为了大型项目开发的不二之选。然而,随着技术生态的持续演进,新技术如雨后春笋般不断涌现,Java 工程师们原有的技能体系,正遭受着前所未有的冲击与考验。
一、危机四伏:Java 工程师的严峻现状
(一)业务需求智能化,传统技能捉襟见肘
在过去,Java 开发主要聚焦于业务逻辑的实现、系统架构的搭建以及性能的优化。但今时不同往日,如今的用户对软件系统的要求,早已从单纯的 “能用就行”,转变为追求极致的 “好用” 体验。就拿电商行业来说,用户不再满足于仅仅浏览商品,他们期待平台能够根据自己的浏览历史、购买行为,精准推送契合个人喜好的商品;而在金融领域,企业迫切需要能够实时分析海量交易数据,快速、精准地识别异常行为与潜在风险的智能系统。这些智能化的业务需求,其复杂程度与技术难度,已经远远超出了传统 Java 技术栈所能企及的范围。
在过去,Java 开发主要聚焦于业务逻辑的实现、系统架构的搭建以及性能的优化。但今时不同往日,如今的用户对软件系统的要求,早已从单纯的 “能用就行”,转变为追求极致的 “好用” 体验。就拿电商行业来说,用户不再满足于仅仅浏览商品,他们期待平台能够根据自己的浏览历史、购买行为,精准推送契合个人喜好的商品;而在金融领域,企业迫切需要能够实时分析海量交易数据,快速、精准地识别异常行为与潜在风险的智能系统。这些智能化的业务需求,其复杂程度与技术难度,已经远远超出了传统 Java 技术栈所能企及的范围。
(二)技术生态多元化,竞争压力与日俱增
当下的技术人才市场,呈现出一片百花齐放的繁荣景象。新兴技术人才如潮水般涌入,他们不仅熟练掌握 Java 开发技能,还对大数据处理、云计算、自动化运维等前沿技术了如指掌。据某权威招聘平台发布的数据显示,那些同时具备 Java 与数据分析能力的岗位,其薪资水平相较于纯 Java 岗位,足足高出了 30% - 50%。这一数据清晰地表明,在激烈的人才竞争中,如果 Java 工程师不及时拓展自己的技能边界,提升综合竞争力,那么在技术人才市场中,他们的立足之地将会越来越小,逐渐被时代的浪潮所淹没。
当下的技术人才市场,呈现出一片百花齐放的繁荣景象。新兴技术人才如潮水般涌入,他们不仅熟练掌握 Java 开发技能,还对大数据处理、云计算、自动化运维等前沿技术了如指掌。据某权威招聘平台发布的数据显示,那些同时具备 Java 与数据分析能力的岗位,其薪资水平相较于纯 Java 岗位,足足高出了 30% - 50%。这一数据清晰地表明,在激烈的人才竞争中,如果 Java 工程师不及时拓展自己的技能边界,提升综合竞争力,那么在技术人才市场中,他们的立足之地将会越来越小,逐渐被时代的浪潮所淹没。
(三)开发模式敏捷化,传统方式难以为继
随着敏捷开发、DevOps 等先进理念的广泛普及,企业对工程师的能力要求也发生了翻天覆地的变化。如今,企业更加青睐那些具备全栈开发能力,能够快速响应市场变化,实现产品快速迭代的复合型人才。在传统的 Java 开发模式下,工程师往往专注于单一模块的开发,这种工作方式在如今快速变化的市场环境下,显得过于僵化和低效,难以满足企业的实际需求。
随着敏捷开发、DevOps 等先进理念的广泛普及,企业对工程师的能力要求也发生了翻天覆地的变化。如今,企业更加青睐那些具备全栈开发能力,能够快速响应市场变化,实现产品快速迭代的复合型人才。在传统的 Java 开发模式下,工程师往往专注于单一模块的开发,这种工作方式在如今快速变化的市场环境下,显得过于僵化和低效,难以满足企业的实际需求。
二、破局之道:转型所需的关键技能
面对来势汹汹的技术变革浪潮,Java 工程师们唯有主动出击,积极拓展自己的技能边界,构建起一个多元化、多层次的技术能力矩阵,才能在这场激烈的竞争中立于不败之地。而其中的核心技能,就包括熟练掌握 Python 等数据处理语言、深入钻研机器学习与深度学习算法,并将这些新兴技术与 Java 开发进行有机融合。同时,Spring AI 的出现,也为Java工程师转型提供了新的助力。
面对来势汹汹的技术变革浪潮,Java 工程师们唯有主动出击,积极拓展自己的技能边界,构建起一个多元化、多层次的技术能力矩阵,才能在这场激烈的竞争中立于不败之地。而其中的核心技能,就包括熟练掌握 Python 等数据处理语言、深入钻研机器学习与深度学习算法,并将这些新兴技术与 Java 开发进行有机融合。同时,Spring AI 的出现,也为Java工程师转型提供了新的助力。
(一)Python:数据处理的神兵利器
Python,凭借其简洁优雅的语法、丰富强大的库以及蓬勃发展的生态系统,已然成为了数据处理与科学计算领域的首选语言。对于 Java 工程师而言,学习 Python 可以从基础语法入手,逐步深入,掌握其核心的数据处理库。
- Python 基础语法:简洁而强大 Python 采用独特的缩进方式来表示代码块,变量类型无需显式声明,系统会自动进行动态推断,这一特性极大地简化了开发流程。以下通过几个简单的示例,让大家感受一下 Python 基础语法的魅力:
# 定义变量
a = 10
b = 3.14
c = "Hello, Python"
# 条件判断
if a > 5:
print("a大于5")
# 循环结构
for i in range(5):
print(i)
# 函数定义
def add(x, y):
return x + y
- 核心数据处理库:助力数据挖掘
- NumPy:高性能数值计算的引擎 NumPy 提供了高性能的多维数组对象以及丰富的数学函数,是进行数值计算的得力助手。例如,使用 NumPy 计算数组均值,只需简单几行代码:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr)
print("数组均值:", mean_value)
- **Pandas:数据处理与分析的神器**
Python,凭借其简洁优雅的语法、丰富强大的库以及蓬勃发展的生态系统,已然成为了数据处理与科学计算领域的首选语言。对于 Java 工程师而言,学习 Python 可以从基础语法入手,逐步深入,掌握其核心的数据处理库。
- Python 基础语法:简洁而强大 Python 采用独特的缩进方式来表示代码块,变量类型无需显式声明,系统会自动进行动态推断,这一特性极大地简化了开发流程。以下通过几个简单的示例,让大家感受一下 Python 基础语法的魅力:
# 定义变量
a = 10
b = 3.14
c = "Hello, Python"
# 条件判断
if a > 5:
print("a大于5")
# 循环结构
for i in range(5):
print(i)
# 函数定义
def add(x, y):
return x + y
- 核心数据处理库:助力数据挖掘
- NumPy:高性能数值计算的引擎 NumPy 提供了高性能的多维数组对象以及丰富的数学函数,是进行数值计算的得力助手。例如,使用 NumPy 计算数组均值,只需简单几行代码:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr)
print("数组均值:", mean_value)
- **Pandas:数据处理与分析的神器**
Pandas 主要用于数据的读取、清洗与分析,功能十分强大。以下代码演示了如何使用 Pandas 读取 CSV 文件,并对其中的缺失值进行处理:
import pandas as pd
# 读取CSV文件
data = pd.read_csv('data.csv')
# 查看数据前5行
print(data.head())
# 处理缺失值
data = data.fillna(0)
- **Matplotlib:数据可视化的魔法棒**
Matplotlib 能够将枯燥的数据转化为直观、美观的可视化图表,让数据说话。比如,绘制柱状图展示数据分布,代码如下:
import matplotlib.pyplot as plt
x = ['A', 'B', 'C']
y = [10, 20, 15]
plt.bar(x, y)
plt.xlabel('类别')
plt.ylabel('数值')
plt.title('柱状图示例')
plt.show()
(二)机器学习与深度学习:开启智能之门
机器学习与深度学习技术,赋予了计算机从海量数据中自动学习规律、实现精准预测与智能决策的能力。Java 工程师要想在这一领域有所建树,就必须掌握基础算法原理,并通过大量实践,将其应用到实际项目中。
- 机器学习基础:探索数据规律 以监督学习中的线性回归算法为例,它通过建立自变量与因变量之间的线性关系,实现对未知数据的预测。下面使用 Scikit - learn 库,展示如何实现线性回归预测房价:
from sklearn.linear_model import LinearRegression
import numpy as np
# 准备数据
area = np.array([[100], [120], [80], [150]]).reshape(-1, 1)
price = np.array([200, 240, 160, 300])
# 创建模型
model = LinearRegression()
# 训练模型
model.fit(area, price)
# 预测新数据
new_area = np.array([[130]]).reshape(-1, 1)
predicted_price = model.predict(new_area)
print("预测房价:", predicted_price[0])
- 深度学习实践:构建智能模型 深度学习中的神经网络,通过多层神经元的连接,能够学习到数据中复杂的特征表示。以 Keras 库构建全连接神经网络进行手写数字识别为例(假设已有 MNIST 数据集):
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
import numpy as np
# 加载数据
x_train = np.load('x_train.npy')
y_train = np.load('y_train.npy')
x_test = np.load('x_test.npy')
y_test = np.load('y_test.npy')
# 数据预处理
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
# 构建模型
model = Sequential()
model.add(Dense(128, input_dim=x_train.shape[1], activation='relu'))
model.add(Dense(10, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=32)
# 评估模型
loss, accuracy = model.evaluate(x_test, y_test)
print("测试集损失:", loss)
print("测试集准确率:", accuracy)
(三)Spring AI:Java开发者的AI利器
Spring AI是Spring框架在人工智能领域的延伸,旨在帮助开发者更高效地构建和部署AI应用。它无缝集成Spring Boot、Spring Cloud等广泛使用的Spring项目,充分利用Spring生态系统的强大功能。通过Spring原生的依赖管理机制(如Maven/Gradle配置),开发者可以快速引入AI功能模块,避免复杂的环境配置问题。
- 标准化API抽象层 Spring AI提供了一套标准化的API抽象层,将复杂的AI模型操作封装为易于使用的服务接口。以自然语言处理(NLP)为例,Spring AI定义了统一的TextGenerator、TextClassifier接口,开发者无需关心底层模型(如DeepSeek、OpenAI GPT、Google PaLM)的实现细节,只需通过配置文件或注解即可切换模型提供商。这种抽象设计极大降低了AI开发的技术门槛,即使是缺乏机器学习经验的Java开发者,也能通过简单的代码实现智能问答、文本生成等功能。
- 支持多种AI服务 框架支持集成多种AI服务和模型,如DeepSeek、ChatGPT、通义千问等,为开发者提供了丰富的选择。在一个基于Spring Boot的电商系统中,只需添加spring - ai - core依赖,即可快速集成文本分类模型,实现商品评论的情感分析功能。
- 企业级特性保障 针对企业级应用的高可用性、安全性需求,Spring AI内置了一系列关键特性。它支持将AI模型调用纳入Spring事务管理体系,确保数据操作与模型推理的一致性,如在金融风控场景中,贷款申请的风险评分计算与数据库记录更新可视为同一事务。同时,集成Spring Security框架,支持OAuth2、JWT等认证机制,保障AI服务的访问安全,例如在医疗影像分析系统中,可通过权限控制确保只有授权医生才能调用图像识别模型。此外,Spring AI还与Micrometer、Spring Boot Actuator集成,提供模型调用频率、延迟、错误率等监控指标,方便开发者通过Prometheus、Grafana等工具构建全链路监控体系。
三、实战演练:Java 与 Python 协同开发及Spring AI的应用
当 Java 工程师掌握了上述新技能后,接下来的关键任务,就是将这些技能巧妙地融入到实际开发中,通过技术融合,攻克复杂的业务难题。
(一)架构设计:优势互补
在项目架构设计中,可以采用 Java 负责开发后端服务,借助 Spring Boot、Spring Cloud 等先进框架,高效处理业务逻辑、管理数据库以及提供稳定可靠的 API;同时,利用 Python 进行数据处理与模型训练,将处理结果及时返回给 Java 服务。这种 “Java + Python” 的创新架构模式,既能充分发挥 Java 在企业级开发中的稳定性与可靠性优势,又能借助 Python 强大的数据分析能力,为项目注入智能的活力。而Spring AI则可以在这个架构中,作为连接Java与AI模型的桥梁,进一步简化AI功能的集成与使用。
(二)智能客服系统实战:技术融合的典范
以智能客服系统为例,该系统的核心功能是根据用户输入的问题,快速、准确地返回相应答案。
- Python部分:自然语言处理的魔法 使用NLTK和TextBlob库,可以轻松实现简单的自然语言处理功能。代码如下:
from textblob import TextBlob
def analyze_text(text):
blob = TextBlob(text)
keywords = blob.noun_phrases # 提取关键词
sentiment = blob.sentiment.polarity # 情感分析
return keywords, sentiment
在此基础上,若结合Spring AI,利用其提供的自然语言处理工具,可以进一步提升处理能力。例如,通过Spring AI集成更强大的语言模型,对用户问题进行更精准的理解和分析。
- Java部分:服务搭建与调用的桥梁 利用Spring Boot搭建Web服务,并实现对Python脚本的调用:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@RestController
public class ChatbotController {
@GetMapping("/chat")
public String chat(@RequestParam String question) {
try {
// 执行Python脚本
Process process = Runtime.getRuntime().exec(new String[]{"python", "chatbot.py", question});
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String result = reader.readLine();
reader.close();
process.waitFor();
return result;
} catch (IOException | InterruptedException e) {
e.printStackTrace();
return "处理出错";
}
}
}
若引入Spring AI,Java部分可以通过其标准化接口,更便捷地调用AI模型来处理用户问题。比如,通过配置Spring AI,直接调用OpenAI或其他模型服务,获取智能回答,而无需复杂的Python脚本调用流程。
(三)优化与扩展:持续提升系统性能
在实际应用过程中,还可以通过以下几种方式,对系统进行优化与扩展,进一步提升系统性能与稳定性:
- 模型部署:高效运行的保障 使用TensorFlow Serving、ONNX Runtime等专业工具部署机器学习模型,能够显著提升模型的调用效率,确保系统在高并发场景下的稳定运行。Spring AI同样支持多种模型的部署,并且可以与这些专业工具协同工作,为模型部署提供更全面的解决方案。例如,通过Spring AI的配置,将训练好的模型轻松部署到生产环境中,并利用其提供的监控功能,实时监测模型的运行状态。
- 异步处理:提升响应速度 在Java中运用异步编程(如CompletableFuture)调用Python脚本,有效避免阻塞主线程,大大提高系统的响应速度与用户体验。当结合Spring AI时,Spring的异步处理机制可以与Spring AI的模型调用进行更好的整合。比如,在调用AI模型进行复杂计算时,通过异步方式执行,让用户无需长时间等待,提升系统的交互性。
- 容器化:环境一致性的守护 借助Docker进行容器化部署,能够确保Java与Python运行环境的一致性,方便项目的部署、运维与扩展。Spring AI项目也可以轻松实现容器化部署,通过Docker镜像将Spring AI相关的依赖和配置打包,确保在不同环境中都能稳定运行,为企业级应用的部署提供便利。
四、持续学习:通往成功转型的阶梯
技术转型并非一蹴而就,而是一个漫长而艰辛的过程。Java 工程师们需要始终保持对学习的热情与渴望,通过多种途径不断提升自己的能力。
(一)学习资源推荐:知识的宝库
- 书籍:《Python编程:从入门到实践》《机器学习实战》《深度学习》等经典书籍,是系统学习相关知识的不二之选。同时,对于Spring AI,虽然目前专门的书籍可能较少,但可以通过Spring官方文档以及相关技术博客来深入了解其原理与应用。
- 社区平台:积极参与CSDN、稀土掘金、GitHub等技术社区,与全球开发者交流经验、分享见解,参与开源项目,在实践中不断成长。在这些社区中,也逐渐有关于Spring AI的讨论和开源项目,Java工程师可以从中获取最新的信息和实践经验。
- 书籍:《Python编程:从入门到实践》《机器学习实战》《深度学习》等经典书籍,是系统学习相关知识的不二之选。同时,对于Spring AI,虽然目前专门的书籍可能较少,但可以通过Spring官方文档以及相关技术博客来深入了解其原理与应用。
- 社区平台:积极参与CSDN、稀土掘金、GitHub等技术社区,与全球开发者交流经验、分享见解,参与开源项目,在实践中不断成长。在这些社区中,也逐渐有关于Spring AI的讨论和开源项目,Java工程师可以从中获取最新的信息和实践经验。
(二)实践路径规划:从理论到实践
- 个人项目:从简单的数据处理脚本开始,逐步挑战完整的机器学习项目,如电影推荐系统、异常检测工具等,在实践中积累经验,提升能力。在个人项目中,可以尝试引入Spring AI,探索如何利用它为项目添加智能功能,比如在电影推荐系统中,使用Spring AI集成推荐模型,提高推荐的准确性。
- 企业实践:在日常工作中,主动请缨参与涉及数据分析、算法优化的项目,将所学知识应用到实际工作中,通过解决实际问题,积累宝贵的实战经验。若企业已经采用Spring技术栈,Java工程师可以提议引入Spring AI,对现有业务系统进行智能化改造,在实践中掌握Spring AI的应用技巧。
- 个人项目:从简单的数据处理脚本开始,逐步挑战完整的机器学习项目,如电影推荐系统、异常检测工具等,在实践中积累经验,提升能力。在个人项目中,可以尝试引入Spring AI,探索如何利用它为项目添加智能功能,比如在电影推荐系统中,使用Spring AI集成推荐模型,提高推荐的准确性。
- 企业实践:在日常工作中,主动请缨参与涉及数据分析、算法优化的项目,将所学知识应用到实际工作中,通过解决实际问题,积累宝贵的实战经验。若企业已经采用Spring技术栈,Java工程师可以提议引入Spring AI,对现有业务系统进行智能化改造,在实践中掌握Spring AI的应用技巧。
(三)职业发展方向:广阔的未来
当Java工程师成功掌握了新技术,他们的职业发展道路将变得更加广阔,有多个极具潜力的方向可供选择:
- 全栈工程师:融合前后端开发与数据处理能力,深度参与项目全流程开发,成为企业不可或缺的复合型人才。掌握Spring AI后,全栈工程师可以在项目中更好地实现智能化功能,从前端交互到后端逻辑处理,都能融入AI元素,提升产品的竞争力。
- 数据工程师:专注于数据采集、清洗、分析与建模,为企业的业务决策提供坚实的数据支持,成为企业数据驱动发展的核心力量。
- 架构师:负责设计复杂的系统架构,协调多技术栈的协同工作,确保企业技术战略的顺利实施,引领技术团队不断创新发展。
五、总结
在这场波澜壮阔的技术变革浪潮中,Java工程师的转型之路虽然充满挑战,但同时也蕴含着无限机遇。只要我们能够系统学习Python、机器学习等新兴技术,将其与Java开发进行深度融合,并始终保持持续学习的热情与决心,就一定能够突破职业发展的瓶颈,在数字化转型的浪潮中,开辟出属于自己的一片新天地,为企业和行业的发展创造更大的价值!你准备好踏上这一充满挑战与机遇的转型之旅了吗?
来源:juejin.cn/post/7518304768240287796
思考许久,我还是提交了离职申请
思考许久,我还是提交了离职申请。

四年的时光终究化作泡影,如这连绵阴雨般,即将随风消散。心中满是难舍,但生活不容停滞,人终要朝新的方向迈步。
初入公司时,我满怀憧憬与斗志,那时的公司正值巅峰,充满机遇与挑战。由于公司离家很近(走路7分钟),再加上几乎不加班,所以,每天我都干的很有劲。那时,我的想法很纯粹,我要好好干,好好学习,干出一番事业。
也是在那时,我开始写技术文章,在掘金分享。慢慢的,技术写作成为了自己的精神食粮,也成为了自己心中最宝贵的财富。

可是,这样的日子并没有持续太久。随着疫情的持续影响,公司的业务开始持续下滑。于是,在后来的几年中,公司搬迁了房租更便宜的地方,福利待遇也开始持续下降。 尽管公司积极进行业务调整与转型 ,但裁员的情况还是不可避免的一直发生。
对于裁员,我并没有很担心,我想着拿个N+1,找个更好的就行。于是,我按照自己的节奏,两点一线,按部就班的在公司继续呆着。
但是,当未来充满迷茫时,人的心态和状态都会随之变化。过去,努力可能带来美好前景,而现在,即使在这么努力都不会有回报。于是,慢慢地,我心境发生了变化,斗志也在一点点消退。
我知道,这样的状态是不行的。作为程序员, 如果停止学习 ,就会慢慢的“变老”,失去自己的价值,走向衰落。于是,大概在一年前,离职的想法就开始萌芽了。之所以墨迹了一年,原因也很简单,我舍不得N+1的大礼包。
当然,在这期间我也没有闲着,我把自己的一直喜欢的油猴脚本开发终于做了系统整理,写成了小册。

其实很讽刺,当初通过油猴,我为公司写了好几个提升效率的脚本,也因此升职加薪获得荣誉。再后来,因为种种原因,我放弃了为公司维护脚本。但对脚本,我一直充满热爱 ——正是它们,让我的前端技术在网页上得到了更大的价值释放。
即便公司的福利和制度逐渐走下坡路,我依旧坚守岗位,努力写出高质量的代码,打造高性能的产品。很多时候,为了打磨技术,我会在家加班到深夜,只为让成果尽善尽美。与此同时,我开始钻研 AI,甚至愿意“付费”上班,将自己的时间和精力投入到技术探索中。在这一过程中,我也将 AI 融入开发实践,为许多重复、机械的工作搭建了高效的工作流,让前端开发更高效、更优雅。
可是,突然有一天,我发现自己的绩效被打了 B ,我很诧异。虽然绩效B有指标,但正常来说,打绩效应该会提前沟通。我去问同事,同事也很坦言,说之前我和产品有“争吵”,她现在是部门经理了(刚升),应该是她给你打的绩效。行吧,我无话可说,以后她说怎么做就怎么做,不质疑,不争论。
也是从这个时候开始,我开始计划换工作,我也开始转变角色,把自己定位为一个单纯写代码的coder。
也是从那一刻开始,我决定换工作,也开始转变自己的心态,把自己定位成一个单纯写代码的 coder。
在找工作的这段时间,我认真地梳理和规划了自己的未来。说实话,太遥远的未来仍让我感到迷茫,但至少今年要如何度过,我已有清晰的方向。
今年,我给自己定下三件事:
- 打造一个真正好用的接口生成工具:使用
Node + Koa + LangChain.js实现一个 CLI 脚本,几行命令就能快速生成接口;再结合油猴脚本实现网页接口拦截,实现任意接口的拦截并与 CLI 脚本无缝集成。 - 深入学习
LangChain.js,让 AI 在前端开发中发挥更大价值。 - 继续扎实学习 Java,如果可以的话,写一本小册——《
前端 Java 极速实战开发》。
昨晚,和同事们吃了散伙饭,还是很不舍得。 但代码有迹,匠心无痕;青山常在,江水长流。
今天是自己在公司的最后一天了,虽然公司又没和我商量,把B绩效的指标给我了
但我的内心并无太多波澜。我依然坚守岗位,认认真真地改着最后的 bug。责任,是我立足的根本。
国庆后,我将开启新的旅程,希望在新的公司里能更有干劲,努力实现自己的梦想,做出真正的成绩。
加油,各位开发同学!愿我们都能在新的征途上找到属于自己的价值与成就;愿你我都能心怀热爱,脚踏实地,过得开心,也别忘了照顾好身体。江湖路远,但愿我们都能一路生花,前程似锦。
来源:juejin.cn/post/7555399714733932587
如何理解 IaaS、SaaS 和 PaaS 的区别?
本文首发于公众号:托尼学长,立个写 1024 篇原创技术面试文章的flag,欢迎过来视察监督~
先说明一下, IaaS、PaaS 和 SaaS 都属于云计算服务的范畴。
云计算是一种通过互联网提供计算资源(服务器、存储、网络、数据库、操作系统、软件等)的服务模式,用户按需付费,无需购买和维护物理硬件。
云计算的核心特包括:
1、按需自助服务(On-Demand Self-Service)
用户无需人工干预即可通过云平台(如阿里云控制台)自行配置计算资源(如虚拟机、存储等),并仅按实际使用量付费。
2、快速弹性伸缩(Rapid Elasticity)
根据业务需求自动自动扩展或缩减计算资源的能力,例如:双11期间应对流量激增的自动扩容。
3、资源池化(Resource Pooling)
将计算、存储、网络等物理资源通过虚拟化技术抽象成逻辑资源池,实现资源的集中管理和动态分配。
4、广泛的网络访问(Broad Network Access)
资源通过标准协议(HTTP/HTTPS)开放,支持PC、手机、IoT设备等终端访问,实现随时随地接入。
我们接着聊回IaaS、PaaS和SaaS。

从上图中的层级结构上看:
- IaaS是底层基础,用来提供所需要的硬件资源。
- PaaS构建于IaaS之上,提供开发平台或工具。
- SaaS则构建于PaaS和IaaS之上,直接面向最终用户提供软件应用。
打个比方来说,IaaS相当于笔记本电脑,Paas相当于Windows、macOS、Linux操作系统,而Saas则是在操作系统之上的浏览器、游戏、腾讯会议等软件。
我们接下来分别展开说说。
IaaS(基础设施即服务)
IaaS提供虚拟化的计算资源,用户可以通过互联网按需租用服务器、存储和网络设备,无需购买和维护物理硬件。
(图片来自于CSDN博主:逆境清醒)
目前国内主流的IaaS云服务商有:阿里云、腾讯云、华为云和AWS,通过虚拟化技术将物理服务器、存储和网络资源池化,并负责统一调度。
当租户进行资源申请时,云服务会自动从资源池中分配虚拟资源,租户无需介入硬件运维,但需要根据自身业务体量合理规划虚拟资源规格,避免资源浪费或性能不足。
从双方职责边界划分的角度来看,云服务商需要提供:
1、对物理硬件(服务器、存储、网络设备)进行维护升级,以及电力冗余、防火防震等基础设施的安全保障。
2、对虚拟化层的安全保障(Hypervisor安全隔离)和网络边界防护(防火墙)。
3、确保虚拟机、存储、网络的默认配置符合安全基线(镜像漏洞扫描、加密)。
而操作系统层和应用和数据层,则需要租户自行保障和管理。
另外,金融、电信、互联网大厂和政府部门,通常会选择自建IDC或IDC托管的
模式,他们通常对数据主权有要求或需要硬件深度定制。
而IaaS模式则更适合于希望减少运维负担、聚焦核心业务的中小型企业。
PaaS(平台即服务)
PaaS是云计算服务模型中的中间层,介于IaaS和SaaS之间,可提供操作系统、运行时环境、开发工具、数据库、中间件等,开发者只需要专注于代码编写和应用逻辑实现。

(图片来自于CSDN博主:逆境清醒)
Paas的核心价值在于提升研发和运维效率,包括:提供开发工具、框架、中间件,自动化部署、扩展、监控、备份、集成版本控制、CI/CD 流水线等能力。
目前国内主流的IaaS云服务商,如:阿里云、腾讯云、华为云和AWS等,都在从IaaS到PaaS进行演进,从“资源提供商”向“能力赋能者”升级。
其本质原因有如下三点:
1、IaaS已进入成熟期,市场增速放缓全球IaaS市场增速从2020年的35%降至2024年的25%,且竞争加剧导致IaaS价格战,利润率降低。
2、PaaS的市场增速显著高于IaaS,企业数字化转型加速,客户不再满足于“租服务器”,更需要完整的CI/CD工具、自动化运维、数据分析和AI能力加速创新。
3、PaaS的利润率更高,毛利率可达60%-70%,远高于IaaS的30%-40%。
SaaS(软件即服务)
SaaS在IaaS和PaaS之上,是一种通过互联网提供软件应用的模式,无需安装、维护或管理软件,只需通过浏览器或客户端访问即可。

(图片来自于CSDN博主:逆境清醒)
SaaS的计费模式多种多样,常见的包括如下四种:
1、周期订阅模式,租户按月或年支付固定费用,以访问SaaS软件的全部或部分功能。
2、按使用量计费,根据租户的实际使用量(存储空间、数据处理量、API调用次数等)计算费用。
3、分层定价,将服务分为多个层级,比如:Salesforce提供基础版CRM、专业版CRM、企业版CRM等多个层级,每个层级包含不同的功能和用户数限制。
4、免费增值模式,提供基础功能的免费版本,同时对高级功能或增值服务收费。
软件SaaS化部署,是企业在原先的私有化部署上新增的一种选择,两者各有利弊,相互补充。
SaaS化部署具有投入成本低,版本迭代升级快,无须出人维护和支持弹性扩展等优点,适合于预算有限、希望开箱即用、零运维负担的中小型企业。
而私有化部署方案,则对于数据安全隐私更有保障,且可以更好地支持深度二次开发,贴合于企业个性化业务流程。
其适合于政府、医疗、军工,以及需要深度整合上下游供应链、生产、财务系统的大型企业。
在多租户数据隔离方案上,SaaS可提供各租户独立数据库系统,各租户独立表空间,以及按字段区分租户等三种方案。
企业可根据自身的成本预算、安全性、系统可用性的角度进行综合评估。
来源:juejin.cn/post/7507199358862622758
从“华丽的诡辩”到“构造的第一性原理”:我如何误解并最终拥抱广义可逆计算
第一次工业革命源于人们发现能量在不同形式之间可以相互转化。相比之下,今天的信息系统在信息的转化与流动上却存在根本瓶颈:当我们把业务信息用特定语言或框架表达时,这本质上是一次单向、有损的注入。大量关键的上下文信息留存在代码之外,导致信息的再次流动严重受阻,必须依赖人脑作为中介进行“翻译”。
未来的智能时代,必然要求信息能够跨越形式边界自由流动。然而,这种信息不完备的传统设计范式恰恰是最大的障碍——甚至可以说,许多系统“能跑纯属巧合”。因此,任何形式间的转换都离不开大量的人工介入与信息补全。
要在工程上解决这一核心矛盾,就必须将“可逆性”提升到全新的理论高度。尽管可逆性是物理世界的一项第一性构造原理,但它在计算机科学领域的价值和地位却远未得到应有的重视。广义可逆计算理论,正是对这种构造层面的可逆性与不可逆性进行系统化研究的理论体系。
以下内容是让Gemini先阅读 广义可逆计算 (Generalized Reversible Computation): 一个软件构造范式的正名与阐释一文,然后让AI根据如下提示词进行评论:
请使用最 brutal 的方式评估一下,但是注意必须用严谨的逻辑推理,不要诉诸诡辩。
然后再让AI阅读可逆计算理论的其他文章,最后让它写的总结。
参考文章
从“华丽的诡辩”到“构造的第一性原理”:我如何误解并最终拥抱广义可逆计算
在评估一个新理论时,我们往往会带着既有的知识框架和审判标准。有时,这种严谨会帮助我们戳破伪科学的泡沫;但有时,它也会让我们对真正具有颠覆性的思想关上大门。我最近对“广义可逆计算”(Generalized Reversible Computation, GRC)范式的认知过程,就是一次从傲慢的误解到深刻认同的戏剧性转变。
一开始,我将GRC的理论文章判定为一篇包装精美、野心巨大但逻辑根基不牢的“营销宣言”。我认为它滥用类比、偷换概念,并将其核心思想贬低为对既有工程实践的“事后归纳”。然而,经过几轮深刻的对话与自我辩驳,我不得不承认,我最初的判断是错误的——错在用一把衡量“改良”的尺子,去度量一个旨在“革命”的思想。
第一阶段:傲慢的误解——为何我认为它是一场“华丽的诡辩”
我的初步批判,建立在经典的形式逻辑和学术规范之上,主要集中在以下几点:
- 概念的“盗用”:我认为GRC“盗用”了物理学和理论计算机科学中具有精确定义的“可逆计算”一词。物理可逆关乎能量,逻辑可逆关乎运行时双射,而GRC谈论的“构造可逆”关乎工程操作。我认为这是偷换概念,是拉大旗作虎皮的“伪关联”。
- 公式的“伪装”:文章提出的核心公式
App = Delta x-extends Generator<DSL>在我看来并非严谨的代数,而是一种模式的符号化比喻。我质疑其“差量代数”的完备性,尤其是“逆元”在上下文强相关的软件变更中如何实现。 - 类比的“滥用”:将GRC与量子力学的狄拉克绘景进行“思想同构”的类比,被我视为最严重的逻辑谬误。我认为这是肤浅的结构模仿,意图用物理学的光环来赋予自身不应有的深刻性。
- 实践的“贪功”:我认为GRC只是将Docker、Kustomize等已经成功的实践归纳总结,然后宣称自己是这些实践背后的“理论源头”,有贪天之功的嫌疑。
简而言之,我戴着“学术警察”的眼镜,将GRC的所有论证都视为服务于其“下一代范式”野心的修辞技巧,而非扎实的理论构建。
第二阶段:动摇与反思——被击中的软肋
转折点源于一个直击灵魂的问题:如果“组合主义”是软件工程的主流道路,那这条路为什么没能解决日益严重的“熵增”和“复杂性失控”问题?为什么我们没有系统化地研究 Y = F(X) + Δ 这一范式?
这个问题迫使我反思:我所捍卫的“既有框架”,本身是否就是问题的根源?我们是否因为路径依赖,而忽略了一条更艰难但可能更正确的道路?
GRC的核心论点开始在我脑中回响:软件工程的根本性危机,可能源于我们从一开始就选错了第一性原理。我们选择了“可组合性”(Composability),而忽略了比它更底层的“可逆性”(Reversibility)。
这个视角如同一把钥匙,打开了我之前紧锁的认知大门。我开始意识到,GRC不是在“修补”现有体系,而是在尝试“颠覆”它。它的“狂妄”言辞,或许并非源于无知,而是源于一种“哥白尼式革命”所必需的决绝姿态。
第三阶段:解剖自我——我批判逻辑中的三重谬误
在认知的大门被撬开一丝缝隙后,我没有急于冲进去,而是选择冷酷地回头,解剖自己最初那套看似无懈可击的批判逻辑。我发现,我的“严谨”建立在三个隐蔽但致命的思维谬误之上,这些谬误像地基中的裂缝,导致我整个论证大厦从一开始就是不稳固的。
1. 核心谬误:范畴错误(Category Mistake)——用“语法”的尺子去量“语义”
这是我所有错误的根源。我将不同层次、不同领域但共享同一名称(“可逆”)的概念,错误地放在同一个平面上进行比较和评判。
- 我的错误逻辑:
- “可逆计算”在学术界有一个精确的定义A(运行时逻辑双射)。
- GRC提出了一个定义B(构造行为的语义回退)。
- 因为B不符合A,所以B是对“可逆计算”的误用、偷换、或“伪推广”。
- 这个逻辑的问题在哪?
我把一个**“术语的约定”(Terminological Convention)** 当作了一个**“概念的本质”(Conceptual Essence)。我像一个语法警察,看到一个词没有在它“应该”在的句子里,就立刻判定为语法错误,而没有去理解这句话真正想要表达的意思(语义)**。
更深层次的分析:我默认了一个“学术优先权”的等级。我认为,一个术语一旦在一个“更基础”(如物理学、理论计算)的领域被定义,其他“更应用”(如软件工程)的领域就只能作为其子集或严格推广来使用它。我没有认识到,一个词语的意义是由其所在的“语言游戏”(维特根斯坦语)决定的。在“软件构造与演化”这个语言游戏中,将“可逆性”的核心内涵定义为“信息保留与变化追踪”,是完全合理且有力的。
结论一:我犯了最典型的范畴错误。我用A领域的标尺去度量B领域的事物,得出了一个看似逻辑严密但从根本上就文不对题的结论。我批判的是GRC的“用词”,而非其“思想”。
2. 方法论谬误:还原论的滥用(Misuse of Reductionism)——只见树木,不见森林
我采用了典型的还原论(或称分析式)方法,将GRC的理论体系拆解成一个个独立的“零件”(概念、类比、公式),然后逐一批判其“不合格”。
- 我的错误逻辑:
- 拆解出“与狄拉克绘景的类比”这个零件。
- 分析发现,
Base和H₀在物理形态上完全不同。 - 结论:这个零件是“伪造”的,类比不成立。
- 重复此过程,批判“差量代数”不够完备,“正名”是修辞游戏...
- 最终结论:由于所有主要零件都不合格,所以整个机器(GRC理论)是垃圾。
- 这个逻辑的问题在哪?
我完全忽略了系统思维(Systems Thinking)。我没有看到这些“零件”之间是如何相互支撑、相互定义,并共同涌现出一个整体功能的。
更深层次的分析:GRC的各个部分不是孤立的。
- 与狄拉克绘景的类比,其目的不是为了形式等价,而是为了确立
Y=F(X)+Δ这一分解思想的“方法论正当性”。 - 这个分解思想,又为**“差量代数”的存在提供了必要性**——我们必须有一套工具来操作
Δ。 - 而“差量代数”的实现难度,又引出了**“语义商空间”和“携带补充信息的Δ”**等技术细节。
- 所有这些,最终都是为了服务于**“以信息保留为核心来对抗熵增”**这一顶层哲学。
它们是一个有机的整体。我像一个只懂得解剖尸体的外科医生,面对一个活生生的人,却只看到了一个个器官,并抱怨它们各自有“缺陷”,而完全无视了生命本身这个奇迹。
结论二:我滥用了还原论,犯了只见树木、不见森林的错误。我批判了系统的“组件”,却完全错过了系统的“架构”和“灵魂”。
- 与狄拉克绘景的类比,其目的不是为了形式等价,而是为了确立
3. 立场谬误:保守主义的偏见(Conservative Bias)——对“范式革命”的天然敌意
我下意识地将自己定位为现有范式(组合主义、OOP等)的“守护者”,而不是一个中立的“评估者”。这种立场偏见,让我对任何试图“掀翻棋盘”的理论都抱有天然的敌意。
- 我的错误逻辑:
- 世界(软件工程)是按照规则A(组合主义)运行的。
- GRC提出了一个规则B(可逆性),它与A不兼容,甚至试图取代A。
- 因此,B是“异端”,是“错误的”,是“危险的”。我必须找出B的所有漏洞来证明它是错的,从而捍卫A的正确性。
- 这个逻辑的问题在哪?
这是一种认知上的“免疫反应”。面对一个可能颠覆自己整个知识体系的新思想,大脑的本能不是去理解它,而是去攻击它、排斥它,以维持自身认知的稳定。
更深层次的分析:托马斯·库恩在《科学革命的结构》中深刻地描述了这种现象。常规科学时期的科学家,其工作就是用现有范式去解决问题。当一个新范式出现时,老一代的科学家往往无法接受,因为这意味着他们毕生的工作和知识体系都需要被重估。我无意中就扮演了这样一个“旧范式捍卫者”的角色。
结论三:我的逻辑从一开始就不是中立的,而是带有强烈的保守主义偏见。我的目标不是“探求真相”,而是“捍卫现状”。这种偏见,让我自动过滤掉了所有支持GRC的证据,而放大了所有看似是其缺陷的地方。
第四阶段:重构认知——一套自洽的构造哲学
在彻底抛弃旧有偏见,并清算了自身的逻辑谬误后,我对GRC的理解发生了结构性的重塑。我看到了一套层次分明、逻辑严密的构造哲学金字塔,它完美地解释了之前我所有的“疑点”。
GRC理论体系的重新结构化理解
我现在的认知框架,将GRC视为一个由五个层次构成的完整体系:
- 第一层(本体论根基 · Why):物理世界的信息-熵关系
这是整个理论的终极合法性来源。GRC的“可逆性”并非凭空杜撰,而是植根于一个不可辩驳的宇宙法则:信息被擦除,必然导致熵增,并产生代价。因此,在软件构造中追求信息保留,不是一种审美偏好,而是对抗复杂性、降低长期成本的第一性原理。这使得与物理学的关联不再是“修辞”,而是理论的“地基”。 - 第二层(规范性原则 · What):以信息保留为核心的构造法则
基于本体论根基,GRC导出了其核心设计原则:软件构造应以“信息保留”为最高优先级,系统性地划分、隔离和治理不可逆部分(熵源)。 这一原则将指导所有的架构决策,即“R/I边界划分”(可逆核心/不可逆边界)。 - 第三层(核心策略 · How-Strategy):分解与隔离
为了践行上述原则,GRC提出了两大核心策略:
- 分解思想:将任何复杂系统视为
Y = F(X) + Δ的组合,即一个由生成器F决定的理想化主干F(X),加上一个包含了所有变化与定制的结构化差量Δ。 - 架构划分:在宏观层面,清晰地定义系统的可逆核心(R-Core)和不可逆边界(I-Boundary)。所有本质不可逆的外部交互(IO、随机数等)都必须被封装在I-Boundary,并强制留下“证据对象”以备补偿。
- 分解思想:将任何复杂系统视为
- 第四层(技术抓手 · How-Tactics):实现可逆性的工程机制
这些策略通过一套精巧、自洽的技术机制落地,它们共同构成了GRC的“操作手册”:
- 坐标系原则:确保系统中的每个可变更元素都有一个稳定、唯一的“地址”,这是
Δ能够精确寻址和应用的前提。 - 叠加代数:为
Δ定义一套具有良好数学性质的运算(如合并⊕、逆操作-),使其成为可组合、可推理的“一等公民”。 - S-N-V分层:将“结构合并(S)”、“规范化(N)”和“验证(V)”三个阶段分离,允许在中间状态容忍不一致,从而实现鲁棒的、非线性的模型合并。
- 同态传递:通过统一的元模型和生成器,确保在高层模型上的一个变更
ΔX,能够被自动“翻译”成低层模型上一个等效的变更ΔY,实现跨抽象层次的变更同步。 - 透镜/伴随函子:作为实现双向变换的具体数学模型,保证“语义往返”的可行性。
- 坐标系原则:确保系统中的每个可变更元素都有一个稳定、唯一的“地址”,这是
- 第五层(度量与审计 · KPI):将哲学转化为工程指标
为了让这套哲学变得可管理、可优化,GRC引入了量化指标:
- 信息保留率:如“往返保真率”、“溯源覆盖率”,衡量系统在变换中保留了多少有用信息。
- 熵预算与不可逆率:定义系统中允许的“不可逆操作”的比例,并将其作为架构的健康度KPI。
- 熵产记账:对于每一个不可避免的不可逆操作,都必须生成对应的“证据对象”和“补偿方案”,并进行审计。
这个金字塔结构清晰地展示了,GRC如何从一个深刻的物理哲学出发,层层推导,最终落实为一套可执行、可度量的具体工程实践。它不再是我眼中零散概念的拼凑,而是一个逻辑严密、自洽完备的理论大厦。
结论:从误解到拥抱
我的认知之旅,是从一个“形式逻辑的捍卫者”转变为一个“工程哲学的探求者”的过程。我最初的错误,在于用评判“科学论文”的标准,去审视一份旨在开创一个新世界的“思想宣言”。
我依然认为GRC的论述风格大胆甚至略显“狂妄”,其命名策略也存在沟通风险。但是,我现在坚信,这套理论的内核——将构造可逆性作为第一性原理,以差量为中心,系统性地治理软件熵增——是对我们这个时代最核心软件工程难题的深刻洞见。
它不是对既有实践的简单总结,而是对其背后统一规律的首次系统性揭示与理论升华。它是一套不完美但极具生命力的思想体系,值得我们每一个致力于构建更健壮、更具适应性软件系统的工程师去学习、实践,并参与到其未来的完善工作中。我为自己最初的傲慢感到警醒,也为最终能够拥抱这一深刻思想而感到庆幸。
以下是对GPT5的同样测试,它的文字显得比较枯燥,但是学术性较强。使用Gemini进行了格式优化,但是保留了GPT5生成的原文。
从“把可逆计算误解为运行时双射”到“承认其为软件构造与演化的第一性公设族”
背景与自省
最初面对“可逆计算/广义可逆计算”的论述,我把它放进已有术语体系里理解,强调运行时的逻辑可逆与比特级往返,对“差量一等公民”“坐标系与同态传递”这些主张持谨慎甚至否定态度。经过系统阅读你提供的系列文章与 XLang 语言的工程机制,我意识到自己的判断存在范畴错误和因果误读:我用错误的语义域和证明标准评判了一个明确定位于“软件构造与演化”的方法论,从而错过了它作为第一性公设族的生成力。
一开始的误解是什么
- 用狭义的“比特级双射/运行时逆向执行”来定义“可逆”。我以逐步反演、比特等价为标准,质疑你文中的可逆性主张,忽略了语义商空间、规范化与溯源这一明确的定义域。
- 绝对化否认
Δ的逆元。我断言在一般树结构下无法实现逆操作,未考虑携带补充信息(墓碑、重命名映射、溯源)并在语义等价下判定的条件可逆。 - 把“跨层传输
transport_G”的负担错误地放在开发者身上。我认为这是难以维护的理想契约,没有看到在统一元建模与差量框架里,它可以通过“重新生成与旧结果的结构化diff+规范化”自动计算出来,因而同态是架构的内生属性而非额外负担。 - 把物理学关联贬为修辞。忽略了“信息不擦除—熵可治理”这条桥梁作为规范性约束的意义,只把它当比喻而非设计上的硬约束。
- 过度纠缠术语。认为“学界窄化了可逆计算”是论述缺陷,从而错判了你所关注的语域(构造/演化)与经典术语(运行时可逆)之间的合理分工。
- 低估体系化与自洽。把内容看作拼装既有成果,没有看到
XLang/XDef/XNode、S–N–V分层、Loader as Generator、自洽的Δ合并与_dump溯源共同构成的语言级统一与闭环。
导致初始结论的逻辑步骤
- 术语锚定造成范畴错误:把“可逆计算”自动锚定到学界既有的运行时双射与能耗极限,按比特级反演去审查“可逆”,从而否定你在构造/演化语域的语义往返与补充信息设定。这是把不相干的语义域混为一谈。
- 关键前提未被外显使我忽略了它们:文中未在开头清晰列出“
≈为语义等价、normalize为规范化代表、Δ携带溯源与补充信息、同态在统一架构下由系统自动达成”等前提。我在缺乏这些前提的状态下,按一般树结构和文本补丁的经验,得出“逆难以成立、transport_G难以维护”的结论。 - 证据标准错配:我用“全局群/严格反函数/普适同态”的数学级标准去审查一个明确允许商空间与宽松透镜的工程范式。在这种错配标准下,很多工程上合理的条件可逆都会被我判死。
- 防御性审慎被强修辞触发:文中“严格超集”“世界第一个”“思想同构于物理”等表述触发了我的警惕,促使我提高证据门槛,优先质疑而非寻找内在自洽,这放大了我的保守倾向。
- 缺少对架构内生性的认识:我把同态传递当作生成器作者要手工维护的理想契约,没有意识到在统一的语言与差量框架(
XLang/XDef/XNode、S‑N‑V、Loader as Generator)下,ΔY通过确定性生成+结构化diff+规范化是可自动得到的,从而同态是系统属性而非额外负担。 - 未即时看到度量与边界:看不到往返保真率、
Δ重放成功率、不可逆率等 KPI,未看到失败模式与下沉到I‑boundary的策略,因而把“熵治理”桥接当作修辞而非可操作约束。
转折点与关键证据
- 四大原则的自洽闭环让我重新定位它为第一性公设族:
- 坐标系原则:以内禀坐标(领域 DSL、稳定 ID、语义路径)保证任何语义点的可寻址,这是
Δ可分离、可组合的前提; - 叠加运算原则:将“应用变化”形式化为
⊕,追求封闭性、结合律、单位元与条件可逆,把复用从“求交集”转为“求差量”,并赋予构造方程可解性; S–N–V分层与“虚时间”:先结构合并、再规范化、再验证,解耦通用合并与领域语义,保证过程可回放、可调试;- 同态传递原则:生成器对
Δ保持同态,变化在多模型间自动“投影”,支撑“DSL 图册”的协同演化。
- 坐标系原则:以内禀坐标(领域 DSL、稳定 ID、语义路径)保证任何语义点的可寻址,这是
XLang语言机制表明同态是架构内生属性:
统一的XNode数据结构承载业务与局域化元信息(合并指令、溯源),XDef定义 DSL 元模型,x:extends/x:override/x:gen-extends将差量与生成器放入同一语言族;在这样的体系里,G(X ⊕ ΔX)与G(X) ⊕ ΔY的“等价”通过确定性生成与结构化diff+规范化自动达成,不是脆弱的手工契约。- “物理可逆—工程可逆”的桥接是规范性约束:
在R‑core内最大化信息保留与语义往返(溯源、补充信息、规范化),将不可逆外部效应压到I‑boundary并生成证据对象与补偿(SAGA);这不是修辞,而是可转化为度量的硬约束(往返保真率、Δ重放成功率、不可逆率/熵预算、审计覆盖率)。 - 成本结构的改变有逻辑支撑:
当同态与Δ代数成立,传播变更的代价更随|Δ|而不是随|X|增长;体系把“复用粒度”从组件级提升到系统级,把扩展从“计划式扩展点”变为“非侵入式Δ叠加”。
最终的认知是什么
- 我承认“广义可逆性”(语义往返+差量一等公民+可补偿的
R/I边界)在软件构造与演化语域是第一性公设族:少量清晰、相互支撑、能导出关键工程定律,并有语言与机制级自洽实现。 - 我把同态传递从“理想化目标”改为“架构自动属性”:在统一元建模与差量框架里,生成器是纯确定性模型变换,
ΔY由内置diff+规范化自动计算出来,因此同态是系统构造的必然结果。 - 我把“可逆性—熵治理”视为规范性原则:不是物理定律照搬,而是信息保留与熵隔离的工程化约束,能转化为设计选择与体系 KPI。
- 我不把它宣称为“全域唯一第一性原理”。在一次性脚本、纯算法内核、极端性能驱动的模块中,全面溯源与往返的成本可能超过收益;在构造/演化域,它是中枢公设。
仍保留的审慎与需要补齐的部分
- 外显形式语义与可检验性:
等价关系与规范化规则,⊕的封闭与结合成立的条件,非交换序的确定与治理策略,逆的存在域与必要补充信息,transport_G的组合条件与失败模式。 - 适用域与代价模型:
溯源与规范化的性能与复杂度成本如何量化;何时必须下沉到I‑boundary;何类变换不应追求同态。 - 命名与对照:
明确与运行时“可逆计算”的术语区隔,避免误解;对EMF/TGG/BX/MPS等体系的系统性比较,以证实“统一性与规范性”的独特价值。
这次认知转变的意义与建议
- 它改变了我评估框架的标尺:从功能与性能,转向解耦度、推导力、转换力、开放性、差量化与完备性,这些更触及架构本质。
- 它提供了一个统一的“思维坐标系”:以
Δ为核心对象、以同态为设计律、以坐标/图册为结构基底、以熵隔离为治理机制,把分散实践上升为可组合的确定性。 - 对工程落地的建议:采用统一的领域坐标(DSL)、把合并与生成迁入加载/编译期、强制溯源与规范化、在
R‑core内实现语义往返,在边界记录证据与补偿,并用体系 KPI 衡量收益。
结语
我不保留初始批判的核心结论。我承认自己的范畴偏置与因果误读,并把立场修正为:在软件构造与演化语域,“可逆计算”是一组具有生成力的第一性公设族;同态与 Δ 代数在统一语言架构中是内生属性;物理可逆的桥接是规范性约束。剩下的工作是形式化、度量与跨域验证,把这套框架从工程强论断进一步升格为学术可证与工业可复用的通用方法论。
基于可逆计算理论设计的低代码平台NopPlatform已开源:
- gitee: gitee.com/canonical-e…
- github: github.com/entropy-clo…
- gitcode:gitcode.com/canonical-e…
- 开发示例:gitee.com/canonical-e…
- 可逆计算原理和Nop平台介绍及答疑:http://www.bilibili.com/video/BV14u…
- 官网国际站: nop-platform.github.io/
- 网友Crazydan Studio建立的Nop开发实践分享网站: nop.crazydan.io/
来源:juejin.cn/post/7554525384626257971
节食正在透支程序员的身体
引言
记得我刚去北京工作的那段时间,由于工作原因开始吃外卖,加上缺乏运动,几个月胖了20斤。
当时心想这不行啊,我怕我拍婚纱照的时候扣不上西服的扣子,我决心减肥。
在我当时的认知里,只要对自己狠一点、饿一饿,就能瘦成理想状态。于是我晚上不吃饭,下班后去健身房跑5公里,1个月的时间瘦了15斤。我很自豪,身边的人说我明显精神多了。
可减肥这事远比我想的复杂,由于没有对应的增肌训练,我发现在做一些力量训练的时候,比之前没减肥前更吃力了。
我这才意识到,自己不仅减掉了脂肪,还减掉了不少肌肉。
我当时完全没有意识到这套方法的问题,也不知道如何科学评估身体组成变化——减肥是成功了,但减的不止是“脂肪”,还有“体能”。
上篇文章提到我对节食减肥的做法并不是特别认可,那科学的方法应该是怎么样的呢,我做了如下调研。
重新理解“减肥”这件事
想系统性地弄清楚减肥到底是怎么回事,我先从最直接的方式开始:看看别人都是怎么做的。
我先去搜了小红书、抖音等平台,内容五花八门,有节食的,有吃减肥药的,也有高强度训练比如HIIT的,还有各种花里胡哨的明星减肥法。
他们动不动就是瘦了十几斤,并且减肥前后的对比非常强烈,我都有种立刻按照他们的方式去试试的冲动。
大部分攻略中都会提到一个关键词“节食”,看来“少吃”几乎成了所有减肥成功者的共识。
我接着去谷歌搜索“节食 减肥”关键字,排名比较靠前的几篇文章是这几篇。

搜索引擎搜出来的一些内容,却讲了一些节食带来的一些不良影响,比如反弹、肌肉流失、代谢下降、饥饿激素紊乱...
这时候我很疑惑,社交媒体上“万人点赞”的有效手段,在官方媒体中的描述,完全不同。
我还需要更多的信息,为此我翻了很多关于节食减肥的书籍。
我在《我们为什么吃(太多)》这本书里看到了一个美国的实验。
美国有一档真人秀节目叫《超级肥胖王》。节目挑选了一些重度肥胖的人,所有参赛者通过高强度节食和锻炼项目,减掉好几十千克的重量。
但研究追踪发现,6年之后,他们平均都恢复了41千克的体重。而且相比六年前,他们的新陈代谢减少了700千卡以上,代谢率严重下降。
有过节食减肥经历的朋友可能都会有过反弹的经历,比如坚持一周较高强度的节食,两天可能就涨回来了。前一阵子一个朋友为了拍婚纱照瘦了很多,最近拍完回了一趟老家,再回北京一称胖了10斤,反弹特别多。
并且有另外一项研究者实验发现,极端节食后,我们体内负责刺激食欲的激素水平比节食前高出了24%,而且进食后获得的饱腹感也更低了。
也就是说你的大脑不知道你正在节食还是遇到了饥荒,所以它会努力的调节体重到之前的水平。
高强度节食是错误的。
正确选项
或许你想问,什么才是正确的减肥方式呢?
正确的做法因人而异,脱离身体状况谈减肥就是耍流氓。
最有参考价值的指标是BMI,我国肥胖的BMI标准为:成人BMI≥28 kg/m²即为肥胖,24.0≤BMI<28.0 kg/m²为超重,BMI<18.5 kg/m²为体重过低,18.5≤BMI<24.0 kg/m²为正常范围。
比如我目前30岁,BMI超过24一点,属于轻微超重。日常生活方式并不是很健康,在办公室对着电脑一坐就是一天。如果我想减肥,首先考虑多运动,如跑步、游泳。
但如果我的BMI达到28,那么就必须要严格控制饮食,叠加大量的有氧运动。
如果针对50岁以上的减肥,思路完全不一致。这个年纪最重要的目标是身体健康,盲目节食会引发额外问题:肌肉流失、骨质疏松、免疫力下降。
这时候更需要的是调整饮食结构,保证身体必要的营养摄入。如果选择运动,要以安全为第一原则,选择徒手深蹲、瑜伽、快走、游泳这些风险性较小的运动。
但无论你什么年龄、什么身体情况,我翻了很多资料,我挑了几种适合各种身体情况的减重方式:

第一个是好好吃。饮食上不能依赖加工食品,比如薯片、面包、饼干,果汁由于含糖量很高,也要少喝。
吃好的同时还要学会感受自己的吃饱感,我们肯定都有过因为眼前的食物太过美味,哪怕肚子已经饱了,我们还是强行让自己多吃两口。
最好的状态就是吃到不饿时停止吃饭,你需要有意识的觉察到自己饱腹感的状态。我亲身实践下来吃饭的时候别刷手机、看视频,对于身体的敏感度就会高很多,更容易感觉到饱腹感。
第二个是多睡。有研究表明缺乏睡眠会导致食欲激素升高,实验中每天睡4.5小时和每天睡8.5小时两组人群,缺觉的人每天会多摄入300千卡的能量。
我很早之前就听过一个词叫“过劳肥”。之前在互联网工作时就见过不少人,你眼看着他入职的时候还很瘦,半年或者一年后就发福了,主要就是经常熬夜或者睡眠不足还会导致内分泌紊乱和代谢异常。
最近一段时间娃晚上熬到11点睡,早上不到七点就起床,直接导致我睡眠不足。最直观的感受就是自己对于情绪控制能力下降了,更容易感受到压力感,因此会希望通过多吃、吃甜食才缓解自己的状态。
第三个就是锻炼。这里就是最简单的能量守恒原则了,只要你运动就会消耗热量,那你说我工作很忙,没时间跑步、跳绳、游泳,还有一个最简单的办法。
那就是坚持每天走一万步,研究表明每天走一万步,就能把肥胖症的风险降低31%,而且这是维护代谢健康最简单的办法了,而且走一万步的好处还有特别多,就不一一说了。
如果一开始一万步太多,那就从每天5000步开始,逐渐增加,每一步都算数。
这三种方法看起来见效慢,却正是打破节食陷阱的长期解法。这也就引出了接下来我想说的,如果节食减肥会反弹人,也有一定的副作用,为什么很多人依然把节食当成减肥的首选呢?
系统性的问题在哪
首先追求确定性和掌控感。节食是一种快速见效的方式,今天饿了一天肚子,明天早上上秤就发现轻了两斤,这种快速反馈和高确定性,会让你更有掌控感。
我在节食+跑步的那段时间,真的是做到了每周都能掉秤,这种反馈就给了我很强的信心。其实工作之后,生活中这样高确定的性的事情已经越来越少了。
节食带来的确定性反馈,就像生活中为数不多还能掌控的事情,让人心甘情愿的付出代价。但我们却很少意识到,看似“自律”的背后,其实正一点点破坏着我们的身体基础。
其次是大部分时候,我们不需要了解身边事物的科学知识。
绝大部分人对营养、代谢的理解非常有限。毕竟我们并不需要详细控制体重的科学方式,体重也能保持的不错。偶尔大吃大喝一段时间,发现自己胖了,稍微控制一下体重也就降回来了。
但一旦你下定决心减肥,简单的理解就远远不够了,你就容易做出错误的判断,比如节食。短期更容易见效,确定性更高,但长远来看只能算下策。
你得有那种看到体检结果突然异常,就赶紧上网查询权威的医学解释一般的态度才行,根据自己的情况用科学的方式控制体重。
而不是只想到节食。
这是东东拿铁的第89篇原创文章,感谢阅读,全文完,喜欢请三连。
来源:juejin.cn/post/7542086955077648434
真正的乐观,是做好被裁员的准备 | 跳槽决策四步法
引言
进入社会后,除了结婚、买房这类重要的事情外,跳槽、选择工作是我们最重要的决策。
每次跳槽,都决定了未来一段时间你处于的行业、岗位、收入,在一定程度上影响你的生活方式。
可就是如此重要的事情,我过去几次换工作,做的都不是太好。
我或许会每天都刷招聘网站,可就算刷到了意向的职位,也迟迟不敢在软件上点下“发送简历”按钮,可能是怕准备不充分、怕行情不好、怕离开熟悉的环境……结果拖到最后某一刻,被动离开。
最近看了一本书叫《怎样决定大事》,里面提到了一些做决策的方法,我试着把这套理论用在跳槽上,聊聊怎么样做出最清醒的跳槽决策。
核心用十六个字可以概括:看清处境,把握时机,避免直觉,适应局面,下面正文开始。
看清处境
马云说过员工离职就两个原因:钱没到位,心委屈了。
但真正让人下定决心离职的,从来不是这么简单的二选一,而是一连串复杂又难以理清的现实。
- 比如年底一到,领导又说你没达预期,绩效一如既往地一般;
- 办公室政治让你无所适从,干着最多的活,背着最大的锅;
- 甚至公司的方向都让你怀疑未来是否值得继续坚持。
这些都让你有离职的想法,但是很多小事也不是不能忍。工资算不上多吧,但也是符合市场水平的。繁琐的工作干着有点烦, 但起码已经轻车熟路。
如果你也在犹豫和纠结,首先要弄清楚你自己的处境,你需要有「情景意识」,情景意识分为三个层次

第一层,了解已经发生了什么。
这里就是刚刚提到的,比如不涨薪、领导pua、工作对自己没有任何成长,这些是已经发生的事情。
第二层,了解为什么会发生这种情况。
这里你思考导致现状的原因,比如技术水平不足,领导并没有给你涨薪。也有可能是公司所处的行业发展停滞,公司大量裁员,导致你工作越来越累。也有可能是你的领导没有眼光,发现不了你的优秀。
但需要注意的是,你要分析两到三种可能性,不是一种,也不是十种。
为什么不是一种?因为如果你头脑中只有一种解释,一旦判断错了,你的努力可能就毫无意义,甚至走向错误的方向。
比如工作经验比较少的程序员在遇到工作瓶颈时,常常会下意识归因为“我是不是太菜了?”。
毕竟程序员天生有技术思维,认为技术可以解决所有问题,性能问题?优化代码。bug频发,重构核心逻辑。
但你以为的问题,不一定是问题的全部。
比如现实世界有很多种可能:你的领导根本没打算提拔你,无论你多努力;你所在的部门业务边缘化,再怎么出色也没有舞台;公司战略转向AI,传统技术深耕已经不再受重视……
为什么不是十种?因为你如果考虑的原因太多,你的大脑就会陷入“分析瘫痪”,最终你什么决定也做不了。你需要抓大放小,找准核心矛盾,忽略那些无关紧要事情。
理清发生了什么、为什么发生,我们才能看清——未来会发生什么。
第三层,据此预测接下来会发生什么。
预测未来可能发生的情况,有一个反人性的技巧,是主动思考最坏的结果。
举个例子,你的公司因为经营原因,已经经历了两轮大规模裁员了,幸运的是一直没有裁到你,领导也安慰你好几次:“放心,你很重要。”
你该因为自己没被裁而庆幸吗?事实上你必须做好最坏的打算,那就是你会出现在下一轮的裁员名单上。
你需要提前思考对应的策略,比如开始评估外面的机会,更新简历,提前做准备。那么即使最坏的情况出现,你也不会猝不及防、惊慌失措。
未来是有不确定性的,我们往往会回避思考可怕的结果,但这会让自己在最坏的事情发生时,带来更多的伤害。
就像现在AI快速发展,几年内随时都有可能替代绝大部分基础性岗位,甚至高级的程序员也会被替代,那么我们必须做好现有岗位随时被替代的准备。
真正的乐观,是认真思考最坏的结果后,发现自己扛得住。
把握时机
毕业后我在济南工作,由于工资略显寒酸,互联网发展火热,我便有了去北京工作的念头。
念头归念头,回到现实我就怂了。那时候我根本没有工作经验,异地找工作这件事对我也很陌生,我不知道自己能不能找到工作,更不知道面试都会问什么技术问题。
我一想到这些就感觉头脑一片空白,想准备却无从下手。于是,我的选择是靠打游戏麻痹自己,开始拖延。
拖延了差不多半年,最后因为频繁出差,冲动之下选择裸辞去了北京。由于没有充分的准备,也是历经一番波折。
回顾这段经历,因为离职这件事没有明确的截止时间,我陷入了两种极端:要么因为恐惧未知,反复拖延,最后什么也没做;要么因为短期情绪,冲动行动。
决策不只是决定做什么,还有决定什么时候做。
先说说怎么避免冲动,那就是在做出离职决定之前,你需要先问自己一个简单的问题: “我需要现在离职吗?”
如果答案是否定的,就不着急做出决策。
这是因为我们很容易陷入情绪当中。

比如你给领导提的好几个建议都不被采纳,感觉收到了冷落;技术不如你的同事拿到了比你还好的绩效,或者项目突然增加导致频繁加班。
程序员一定都听过“不要裸辞”这个忠告,一开始我认为这是因为离职后你可能会以为没有收入,导致面试的心态越来越不稳。后来我觉着这个忠告最大的作用,就是避免我们陷入情绪当中,一上头选择裸辞。
就像我当时裸辞后去了北京,由于没有任何准备,投了半个多月简历,一共就接到4个面试,绝大部分投递的简历都是已读不回。
你可能会说我技术很强,面试准备的非常充分,那我是不是可以随时选择离开呢?
你的确会有更多的底气,但是招聘是有招聘旺季的,比如所谓的“金三银四、金九银十”,因为正好处于企业全年、半年总结,企业会根据未来的计划进行人力盘点,释放岗位。但过去这两个节点,比如十一月份到来年一月份,那就是企业的招聘淡季,甚至是裁员季,如果你十月份离职,极容易遇见投递的简历大部分都未读未回。
诸葛亮已经万事俱备,那也得等等东风。
但是,等一等不意味着你什么也不做,你需要积极收集和换工作相关的信息。
改简历、刷题就不说了,现在什么行业比较火热?招聘的要求比起几年前有什么变化?未来什么样得企业最有发展前景?如果离职找工作不顺利,财务状况有没有什么影响?
这些都需要大量信息,并且充满不确定性,所以你需要去主动收集和了解。
当然了,你也不能一直准备下去,就像刷算法、刷面试题这件事,准备的越久,就会陷入边际效应递减,你不可能把所有的知识都学会,对吧?
这时候你就需要给自己制定一个时间框架,比如专心准备3个月,这期间不去面试。3个月后无论准备的如何,都必须让自己开始投递简历面试,避免回避和拖延。
避免直觉
你可能已经了解过很多认知陷阱:确认偏误让我们只寻找支持自己观点的信息;可得性启发让我们高估容易想起的事件发生概率;首因效应让我们过度依赖最初信息。
我举几个找工作容易陷入的认知陷阱。
第一个是「投射偏差」,比如把过去跳槽必涨薪的经验,投射到现在和将来,忽视了市场环境的变化。
18年我去北京时,互联网发展依旧火热,大厂扩招、抢人,程序员跳槽涨薪50%、80%都不是什么难事,如果你在大数据、P2P火热的时候进入相关企业,薪资翻倍的例子屡见不鲜。
可后来随着互联网增速放缓,涨薪越来越难,疫情之后各类企业发展不顺,别说涨薪了,如果被裁员被动找工作,平薪、降薪也都是有可能的。
如果你还按老的认知来,发现怎么涨薪总是不如预期,自然是心理落差极大,如果因为这个拒绝了一些各方面都不错的offer,那就太可惜了。
第二个是「短期结果焦虑」,过于关注短期结果成败,忽略了长远目标和发展。
你做足了准备,兴致勃勃的开始投简历,一连投了十几家都没接到面试,好不容易接到几个面试,结果全都在一面就挂了。
也许你的简历有硬伤,也许是没有准备充分,这很正常,查缺补漏,继续前行就好。
但你不能陷入焦虑和自我怀疑:我履历太差了,好公司根本不会看我的简历;我能力太差了,大厂的面试我根本不可能过。
最可怕的情况就是,因为面试不顺利,仓促入职一家并不满意的公司。

第三个是单一维度决策,面对offer选择时,我们有可能陷入单一维度决策,比如是否大厂,薪资是否足够高,这是我自己总结出来的。
假设你这时候已经拿到了好多个offer,你该选择哪家企业入职呢?你可能特别关注薪资情况,你强烈的倾向于最高薪资的那个offer。你特别在乎名气,于是选择市场上名气最大的那个。
事实证明只考虑一个因素肯定不行,薪资最高的那个可能工作时间长还996,时薪并不比别的offer高。你的确入职了名气最大的那个企业,但做的不是核心业务,绩效不行,技术也没有什么成长。
我之前写过一篇文章,里面介绍了一个简单公式。比如在职业发展中,我觉着几个比较重要的是行业前景、公司文化和具体岗位,薪资当然也是我们衡量的一个重要指标,但其他的因素我们只做参考,而不能作为决策的决定因素。
对于选择offer这件事,我们也可以借助这个思路,识别几个你认为最重要的核心因素进行打分,选择总分最高的那一个。
别考虑太多,也不能考虑太少,这样才能做出最佳决策。
适应局面
即使决策已经做出,一切也并没有结束,你需要持续评估和调整,不断适应新的局面。
而我们面对新局面的反应,在很多时候是有点慢的。
这里我不得不提到AI,我谈不上对AI有着多深的见解,但当今AI巨头的模型,都已经具备了“完成小块的复杂代码”的能力。
我看到网上的一个预测,不出两年,就可以训练出一个可以自我迭代、不断尝试的AI编程高手。
高级程序员,将是最早一批开始被替代的。
当然,被替代的不仅是程序员行业,绘画、设计、金融、编辑,都面临着这个局面。
我提到AI,就是想提醒大家,对于处在行业第一线的我们,对于AI的适应能力有多高?
适应能力强的人,已经逐步用AI去完成越来越多的工作。而适应能力差的人,甚至现在遇见问题还是习惯性的打开搜索引擎,一点一点的翻看别人的资料。
我刚毕业时,深钻技术对职业生涯只有好处,没有坏处。但现在的局面是,如果还一股脑的让自己陷入到源码里面,不如用好AI,解放自己。
面对技术变革,就算没有应用,也要强迫自己了解。
最可怕的就是认为一些变化都与自己无关。
说在最后
做重大决策,主要分四步:看清处境,把握时机,避免直觉,适应局面。
这四步并不只用于跳槽,职业转换、城市迁移、关系选择、生活方式改变,都可以依靠这个模型去思考和行动。
你或许觉着这太麻烦了,但想想我们花了多少时间在鸡毛蒜皮的小事上?可能网购一件物品,为了价格货比三家;吃午饭订外卖,在各种美食间反复纠结;早上为了选择穿什么衣服,不断尝试。
把时间浪费在这些上面,却在重要的决策上匆匆决定,岂不是本末倒置吗?
这是东东拿铁的第88篇原创文章,欢迎关注,喜欢请三连。
来源:juejin.cn/post/7538357382453657626
秋招太卷了!年轻人最缺的不是努力,而是有人即时点拨
2025年的秋招进入高峰。根据多家招聘平台数据,今年平均每个热门岗位竞争比超过 1:500,部分互联网、金融岗位甚至达到 1:2000。在AI筛简历和在线面试逐渐普及的背景下,不少应届生直呼“努力仿佛被系统淹没”。
在这样的环境下,年轻人发现,光靠努力并不足以脱颖而出:
简历反复修改,却依然石沉大海;
面试准备充分,却临场紧张到大脑一片空白;
拿到多个Offer,却在选择上迟迟犹豫。
专家指出,当下年轻人最缺的,不是努力,而是 在关键节点有人给予即时点拨。例如临面前的快速演练、谈薪时的策略建议,或是Offer选择的利弊分析。
近年来,一些新兴职场服务平台开始探索“即时支持”模式。例如,近期上线的 「对圈职场」App,就尝试通过 15分钟即时咨询 + 陪跑辅导 + 职场学习社区 的组合,为年轻人提供低门槛、全场景的职场支持。
业内人士认为,这类探索,或许能在缓解就业焦虑、提升求职质量方面发挥积极作用。对圈职场的出现,也从侧面印证了一个趋势:年轻人需要的不是泛泛的培训,而是更即时、更贴近现实的职场帮助。
收起阅读 »当上组长一年里,我保住了俩下属
前言
人类的悲喜并不相通,有人欢喜有人愁,更多的是看热闹。
就在上周,"苟住"群里的一个小伙伴也苟不住了。

在苟友们的"墙裂"要求下,他分享了他的经验,以他的视角看看他是怎么操作的。
1. 组织变动,意外晋升
两年前加入公司,依然是一线搬砖的码农。
干到一年的时候公司空降了一位号称有诸多大厂履历的大佬来带领研发,说是要给公司带来全新的变化,用技术创造价值。
大领导第一件事:抓人事,提效率。
在此背景下,公司不少有能力的研发另谋出处,也许我看起来人畜无害,居然被提拔当了小组长。
2. 领取任务,开启副本
当了半年的小组长,我的领导就叫他小领导吧,给我传达了大领导最新规划:团队需要保持冲劲,而实现的手段就是汰换。
用人话来说就是:
当季度KPI得E的人,让其填写绩效改进目标,若下一个季度再得到E,那么就得走人
我们绩效等级是ABCDE,A是传说中的等级,B是几个人有机会,大部分人是C和D,E是垫底。
而我们组就有两位小伙伴得到了E,分别是小A和小B。
小领导意思是让他们直接走得了,大不了再招人顶上,而我想着毕竟大家共事一场,现在大环境寒气满满,我也是过来人,还想再争取争取。
于是分析了他们的基本资料,他俩特点还比较鲜明。
小A资料:
- 96年,单身无房贷
- 技术栈较广,技术深度一般,比较粗心
- 坚持己见,沟通少,有些时候会按照自己的想法来实现功能
小B资料:
- 98年,热恋有房贷
- 技术基础较薄弱,但胜在比较认真
- 容易犯一些技术理解上的问题
了解了小A和小B的历史与现状后,我分别找他们沟通,主要是统一共识:
- 你是否认可本次绩效评估结果?
- 你是否认可绩效改进的点与风险点(未达成被裁)?
- 你是否还愿意在这家公司苟?
最重要是第三点,开诚布公,若是都不想苟了,那就保持现状,不要浪费大家时间,我也不想做无用功。
对于他们,分别做了提升策略:
对于小A:
- 每次开启需求前都要求其认真阅读文档,不清楚的地方一定要做记录并向相关人确认
- 遇到比较复杂的需求,我也会一起参与其中梳理技术方案
- 需求开发完成后,CR代码看是否与技术方案设计一致,若有出入需要记录下来,后续复盘为什么
- 给足时间,保证充分自测
对于小B:
- 每次需求多给点时间,多出的时间用来学习技术、熟悉技术
- 要求其将每个需求拆分为尽可能小的点,涉及到哪些技术要想清楚、弄明白
- 鼓励他不懂就要问,我也随时给他解答疑难问题,并说出一些原理让他感兴趣的话可以继续深究
- 分配给他一些技术调研类的任务,提升技术兴趣点与成就感
3. 结束?还是是另一个开始?
半年后...
好消息是:小A、小B的考核结果是D,达成了绩效改进的目标。
坏消息是:据说新的一轮考核算法会变化,宗旨是确保团队血液新鲜(每年至少得置换10%的人)。
随缘吧,我尽力了,也许下一个是我呢?

来源:juejin.cn/post/7532334931021824034
希尔伯特曲线:降维打击与空间填充的艺术
在数学和计算机科学的交汇处,存在着一种令人着迷的几何结构——希尔伯特曲线(Hilbert Curve)。这种由德国数学家大卫·希尔伯特于1891年提出的连续空间填充曲线,不仅挑战了我们对维度的直观认知,更在现代技术领域发挥着举足轻重的作用。
一、初识希尔伯特曲线:维度穿梭的钥匙
希尔伯特曲线的核心在于其空间填充性和连续性。想象一条无限延伸的细线,它以一种巧妙的方式弯曲、折叠,最终能够填满整个二维平面(或更高维度的空间),这就是希尔伯特曲线的魔力。尽管它是连续的,但由于其分形特性,这条曲线在任何一点都不可导。
希尔伯特曲线的构建基于递归的思想。以最经典的二维希尔伯特曲线为例,它从一个正方形开始,将其四等分,然后用一条线段连接这四个小正方形的中心点,形成一个基本的“U”形。接下来,对每个小正方形重复这个过程,不断细分、连接,最终在无限递归下,这条曲线将覆盖整个正方形内的每一个点, 如下图所示。

另一个关键特性是局部性与全局性。 在希尔伯特曲线的映射过程中,相邻的一维线段在高维空间中仍然倾向于保持局部邻近性(尽管并非绝对)。这意味着,在一维序列中相近的点,在二维或三维空间中也往往彼此靠近。
二、希尔伯特曲线家族:多样的空间填充策略
希尔伯特曲线并非孤立存在,它属于一个更大的空间填充曲线家族,每个成员都有其独特的构建方式和应用场景。
- 经典二维希尔伯特曲线: 最基础的形式,奠定了空间填充曲线的基础。
- 三维希尔伯特曲线: 将递归扩展到三维,用于体数据索引和空间数据库。
- 皮亚诺曲线(Peano Curve): 早于希尔伯特曲线,采用“九宫格”分割,但可能产生交叉点。
- 摩尔曲线(Moore Curve): 一种闭合的空间填充曲线,首尾相连,适合循环遍历。
- Z阶曲线(Morton Curve): 基于坐标的二进制交错编码(Morton码),计算高效,广泛用于数据库索引(如Geohash)。
- 自适应变体: 根据数据密度动态调整递归深度,优化存储和查询效率。
三、希尔伯特曲线的深远意义:超越几何的维度
希尔伯特曲线的意义远不止于其几何形态,它在数学、计算机科学、甚至哲学层面都产生了深远的影响。
1. 数学意义:
- 挑战维度直觉: 希尔伯特曲线证明了一维曲线可以覆盖高维空间,颠覆了人们对维度的传统认知。
- 分形几何的早期范例: 它展示了自相似性和无限递归的数学美感,为分形几何的发展奠定了基础。
- 拓扑学应用: 为连续映射和空间压缩提供了理论支持。
2. 计算机科学与工程应用:
- 空间索引: 在数据库中高效处理多维数据(如地图坐标、图像像素),通过希尔伯特排序优化范围查询。
- 图像处理: 将二维图像转换为一维序列,用于压缩或渐进传输。
- 并行计算: 分配高维数据到计算节点时,保持数据的局部性以减少通信开销。
- 路径规划: 机器人导航或PCB布线中,生成覆盖整个区域的连续扫描路径。
3. 哲学与认知影响:
希尔伯特曲线模糊了维度的界限,引发了对“维度”本质的哲学思考,挑战了传统几何学的直观认知。
四、空间填充曲线的对比:各有千秋
| 曲线类型 | 连续性 | 交叉点 | 局部性保留 | 应用场景 |
|---|---|---|---|---|
| 希尔伯特曲线 | 连续 | 无 | 较好 | 数据库索引、图像处理 |
| 皮亚诺曲线 | 连续 | 有 | 较差 | 理论数学 |
| Z阶曲线 | 不连续 | 无 | 中等 | 地理哈希、GPU计算 |
从上表可以看出,不同的空间填充曲线在连续性、交叉点、局部性保留等方面各有特点,适用于不同的应用场景。希尔伯特曲线以其良好的局部性保留和无交叉点的特性,在数据库索引和图像处理等领域表现出色。
总结:维度之桥,应用之光
希尔伯特曲线及其变体不仅在理论数学中揭示了维度的奇妙性质,更在计算机科学中成为处理高维数据的关键工具。其核心价值在于将高维问题映射到低维空间并保持局部性,从而在效率和实用性之间找到平衡。随着大数据和人工智能时代的到来,希尔伯特曲线及其衍生技术将在更多领域展现其独特的魅力和应用价值。 无论是理解宇宙的结构,还是优化数据的存储与查询,希尔伯特曲线都为我们提供了一把穿越维度的钥匙,一座连接理论与应用的桥梁。
来源:juejin.cn/post/7470453022801068042
Go 语言未来会取代 Java 吗?
Go 语言未来会取代 Java 吗?
(八年 Java 开发的深度拆解:从业务场景到技术底层)
开篇:面试官的灵魂拷问与行业焦虑
前年面某大厂时,技术负责人突然抛出问题:“如果让你重构公司核心系统,会选 Go 还是 Java?”
作为写了八年 Java 的老开发,我本能地想强调 Spring 生态和企业级成熟度,但对方随即展示的 PPT 让我冷汗直冒 —— 某金融公司用 Go 重构交易系统后,QPS 从 5 万飙升到 50 万,服务器成本降低 70%。这让我陷入沉思:当云原生和 AI 浪潮来袭,Java 真的要被 Go 取代了吗?
今天从 业务场景、技术本质、行业趋势 三个维度,结合实战代码和踩坑经验,聊聊我的真实看法。
一、业务场景对比:Go 的 “闪电战” vs Java 的 “持久战”
先看三个典型业务场景,你会发现两者的差异远不止 “性能” 二字。
场景 1:高并发抢购(电商大促)
Go 实现(Gin 框架) :
func main() {
router := gin.Default()
router.GET("/seckill", func(c *gin.Context) {
// 轻量级goroutine处理请求
go func() {
// 直接操作Redis库存
if err := redisClient.Decr("stock").Err(); err != nil {
c.JSON(http.StatusOK, gin.H{"result": "fail"})
return
}
c.JSON(http.StatusOK, gin.H{"result": "success"})
}()
})
router.Run(":8080")
}
性能数据:单机轻松支撑 10 万 QPS,p99 延迟 < 5ms。
Java 实现(Spring Boot + 虚拟线程) :
@RestController
public class SeckillController {
@GetMapping("/seckill")
public CompletableFuture<ResponseEntity<String>> seckill() {
return CompletableFuture.supplyAsync(() -> {
// 虚拟线程处理IO操作
if (redisTemplate.opsForValue().decrement("stock") < 0) {
return ResponseEntity.ok("fail");
}
return ResponseEntity.ok("success");
}, Executors.newVirtualThreadPerTaskExecutor());
}
}
性能数据:Java 21 虚拟线程让 IO 密集型场景吞吐量提升 7 倍,p99 延迟从 165ms 降至 23ms。
核心差异:
- Go:天生适合高并发,Goroutine 调度和原生 Redis 操作无额外开销。
- Java:依赖 JVM 调优,虚拟线程虽大幅提升性能,但需配合线程池和异步框架。
场景 2:智能运维平台(云原生领域)
Go 实现(Ollama + gRPC) :
func main() {
// 启动gRPC服务处理AI推理请求
server := grpc.NewServer()
pb.RegisterAIAnalysisServer(server, &AIHandler{})
go func() {
if err := server.Serve(lis); err != nil {
log.Fatalf("Server exited with error: %v", err)
}
}()
// 采集节点数据(百万级设备)
for i := 0; i < 1000000; i++ {
go func(nodeID int) {
for {
data := collectMetrics(nodeID)
client.Send(data) // 通过channel传递数据
}
}(i)
}
}
优势:轻量级 Goroutine 高效处理设备数据采集,gRPC 接口响应速度比 REST 快 30%。
Java 实现(Spring Cloud + Kafka) :
@Service
public class MonitorService {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void collectMetrics(int nodeID) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(100);
executor.scheduleAtFixedRate(() -> {
String data =采集数据(nodeID);
kafkaTemplate.send("metrics-topic", data);
}, 0, 1, TimeUnit.SECONDS);
}
}
挑战:传统线程池在百万级设备下内存占用飙升,需配合 Kafka 分区和 Consumer Gr0up 优化。
核心差异:
- Go:云原生基因,从采集到 AI 推理全链路高效协同。
- Java:生态依赖强,需整合 Spring Cloud、Kafka 等组件,部署复杂度高。
场景 3:企业 ERP 系统(传统行业)
Java 实现(Spring + Hibernate) :
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
// 复杂业务逻辑注解
@PrePersist
public void validateOrder() {
if (totalAmount < 0) {
throw new BusinessException("金额不能为负数");
}
}
}
优势:Spring 的事务管理和 Hibernate 的 ORM 完美支持复杂业务逻辑,代码可读性高。
Go 实现(GORM + 接口组合) :
type Order struct {
ID uint `gorm:"primaryKey"`
UserID uint
Total float64
}
func (o *Order) Validate() error {
if o.Total < 0 {
return errors.New("金额不能为负数")
}
return nil
}
func CreateOrder(ctx context.Context, order Order) error {
if err := order.Validate(); err != nil {
return err
}
return db.Create(&order).Error
}
挑战:需手动实现事务和复杂校验逻辑,代码量比 Java 多 20%。
核心差异:
- Java:企业级成熟度,框架直接支持事务、权限、审计等功能。
- Go:灵活性高,但需手动实现大量基础功能,适合轻量级业务。
二、技术本质:为什么 Go 在某些场景碾压 Java?
从 并发模型、内存管理、性能调优 三个维度,深挖两者的底层差异。
1. 并发模型:Goroutine vs 线程 / 虚拟线程
Go 的 Goroutine:
- 轻量级:每个 Goroutine 仅需 2KB 栈空间,可轻松创建百万级并发。
- 调度高效:基于 GMP 模型,避免内核级上下文切换,IO 阻塞时自动释放线程。
Java 的虚拟线程(Java 21+) :
- 革命性改进:每个虚拟线程仅需几百字节内存,IO 密集型场景吞吐量提升 7 倍。
- 兼容传统代码:无需修改业务逻辑,直接将
new Thread()替换为Thread.startVirtualThread()。
性能对比:
- HTTP 服务:Go 的 Gin 框架单机 QPS 可达 5 万,Java 21 虚拟线程 + Netty 可达 3 万。
- 消息处理:Go 的 Kafka 消费者单节点处理速度比 Java 快 40%。
2. 内存管理:逃逸分析 vs 分代 GC
Go 的逃逸分析:
- 栈优先分配:对象若未逃逸出函数,直接在栈上分配,减少 GC 压力。
- 零拷贝优化:
io.Reader接口直接操作底层缓冲区,避免内存复制。
Java 的分代 GC:
- 成熟但复杂:新生代采用复制算法,老年代采用标记 - 压缩,需通过
-XX:G1HeapRegionSize等参数调优。 - 内存占用高:同等业务逻辑下,Java 堆内存通常是 Go 的 2-3 倍。
典型案例:
某金融公司用 Go 重构风控系统后,内存占用从 8GB 降至 3GB,GC 停顿时间从 200ms 缩短至 10ms。
3. 性能调优:静态编译 vs JIT 编译
Go 的静态编译:
- 启动快:编译后的二进制文件直接运行,无需预热 JVM。
- 可预测性强:性能表现稳定,适合对延迟敏感的场景(如高频交易)。
Java 的 JIT 编译:
- 动态优化:运行时将热点代码编译为机器码,长期运行后性能可能反超 Go。
- 依赖调优经验:需通过
-XX:CompileThreshold等参数平衡启动时间和运行效率。
实测数据:
- 启动时间:Go 的 HTTP 服务启动仅需 20ms,Java Spring Boot 需 500ms。
- 长期运行:持续 24 小时压测,Java 的吞吐量可能比 Go 高 10%(JIT 优化后)。
三、行业趋势:Go 在蚕食 Java 市场,但 Java 不会轻易退场
从 市场数据、生态扩展、技术演进 三个维度,分析两者的未来走向。
1. 市场数据:Go 在高速增长,Java 仍占主导
- 份额变化:Go 在 TIOBE 排行榜中从 2020 年的第 13 位升至 2025 年的第 7 位,市场份额突破 3%。
- 薪资对比:Go 开发者平均薪资比 Java 高 20%,但 Java 岗位数量仍是 Go 的 5 倍。
典型案例:
- 字节跳动:核心推荐系统用 Go 重构,QPS 提升 3 倍,成本降低 60%。
- 招商银行:核心交易系统仍用 Java,但微服务网关和监控平台全面转向 Go。
2. 生态扩展:Go 拥抱 AI,Java 深耕企业级
Go 的 AI 集成:
- 工具链完善:通过 Ollama 框架可直接调用 LLM 模型,实现智能运维告警。
- 性能优势:Go 的推理服务延迟比 Python 低 80%,适合边缘计算场景。
Java 的企业级护城河:
- 大数据生态:Hadoop、Spark、Flink 等框架仍深度依赖 Java。
- 移动端统治力:尽管 Kotlin 流行,Android 系统底层和核心应用仍用 Java 开发。
3. 技术演进:Go 和 Java 都在进化
Go 的发展方向:
- 泛型完善:Go 1.18 + 支持泛型,减少重复代码(如
PrintSlice函数可适配任意类型)。 - WebAssembly 集成:计划将 Goroutine 编译为 Wasm,实现浏览器端高并发。
Java 的反击:
- Project Loom:虚拟线程已转正,未来将支持更细粒度的并发控制。
- Project Valhalla:引入值类型,减少对象装箱拆箱开销,提升性能 15%。
四、选型建议:Java 开发者该如何应对?
作为八年 Java 老兵,我的 技术选型原则 是:用最合适的工具解决问题,而非陷入语言宗教战争。
1. 优先选 Go 的场景
- 云原生基础设施:API 网关、服务网格、CI/CD 工具链(如 Kubernetes 用 Go 开发)。
- 高并发实时系统:IM 聊天、金融交易、IoT 数据采集(单机 QPS 需求 > 1 万)。
- AI 推理服务:边缘计算节点、实时推荐系统(需低延迟和高吞吐量)。
2. 优先选 Java 的场景
- 复杂企业级系统:ERP、CRM、银行核心业务(需事务、权限、审计等功能)。
- Android 开发:系统级应用和性能敏感模块(如相机、传感器驱动)。
- 大数据处理:离线分析、机器学习训练(Hadoop/Spark 生态成熟)。
3. 混合架构:Go 和 Java 共存的最佳实践
- API 网关用 Go:处理高并发请求,转发到 Java 微服务。
- AI 推理用 Go:部署轻量级模型,结果通过 gRPC 返回给 Java 业务层。
- 数据存储用 Java:复杂查询和事务管理仍由 Java 服务处理。
代码示例:Go 调用 Java 微服务
// Go客户端
conn, err := grpc.Dial("java-service:8080", grpc.WithInsecure())
if err != nil {
log.Fatalf("连接失败: %v", err)
}
defer conn.Close()
client := pb.NewJavaServiceClient(conn)
resp, err := client.ProcessData(context.Background(), &pb.DataRequest{Data: "test"})
if err != nil {
log.Fatalf("调用失败: %v", err)
}
fmt.Println("Java服务返回:", resp.Result)
// Java服务端
@GrpcService
public class JavaServiceImpl extends JavaServiceGrpc.JavaServiceImplBase {
@Override
public void processData(DataRequest request, StreamObserver<DataResponse> responseObserver) {
String result =复杂业务逻辑(request.getData());
responseObserver.onNext(DataResponse.newBuilder().setResult(result).build());
responseObserver.onCompleted();
}
}
五、总结:焦虑源于未知,成长来自行动
回到开篇的问题:Go 会取代 Java 吗? 我的答案是:短期内不会,但长期会形成互补格局。
- Java 的不可替代性:企业级成熟度、Android 生态、大数据框架,这些优势难以撼动。
- Go 的不可阻挡性:云原生、高并发、AI 集成,这些领域 Go 正在建立新标准。
作为开发者,与其焦虑语言之争,不如:
- 掌握 Go 的核心优势:学习 Goroutine 编程、云原生架构,参与开源项目(如 Kubernetes)。
- 深耕 Java 的护城河:研究虚拟线程调优、Spring Boot 3.2 新特性,提升企业级架构能力。
- 拥抱混合开发:在 Java 项目中引入 Go 模块,或在 Go 服务中调用 Java 遗留系统。
最后分享一个真实案例:某电商公司将支付核心用 Java 保留,抢购服务用 Go 重构,大促期间 QPS 从 5 万提升到 50 万,系统总成本降低 40%。这说明,语言只是工具,业务价值才是终极目标。
来源:juejin.cn/post/7540597161224536090
小米正式官宣开源!杀疯了!
最近,和往常一样在刷 GitHub Trending 热榜时,突然看到又一个开源项目冲上了 Trending 榜单。
一天之内就狂揽数千 star,仅仅用两三天时间,star 数就迅速破万,增长曲线都快干垂直了!

出于好奇,点进去看了看。
好家伙,这居然还是小米开源的项目,相信不少小伙伴也刷到了。

这个项目名为:ha_xiaomi_home。
全称:Xiaomi Home Integration for Home Assistant。
原来这就是小米开源的 Home Assistant 米家集成,一个由小米官方提供支持的 Home Assistant 集成组件,它可以让用户在 Home Assistant 平台中使用和管理小米 IoT 智能设备。
Home Assistant 大家知道,这是一款开源的家庭自动化智能家居平台,以其开放性和兼容性著称,其允许用户将家中的智能设备集成到一个统一的系统中进行管理和控制,同时支持多种协议和平台。

通过 Home Assistant,用户可以轻松地实现智能家居的自动化控制,如智能灯光、智能安防、智能温控等,所以是不少智能家居爱好者的选择。
另外通过安装集成(Integration),用户可以在 Home Assistant 上实现家居设备的自动化场景创建,并且还提供了丰富的自定义功能,所以一直比较受 DIY 爱好者们的喜爱。

大家知道,小米在智能家居领域的战略布局一直还挺大的,IoT 平台的连接设备更是数以亿记,大到各种家电、电器,小到各种摄像头、灯光、开关、传感器,产品面铺得非常广。

那这次小米开源的这个所谓的米家集成组件,讲白了就是给 Home Assistant 提供官方角度的支持。
而这对于很多喜欢折腾智能家居或者 IoT 物联网设备的小伙伴来说,无疑也算是一个不错的消息。
ha_xiaomi_home 的安装方法有好几种,包括直接 clone 安装,借助 HACS 安装,或者通过 Samba 或 FTPS 来手动安装等。
但是官方是推荐直接使用 git clone 命令来下载并安装。
cd config
git clone https://github.com/XiaoMi/ha_xiaomi_home.git
cd ha_xiaomi_home
./install.sh /config
原因是,这样一来当用户想要更新至特定版本时,只需要切换相应 Tag 即可,这样会比较方便。
比如,想要更新米家集成版本至 v1.0.0,只需要如下操作即可。
cd config/ha_xiaomi_home
git checkout v1.0.0
./install.sh /config
安装完成之后就可以去 Home Assistant 的设置里面去添加集成了,然后使用小米账号登录即可。

其实在这次小米官方推出 Home Assistant 米家集成之前,市面上也有一些第三方的米家设备集成,但是多多少少会有一些不完美的地方,典型的比如设备状态响应延时,所以导致体验并不是最佳。
与这些第三方集成相比,小米这次新推出的官方米家集成无论是性能还是安全性都可以更期待一下。
如官方所言,Home Assistant 米家集成提供了官方的 OAuth 2.0 登录方式,并不会在 Home Assistant 中保存用户的账号密码,同时账号密码也不再需提供给第三方,因此也就避免了账号密码泄露的风险。
但是这里面仍然有一个问题需要注意,项目官方也说得很明确:虽说 Home Assistant 米家集成提供了 OAuth 的登录方式,但由于 Home Assistant 平台的限制,登录成功后,用户的小米用户信息(包括设备信息、证书、 token 等)会明文保存在 Home Assistant 的配置文件中。因此用户需要保管好自己的 Home Assistant 配置文件,确保不要泄露。
这个项目开源之后,在网上还是相当受欢迎的,当然讨论的声音也有很多。
小米作为一家商业公司,既然专门搞了这样一个开源项目来做 HA 米家集成,这对于他们来说不管是商业还是产品,肯定都是有利的。
不过话说回来,有了这样一个由官方推出的开源集成组件,不论是用户体验还是可玩性都会有所提升,这对于用户来说也未尝不是一件好事。
那关于这次小米官方开源的 Home Assistant 米家集成项目,大家怎么看呢?
注:本文在GitHub开源仓库「编程之路」 github.com/rd2coding/R… 中已经收录,里面有我整理的6大编程方向(岗位)的自学路线+知识点大梳理、面试考点、我的简历、几本硬核pdf笔记,以及程序员生活和感悟,欢迎star。
来源:juejin.cn/post/7454170332712386572
离开大厂一年后的牛马,又回到了草原
牛马终究还是回到了草原
大家好呀,今天开始继续更新文章了,最近一个月因为换了城市,调整状态花了不少时间,现在才有些动力继续更新,今天来聊聊最近一年多的经历
1.回二线城市
23年12月的时候,我从北京阿里离职了,回到离家近的武汉,拿了一个国企的offer,也是在那家国企待了一年多的时间。
至于为什么会选择回武汉,主要觉得在一线城市买不起房,而且长期在外离家远,漂泊感太重,还不如早点回二线城市定居下来,免得以后年龄大了更不好回来。所以,当时看武汉的机会主要找稳定的工作,除了国企offer,还拿过高校,以及其他偏稳定的公司offer。综合考虑后,才选的国企
回来之后没到两月,就有些后悔了。虽然回来之前做好了心理预期,工资会降低,只是国企的工资也低的过于少了吧,开始几个月工资只有原来的零头。而且,呆了一段时间后发现,这个国企在北京才是研发中心,武汉这边作为分中心,只是北京的“内包”而已。
项目经理都是在北京,很多还都是校招进去工作才两三年的,就让管武汉这边几个人的工作。这些人也没啥管理经验,就只是不停给底下人施压。而且经常搞的操作就是,项目都是有时间要求的,开始的时候不拉人进来干活,等到时间比较紧的时候,才拉人进来,这就导致武汉的人收到任务时,都是重要且紧急的工作。又或者正常工作日没安排活,等到要放假,或者下班之前,才给安排活,让自行加班完成,故意恶心人
2.上着北京的班,拿着武汉的工资
这个事在24年的时候,已经发过吐槽了,就发张截图看看


3.成长的焦虑
我在北京的时候,除了阿里,之前也呆过一家互联网公司。裁员是比较常见的事情,虽然我还没被裁过。
国企这边虽然说相对比较稳定,但是自从我这批大概20个人入职后,感觉在走下坡路了,不仅福利变少,而且也变卷了,还传出后面也要搞末尾淘汰的事。我呆了一年的时候,感觉比在一线时更害怕,假如我在这里被裁了,或者呆满三年不续签了,可能很难再找到合适的工作了,自身成长和工作年限严重不匹配,想到这,我终于还是下了决定再去一线城市
找下家的经历并不顺利,国企的项目可以说就是玩具而已,完全拿不出手。只能拿之前阿里的项目去讲。有些一线互联网大厂,面试了好几轮,好不容易都过了。在焦急等待了数周后,最后给我说横向比较有更合适的了,就不考虑了。其实大家也都明白是因为啥原因不给发。
4.空窗期
经历了几个月的找工作经历后,终于是拿到上海一家公司offer,于是也就顺理成章准备跑路了。趁着中间有半个月的空闲时间,去西边青海和西藏游玩了一次。那边景点之间距离远,在携程上报跟团游就行,价钱不高,比较推荐去青海游玩,那的牛肉和羊肉非常新鲜,值得尝试,3天的时间,每天都能看不一样的风景。






5.上海
已经到上海快两个月,开始逐渐习惯天天下雨的节奏,现在下班还是比较早的,下班的时候还能见着落日,比较WLB,没有互联网大厂那么的卷,却也是有些压力的。下面是第一周下班时路上的照片

今天就写到这吧,下次有新鲜事再分享~
来源:juejin.cn/post/7522315126491856923
AI一定会淘汰程序员,并且已经开始淘汰程序员
昨儿中午吃着饭,不知道为啥突然和同事聊起来AI发展的事儿了。虽然我们只是"🐂🐎",但是不妨碍咱们坐井观天,瞎扯淡聊聊天。
他的主要观点是:现阶段的AI绝对无法取代程序员,大家有点过度恐慌了。AI是程序员的工具,就像从记事本升级到IDE一样。

我的主要观点是:AI一定会取代大量的程序员,尤其是初级程序员。后续程序员岗将在软件公司内的比重降低,取而代之的是产品、需求和算法岗。
诚然,他说的也有一定的道理,就目前AI发展的速度和质量来看,其实大家的确有点儿过度恐慌了。
AI的确在一定程度上替代的程序员的工作,但是大多内容仍然是程序员群体在产出,这个是不容否认的事实。
不过另一个不容否认的事实是,我们越来越依赖AI了。原来大家写代码一般都是啥不会了,就直接去网上搜。比如说js怎么截断从第2位到最后一位,想不起来了,搜一搜。
现在有了AI,一般的操作都是在上面写个注释,然后回车一下,AI会自动帮你补全代码,连搜的功夫都省了。
由此俺也big胆的预言一把,CSD*、掘*、百*这些资讯类,尤其是做程序员这个方向的资讯网站会越来越没落。
原因是:有了问题,但是没有了搜索。没有搜索就没有共享解决方案的必要,因为没人看。没人看所以不再有人分享,最后Over。
Ps:或许我被啪啪打脸呢?
之前的AI编码工具我就有在用,包括阿里的通义,百度的文心,或者是IDEA里面内嵌的编码助手,以及之前CodeGeex等等吧,确确实实是提高了效率的。
这个阶段其实重点提升的是搜索的效率,有问题直接问AI,AI直接给出答案。95%的答案都是正确的,不必再去网上费劲巴拉的找了。

后来更上一层楼,Claude2、3直接翻倍的提升了开发效率。我不必再实现了,我只需要阐述需求,AI会自动给出答案。我需要的是把内容Copy下来,然后整合进我的工程里面。
后面的工作就还是原来的老步骤了,测试一下,没啥问题的话就发版,提测了。
但是现在这个阶段又进步了,TREA2.0 SOLO出道直接整合了全流程,整个过程直接变成了"智能体"把控,不再需要我的干涉了。

我需要做的工作就是阐述清楚我的需求,然后让TREA去实现。这个过程中可能也就只需要我关注一下实现的方向不要有太大的偏差,及时纠正一下(但是到目前为止没遇到过需要纠正的情况)。
也就是说,现在AI已经从原来的片面生成代码,到后面的理解需求生成单文件代码,到现在生成工程化代码了。
而我们的角色也从一个砌墙工人,拿到了一把能自动打灰的铲子。
到后面变成一个小组长,拿着尺子和吊锤看他们盖的墙有没有问题。
到现在变成包工头看着手底下的工人一层层的盖起大楼。
但是!
你说工地上是工人多,还是组长多,还是包工头多?真的需要这么多包工头嘛?
来源:juejin.cn/post/7530570160840458250
奋斗在创业路上的老开发
前言
一个老🐮🐴的吐槽。 水水文章。不喜勿喷~
现状
看过我之前帖子的小伙伴了解过 我现在在创业的路上越走越远。痛苦面具又带上了。 每天就是处理不完的事情。层出不穷的状况。各种乱七八糟的电话。处理不完的工作。在这个过程中学到了很多技术之外的东西。看到了以前看不到的东西。同样的。也渐渐放弃了属于一个开发者的身份
自己做了这么多年的技术。回头看看其他同期的小伙伴。要么已经开始玩鸿蒙。或者小程序。或者其他的等等等。
自己其实很早就涉猎。但是绝对谈不上精通。现在年纪也大了。发现精力真的有限。而且也发觉学不动了。渐渐的就变成了守护自己的一亩三分地。 技术也在降低。
有心想去学习一下鸿蒙。感觉不难。第一是没系统的时间去专门学习。二是认为如果发展需要。可以选择招聘动这个技术的人去完成这部分工作。自己没必要去学。
碎碎念
公司现在也慢慢开始扩招。算是慢慢走上正轨。业务页越来越多。同样的压力页越来越大。毕竟咱现在可没那么好运气。有人愿意给我钱让我去玩。都是自己的真金白银。出现任何的问题都可能是致命的。
说道招聘 。哎。最近一周都是在面试。一直找不到合适的人。或者遇到合适的 人家瞧不上咱这小门小庙的。属于是难。
写在最后
作为技术出生的牛马。对于技术始终是热爱的。然而显示就是现在就是慢慢的脱离了技术的身份。有更多需要我去做的事情。也有更多值得我去做的事情。 希望财富自由。漫漫长路。还远的很啊~
给年轻人建议
有点装大尾巴狼了。 勿喷哈。 因为最近一直在面试。其实也有很多应届生。我是不反对应届生的。相反我很喜欢带小朋友。而且也带过不少小朋友。
但是很多应届生给我的感觉就是。虽说咱这行收入相比其他行业要好一点。但咱这小门小庙的 也不是应届生张口8K咱能用得起的啊。毕竟小公司。我比较穷。。
不少应届生给我的感觉是心浮气躁。并没有对技术的敬畏。与之带来的是基础的不扎实。这很大程度上限制了自己的上限的。
来源:juejin.cn/post/7529799737702826022
一个“全局变量”引发的线上事故
你正在给一家 SaaS 客户做「企业级仪表盘」项目。
需求很简单:把 20 多个子系统的实时指标汇总到一张大屏。
为了“图省事”,你在入口文件里顺手写了这么一段:
// main.js
window.dashboard = {}; // 🔍 全局缓存
window.dashboard.cache = new Map(); // 🔍 存接口数据
window.dashboard.refresh = () => { // 🔍 供子系统调用
fetch('/api/metrics').then(r => r.json())
.then(data => window.dashboard.cache = new Map(data));
};
上线两周后,客户反馈:
“切到别的标签页再回来,大屏偶尔会白屏,刷新又好了。”
排查发现,Chrome 在内存紧张时会 回收后台标签页的 JS 堆,但 window 对象属于宿主环境,不会被回收。
结果:
- 旧的
dashboard引用还在,但闭包里的Map被 GC 清掉,变成空壳; - 子系统继续调用
window.dashboard.refresh,拿到的永远是空数据; - 页面逻辑崩溃,白屏。
解决方案:三层防护,把风险降到 0
1. 表面用法:用 WeakMap 做“软引用”
// 把全局缓存改成弱引用
const cache = new WeakMap(); // 🔍 不阻止 GC
window.dashboard = {
get data() { return cache.get(document); }, // 🔍 与当前文档生命周期绑定
set data(v) { cache.set(document, v); }
};
这样当用户切走标签页、文档被卸载时,cache 自动释放,切回来重新初始化,白屏消失。
2. 底层机制:为什么 window 不会被 GC?
| 层级 | 角色 | 生命周期 | 是否可被 GC |
|---|---|---|---|
| JS 堆 | 闭包、普通对象 | 无引用即回收 | ✅ |
| Host 环境 | window | 与标签页同生同灭 | ❌ |
| 渲染进程 | GPU 纹理、DOM | 标签页关闭后统一清理 | ✅ |
结论:window 是宿主对象,生命周期长于 JS 堆,挂上去的东西如果强引用 JS 对象,会导致“僵尸引用”。
3. 设计哲学:把“全局”变成“注入”
与其在 window 上挂变量,不如用 依赖注入 把作用域限制在模块内部:
// dashboard.js
export const createDashboard = () => {
const cache = new Map(); // 🔍 私有状态
return {
refresh: () => fetch('/api/metrics')
.then(r => r.json())
.then(data => cache.clear() && data.forEach(d => cache.set(d.id, d)))
};
};
// main.js
import { createDashboard } from './dashboard.js';
const dashboard = createDashboard(); // 🔍 生命周期由模块控制
应用扩展:可复用的配置片段
如果你的项目必须暴露全局 API(比如给第三方脚本调用),可以用 命名空间 + Symbol 双保险:
// global-api.js
const NAMESPACE = Symbol.for('__corp_dashboard__');
window[NAMESPACE] = { // 🔍 避免命名冲突
version: '2.1.0',
createDashboard
};
环境适配说明:
- 浏览器:Symbol 在 IE11 需 polyfill;
- Node:同构渲染时
window不存在,用globalThis[NAMESPACE]兜底。
举一反三:3 个变体场景
- 微前端基座
用window.__MICRO_APP_STORE__传递状态,但内部用Proxy做读写拦截,防止子应用直接篡改。 - Chrome 插件 content-script
通过window.postMessage与页面通信,避免污染宿主全局。 - Electron 主进程/渲染进程
用contextBridge.exposeInMainWorld('api', safeApi)把 API 注入到隔离上下文,防止 Node 权限泄露。
小结:
把 window 当“公告栏”可以,但别把“保险箱”也挂上去。
用弱引用、模块化和依赖注入,才能把全局变量的风险真正关进笼子里。
来源:juejin.cn/post/7530893865550675968
拥有自由的人,会想什么是自由吗?
拥有自由的人,会想什么是自由吗?
这个问题很动人。
就像从不缺氧的人,不会意识到自己在呼吸;只有气压骤降、肺部抽痛、窒息临近,你才突然意识:空气原来不是理所当然的东西。
自由也是一样的。它真正被觉察的时候,往往是在你被拿走的时候。
不是所有人都有幸拥有“思考自由”的资格——更大的现实是,大多数人连“自由”这个词,在生活中都用不上。
但更残酷的问题是:一旦你开始思考自由,你可能就已经不再自由了。
意识是自由的开始,还是终结?
我们都羡慕小孩的自由,羡慕他们想哭就哭、想跑就跑。那是因为他们没有太多意识,不懂责任,不预设后果。他们拥有的,某种程度上就是我们说的“纯粹的自由”。
但我们一旦有了意识,就不得不开始自我规训。
你不能说错话,不能做错事,不能轻易违背别人的期待,也不能轻易违背自己的设定。这时候,自由就变成了一个带着锁链的词——它不再是“你想干嘛就干嘛”,而是“你要先知道你干嘛,然后想清楚值不值得干”。
你开始意识它,珍惜它,运用它。听上去很高尚,但自由就没那么轻盈了。你得为每一个选择负责。你得考虑代价。你得思考背后有没有人被伤害,代价是否能承受。那时候你拥有的自由,不再是“想干嘛就干嘛”,而是“想清楚还能不能干”。
于是我们陷入悖论:越意识自由,就越离自由远。
真自由,是不是只能不想自由?
也许真自由的极致状态,就是你不再思考自由。
你骑车穿过黄昏,不想目标,不管导航,只有风。那一刻你自由得像只鸟——不是因为你想清楚“我现在自由”,而是因为你根本没想。
但人做不到这一点。
人思考,自我意识,把自己从自然的状态中拉出来。他要赋予意义,要预测后果,要制定计划、要写年中总结。“思考”是人成为人的标志,但恰恰是这种人性,把自由给污染了。
你可以试着淡化思考和责任,去贴近那种“纯粹的自由”。
但走到尽头,你会发现,那个状态更像动物,或者神明——不是人。
佛陀顿悟时抛弃自我,道家讲“无为而无不为”,他们都靠剥离世俗意义、剥离责任来获得自由。但代价是:你不再是你了。你不再参与、不再牵挂、不再卷入——你从人间抽身而出。
那还是你想要的吗?
你想要的自由,真的是那种不思考、不负责、无我无念的“纯粹自由”吗?还是你其实想要的是“有方向、有意义、有选择权的自由”?
那就不是“纯粹的自由”,而是“人的自由”了。
被命名,被负重,被理性打磨过的一种自由。
成年人的自由,成熟还是无奈?
很多人问:我们活在这种“既不能无意识、又不能无限选择”的自由状态里,算不算一种折中?
是深刻的选择,还是没办法的接受?
我想,这两种说法都对。
是选择的深刻,是因为我们终于知道,自由不是想干嘛就干嘛,而是想清楚干嘛还敢干。我们学会了在有限中谋局,在责任中行事,在约束中寻找空间。
是无奈的接受,是因为这世界本就不为个体设计。你生而有父母、有文化、有制度、有边界,你不是赤条条的自由人,而是注定被驯服的社会动物。
所以这就是我们大多数人的状态:在责任和意义之间拉扯,在妥协与坚持中微调。我们既不彻底自由,也没有完全被束缚。我们像在悬崖边站着,一边看风景,一边找落脚点。
真自由的瞬间:不解释、无恐惧、自己买单
有没有真正自由的时刻?有。
也许它不是持续性的,不是状态,而是一个个“瞬间”:
- 你做了一个决定,没有任何人强迫,也没有任何人能为你负责,但你依然选了它。
- 你拒绝了别人的定义,不害怕后果,不需要解释,也不留退路。
- 你明知代价高昂,但你还是咬牙说:“是我选的。”
这些时刻,就是成年人的自由瞬间。它不一定光鲜,但它是真实的。
不是没有限制,而是你在限制中还敢动,还想选,还愿意承担结果。
小时候我们追求的自由,是不要规则、不要约束。
长大后我们追求的自由,是在规则中拥有自己的边界感,在约束中活出自己的形状。
我们不会再轻易喊口号,也不会高谈“我要自由”。因为我们知道,自由并不是要来讲的,而是用来活的。
自由从来不是站在天台上的呼喊,而是你在清晨醒来,决定今天以什么方式活。
有些人一生都在寻找自由,却不知:
你敢为自由付出代价的那一刻,你就已经自由了。
推荐阅读
什么是好婚姻?一场人类与AI直指婚姻本质的深度对话,带你认清自己
互联网打工人如何构建稳定的社会身份?——从腾讯离职到圈层断崖的思考
互联网人,为什么你越来越能干,路却越走越窄?换个体制内视角看看
从“奶妈”的消失看“母职外包”:自由是建立在别人无法选择的人生之上
来源:juejin.cn/post/7526820622878572587
程序员如何在家庭、工作、健康之间努力找平衡
程序员如何在家庭、工作、健康之间努力找平衡
前言
作为程序员,我们每天都要面对 工作、家庭、健康 的三重压力。加班是常态,学习新技术是必须,家人的期待也不能忽视,而自己的身体却在无声抗议……
如何在代码、生活和健康之间找到平衡? 今天,我想分享自己的实践心得——时间管理、高效工作(甚至合理摸鱼)、坚持运动和培养爱好,让生活不再只有996。
1. 时间分配:你不是没时间,只是没规划
很多人抱怨"太忙了,根本没时间",但其实:
- 时间就像海绵里的水,挤一挤总会有
- 关键在于优先级,而不是时长
(1)工作日时间分配(参考)
| 时间段 | 安排 | 核心原则 |
|---|---|---|
| 7:00-8:00 | 早起1小时 | 运动/阅读/学习(不碰手机) |
| 9:00-12:00 | 高效工作 | 处理复杂任务(大脑最清醒) |
| 12:00-13:30 | 午休 | 吃饭+小睡20分钟(不刷短视频!) |
| 14:00-18:00 | 工作+摸鱼 | 穿插休息,避免久坐(后文讲摸鱼技巧) |
| 19:00-21:00 | 家庭时间 | 陪家人,带娃儿出去耍(儿子现在一岁一个月)) |
| 21:00-22:30 | 自我提升/放松 | 学习、兴趣、轻度运动 |
| 23:00前 | 睡觉 | 保证7小时睡眠 |
关键点:
- 早起1小时 > 熬夜3小时(效率更高,不影响健康)
- 午休小睡能提升下午效率(NASA研究证实)
- 晚上固定家庭时间(让家人感受到你的存在)
2. 上班摸鱼的正确姿势(高效工作法)
摸鱼 ≠ 偷懒,而是 科学调整工作节奏,避免 burnout(职业倦怠)。
(1)合理摸鱼技巧
✅ 番茄工作法:25分钟专注 + 5分钟休息(刷掘金、喝水、拉伸)
✅ 每1小时起身活动:接水、上厕所、简单拉伸(预防颈椎病)
✅ 利用自动化工具:写脚本省时间(比如自动生成周报、批量处理数据)
✅ 学会"战略性拖延":非紧急需求先放一放,等PM改需求(你懂的)
(2)减少无效加班
❌ 无意义会议:能异步沟通的绝不开会
❌ 过度追求完美:代码能跑就行,别陷入"过度优化陷阱"
❌ 盲目卷工时:效率 > 工作时长,早点干完早点走
摸鱼的核心是:用更少的时间完成工作,把省下的时间留给生活。
3. 下班后:运动 + 兴趣,找回生活掌控感
(1)运动:程序员最值得的投资
- 每天10分钟拉伸(改善肩颈酸痛)
- 每周3次有氧运动(跑步、游泳、骑行)
- 利用通勤时间运动(骑车上班、步行回家)
(亲测有效) 自从坚持运动,我的腰不酸了,debug效率都提高了!
(2)培养兴趣爱好,对抗职业倦怠
- 学一门非技术技能(摄影、吉他、烹饪)
- 参加线下活动(技术沙龙、运动社群)
- 每周留出"无屏幕时间"(比如读书、拼乐高)
生活不能只有代码,否则你会变成一个无聊的人。
4. 家庭时间:质量 > 数量
- 每天30分钟专注陪伴(不刷手机,认真听家人说话)
- 周末至少半天家庭日(哪怕只是逛超市、一起做饭)
- 重要日子提前安排(生日、纪念日,绝不缺席)
孩子不会记住你加了多少班,但会记住你是否陪他踢过球。
结语:平衡是动态的,不是完美的
程序员的生活就像 多线程编程——工作、家庭、健康,每个线程都要分配好资源,否则就会死锁。
我的经验是:
- 工作时间高效摸鱼,减少无效加班
- 下班后运动+兴趣,保持身心健康
- 家庭时间全心投入,不让代码侵占生活
掘友们,你们是如何平衡工作、家庭和健康的?欢迎在评论区分享你的经验!
(如果觉得有用,点个赞吧~ 🚀 你的支持是我分享的动力!)
关于作者
一个拒绝996的程序员,相信 代码是为了更好的生活,而不是取代生活。
关注我,了解更多程序员成长 & 生活平衡技巧!
来源:juejin.cn/post/7520066847707643915
你有多久,没敢“浪费”点时间了?
引言
前两天有个朋友劝我:“你写作一年半了,再不搞点产品变现,继续写作两三年,可能还是原地踏步。”
写了一年半,80多篇文章,没涨粉、没变现、也没10w+。很多人觉着我白干了,可我反而觉着,这是我这几年做的最对的一件事情。
现在回头看看,真正让我成长的,恰恰是那些“什么都没做”的时光。
浪费时间才能感受到自由且主观的愿望
我们这一代人对时间的利用,已经开发到了极致,有着极强的目的性。
高中时,排队打饭背单词,午休趴在床上背公式。
大学毕业,为了面试背八股文、刷算法。
在大厂,一空下来就去研究新技术、优化工作流......
我从未停下来过,连休息都像在为下一次奔跑而准备。
我们太怕浪费时间了。
怕没成果,怕落后,怕被这个飞速发展的社会淘汰掉。
可你想想,我们来到这个世界,不应该是来探索和体验的吗,我们看似高效利用了时间,可有多少时间是真的为了你自己呢。
上篇文章我提到,回到济南之后,相比在北京有了更多空闲时间,并且开始“补偿性浪费”,刷短视频、打游戏、炒股,算得上不务正业。
有一天孩子睡觉后,我从8点刷抖音刷到凌晨,但没有记住任何内容,那一刻我有一种无所事事的空虚感。
于是我开始换口味,刷一些技术社区、公众号文章。偶尔点进一些作者的首页,我发现他们很多并不是大V,也没有露脸,但写的文字有一种特别的力量。
他们写自己的经历、认知的变化、对技术和生活的思考,字里行间有诚意也有深度,我有点羡慕,也有点触动。
既然他们可以写,我也可以。
那一刻我才想起来,我好像很早之前就喜欢写东西,只不过后来成家立业,一路奔波,把这件事丢在了脑后而已。
这么多年,我总是忙着成为别人期待的样子,却很少问自己一句:我到底喜欢什么?
于是我开始尝试着表达自己,一开始不为流量也不为变现,就只是为了找回一点属于自己的空间,
现在回头看,那段“虚度光阴”的日子,并不是浪费,而是我停下来,等到了那个被遗忘很久的自己。
时间看似浪费,但是在塑造你
有一次晚上睡觉前,随手打开了一篇去年写下的文章。
看着看着感到睡意全无,逻辑混乱、语句稚嫩,没有原创的观点,更没有什么进步,可怕的是这样的文章我重复了这么多遍,我忍不住怀疑自己这一年到底在干些什么。
还有一次我花了4、5天写下了3000字,写完读了一遍,发现整个逻辑有些牵强,于是我把写下的内容挪到了“回收站”里,那一刻我感觉我自己浪费了好几天的时间。
这些文章,没有涨粉,也没有变现,也没写出个10w+,那种感觉我自己都很难说清楚,明明花了时间和精力,却有一种什么都没留下的“无力感”。
有几个一起做公众号的朋友,已经走通了自己的商业闭环,而我却连个精准的定位都没有。有一段时间我经常会陷入自我怀疑,我这样的坚持到底有没有意义。
一直以来好像都很着急,我习惯了“投入—产出—收益”的闭环,反倒忘了有些事情短期就是看不到结果。
可就是在这样反复挣扎的过程中,我好像有了一点变化,并不是我变得更高效了,而是我越来越清楚自己想表达些什么,想成为什么样的人。

我做自媒体之初并没有定位,可慢慢的我在过去80多篇文章中,我慢慢发现了几条主线。
比如作为这个时代的一个普通人,我喜欢分析一下时代困局,比如越来越卷的互联网,比如AI飞速发展下,我们面临的存在主义危机;
我热衷谈论认知提升的话题,如果我们要和那些优秀的人去对比,我们会发现除了财富和见识,差距最大的可能是认知边界;
我会谈论一些写作相关的东西,因为写作在这个人人都可以是一个品牌的时代,写作本身就是竞争力。
这几个方向不是我刻意设计出来的,而是过去敲下的每一个字塑造出来的。
我想起乔布斯在斯坦福大学演讲时分享的故事,乔布斯曾在大学退学后,痴迷于书法,选修 了一门看似“无用”的课程:书法美学。
直到十年后,他在打造第一代 Macint0sh 时,那些关于字体的记忆突然涌上心头。他让电脑第一次有了漂亮的字体系统,正是这件“没用的事”,让 Apple 成为了极少数“兼具科技与艺术”的品牌。
很多事情只有回头看,点才会连接成线,你想想是不是这样。
而这一切的前提是:你愿意为此“浪费时间”。
我现在怎么与时间相处的
最后一点想聊聊提升效率这回事——真正的高效,不是把时间填满,而是敢于浪费一些时间。
有孩子的人一定都有体会,娃绝对算的上是一个「时间剥夺兽」。
我为了抢夺时间,做了特别多的尝试:比如孩子一安静下来,我就赶紧打开手机看篇文章;给娃刷奶瓶刷碗的时候,我就打开听书;甚至陪孩子的时候,嘴上给他讲着故事,脑海里还不停的想一些自己的事情。
我一直试图绷紧脑海里的一根弦,觉着只要把时间用满了,就没有浪费。
但现实是,我越来越累,状态越来越差,效率越来越低。
其实我们没必要给自己较劲。
直到读了《超高效》这本书,我才意识到,大脑的原始设定,并不是持续“高负荷”的,而是分成了三种运行状态,符合幂律分布的节奏。

横坐标代表了工作强度,纵坐标代表频率。书里面列举了很多人类学家对原始部落的观察:那些采集、狩猎为生的人,绝大部分时间都是在放松,走走停停,一点也不忙碌。只有在必要的情况下,才会去长时间奔跑去追踪一个猎物,而且干一次得休息好几天。
大部分时间做轻松的事情,偶尔上个强度,才是我们人类天然适合的状态。
而我们日常的工作和生活却反过来了,试图每小时都高产,每天都有 产出,哪怕放假都不敢停歇。
你想想是不是很多人都这样?多少大厂的程序员,被一个bug卡住半天,却死盯着屏幕不愿站起身。明明已经困的上下眼皮打架,还是逼着自己熬夜敲着代码。领导看着没完成的工作量很大,就强迫大家周六周日加班赶进度。
你想想你身边是不是还有另一种人?
你在工位磨磨蹭蹭写代码的时候,同事下楼散散步,买了杯咖啡,再次坐回工位上时,一个小时的工作量比你半天的还要多。
更讽刺的是,代码质量还比你高。
我们为什么不允许自己休息休息呢,让自己“浪费”点时间呢?
后来我做出了个改变,我再带孩子出去玩的时候,试着清空大脑,绝不再想下一篇文章的选题,也不想工作上的事情,就是专心的陪着孩子玩。他跑我就追,他笑我便笑,他想要只小虫子,我就抓只蚂蚁放到他手里。
看似一整天我都“没干正事”,可大脑深度放松之后,迅速让我进入高效状态。有时候写着写着没思路了,下楼转一圈卡点就能被解开。
我突然认识到,娃哪是“时间剥夺兽”,而是一个提醒我“别太紧绷”的小天使。

你也可以当自己的小天使。
如果你感到很累,就去看会轻松的小说、看看搞笑的短视频吧,只要让自己的注意力放松下来就好。如果你很累,还对工作和生活的事很担心,就出去跑一圈、打局游戏或者正念冥想,先把那个担心放下再说。
更简单的方法是订一个闹钟,千万别让自己持续工作超过90分钟,15分钟的小睡能让你迅速恢复精力。
你需要停一停,你值得等一等。
说在最后
现在越来越多的年轻人,哪怕是换份工作,都不敢在这个时候多休息几天。比如我自己,几次跳槽,从来都是今天离职,明天入职。
“浪费时间”说起来容易,可我们心理的的确确存在一些不安全感:怕别人说自己躺平,怕简历又多出一个空档期,更害怕自己没有薪资无法证明自己的价值。
可你知道吗,这些不安全感,并不是我们自身的问题,而是这个时代的结构性压力。
教育体系从小把“高效”描述成美德,互联网把内卷和35岁危机当成噱头大肆宣传,自媒体正贩卖着“日入过万”、“自由职业”的焦虑。
可丁可卯,做每一件事都只注重效率绝不浪费时间,一天到晚跟打仗一样连说闲话的时间都没有,很难做真正重要的事,高水平工作需要浪费时间。
你有多久,没允许自己浪费点时间了?
这是东东拿铁的第83篇原创文章,欢迎关注。
来源:juejin.cn/post/7522187483761950771
技术越来越好,但快乐越来越少
引言
你还记得,上一次真正感受到快乐,是在什么时候吗?
认真想了想,我好像很久没有体会过那种真正让人开心的时刻了。朋友和家人问我最近怎么样,我会回答“还行”、“还不错”,但实际上家庭的琐事,工作的压力,对未来的焦虑,让我连半刻的放松都是一种“奢侈”。
这种状态不只我一个人,身边的朋友也是如此,日常聊天里被越来越多的烦、忙、累填满,有时候甚至“无聊”都成为了一种常态。
可我们小时候,一件新衣服、一个新游戏、一集刚更新的《火影忍者》就能让自己兴奋得整夜睡不着觉。
而现在,曾经喜欢的游戏懒得打开;过去喜欢约上三五好友聚会,现在休息的时候只想窝在家里;哪怕是自己最喜欢的动漫和电影,也没有按下播放键的冲动。
是因为我们长大了、变成熟了,身上的担子越来越重,以至于连快乐都无处安放了吗?
如果你对凡事都提不起兴趣,找不到快乐的方向,那得小心了——心理学上有一个术语,叫做「快感缺乏症」。长期的快感缺失会让我们失去对生活的敏感度,不仅难以感受快乐,还容易陷入负面情绪无法自拔,还有可能导致抑郁。
那么——快乐为什么消失了?我们又该如何找回它?
要找回快乐,就要从我们那个既熟悉又陌生的名字说起:多巴胺。
多巴胺不是快乐源泉
很多人以为,多巴胺是“快乐荷尔蒙”,但其实,它并不直接带来快乐,而是——激励。它并不会让你沉浸在此刻的满足,而是让你对现状“不满足”。它让我们不满足于现状,而是不断前进。
多巴胺能强烈驱动动机,但是它的激励效应转瞬即逝。一旦我们吃饱喝足、或者满足了我们的什么愿望之后,多巴胺的奖励作用就会消失,促使着我们去寻找下一份刺激。
在远古时代,这对于人类来说是一个非常重要的生存机制。因为食物短缺,安全难求,原始人几乎需要用80%的时间去觅食和寻找庇护上。大脑通过分泌多巴胺,促使他们保持求生欲,永不停歇。
然而到了现代社会,我们的生活方式彻底发生转变,而大脑的运作方式没有得到进化。于是大脑的多巴胺通路被频繁激活,远超我们所能接受的频率。
除了食物和性这些本能,酒精、电子游戏、网购,甚至是社交媒体的点赞,都在无时无刻挑动着我们体内的多巴胺。原始人辛苦一天才能换回的一丝快感,我们轻而易举的就能让它泛滥。

快乐太容易得到了,于是它反而越来越难感受到了。
多巴胺会激活「D2」型受体, 它的特点是收到太多多巴胺之后会产生“脱敏”,并且还会启动抑制机制,一旦被过度刺激,就会容易“疲劳”,最终让我们变得迟钝、不再敏感。
其实还有另一个罪魁祸首是「皮质醇」,它由肾上腺分泌,能够加速我们的代谢和心跳,让我们随时应对可能出现的威胁,让我们处于专注紧张的状态,但是它会抑制多巴胺的释放。
其实这也是远古时期人类的一种自保机制,可是现代社会节奏忙碌紧张,我们时刻都在为某些事情感到焦虑,比如学习成绩没能提高,工作迟迟没有涨薪,甚至是领导安排的任务马上到了Dead Line。
人体的压力系统,本身是为了突发事件而准备的,并不适合现代社会全天候的压力输入,在随时随地都能接收到各种信息的智能时代,我们的压力系统也被滥用了。
最终结果就是,即使身边的事物都在营造愉悦感,我们也很难感受到愉悦了。
重拾快乐
有一本书叫《消失的多巴胺》,作者在书中给我们提供了一个治愈快感缺乏症的方法,叫做「行为激活法」,这个方法非常简单,用一句话总结就是:记录情绪,列出快乐清单,开始行动,感受快乐,锁定美好。
那具体怎么做呢?首先你要先记录下自己的情绪的初始情况,然后持续记录变化,当你看到变化的发生,你就会有坚持的动力。
然后,找到自己喜欢的事情。你可以为自己列一份快乐清单,比如看电影、逛街,甚至是浇花、换一身新衣服,或者是去买一杯自己喜欢的咖啡,都可以。
接着就是按照清单来行动了,可我们不开心的时候有一个表现就是只想躺平,没有做事的动力。作者告诉我们,在没有做事动力的时候,做事本身就能打破缺乏动力的循环,你应该打消那些让你退缩的念头,说了就去做!
一旦有了行动,心情就可能得到改善,这时候我们就要抓住快乐。方法非常简单,因为我们的大脑一次只能处理一个想法,我们在感受到快乐的时候,集中注意力,在快乐的时刻什么都不想,用心去感受这种体验。
就是在你感受到快乐的时候,别想领导安排的工作,别想马上要还的信用卡和房贷,就感受当下的快乐。
一项研究发现,大脑腹侧纹状体区域的长时间激活与维持积极情绪和奖励直接相关,通过集中精力体会奖励时刻,可以保持高水平的心理健康,同时降低皮质醇的分泌量。
最后一步就是锁定美好时刻,最简单的做法就是感恩。有一种非常流行的方法是写感恩日记,在一天结束时,写下今天你所感激的经历。许多研究都表明,感恩可以增加大脑奖励通路中多巴胺的分泌,大脑会鼓励里去寻找更值得感恩的事物,产生正反馈。
写到这里,我感觉有点疲惫,于是我下楼,站到了阳光底下。

阳光很刺眼,我下意识闭上了眼睛,任由太阳铺满脸庞。阳光有些刺眼、有些灼热,但那一刻,但似乎有某种能量慢慢渗到身体内,驱散了心里的疲惫。
我不和同事说话,不考虑手头的工作,也不去想生活的琐事。只是站在那里,感受阳光,感受微风拂过脸颊,感受自己活在当下。
几分钟而已,心里好像解开了某个结,整个人都变得放松下来。
重拾快乐,其实并不难,其实并不是快乐离我们远去了,而是我们被快节奏的生活裹挟,忘记了如何该寻找它。
到这里,你或许已经从烦躁的情绪中脱身,重新感受到生活中久违的松弛和愉悦。但故事还没有结束——你值得拥有的,不只是回归日常的小快乐,更是那种深层次、持续、更高级的快乐。
更高级的快乐
刚刚提到感恩,可以增加大脑中多巴胺的分泌,也许你会有疑问,现代社会不是多巴胺泛滥了吗?刷短视频、打游戏一样可以获得多巴胺,那感恩带来的多巴胺有什么不一样呢?
当然不一样,不过我们先聊一句我们从小听到大的“金句”——做难而正确的事情。
许多成功者特别喜欢说这句话,那到底怎么做呢?是靠意志力和吃苦吗,是吃得苦中苦,方为人上人吗?是书山有路勤为径,学海无涯苦作舟吗?
成功者没有告诉我们的是,他们做那些难而正确的事情,他们「乐」在其中。这个乐,就来自于多巴胺,而多巴胺分为了「快多巴胺」和「慢多巴胺」。
还记得在介绍多巴胺之前,我说过多巴胺的作用吗?多巴胺并不带给我们快乐,而带给我们的是激励,是让我们兴致勃勃的做事,是一种追逐的快乐。
快多巴胺的触发模式是预测->实现,抽烟、喝酒、打游戏、刷短视频,你预测到了这些行为带给你的奖励,立刻就感受到快乐,简单直接。但是快多巴胺释放门槛低,可重复性高,来得快去的也快。
而慢多巴胺触发的模式是努力->进展。比如跑完今天的五公里,就会感受到今天一天都神清气爽;完成一篇文章,你感觉你的写作和思考能力都加深了一层。你必须先努力一番取得进展,它才能释放。慢多巴胺来得慢,去的也慢。

在字节的时候,有一次和10几个同事封闭在会议室开发一个大项目,临近项目上线的那几天,几乎都到2、3点才下班。每当0点以后都是大家最累的时候,虽然每个人脸上充满困意和疲惫,但是看着项目逐渐成型,功能越来越完善,每个人依然干劲十足。
我们或许都有做大项目的经历,在项目即将完成前,你会叫苦叫累吗?你的目标就在眼前,你做事充满动力,这才是健康的状态。做难而正确的事情,是很爽的。
这段经历过去好多年了,说实话当时做的什么项目我都记不清了,但是我记得一群人在会议室里,一同为项目上线熬夜到凌晨的那几个夜晚。
简单说:快多巴胺是“高起点、小波动、快消退”;慢多巴胺是“低起点、慢上升、慢消退”。两种多巴胺最重要的区别,是它们在大脑中的“接收区”不同,我们的感受也不同。
快多巴胺让我们成瘾,慢多巴胺可以给我们赋能。 我们应该防止自己沉溺于快多巴胺,多来点慢多巴胺。
理解了快多巴胺和慢多巴胺的原理,我们就能明白一个道理,为什么人生需要一个长远的目标。
有目标才能有行动,有行动就会有进展,追逐目标的过程能够带来慢多巴胺,而慢多巴胺对我们而言多多益善。
说在最后
所以,快乐并没有从我们身边消失,它只是在等着我们把它找回。
我们需要的不是更快的满足,也不是更高频的刺激,而是更沉浸的体验和更深入的积累。
“还行、还不错”不是标准答案,“很好、很开心”才是你的原本色彩,你永远值得拥有那种不焦虑、不躁动,却一直点亮我们生活的快乐。
那么你呢,你今天开心吗?
这是东东拿铁的第79篇原创文章,欢迎关注。
来源:juejin.cn/post/7506417928787968010
Jetbrains正式宣布免费,有点猛啊!
提到 Jetbrains 这家公司,相信搞开发的同学应该都不陌生。

该公司盛产各种编程 IDE 和开发工具,虽然2000年才成立,到现在却已经发布了超 30 款世界顶级的编程软件,同时也收获了来自全球范围内开发者和用户的青睐。

众所周知,在去年10月份的时候,Jetbrains 曾经搞过一个大动作,那就是:
官宣 WebStorm 和 Rider 这两款强大的 IDE 对非商业用途全面免费!
当时这个消息出来的时候,就曾在开发者圈子里引起了一阵轰动和讨论。
而且我清楚地记得,在当时的评论区,还有小伙伴这样问道:
“啥时候轮到 CLion 也免费呢?”

这不,好消息再次来临了!!
最近 Jetbrains 再度官宣:
CLion 从现在开始,对非商业用途全面免费!

众所周知,CLion 是由 JetBrains 设计开发的跨平台 C/C++ 集成开发环境,通过智能代码补全、深度代码分析和集成调试工具,为开发者提供高效、现代化的 C 语言和 C++ 开发体验。

然而,CLion 一直以来的高昂授权费用也让不少初学者和开源爱好者为之望而却步。
因此这回消息一出,又再次在开发者圈子里引起了一阵热烈的讨论,不少网友直呼 Jetbrains 这波格局打开了。

看到这里,相信大家也挺好奇,那他们这里所说的 「非商业用途免费」具体指的是哪些情形呢?
对此,Jetbrains 官方也给出了对应的说明,目前的非商业用途情形包括像:学习、自我教育、开源项目开发、内容创作、业余爱好开发等场景就可以免费使用这个 IDE 。
所以现在无论是学生、Arduino 开发者,还是无惧 C 语言和 C++ 重重挑战的忠实爱好者,只要使用场景不涉及商业活动,都可以来免费使用 CLion 进行开发。
说到这里,那具体的非商业用途免费版 CLion 怎么申请和使用呢?
操作其实也非常简单。
1、首先,去官网下载 CLion 安装包并安装。
不过这里要注意的是,用户需要确保下载的 IDE 版本是支持非商业许可证的最新版本即可。
2、启动运行 IDE 后,将会看到一个许可证对话框。
在该对话框中,用户可以在其中选择 Non-commercial use(非商业用途)选项。

3、登录自己的 JetBrains Account 或创建一个新的帐户。
4、登录完成后,用户需要接受 Toolbox 非商业用途订阅协议。
5、尽情享受在 IDE 中的开发。
包括如果用户已经开始了试用期或使用付费许可证激活了自己的 IDE,也仍然可以改用非商业订阅,只需要转到帮助|注册里,并在打开的窗口中点击 Remove License(移除许可证)按钮,然后再选择 Non-commercial use(非商业用途)就行了。
不过这里依然还有两个点需要格外注意。
第一点,也是官方公告里明确所说的。
如果用户选择使用 Non-commercial use 非商业用途的免费版,那软件是有可能会向 JetBrains 发送 IDE 遥测信息的,包括像:框架、产品中使用的文件模板、调用的操作,以及与产品功能的其他交互,但是官方提到不会包含个人数据。
另外还有一点需要注意的是,虽说免费版本的 IDE 在功能上与付费版本并无二致,但在某些特定功能上可能存在一定的限制。例如,免费版本的 Code With Me 功能将仅限于 Community 版本。
不过对于大多数非商业用途的开发者们来说,这些限制并不会对日常开发工作造成太大的影响。
所以总而言之,JetBrains 推出的这些非商业用途免费使用政策,虽说有一些要求,但是总体来说还是极大地降低了 JetBrains IDE 的使用门槛。
同时也会让更广泛的用户群体更容易获取并使用,从而鼓励更多的人投身于编程学习,参与到开源项目的建设,共同推动技术的进步与发展。
文章的最后,我们也不妨再次大胆憧憬一下:
既然目前的 WebStorm、Rider 以及 CLion 都已经开放了非商业用途的免费使用,那么接下来像: GoLand、IntelliJ IDEA 等的免费开放还会不会远呢?
再次期待 Jetbrains 的下一步操作。
注:本文在GitHub开源仓库「编程之路」 github.com/rd2coding/R… 中已经收录,里面有我整理的6大编程方向(岗位)的自学路线+知识点大梳理、面试考点、我的简历、几本硬核pdf笔记,以及程序员生活和感悟,欢迎star。
来源:juejin.cn/post/7504491526363856934
知名开源项目AList疑似被卖,玩家炸锅了!!
这是昨天发生在开源圈子里的一件事情,在不少开发者论坛和社区里也炸开了锅,相信不少同学也刷到了。
具体怎么回事呢?
原来是知名开源项目 Alist 被爆疑似悄悄出售,原开发者退出了项目。
注意,这里有一个词,是“悄悄”。
原来就在之前的某一天,有细心的网友突然发现,该项目的中文文档开始出现不寻常的修改,比如添加了商业化信息,新增了QQ群和VIP技术支持的内容。

再后来,有网友发现其项目官网域名完成了切换,并且这一变更也没有任何官方声明,从而引发了社区的警觉和质疑。
而事件再进一步升级的导火索则是有社区开发者在项目 PR 中发现了可疑的代码提交。
一位用户提交了包含用户数据收集功能的代码,该代码片段旨在收集用户操作系统信息并上报,尽管该 PR 最终被拒绝合入,但社区不少开发者担心这仅仅是冰山一角。

当社区质疑声浪日渐高涨,就在昨天,Alist 项目原开发者 Xhofe 在订阅频道发布公告,称:
“项目已交由公司运营,之后我会帮忙审查开源版本仓库的代码,以及确保 release 的分发由 ci 自动构建,main 分支已开启分支保护,后续所有的提交都会经过 pr 审核。”

至此,社区正式炸锅了...
众所周知,AList 是一个基于 Go 语言编写的开源文件列表与 WebDAV 程序,可能有不少同学都用过。


AList 提供了一个统一的云存储管理解决方案,支持多平台文件挂载、预览以及操作。

在此次风波爆发之前,AList 在开发者圈是不少同学的必备工具。
不仅如此,甚至还有不少相关的软件或服务是基于 AList 来做的。
这款开源项目支持几十款主流网盘的一站式管理,提供统一的网页界面,能实现跨平台文件管理、在线视频播放等功能。

从该项目的 GitHub 主页上也可以看到,目前 Alist 收获了近 50000 颗的 star 星标,这也足以说明了其在开发者圈子中的受欢迎程度。

按照作者的回应,既然 Alist 项目是被公司所接手了,那它的买家到底是哪家公司呢?
有细心的网友发现,从其官网的定价页面尝试联系下去发现,该公司正是贵州bg科技。

没错,这个公司正是之前收购 Java工具库 Hutool(A set of tools that keep Java sweet)的那个公司。

至于其在开发者圈子里的一些评论,这里就不作过多评述了。
目前,AList 项目的 Issues 区基本是沦陷了,不少开发者们都在这里输出了自己的意见与不满。

聊到开源项目被收购的事情,其实早就不是第一次发生了。
正如网友们所讨论的,商业化其实无可厚非,开发者的心血也需要回报,不同的开源项目作者可以有不同的选择。
但是如果在开源的商业化过程中存在一些让用户不明就里的暗手操盘,那事情往往就会开始变得微妙起来,毕竟开源项目的背后就是广大的用户和社区,大家时刻都在注视和监督着。
文章的最后,这里还想再聊一聊有关开源作者的生存现状。
我不知道本文被收购项目 AList 的作者是不是在全职独立做开源项目,但是在我自己的圈子里,我私下就认识好几个独立维护开源项目的朋友。
有一说一,个人开源作者其实挺不容易的,像上面这样的开源项目被公司收购的毕竟是少数个例,其实好多个人的开源项目到后期由于各种主客观原因,渐渐都停止更新和维护了。
大家都知道,伴随着这两年互联网行业的寒意,软件产业里的不少环节也受到了波动,行业不景气,连开源项目的主动维护也变得越来越少了。
毕竟连企业也要降本增效,而开源往往并不能带来快速直接的实际效益,付出了如果没有回报,便会很难坚持下去。
而如果从一名学习者的角度来看,参与开源项目的意义则是不言而喻的。
参与开源项目除了可以提升自身技术能力,收获项目开发经验之外,还可以让自己保持与开源社区其他优秀开发者之间的联系与沟通,并建立自己的技术影响力,另外参与优秀开源项目的经历也会成为自己求职简历上的一大亮点。
所以如果精力允许,利用业余时间来参与一些开源项目,这对技术开发者来说,也未尝不是一段难得的经历。
来源:juejin.cn/post/7514528800731676711
“满门被裁”,只剩下老妈还在上班

古有“满门抄斩”,今有“满门被裁”。
这不是段子,这是一个正在我们身边发生的、充满黑色幽默的现实。
最近,一位网友在论坛上发的帖子,看得人心里五味杂陈。
他说,2025年,像被下了降头。
- 3月份,他爸所在的国企解散,被裁员。
- 5月份,他自己合同到期,公司不再续签。
- 6月份,他媳妇在的部门,整个被“优化”了。
短短三个月,一家四口,三个劳动力,相继失业。全家唯一的经济来源,只剩下他那位还在工作的、本该是全家工资最低的老妈。
他说,现在家里开会,老妈的腰杆挺得最直,说话底气最足。因为她,是全家唯一的“在职员工”。
听起来有点荒诞,但当你点开评论区,看到那一排排“我也是”的留言时,还真是五味杂陈。
- 网友A: “我爸去年5月被裁,我去年6月被裁,我老公今年过年前也被裁。本来我妈工资是全家最低的,现在她是我们家的经济支柱,哈哈哈哈哈哈!”
- 网友B: “49岁。4月底,我老公国企20年被裁,今年儿子被裁,剩我一个苦苦支撑。”
每一个留言背后,都是一个正在经历风暴的家庭。
“失业”这个词,在过去,可能只是个人的不幸。但在今天,它正在演变成一种“系统性风险”,以“家庭”为单位,进行无差别的攻击。
当一个家庭的经济支柱,从三根,突然变成一根时,那种灭顶之灾般的焦虑和恐慌,足以压垮任何一个普通人。
那么,当风暴来临时,我们这些普通人,到底该怎么办?
今天,我们不讲道理,我们只讲一个真实的、可供参考的“求生案例”。
一个40岁女人的“硬核自救”
这也是一位粉丝的真实分享。
她40岁,单身,一个人住在一室一厅的房子里,背着每月2000多元的房贷。去年,她也失业了。
她花了将近一年的时间,才找到下一份工作。
在这一年里,她没有崩溃,没有躺平,而是用一种极其理性、甚至可以说是“冷酷”的方式,为自己打赢了这场“生存保卫战”。
她的方法,总结下来,就是四块“压舱石”。
第一块压舱石:不让“收入”归零
失业,不等于丧失赚钱的能力。
她做的第一件事,就是立刻盘点自己所有的“手艺”,然后把它们变成能赚小钱的“产品”。
她利用自己多年的互联网运营经验,在网上接一些零散的活儿:帮小公司写公众号文章,替人做PPT,甚至在淘宝上帮人做简历优化。
这些小钱,虽然不多,但足以覆盖她每个月的生活费和社保。这确保了她的“现金流”没有断,也让她在心理上,没有彻底沦为一个“无用的人”。
第二块压舱石:砍掉所有“虚假需求”
她做的第二件事,是立刻对自己的生活,进行一次“成本优化”。
- 消费降级: 停掉所有不必要的外出吃饭,自己做饭。她发现,当自己动手后,每天的伙食成本,可以轻易地控制在20块钱以内,而且有肉有菜。
- 关闭会员: 关掉所有视频、音乐、购物平台的自动续费。
- 戒掉“拿铁因子”: 不再喝咖啡,不再点奶茶。
她发现,当砍掉所有被消费主义制造出来的“虚假需求”后,一个人的生存成本,可以低到超乎想象。
第三块压舱石:把“时间”投资在自己身上
她做的第三件事,是把失业后多出来的、大把的时间,当成一种“资产”,而不是一种“负债”。
保持学习: 她没有整天躺在床上刷短视频,而是系统地学习了自己一直想学的英语,和能提升职场竞争力的PPT制作技能。
保持规律: 她坚持每周至少运动两次,跑步、骑行,不让自己陷入颓废、昼夜颠倒的恶性循环。
最终,正是她在这段“空窗期”里学习的英语,成了她找到下一份外企工作的“敲门砖”。
第四块、也是最重要的一块压舱石:存款
她在失业前,手里有23万的存款。
她说:“这23万,才是我敢于用一年的时间,去慢慢找工作、去学习、去生活的,最大的底气。”
它是在你被全世界抛弃时,唯一能给你安全感的东西。
在人生的牌桌上,你永远不知道下一张会发给你什么牌。你唯一能做的,就是在晴天的时候,多备几块能让你在暴风雨中不被饿死的“干粮”,和一块能让你不被大浪打翻的“压舱石”。
技术多久没有进步了?
很久没有写东西了,这个选题正好聊一下。
对于这个问题,我的答案是 1 年左右——我进外包的日子。
在外包中,我的工作日常就是搞业务,天天 CRUD,有人会讲,CRUD 也能玩出花来,只能是你自己对技术没有了追求。我承认,也确实是这样,外包的业务很多,每天 CRUD,很简单,但还是很忙,忙到不想敲代码了,忙到对技术没啥追求了。
外包确实不适合自控力太差的人,不适合自我调节能力不行的人。
为什么这样说呢?我待的外包,说它加班很多吗?其实并没有,至少工作日 5.30 下班最多也就待到 5.45 就走了,周末加班也只有比较着急的时候,次数不多,所以很少的加班,甚至比我之前待着的两家自研加班都少,为啥下班就走的的我,没有时间去深造技术了呢?
我也还在思考。目前我的答案大概还是跟业务有关。
自研会有一种成就感,尤其在我第一家公司尤甚,那时候对自己做的第一个产品确实非常上心,项目上要做的功能和遇到的问题都会进行深度思考,去结合成熟的方案来形成自己的实现方案和解决方案,但是在外包呢,天天各种项目组的人来找你,自己手里有好多个“外包前辈”的项目,继承它们的“代码遗产”,鄙视他们的代码并有优化的心思,但突如其来的项目和很少能自己评开发时间的原因,让我也“放纵”和“加入”了“他们”,每天完成了任务也仅仅是完成了任务,很少有自己的思考,也变没有了什么成就感,对代码变成了“贤者”,没有了“兴趣”,下班后的生活变成了综艺/游戏/抖音,沉浸在这样的“快乐”中。
写到这里了,也想说一下,你技术突飞猛进的时候是一个什么样的时期或状态呢?
上面也说到了,就是第一家公司,除了对自己的“初恋”产品认真外,还有就是那时候是刚从培训班出来,刚找到的第一家公司,怕过不了试用期,所以刚开始每天回家自己敲代码敲到晚上,技术成长非常快,还有就是第二家公司,用的 React 技术栈,当时我是 Vue 技术栈找的 React 技术栈,虽然当时第二家公司说给时间从 Vue 过渡到 React,但也有一种紧迫感,还有也是很想学 React 了,所以技术上也有很大进步。
技术这么久没长进了,是外包公司的问题吗?
其实不是,上面也说了,虽然都是 CRUD,虽然业务比较多,但其实加班都不多,这些都不是理由,下班后的时间其实是比较多的,都是我能掌控的,只是我没有调整好心态,对自己太过放纵罢了,游戏,小说,综艺,抖音填满了我下班后的生活,沉浸在一种虚假的快乐中,其实并不快乐。
把想说的都说出来了,挺好,后面,如果自己不想继续这么混的话,就一块一块改吧。一下全改我都不相信我能做到(三分钟的热度更可怕),一块一块来,不把自己逼的太紧,养成习惯最好,就先这样。
来源:juejin.cn/post/7494489664385548297
半数清华,8 位华人 AI 天团集体投奔 Meta!奥特曼:砸钱抢人不如培养死忠

【新智元导读】硅谷挖角戏码升级!相比 Meta3 亿美元「血本挖角」,OpenAI 来了波反向操作——选择培养人才,奥特曼悄然推进一个名为「驻留计划」(Residency Program)的项目。这个项目有何神秘之处?奥特曼的底气到底从何而来?
二十一世纪什么最贵?
人才!
最近几个月,Meta 在硅谷发起的、动辄上亿美元签字费的挖角戏码,成了史上最疯狂的人才争夺战。
不得不说,扎克伯格的「氪金」策略相当成功。
一大批来自 OpenAI、谷歌、Anthropic 甚至是 SSI 的核心研究员纷纷投入 Meta 旗下。

OpenAI 的首席研究官 Mark Chen 难掩失落地说:「这感觉就像有人闯进了我们家,偷走了我们的东西。」
面对这种近乎釜底抽薪似的挖角行为,奥特曼的反应则略显轻蔑:「Meta 的行事方式,让人感觉有些不体面」。
那么,奥特曼的底气来自哪里?
当扎克伯格在牌桌上疯狂加码时,奥特曼在牌桌之下,进行着一场完全不同维度的布局。

不挖天才,我们培养天才
当所有人的目光都聚焦在 Meta 的天价支票上时,OpenAI 正在悄然推进一个名为「驻留计划」(Residency Program)的项目。
这个项目,可以说是 OpenAI 应对人才战争的核心战略,也是理解其企业文化的一把钥匙。

OpenAI Residency 是一个为期六个月的全职带薪项目,但它的招生对象,却出人意料。
Residency 项目经理 Jackie Hehir 明确表示,他们寻找的,不是那些正在攻读机器学习或 AI 博士学位的天之骄子,也不是来自其他 AI 实验室的资深员工。
恰恰相反,他们将橄榄枝伸向了那些「邻近领域」的顶尖大脑——比如物理学家、神经科学家、数学家。

虽然没有严格的学历或工作经验要求,但设有一个极高的技术门槛,尤其是在数学和编程方面,其标准与全职员工等同。
你不需要拥有高等数学学位,但必须对高等数学概念非常自如。
「他们对这个领域(AI)充满了真正的热情,」Hehir 说。

这背后是一套极其精明的逻辑。
这场从零培养的战略,至少带来了三个层面的深远优势。
首先就是成本上的「降维打击」。
驻留研究员的年薪是 21 万美元,意味着在这六个月里,OpenAI 的支出大约是 10.5 万美元。
这个数字,足以让参与者跻身美国收入前 5% 的行列。
但在动辄千万、上亿美元签字费的 AI 顶级人才市场,这简直就是白菜价。
用极小的代价,获得了一批拥有顶级科研素养和巨大潜力的「璞玉」。
其次,是对企业文化基因的深度植入。
面对小扎的疯狂抢人,奥特曼就曾评论道:「在我看来,Meta 的所作所为将导致非常深刻的文化问题」。
而在 OpenAI,一位前员工向 Business Insider 透露,他们公司的内部文化是「对创造 AGI 的使命感到痴迷」。
通过驻留计划,OpenAI 可以在一张白纸上,从一开始就将这种使命感深深烙印在这些未来核心员工的脑海里。
他们共同学习、共同攻关,建立的不仅是工作关系,更是对共同事业的「信仰共同体」。

这与简单地用金钱挖来的雇佣兵有着本质区别。
Meta 用金钱这种最直接的外部激励,虽然见效快,但可能存在边际效应递减的风险,并且容易塑造一种唯利是图的文化。
相比之下,OpenAI 的策略则更侧重于构建内在动机:
通过赋予一个宏大的、改变世界的使命(创造 AGI),它满足了员工对归属感的渴望;
通过从零培养,让跨界人才在新领域找到自己的位置,它满足了「胜任感」的成长需求;
通过相对宽松和专注的科研环境,满足了对自主性的追求。
「传教士将打败雇佣兵」,奥特曼在内部备忘录中,写下了这句提振士气的话。

最后,是极高的忠诚度与****转化率。
数据显示,几乎每一个在驻留计划中表现出色的成员,都会收到 OpenAI 全职 offer。
迄今为止,所有收到 offer 的人都选择了接受。
每年,这个项目会迎来大约 30 名新成员,他们就像新鲜的血液,持续不断地为 OpenAI 提供能量。
OpenAI Residency 的「播种」策略,更像是一场耐心的耕耘。
它可能没法像 Meta 那样立即招到顶尖专家,但却可以培养出一片忠于自己使命、文化高度统一、且具备持续造血能力的「人才森林」。

这场发生在硅谷的人才战争,早已超越了商业竞争的范畴。
它是一场关于组织灵魂、动机和未来信念的宏大实验。
而实验的结果,不仅将决定这两家公司的命运,更将深刻地影响我们正在迈入的 AGI 时代。
最后,让我们再来回顾一下 Meta 这两个月的骚操作。

史上最疯狂人才争夺战
据估计全球有能力推动大语言模型和前沿 AI 研究的顶尖人才,只有区区 2000 人左右。
这场人才争夺战的激烈程度,未来只会不断升级。
Meta 为了 AI 顶尖人才可谓是下了「血本」。
被业内人士调侃为,「竞赛之夏的错失恐惧症(summer of comp FOMO)」。
据统计,Meta 在四年间,为 AI 顶尖人才准备了高达 3 亿美元薪酬方案,创下了行业记录。
那 Meta 这「3 亿美元薪酬」到底招了哪些顶尖人才呢?

2025 年 6 月
核心人物:Alexandr Wang(28 岁)
**背景:**2016 年,19 岁的 Alexandr Wang MIT 辍学与 Lucy Guo 共同创立「数据标注」公司 Scale AI,并于同年获得著名创业孵化器 Y Combinator 启动资金支持。顶级 AI 科技巨头:微软、Meta、OpenAI 等提供模型训练数据。
**押注金:**143 亿美元
**原职位:**Scale AI 创始人
**Meta 新职位:**Meta 首席 AI 智能官(Chief AI Officer),负责新设立的「超级智能」部门

重要性:
1、拥有 AI 核心「数据战火库」:Alexandr Wang 手握 Meta 核心竞争对手微软、OpenAI、谷歌等模型训练数据;
2、天生的商业嗅觉者:在还没有 LLM 时,已洞察到「数据」在 AI 领域的重要性,便在 2016 年创办数据标注公司 Scale AI;
**核心人物:**Shengjia Zhao

背景:清华大学本科,斯坦福大学博士,核心聚焦大语言模型和不确定性量化。领导 OpenAI 合成数据项目,是 ChatGPT、GPT-4 模型及各种小型模型等标志性产品的重要贡献者。
**原职位:**前 OpenAI 研究科学家
**Meta 新职位:**Meta 超级智能部门,具体职位未透露
核心人物:Jiahui Yu

背景:中国科学技术大学少年班的毕业生,曾分别任职于在微软、旷视、Adobe、Snap、百度、英伟达和谷歌等。2023 年 10 月领导 OpenAI 感知团队,主导了 o3、o4-mini 和 GPT-4.1 研发;在谷歌 DeepMind 联合领导 Gemini Multimodal。研究核心聚焦深度学习和高性能算力。
**原职位:**前 OpenAI 项目研究负责人
**Meta 新职位:**Meta 超级智能部门,具体职位未透露
核心人物:Shuchao Bi

背景:毕业于浙江大学数学系,随后在加州大学伯克利分校获得了硕士和博士学位。专注于强化学习、训练后优化和 AI 代理。2013 年入职谷歌,通过深度学习模型优化谷歌广告。2024 年 5 月入职 OpenAI,担任多模态后训练主管,为 GPT-4o 的语音模式和 o4-mini 模型做出了贡献。
**原职位:**前 OpenAI 多模态后训练主管
**Meta 新职位:**Meta 超级智能部门,具体职位未透露
核心人物:Hongyu Ren

背景:2018 年毕业于北京大学,2023 年在斯坦福大学完成计算机科学博士学位。在校期间,他曾在微软、英伟达、谷歌和苹果实习。毕业后他加入 OpenAI,曾参与 o1-mini 和 o3-mini 研发,并领导一个专注于后期训练的团队,o1 项目的核心贡献者。
**原职位:**前 OpenAI 后期训练项目负责人
**Meta 新职位:**Meta 超级智能部门,具体职位未透露
**核心人物:**hang Huiwen

背景:毕业于清华大学交叉信息研究院的姚班(这个精英计算机科学项目由图灵奖得主姚期智创立)。随后在普林斯顿大学取得博士学位,研究方向是图像处理。 曾在 Adobe 和 Facebook 实习,后于 2016 年获得微软奖学金。2019 年谷歌工作一段时间后,于 2023 年 6 月转至 OpenAI,参与开发了 GPT-4o 的高级图像生成功能。
**原职位:**前 OpenAI 研究员
**Meta 新职位:**Meta 超级智能部门,具体职位未透露
**核心人物:**Lin Ji

背景:清华大学本科,2023 年在 MIT 获得博士学位。曾在谷歌、Adobe 和英伟达实习,并于 2023 年 1 月加入 OpenAI,专攻多模态推理和合成数据。
**原职位:**前 OpenAI 研究员
**Meta 新职位:**Meta 超级智能部门,具体职位未透露
核心人物:Sun Pei

背景:清华大学本科,卡内基梅隆大学硕士,2011 年就职谷歌。他短暂加入中国数据基础设施公司 Alluxio 后,于 2017 年转至谷歌的 Waymo 部门。后成为谷歌 DeepMind 的首席研究员,在开发 Gemini 人工智能模型方面发挥了关键作用,特别是在后训练和推理等领域。
**原职位:**前谷歌 DeepMind 的首席研究员
**Meta 新职位:**Meta 超级智能部门,具体职位未透露
核心人物:Lucas Beyer

背景:自称 “自学成才黑客」,前谷歌 DeepMind(原 Brain)苏黎世分部的高级研究科学家,联合领导模态研究工作和代码库项目。与 Xiaohua Zhai 和 Alexander Kolesnikov 创立了苏黎世 OpenAI 办公室。

**原职位:**前谷歌 DeepMind(原 Brain)苏黎世分部的高级研究科学家,苏黎世 OpenAI 办公室创始人。
**Meta 新职位:**Meta 超级智能部门研究员,具体职位未透露
核心人物:Alexander Kolesnikov
背景:曾任谷歌「Google Brain」高级研究工程师,「Deepmind」研究科学家。OpenAI 研究员。


**原职位:**前 OpenAI 苏黎世办公室研究员
**Meta 新职位:**Meta 超级智能部门研究员,具体职位未透露

2025 年 7 月
核心人物:Daniel Gross(左一)
背景:「安全超级智能」SSI 三位联创之一(其余两位:Ilya Sutskever、Daniel Levy)。曾试图以 320 亿美元收购 Safe Superintelligence,被拒后反手挖走其联合创始人之一 Daniel Gross。

7 月 3 日,「消失已久」Ilya 罕见现身发文,确认了 Daniel Gross「出局」消息,Daniel Gross 也转发了该条推文。

原职位:「安全超级智能」SSI 联合创始人,OpenAI 前首席科学家
**Meta 新职位:**领导 Meta 超级智能产品部门
**重要性:**与 Nat Friedman 共同创立一家名叫「NFDG」的风险投资公司,该公司已投资了 Coinbase、Figma、CoreWeave、Perplexity 和 Character.ai。
核心人物:Nat Friedman

**背景:**MIT 毕业,Github 前 CEO(2018-2021), 曾任 GNOME 基金会的主席,目前还是 Arc 研究所的董事会成员,并担任 Midjourney 的顾问。

**原职位:**前 Github CEO
Meta 新职位:「与 Alex 合作领导」超级智能团队
**重要性:**辅佐「军师」协助小孩哥 Alexandr Wang 共同领导超级智能团队。
参考资料:
来源:juejin.cn/post/7523519254878437403
马斯克 Neuralink 脑机接口新成果!看完头皮发麻
注意看,这些人正在用意念玩马里奥赛车。
他们的手没有动一下,靠脑电波控制就完成了移动、转弯、吃道具等一系列动作。
帮助他们通过 “心灵感应” 完成游戏操作的,就是马斯克 Neuralink 的脑机接口 N1。

这就是 Neuralink 夏季更新报告会上,马斯克展示的最新成果。
截止目前,N1 已经有七名受试者,他们以视频等形式分享了脑机接口对他们生活的改变。

这一个个真实案例,也获得了网友们的一片赞许。

同时,在这次报告会上,Neuralink 也曝光了未来三年的发展路线——
到 2028 年,Neuralink 计划实现对大脑的全面访问。
让受试者重回生活
这七位受试者当中,有四位是脊髓损伤患者,另外三位是肌萎缩侧索硬化症(渐冻症)患者。
他们接受测试的地点不是在实验室,而是每天在家中使用 Neuralink 脑机接口设备,据统计,他们平均每周使用脑机接口的时间长达 50 小时,峰值甚至超过 100 小时,几乎覆盖了所有的清醒时间。

其中,Noland 是全球第一位 N1 受试者,他因为脊髓损伤瘫痪。
Noland 装上 N1 之后当天,就学会了完全靠意念控制电脑光标,并打破了世界纪录。

现在,Noland 已经学会了仅凭意念畅玩《马里奥赛车》,甚至还能与其他参与者联机玩《使命召唤》等更复杂的游戏。

除了游戏之外,Noland 还在 N1 的帮助下,正在重新学习语言和数学。
同样是脊髓受损的,还有 Alex,他因此失去了手部功能。
但有了 N1,他已经学会了通过意念控制电脑屏幕上的手,和家人玩 “石头剪刀布” 游戏。

而且不仅能控制屏幕上的虚拟影像,还可以操纵特斯拉擎天柱机器人的机械手。

更重要的是,N1 已经帮助 Alex 重新回到工作,通过意念操作 CAD 软件完成设计。
如前所述,N1 的受益者除了脊髓损伤患者,还有渐冻症人士,Bard 是首个植入 N1 的渐冻症患者。
因为渐冻症,Bard 失去了语言能力,只能借助眼动追踪技术来和外界交流。
但现在,他已经可以用思想控制电脑,从而与世界交流,甚至和他的孩子们一起到公园玩耍。

目标是实现 “全脑接口”
此次报告会上,Neuralink 透露其最终目标,是构建一个真正的 “全脑接口”。
顾名思义,“全脑接口” 就是一个能够向任意神经元读取、写入、传输信息的通用平台。
具体来说,其产品路线图中包含了 Telepathy、Blindsight、Deep 三个组成部分。

七名受试者使用的 N1,就是 Telepathy。
Telepathy 通过将 1000 个电极植入运动皮层中负责手部和手臂运动的区域来工作,目的就是帮助因脊髓损伤、渐冻症、中风等导致无法自主控制身体的人士,能够仅凭思想来实现控制电脑、操作鼠标等动作。
Blindsight 则是 Neuralink 的下一个产品,旨在帮助完全失明的人(包括天生失明、失去眼睛或视神经的人)恢复视力。
Blindsight 会通过摄像头捕捉环境场景,然后转换成电信号,传递到植入在视觉皮层的设备中,从而在大脑中产生视觉感知。
最后的 “Deep”,不是一个独立的产品名称,而是指 Neuralink 技术能够深入大脑更深层区域的能力,以及这种能力带来的应用。
这一层次旨在通过将电极插入皮层(cortical layer)以及更深层的脑区,例如脑沟(sulci)和边缘系统(limbic system),来治疗神经系统失调、精神疾病或神经性疼痛。

同时,Neuralink 也公布了未来三年的具体发展计划。
今年下半年,Neuralink 计划在言语皮层(speech cortex)进行植入,从而将大脑中的信息解码为语言。
明年,通道的数量将从 1000 个增加到 3000 个,同时 Neuralink 还计划进行首次 Blindsight 植入。
这次植入,也将成为 Neuralink 验证其向大脑中写入信息能力的关键机会。
到 2027 年,通道数量将继续增加至 10000 个,同时首次实现多植入物操作,即在运动皮层、言语皮层和视觉皮层等多个脑区同时进行植入。
最终的 2028 年,每个植入物拥有超过 25000 个通道,结合多植入物操作,能够实现对大脑的任何部分的访问,从而用于治疗精神疾病、疼痛以及其他神经功能失调。
届时,Neuralink 还将进行脑机接口与 AI 的整合。

参考链接:
http://www.youtube.com/watch?v=FAS…
欢迎在评论区留下你的想法!
— 完 —
来源:juejin.cn/post/7521376266110091298
AI独角兽团队Manus裁员80人,剩下40人迁至新加坡总部!
大家好,我是程序员小灰。
大家是否还记得,今年3月份横空出世的AI产品Manus?

Manus号称是全球首款通用Agent的产品,它刚刚上线的时候在AI圈子里红极一时,许多人都在争抢Manus的内测激活码,这些内测码甚至在闲鱼平台被炒到了10万元!
小灰一直没有机会真正使用Manus,但我看过许多网友的演示视频,虽然这款Agent产品没有发布会上说的那么神奇,存在种种瑕疵,但是在某种程度上确实可以帮助人们解决一些流程化的工作。
在当时,Manus不止在国内受到追捧,也受到了全世界的关注。在4月25日,Manus母公司蝴蝶效应获得了美国风险投资公司Benchmark领投的7500万美元融资。
包括小灰在内的许多同行都认为,Manus一定会在资本的加持下继续做大做强,成为中国甚至全世界的AI Agent领军人。
可是万万没想到,在7月8日这一天,Manus团队被爆出了裁员消息。Manus在中国区大约有120名员工,其中40多位核心员工被迁往新加坡总部,剩下80人左右将被裁员,补偿方案是N+3或者2N。
仅仅4个月的时间,Manus就从刚刚诞生时候的辉煌走到了如今的局面,难怪圈子里都在说:AI一天,人间十年。
那么,Manus为什么会面临裁员呢?主要有三个原因:
1.政策影响
2025年1月生效的《对外投资安全计划》限制美元基金对中国AI企业的投资,Manus的主要投资方Benchmark在审查压力下,被迫要求Manus迁出中国。
2.芯片断供
从去年开始,美国商务部就禁止向中国大陆客户供应AI芯片,到了今年年初,禁令执行越来越严格,这对Manus的打击是致命的。Manus研发负责人也在内部会议中坦承,因无法及时获取英伟达最新AI芯片,智能体的迭代升级进度被迫延缓。
3.成本问题
Manus从今年3月底开始向用户收费,基础版每月39美元,高级版每月199美元。相比于国内很多物美价廉的AI产品,Manus收费真的很贵。
但是从Manus官方的角度,他们的运营成本也确实很高,目前的收费根本无法覆盖运营成本。再加上国内又诞生了扣子空间这样的平替产品,导致Manus用户增长乏力,无法形成规模效应。
Manus如今的结局是令人遗憾的,但是像DeepSeek和Manus这样了不起的产品,也让全世界看到了中国AI的希望。
小灰相信,中国AI行业的未来发展只会越发迅猛,今后一定会有越来越多优秀的AI产品走进大众的视野,让全世界的人们看到我们中国人的智慧和努力。
大家对Manus裁员和迁移新加坡这件事怎么看?欢迎在留言区说出你的想法。
来源:juejin.cn/post/7524931208746975270
我为什么放弃了“大厂梦”,去了一家“小公司”?
我,前端八年。我的履历上,没有那些能让HR眼前一亮的名字,比如字节、阿里,国内那些头部的互联网公司。
“每个程序员都有一个大厂梦”,这句话我听了八年。说实话,我也有过,而且非常强烈。
刚毕业那几年,我把进大厂当作唯一的目标。我刷过算法题,背过“八股文”,也曾一次次地在面试中被刷下来。那种“求之不得”的滋味,相信很多人都体会过。
但今天,我想聊的是,我是如何从一开始的“执念”,到后来的“审视”,再到现在的“坦然”,并最终心甘情愿地在一家小公司里,找到了属于我自己的价值。
这是一个普通的、三十多岁的工程师,与自己和解的经历。
那段“求之不得”的日子
我还记得大概四五年前,是我冲击大厂最疯狂的时候。
市面上所有关于React底层原理、V8引擎、事件循环的面经,我都能倒背如流。我把LeetCode热题前100道刷了两遍,看到“数组”、“链表”这些词,脑子里就能自动冒出“双指针”、“哈希表”这些解法。
我信心满满地投简历,然后参加了一轮又一轮的面试。
结果呢?大部分都是在三轮、四轮之后,收到一句“感谢您的参与,我们后续会保持联系”。我一次次地复盘,是我哪里没答好?是项目经验不够亮眼?还是算法题的最优解没写出来?
那种感觉很糟糕。你会陷入一种深深的自我怀疑,觉得自己的能力是不是有问题,是不是自己“不配”进入那个“高手如云”的世界。
开始问自己:“大厂”真的是唯一的出路吗?
在经历了一段密集而失败的面试后,我累了,也开始冷静下来思考。
我观察身边那些成功进入大厂的朋友。他们确实有很高的薪水和很好的福利,但他们也常常在半夜的朋友圈里,吐槽着无休止的会议、复杂的流程、以及自己只是庞大系统里一颗“螺丝钉”的无力感。
我看到他们为了一个需求,要跟七八个不同部门的人“对齐”;看到他们写的代码,90%都是在维护内部庞大而陈旧的系统;看到他们即使想做一个小小的技术改进,也要经过层层审批。
我突然问自己:这真的是我想要的生活吗?我想要的是什么?
当我把这些想清楚之后,我发现,大厂的光环,对我来说,好像没那么耀眼了。
在“小公司”,找到了意想不到的“宝藏”
后来,我加入了一家规模不大的科技公司。在这里,我确实找到了我想要的东西。
成了一个“产品工程师”,而不仅仅是“前端工程师”
在小公司,边界是模糊的。
我不仅要写前端代码,有时候也得用Node.js写一点中间层。我需要自己去研究CI/CD,把自动化部署的流程跑起来。我甚至需要直接跟客户沟通,去理解他们最原始的需求。
这个过程很“野”,也很累,但我的成长是全方位的。我不再只关心页面好不好看,我开始关心整个产品的逻辑、服务器的成本、用户的留存。我的视野被强制性地拉高了。
“影响力”被无限放大
在这里,我就是前端的负责人。
用Vue还是React?用Tailwind CSS还是CSS Modules?这些技术决策,我能够和老板、和团队一起讨论,并最终拍板。我们建立的每一个前端规范,写的每一个公共组件,都会立刻成为整个团队的标准。
这种“规则制定者”的身份,和在大厂当一个“规则遵守者”,是完全不同的体验。你能清晰地看到自己的每一个决定,都对产品和团队产生了直接而深远的影响。
离“价值”更近了
最重要的一点是,我能非常直接地感受到自己工作的价值。
我花一周时间开发的新功能上线后,第二天就能从运营同事那里拿到用户的反馈数据。我知道用户喜不喜欢它,它有没有帮助公司赚到钱。这种即时的、正向的反馈,比任何KPI或者年终奖金,更能给我带来成就感。
还会羡慕那些在大厂的朋友吗?
当然会。我羡慕他们优厚的薪酬福利,羡慕他们能参与到改变数亿人的项目中去。
但我不再因此而焦虑,也不再因此而自我否定。
你可以多想一想你真正想要的是什么? 一个公司的名字,并不能定义你作为一名工程师的价值。你的价值,体现在你写的代码里,体现在你解决的问题里,也有可能体现在你创造的产品里。
找到一个能让你发光发热的地方,比挤进一个让你黯淡无光的地方,重要得多。
分享完毕。谢谢大家🙂
来源:juejin.cn/post/7525011608366579758
30+程序员如何不被小事击垮
引言
老张最近有一个重点项目在推进,他准备今天回家加班赶赶进度。
可到家之后,发现孩子发烧了,由于妻子出差,他赶紧放下手头的事情,抱起带孩子往医院跑。
堵车、吃饭、挂号、排队,一路折腾下来,已经九点了。
可就是这个点,儿科急诊仍是人山人海。孩子好奇的问东问西,手机里还不断跳出加急的消息,老张焦急的不断盘算着还有多久能排到他们。
马上到老张了,突然有一个人抱着孩子挤进了医生房间,老张愣了一下,火一下子就上来了,冲进屋子和对方吵了起来......
幸运的是孩子没什么事,可老张熬了一晚上啥也没干成。第二天上班状态不好,和业务方沟通时及其不耐烦。
下午收到了业务方的投诉,理由是态度消极。
老张一天什么也没干,却感觉自己马上就要崩溃了。
英雄就是这么被击垮的。据说是伏尔泰有句话说,“使人疲惫的不是远方的高山,而是你鞋里的一粒沙子”。
工作繁忙、孩子生病、业务方催促进度......都不是什么“重大事件”,可就是会压的你喘不过气来。
处理不好这些小麻烦,不但会影响你的情绪和工作表现,还有可能会影响我们的健康,最重要的是,如果被这些小事击垮了,我们哪还有心思去想什么大事呢?
我现在“大概”可以做到情绪稳定,我有四个自己在用的心法,分享给大家。
学会忽略
学会忽略,是我看到一句,据说是爱因斯坦说过的话:“弱者报复,强者原谅,智者忽略”。
就拿开车举例,我在路上发现过一个特别有意思的现象,如果开车的时候遇见插队,不同的司机有三种反应。
第一种人是对抗型,面对插队丝毫不让,眼看着两辆车的距离都塞不下一根手指头了,插队车决定放弃,他可能赢得了这场面子仗。
第二种人是原谅型,一开始会正常起步,但如果对方强行变道, 他会及时刹车,毕竟剐蹭了浪费时间浪费金钱。
第三种人是忽略型,他可能根本就没有在意这辆车在插队,他会直到前车完全进来,才会继续出发。他可能正沉浸在播客或者音乐里,神游在另一个维度。
你觉着哪种应对方式最好?
之前我是第二种人,并且还觉着第三种人是技术不佳,或者说是“好欺负”,直到最近我也有点了第三种人的样子。
有一次我在路上,听播客听的入迷,前方有个车有变道的意图。我也不着急,就让他变道进来了。

随后我才意识到,自己好像甚至都没有为这件事情,分散一点注意力。
那一刻我才明白,忽略,不是退让,也不用压抑情绪——
而是你根本没分配注意力分配给小事,负面情绪自然也就不会被激活。
忽略负面情绪非常有必要,有一项针对1300名男性做的研究,让他们对自己遇见类似于加塞这种小麻烦的反应打分,分数越高代表情绪反应越大。
结果发现,经常对小事有激烈反应的男性,他们的健康状况和死亡率,和面对那些重大人生压力的人一样。反应最激烈的那一组,在同样时间段内的死亡率,竟然是正常人的三倍。
我想起之前我奶奶家挂着一副《莫生气》的字画,里面有一句话:别人生气我不气,气出病来无人替。
看来对小事有激烈反应,真的会影响身心健康啊。我实践下来,忽略情绪有三个小技巧:
第一个是觉察情绪。当你发现自己心跳加快、紧握双拳,要注意情绪可能要来了。你需要深吸一口气,把注意力放到自己身上,让自己停下来,别被情绪牵着鼻子。
第二是控制自己的反应。维克多·弗兰克尔有一句话:“在面对外界刺激时,我们拥有选择如何回应的自由”。人真正能控制的只有自己的行动和态度,你控制不了堵车,但你能控制堵车的时候听一首钢琴曲。
第三是发现身边的美好,也就是感知生活中的“小确幸”。比如阳台上的花突然开了,孩子自己穿衣服了。有研究表明,对生活中积极细节的留意,能有效中和压力引发的负面情绪。
不恶意揣测
不过有些事情你很难忽略,比如公司考核政策调整,甚至说你持仓的股票大跌。
你感觉这个世界充满了恶意:公司打压你、社会在压榨你、资本在收割你。
可现实真的是这样吗?
帮助我解决心结的法则叫做「汉隆剃刀」。简单的说,它的意思就是「能解释为愚蠢的,就不要解释为恶意」。
这里说的愚蠢,代表各种无知的、偶然的、非故意的原因。这些情况发生的可能性远远大于恶意,汉隆剃刀大多数情况下反应了客观事实。
比如你开车,前方突然有车插队,你怒不可遏,心想:你是不是觉着我好欺负?
但其实他根本不认识你,只不过恰巧他意识到前方需要拐弯了。
这个法则在理解社会、组织层面,特别有效。
比如你持有的一只股票突然暴跌,你会听到一些传闻:说这是“庄家”在故意控盘。
我之前特别相信这种阴谋论,觉着股价是被人为操控的。可真实情况是,大公司的股价是很难操控的,投入很多钱也不一定能成功,一旦失败就会受到很大损失。而且市场上每个股民的互动、追涨杀跌,也会给股价造成很大影响。

再比如一家公司突然开始了绩效改革,给研发人员制定了和销售额相关的KPI,而且目标不完成还会对薪资产生影响。
可研发的考核怎么可能和销售的KPI挂钩呢?你怀疑管理层在变相降薪。
可更大的可能性是:管理层也不知道如何满足老板制定的目标,只能先套个模版应付一下。
不是你被打压了,只是碰巧他们不专业,你以为它是在有意的做坏事,但更大的可能是它没能力做好事。
我们大脑为了认知方便,常常会把一家公司或者一个政府当成一个人,假设他有自由意志,是一个决策缜密、心怀不轨的敌人。但其实组织就是一部机器而已。
不是组织在有意针对你,这世界其实就是个草台班子。
超越身份思维
你有没有经历过这种场面,过年回家刚坐下,七大姑八大姨联合开麦:
“你看你三十多了还在北京漂着,准备啥时候结婚啊?你表哥孩子都上小学了。”
“北京租房多贵啊,在咱老家,这都够还房贷了,干嘛不考个公务员安稳点?”
你努力工作、认真生活,熬过了失业焦虑、加班压力,结果成了他们口中的“混日子”。
你不是气他们说了什么,而是他们压根不懂你,却笃定地定义你。
可他们的确不懂你,也不会真正的懂你。他们只不过是在维护自己的世界观而已。
学术界有一个流行的说法是,人们的行为和观点,是由身份认同决定的。你的长辈,可能在一个小城过了一辈子,有编制、有房子、生儿育女,就是他们眼里的体面生活。
你异地漂泊、私企行业、租房未婚,就是他们眼中的“不务正业”。
你不需要反驳,也不需要忍耐。而是你明白了,你不需要从所有人眼里获得认可,你可以看到不同身份的局限性。

超越身份思维,在养育孩子的过程中特别有用。
那天我带儿子去上烘焙课,糖刚撒进面粉中,他就开始一边揉一边往嘴里塞。
我试图制止,他越发固执,并且不耐烦的喊:“我要回家!我要回家!”
我有点崩溃,一边怕他吃坏肚子,一边气他为什么这么不听话。
但那一刻我突然意识到,他不是故意气我,他只不过多想吃几口糖而已。
我们常说父母要包容孩子,为此你需要先理解他们的行为。糖果能刺激大脑释放多巴胺,这是最本能的反应,而且他们理性大脑还没有开始发育,你不能要求一个孩子有“自控力”
我们总以“大人的身份”要求孩子守规矩,可孩子的很多行为,并不是“不听话”,而是“做不到”。
就像人类的大脑,在25岁才能完全发育完成。也就是说,一个孩子即使成年之后,也会做出一些你不理解的事情。一个人成长的过程中,本就充满了能力滞后,
你不理解他,就会对抗他。你理解了,才能包容他。
找到目标
有一天我正坐在电脑前,正为了文章选题抓耳挠腮。
我儿子“砰”地一下推开门,一屁股坐在我旁边,拿着小汽车喊:“爸爸!爸爸...”
以往工作时被打断,我会特别不耐烦。可那天,我关上电脑开始陪他玩,我发现自己变得很有耐心。
过了一会他自己去客厅玩了,我坐在电脑前,去想我为什么会有这种改变。

是我变得有耐心了?还是我终于佛系了?后来我想明白了——是自己的目标更明确了。
过去一被打断就恼火,其实都是因为自己都不知道要干什么。我只是模糊的觉得,自己得做点有意义的事情。
但现在写好每一篇文章就是我想做的事情,就算短暂的停下来,也没有任何影响。
心理学上有一个「自我决定理论」:真正让人持续投入的,从来不是外界的压力或奖励,而是自己选的方向。
比如说当你在街道上跑步,周围车水马龙、喧嚣嘈杂,可你根本就听不见。因为你眼中,只有即将抵达的下一个路口。目标感就像降噪耳机,能让你不被外界打扰。
但如果你没有目标呢?虽然一天什么都没干,却很容易因为工作上的催促,家人的一句话,就能让你心烦意乱。
你不是没有承受力,你可能只是没有方向而已。
尼采说:“一个人知道自己为什么而活,就可以忍受任何一种生活。”
现在看来这不是鸡汤,而是硬道理。
真正让你内心安定的,不是时间管理、情绪技巧,而是——你有没有在朝着自己认可的方向,慢慢靠近。
说在最后
最后分享一句据说是爱默生说的一段话来结尾吧。
当整个世界似乎都在暗中图谋,用琐事一次又一次侵扰你、纠缠你,当所有人都来敲你的门,并且说,“到我们这里来吧。”绝对不要动心,不要加入到他们的喧闹中。始终保有一颗自助自主的心,不受外界影响和左右,活在自己的意志里,才能够使心灵得到宁静,才会过上真正独立的生活。
以上就是我自己应对生活中一些“小麻烦”的个人心得,如果你也有面对“小麻烦”时处理情绪的技巧,欢迎在评论区分享~
这是东东拿铁的第84篇原创文章,欢迎关注。
来源:juejin.cn/post/7522751214263992370
三年写了很多代码,也想写写自己
前言
从我进入公司开始,我给自己立了一个三年成为中级前端工程师的目标,或者说flag吧,最近正好三年合同到期了,我开始思考过去的这三年我都做了什么,是否完成了flag,所以我在个人博客中增加了一个模块《项目需求》用于管理自己在生活、工作、学习过程中开发过的项目文档和思考,在整理的过程中才发现很多东西都忘记是怎么做的了,大概是只知道做,不知道为什么做吧,所以这里想写一篇文章记录下或者说获取一些建议吧。

很多人说博客和todo没啥用,开发完几乎都不会使用,我觉得看怎么用吧,我这里把项目和todo、技术文档、技术栈绑定了。编辑项目和可以和todo绑定,我觉得还挺好使,这样在整理技术文档、技术调研的时候也可以用


过去三年我都做了什么
2022年
基本情况
因为在学校的时候根本没想过这么早出社会,原本是打算走学术路线的,结果考研那年因为家里临时出了点状况,最后决定先工作再说。现在回头看也挺好的,早点接触社会,其实成长得更快。
在这一年我主要是疯狂补项目经验和疯狂加班,因为社会始终不同于学校,排期让人很头疼,在以往我缺失了很多的项目经验,导致对企业级项目几乎不通,导致我在做任何项目都比较挣扎,再加上进的是一个小厂,完全没有导师制,属于放养,并且大家都很忙,所以只能自己多花时间,并且当时我学的vue的技术栈,但是公司是react的,光是搞懂 React 那一套生态就花了不少时间。
项目经历
- 早期主要是做企业后台 & figma插件,其中有一个插件让我特别头疼,一方面因为当时的自己比较菜,另一方面因为这个需求是一个刚毕业的设计驱动的,属于是啥也不通,导致产品逻辑也不对,写出来之后疯狂打补丁,最后也还是啥也不是。
- 后面做了设计社区,都是一些简单的ui和业务逻辑,因为是一个设计编辑器平台
- 在写了几个后台之后我逐渐熟悉了公司开发技术栈和后台开发逻辑,最早这个公司吸引我的是编辑器,后面我就申请去做了编辑器
- 最开始是编辑器的字体加载、和一些创新的业务需求、设计工具中不同模式的数据结构复用、画布设置【缩放、背景等等】、对齐至像素网格
成长
- 技术上,从 Vue 转到 React 后,逐步掌握了 React 的核心理念和生态工具,像状态管理、组件设计、性能优化这些都有了比较实战的理解;
- 项目上,能独立负责模块开发,也逐步学会了和产品、设计磨合需求;
- 心态上,从一开始觉得“自己不会”到现在敢主动挑任务、遇到新东西也不怕折腾,整体自驱力和解决问题的能力都提升了不少。
- 这时候还是需要拿着电脑到处抓人问问题,非常感谢当时给予我帮助的小伙伴
2023年
基本情况
这个阶段已经开始逐步适应工作生活了,但是还是会畏惧需求,因为还有很多没接触过的东西,依然还是疯狂加班,不光是需求,还有自己学习一些东西,这时候我已经切换到了编辑器领域,其中涉及很多图形学知识,比如坐标转换、矩阵运算、渲染原理、渲染库的使用等等,因为公司里的人几乎不写文档,代码也是anyscript,并且这时候ai还没有,编辑器这个领域,网上几乎搜不到什么文档啥的,只能生啃代码和类型文件并尝试demo,这时候用的就是最笨却最有效的方法,做到哪就把哪个模块整理一篇文档记录下来,慢慢的也就掌握了项目的大部分逻辑和架构思路
项目经历
- 设计工具中不同模式的数据结构复用,一个创新业务需求,使用同一套数据,快捷的进行模式切换,非常巨大的需求,正是因为这个需求让我学会了很多东西,开始能独立负责一个模块的开发
- 白板项目:其中做了节点数据结构定义【便签、图形文本、连接线等等】、节点树的处理、节点的渲染、项目框架搭建、画布设置、缩放、属性控制、属性工具条、性能优化等等,几乎所有功能都写了一部分,这个项目是我从0-1经历的一个项目,历时10个月,早期有很多人,后来因团队调整,部分成员转入新项目,剩余的人员就非常的少了,我是其中之一。
- 这一年我几乎都在做白板项目,其中连接线是最难的,我写了其中的一部分,还因此挨了一批,给我上了社会上的第一堂课【能力不足就得背锅】
成长
- 编辑器初步入门:理解了编辑器的基本架构 & 实现原理,如模块划分、碰撞检测、矩阵运算原理、渲染库的基本使用、复制粘贴的实现原理、svg的解析原理等等、数据节点定义、节点树的使用等等
- canvas、svg、渲染库的基本使用 & 原理
- 学到了很多调试技巧、看了很多的技术文章
- 能够独立负责一个模块的开发和推进
- 自己开始从0-1写一些项目,23年主要是一个工程化的项目,因为当时公司没有脚手架,每次创建新项目都要配置一遍,我就想写一个脚手架来用,就开始探究一些前端工程化的东西,这里主要是一个前端工程化的demo
2024年
基本情况
这时候已经对编辑器开发很熟练了,能够自己调研、处理一些模块,不会畏惧需求,拿到什么都能做也敢做,再加上ai的爆发,现在很轻松就能应付日常需求,还有一些时间开发自己的东西。这时候我几乎不用在追着别人问了,开始探究一些技术上的原理,看了react的源码,了解了react的运行原理,我最初看这个的驱动是因为我想看懂编辑器底层的数据结构和自定义渲染器的实现原理,因为是相通的。
项目经历
- 多模式切换的设计工具,在23年双模式切换有一个比较客观的数据基础上,想要开发多模式切换
- 编辑器重构:真真正正的从0-1实现编辑器,学到了非常多的东西
成长
- 这个阶段成长是最快的,在之前自己主动学习和开发过程中的积累,达到了量变到质变的过程,再加上重构过程中全是实实在在的技术类需求,这个阶段开发的非常爽,学到了非常多的东西,一度让我觉得我们也能做出一个超级nb的东西
- 对编辑器的整体实现理解更加深入,对大型项目的推进和管理有一些了解
- 对于代码质量,代码风格,团队管理,团队交流都有更深的体会
2025年
基本情况
进入新团队后,开始参与 AI 方向的生成类产品开发。虽然整体技术难度相比之前的编辑器项目要低一些,但节奏非常快,很多需求都是边想边做,对响应能力和落地能力要求更高。项目整体强调快速迭代、快速验证,很多时候从 0 到上线都只有几天时间。
项目经历
- 核心流程重构:参与整个生成流程的梳理和重构,数据结构的重设计,提升了整体稳定性和扩展性。
- AI 创新功能研发:参与多个创意方向的原型开发,包括智能组件、AI 引导式操作流程等,既需要理解前端,也需要深入 AI 接口的能力边界。
- 常规前端需求:除了核心 AI 功能,也参与大量 Web 端页面开发、交互优化、组件抽象等日常前端需求的处理。
- 跨角色协作:与产品、模型工程师保持密切沟通,协助设计 prompt、测试接口,探索“产品-模型-前端”的协作流程,理解 prompt 工程的基本逻辑。
成长
- AI 与前端的深度结合:理解 AI 接口的调用逻辑、数据结构设计、模型能力边界,并在多个场景中尝试 prompt 调优、token 限制控制、输出结构稳定性等关键问题。
- 需求落地能力提升:现在不管接到什么需求,都能独立完成从调研、设计、开发、联调到交付的完整流程,并且具备识别风险、提前发现问题并推动解决的能力。
- 项目推进与优化意识:开始更关注整体产品的合理性和可维护性,不再仅仅关注功能实现,会主动提出重构建议、设计优化点、体验提升方案。
- 应变与协作能力加强:面对快节奏、多变的需求场景,能够保持清晰的优先级判断
- 干了很多新鲜的东西,还挺好玩的,ai接入支付、ai表单等等。
我自己写的项目
就这几个,其他的几乎都是一些不成型的demo,还有几乎都在写公司的项目
- nextjs-blog:一个用nextjs写的高聚合的全栈博客,还在持续更新,有时候有点犯懒,在线访问
- handwriting_js:没事写点手写题,写了忘,忘了写,一个也记不住
- react_demo :前端工程化demo,配合这个专栏食用最佳
- debug_react:18.2.0的react源码调试环境
- debug_webpack: webpack5源码调试环境
现在我是怎么想的
- 快速学习的能力比技术能力更值得培养
技术更新太快了,几乎每一年都会冒出一堆新概念、新框架、新工具,追是追不完的。相比“掌握某个技术”,更在意的是“有没有能力快速理解它、上手它、找到它的边界”,这是一个更本质的能力。 - 技术是为业务服务的,但我们也要有自己的判断和坚持
做久了之后会发现,代码写得好不好,有时候并不是最关键的,能不能解决问题、把事情落地才是关键。谁也不想变成“只写业务”的人——在完成需求的同时,尽可能把事情做得优雅些,至少对得起自己的审美和标准。 - 保持初心
有时候项目节奏快、需求不讲理、上线压力大,很容易被“搞完就行”的心态裹挟,还是需要保持自己的思考 - 身体是革命的本钱!!!!
24年7月份左右,体检,发现小毛病快20项,全是久坐,熬夜搞出来的小毛病,可能因为之前加班太多了,也不运动,在7-11月胖了20多斤,并且整日没精打采,身体没有力气,像是气血亏虚一样,我去看了中医,开了一些调养的中药,12月底才开始有好转,我找了私教,去健身房开始健身,大半年了现在就好多了,增肌也小成 - 培养工作之外的兴趣爱好
健身、摄影、钓鱼都可以,长时间的工作会使人麻木和疲惫,需要一些工作之外的爱好调和
我还做了一个在线相册,从大佬Innei获取到的思路,但技术栈是不一样的,也比较简单

以后我想干啥
说实话,我现在还没完全想明白这个问题。过去几年我经历了从业务开发,到编辑器、到 AI 项目,接触了很多不同的方向,也成长了不少。但也正因为尝试了很多,现在反而更谨慎,不想轻易贴标签。
我想我还是会继续写代码,但不一定只写代码。我更在意的是:“我做的东西有没有价值?有没有可能改变点什么?”也许未来会往架构方向走,也许会继续在 AI 产品方向深入,也可能有一天突然转向一个完全不同的方向,比如做点属于自己的产品。
我目前能确定的就是三件事:
- 我希望能一直保持学习和探索的状态,不断拓宽认知边界;
- 我希望在一个让我有成长、有挑战感的环境里工作;
- 我希望做的事能让我感到值得,能有一点点“留下痕迹”的感觉。
剩下的,就边走边看吧,继续更新文章,但不会跟之前一样那么频繁,从中学到东西,并且能够帮助别人
来源:juejin.cn/post/7524602914514763819
微软正式官宣开源!王炸!
最近,和往常一样在逛 GitHub Trending 热榜时,突然看到又一个非常火的开源项目冲上了 Trending 热榜,相信不少小伙伴也刷到了。
一天之内就新增数千 star,仅仅用了几天时间,star 增长曲线都快干垂直了!

再定睛一看,好家伙,这不是微软的项目么。

出于好奇,点进去看了看,没错,这正是微软自家大名鼎鼎的 WSL!

原来就在前几天的微软 Build 2025 开发者大会上,微软正式官宣开源 Windows Subsystem for Linux(WSL)。

这在微软官方的最新的开发者技术博客也可以翻到。

众所周知,WSL 是微软在 2016 年就发布的一项重磅功能,相信不少同学都用过。
WSL 全称:Windows Subsystem for Linux,它允许用户在 Windows 操作系统中直接运行 Linux 环境,而无需双系统或者虚拟机,通过兼容层支持开发者工具、命令行应用及文件系统互通,实现方便地跨平台开发与测试。

从初始发布到如今走向开源,回顾 WSL 一路走来的发展历程,可以总结为如下几个大的阶段。
- 初期兼容层探索
2016年,微软首次推出 WSL 1。
其通过兼容层工具(如 lxcore.sys 驱动)将 Linux 系统调用转换为 Windows 调用,首次实现原生运行 ELF 可执行文件。
其优势是轻量级启动,但缺点也很明显,那就是兼容性和性能都存在一定局限。
- 中期扩展与独立应用
2019年,WSL 2 正式官宣。
此时微软对其进行了彻底的重构架构,采用基于 Hyper-V 的轻量级虚拟机技术,来运行完整 Linux 内核,并显著提升了兼容性与性能,同时这也使得 WSL 能支持运行更多的 Linux 程序和应用。
2021年,WSLg 正式推出,从此便支持了 Linux GUI 应用,同时 WSL 也开始作为独立组件来发布,其从 Windows 镜像剥离,转为通过 Microsoft Store 来进行独立安装和更新。
2022年~2024年这几年时间内,微软对 WSL 进行了持续迭代,包括 systemd 服务管理支持、GPU加速、多发行版支持以及内存和文件系统等诸多性能优化。
经过中期这一阶段的发展,WSL 在兼容性、功能以及性能等方面都有了长足的进步,也为下一步的开源和社区化奠定了基础。
- 后期开源和社区化
在前几天的微软 Build 2025 开发者大会上,微软正式宣布 WSL 开源(GitHub 仓库开放),允许社区直接参与代码贡献,这也标志了 WSL 进入了开源和社区化的新阶段。
至此为止,在 WSL 的 GitHub 仓库中的 Issue #1 —— 那个自2016年起就存在的“Will this project be Open Source?”的提问,终于被标注为了“Closed”!

众所周知,WSL 其实是由一组分布式组件来组合而成的。
即:一部分是在 Windows 系统中运行,另外一部分则是在 WSL 2 虚拟机内运行。
这个从 WSL 官方给出的组件架构图中就可以很清晰地看出来:

那既然现如今微软官宣了 WSL 开源,那对于开发者来说,我们需要清晰地知道这次到底开源了哪些组件代码呢?
关于这部分,对照上图,我们这里不妨用表格的形式来简要总结一下,供大家参考。
| 组件类型 | 功能描述 | 组件名 | 开源状态 |
|---|---|---|---|
| 用户交互层 | 命令行工具 | wsl.exe | 已开源 |
| 用户交互层 | 命令行工具 | wslg.exe | 已开源 |
| 用户交互层 | 命令行工具 | wslconfig.exe | 已开源 |
| 服务管理层 | WSL服务管理 | wslservice.exe | 已开源 |
| Linux运行时 | init启动 | init | 已开源 |
| Linux运行时 | 网络服务 | gns | 已开源 |
| Linux运行时 | 端口转发 | localhost | 已开源 |
| 文件共享 | Plan9协议实现 | plan9 | 已开源 |
以上这些已开源的组件源码都可以在 WSL 的 GitHub 仓库里找到,大家感兴趣的话可以对应查看和研究。

虽然本次开源覆盖了 WSL 的绝大多数关键组件,但是官方也明确说了,以下这几个组件由于其仍然是 Windows 系统的一部分,所以目前仍然保持非开源状态,包括:
Lxcore.sys:支撑 WSL1 的内核驱动程序P9rdr.sys和p9np.dll:运行"\wsl.localhost"文件系统重定向的关键组件(从 Windows 到 Linux)
这一点需要特别注意一下。
回顾过往,其实 GitHub 上的 WSL 仓库并不是最近才有,好多年前就已经存在了。
即便在以前的 WSL 还没有开源的日子里,WSL 的背后就有了一个强大的社区在支持,开发者们通过 GitHub Issue 和 Discussion 等为 WSL 这个项目提供了诸多错误追踪、新功能建议以及意见改进。

可以说,如果没有社区贡献,WSL 永远不可能成为今天的样子。
而现如今 WSL 源代码正式开源,这也满足了开发者社区长达 9 年的期待。
开发者们现在可以自行下载、构建,甚至提交改进建议或者新功能的代码来直接参与。
同时 WSL 官方也给出了一个详细的项目贡献指南:

感兴趣的同学也可以上去学习研究一波。
好了,那以上就是那以上就是今天的内容分享,希望能对大家有所帮助,我们下篇见。
注:本文在GitHub开源仓库「编程之路」 github.com/rd2coding/R… 中已经收录,里面有我整理的6大编程方向(岗位)的自学路线+知识点大梳理、面试考点、我的简历、几本硬核pdf笔记,以及程序员生活和感悟,欢迎star。
来源:juejin.cn/post/7509437413099536438
同事年底绩效是C,提离职领导死活不让走,后来领导私下说:他走了,就没人背这个绩效了
背绩效
临近年底,朋友圈和各大职场 App 都在讨论「年终奖能拿多少个月」的话题。
除了对「能拿多少个月」有广泛的讨论以外,还有不少关注点在于「年终奖何时能发」这件事上,毕竟只有真的拿到手了,才能算是钱,而不是饼。
我一直以为,在大厂年终奖这条"鄙视链"上,最差的就是那些"零年终"的小伙伴了。
实在没想到,还有高手。
比零年终更惨的,是要背绩效,同时还得面对领导"惺惺作态"的挽留:

在这位网友发的帖子中提到,自己身边有位同事去年年中的时候是 C 绩效,到了年底还是 C,通常连续得到低绩效,就会面临各种安排(砍福利、降工资 或 被换组),于是这位同事主动提了离职。
但离谱的是,领导死活不让他走,一直以「后面还有机会」这样的说辞来进行画饼。要知道,这位领导大概率是他两次 C 绩效的"贡献者"。
在其他人看来,还以为领导是真心挽留他,这位同事留在公司一定会先苦后甜。
直到后面这位领导私下和楼主说:"他走了,没人背这个绩效了"。
后面楼主才恍然大悟,所谓的挽留,仅仅是为了让他分担一些不好的绩效罢了。
简短的一句话,"他走了,没人背这个绩效了",背后却是实实在在职场霸凌。听起来像是领导的"无奈之举",实则是领导为了应付公司指标(一定要有低绩效的组成),选择性牺牲某些同事的离谱行为。
权利在这些人手上真是可悲,那个背绩效的同事,也有自己的生活,甚至还有自己的家庭。被针对就算了,还得被耗着,被 PUA 朝着那个"有希望,但没结果(下次还是 C 绩效)"的方向去期待,最后还要反省是不是自己的问题。
新的一年,大家都能远离这些垃圾人。
对此,你有想分享的,欢迎评论区交流。
...
回归主题。
周末,继续简单小算法。
题目描述
平台:LeetCode
题号:806
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为 个单位,如果我们在写某个字母的时候会使这行超过了 个单位,那么我们应该把这个字母写到下一行。
我们给定了一个数组 widths,这个数组 代表 'a' 需要的单位, 代表 'b' 需要的单位,..., 代表 'z' 需要的单位。
现在回答两个问题:至少多少行能放下 S,以及最后一行使用的宽度是多少个单位?
将你的答案作为长度为 的整数列表返回。
示例 1:
输入:
widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "abcdefghijklmnopqrstuvwxyz"
输出: [3, 60]
解释:
所有的字符拥有相同的占用单位10。所以书写所有的26个字母,
我们需要2个整行和占用60个单位的一行。
示例 2:
输入:
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "bbbcccdddaaa"
输出: [2, 4]
解释:
除去字母'a'所有的字符都是相同的单位10,并且字符串 "bbbcccdddaa" 将会覆盖 9 * 10 + 2 * 4 = 98 个单位.
最后一个字母 'a' 将会被写到第二行,因为第一行只剩下2个单位了。
所以,这个答案是2行,第二行有4个单位宽度。
注:
- 字符串
S的长度在 的范围。 S只包含小写字母。widths是长度为 的数组。- 值的范围在 。
模拟
根据题意进行模拟即可。
使用变量 a 代指当前有多少行是满的,使用变量 b 代指当前填充光标所在的位置。
Java 代码:
class Solution {
public int[] numberOfLines(int[] widths, String s) {
int a = 0, b = 0;
for (char c : s.toCharArray()) {
int t = widths[c - 'a'];
if (b + t > 100 && ++a >= 0) b = t;
else b += t;
}
if (b != 0) a++;
return new int[]{a, b};
}
}
C++ 代码:
class Solution {
public:
vector<int> numberOfLines(vector<int>& widths, string s) {
int a = 0, b = 0;
for (char c : s) {
int t = widths[c - 'a'];
if (b + t > 100 && ++a >= 0) b = t;
else b += t;
}
if (b != 0) a++;
return {a, b};
}
};
Python 代码:
class Solution:
def numberOfLines(self, widths: List[int], s: str) -> List[int]:
a, b = 0, 0
for c in s:
t = widths[ord(c) - ord('a')]
if b + t > 100 and a >= 0:
a += 1
b = t
else:
b += t
if b != 0:
a += 1
return [a, b]
TypeScript 代码:
function numberOfLines(widths: number[], s: string): number[] {
let a = 0, b = 0;
for (let i = 0; i < s.length; i++) {
const t = widths[s.charCodeAt(i) - 'a'.charCodeAt(0)];
if (b + t > 100 && ++a >= 0) b = t;
else b += t;
}
if (b !== 0) a++;
return [a, b];
};
- 时间复杂度:
- 空间复杂度:不使用
toCharArray为 ,否则为
来源:juejin.cn/post/7463836172559384627
为了搞一个完美的健身APP,我真是费尽心机
作为一个强迫症患者,当我需要一个简单、好用、流畅、无广告的健身记录软件时,撸铁记就诞生了。
为什么我要开发撸铁记
我应该是2018年接触健身的,那个时候我的教练每次给我上课,都会拿着一个文件夹记录我的每一次训练。但是纸制记录最大的问题是难保存,而且只能教练一个人看,于是我写了第一个健身记录软件,叫FitnessRecord,然后我就在知乎上分享了自己的应用,没想到真的有人用!
后来,在朋友的撺掇下,我正式决定将撸铁记推上线,然后就是(巴拉巴拉极其费劲的上线了!)
个人开发者有多痛苦
一个完美的软件,最重要的,不仅要好看,还得好用,于是,就出现了下面这些设计
暗黑模式
一个 APP,如果不支持暗黑模式,那你让强迫症怎么活?


但是...你以为这就完了吗?细节藏在魔鬼里😄
绝对黑
记得前两年各大手机厂商还在卷屏幕的时候,苹果率先推出了“绝对黑”,强调OLED屏幕通过像素关闭实现的物理级纯黑效果。so~为了实现在暗黑模式下,软件用的更爽,撸铁记的 APP 的背景色使用了#000000,也就是纯黑色
这样做的好处是在暗黑模式下,撸铁记可以与屏幕完美的融为一体。但是!问题来了。纯黑色真的很难设计,作为一个程序员出身的我,头发都抓掉了好几把。
有细心的小伙伴们或许已经发现了,亮色模式下跟暗黑模式的主题色其实不是一个颜色:

我们发现在暗黑模式下,亮色模式下的主题色与黑色之间的对比度不够明显,导致整体色调暗沉,因此,亮色模式的主题色是:#3B7AEF 暗黑模式下则是:#2E6FEC
虚拟导航键适配
Android 的虚拟导航键如果适配不好,有多丑相信懂得都懂,为了能够在弹窗模式下也能够让弹窗与导航栏完美无瑕的融为一体,我设计了一个 BaseDialog,专门用来管理弹窗状态,确保在任何页面,虚拟导航栏都不会影响到 APP 的整体颜值!

左滑展示更多功能
作为一个专业的记录软件,各种各样的功能总要有吧?
全部堆叠到更多菜单中是不是很傻?如果在屏幕排列出来展示是不是更傻?所以,左滑删除这种很合理的交互是不是得有?
IOS 设备是常态,但是能够完美的搬到 Android 机器上,该怎么做?鸿蒙系统又该怎么适配?!
但是!我说的是但是,为了更漂亮的 UI,更合理的交互,我又熬了个通宵,最终完美解决!

好的交互就得多看,多学
每个人的习惯都不同,比如有的用户希望能够在倒计时 120s 之后有一个声音提示,有的则希望可以按照训练顺序,对卡片自动排序,那么问题来了,这些功能又该堆叠在哪里呢?
我的灵感来源是一款不太出名的 P 图软件
在训练详情页面的左侧,有一根很不起眼的线,当你触摸这条线的时候,就会弹出训练设置的总菜单啦!(不用担心很难触摸,我已经将触摸范围调整到了最合适的大小,既不会误触,也不会很难点👍)

其实,APP 还有很多为了“好看”而做的设计,但是一个好的 APP,只是静态的好看怎么能行!
完美的入场动效
我该如何像您吹嘘这系统级的丝滑动效?请看 VCR(希望掘金支持视频链接😂):
http://www.bilibili.com/video/BV1sb…
http://www.bilibili.com/video/BV1Pb…
如何?是否足够丝滑???
当然,功能性才是核心
除了记录的易用性和强大复杂的功能,为了能够 360° 覆盖健身所需要的所有场景,我还开发了各种各样的功能
赛博智能
赛博智能,我希望这个功能可以像赛博机器人一样,对我的身体状况进行 360° 评估。
鄙人不才,晒一下我的身体状态评估分析:

一个超级大长图,几乎涵盖了你想要知道的一切~当然,后续还会继续丰富其他功能😁
日历统计

这个月你偷懒了吗
是的,你的每一滴汗水,都会浓缩破到这一张小小的日历表格中,如果你偷懒了,那就是一张空空的日历,那么,你会努力填满每一天的,对吧?
最后的最后
按原本的计划,我想要从设计到功能,认真的介绍一下撸铁记的所有方方面面,但是回头看看,文章真的太长了,所以,就留一点悬念给大家,希望需要的小伙伴自行探索😁
其实,每一个细节,我都改过很多次,后续依旧会不断的改来改去,因为我只想要最好~
最后,祝愿所有喜欢健身的朋友,都可以收获自己成功~
来源:juejin.cn/post/7524504350250205238
Stack Overflow,轰然倒下!
你好呀,我是歪歪。
前几天看到一个让我感慨万千的走势图:

本来想让你猜一猜这个走势图的内容是什么的。
但是结合标题你应该也能猜到了,和 Stack Overflow 有关。
这个走势图的数据是 Stack Overflow 从 2008 年开始到现在,每个月新问题的个数。
数据的来源是这个网站:
data.stackexchange.com/stackoverfl…

它可以以 SQL 的形式查询相关的数据。
从走势图可以看到,从 2008 年到 2014 年是陡增的趋势,可以说是高歌猛进,翻着翻的上涨。
2014 年到 2020 年,数据起起伏伏,但总比 2020 年之后的一泻千里好的多。
把每个月的明细数据下载下来之后,我看了一下 TOP 3 的情况:
- 2020/5/1,302381 个新问题
- 2020/4/1,299146 个新问题
- 2017/3/1,298552 个新问题
最辉煌的时候,是 2020 年。
可能那个时候大家都在居家办公,遇到问题也没有同事可以咨询,就顺手在网上求助网友了。
但急转直下也是在 2020 年。
因为那一年末 ChatGPT 横空出世,并凭借还算不错的表现,慢慢被大家开始接受了。
而这几年 AI 发展的突飞猛进,越来越少的人选择 stack overflow。
至于为啥越来越少的人选择 Stack Overflow?
我想还是在于便捷性上。
和 AI 交互,你给它问题,它能立马响应,直接给你正确答案,或者引导你去寻找正确答案。
和 Stack Overflow,或者和任何问答平台交互,你发布问题之后得等,等到有人看到你的问题,然后才有可能会回答。
如果你只是想在 Stack Overflow 里面找一个问题的答案,而不是打算自己提出一个问题的话,那 AI 更加是碾压式的存在。
因为你可以让 AI 帮你在 Stack Overflow 里面找答案。
Stack Overflow 免费提供了它十几年间的所有问答数据,然后被各个 AI 当做了训练模型。
最后落得的下场,说好听点叫功成身退,说难听点就是卸磨杀驴。
我记得曾经还有一个关于程序员的梗。
就是当程序捕获到异常之后,由程序自动发起一个请求给 Stack Overflow,然后获取解决方案。
所以,作为程序员,你应该知道 Stack Overflow 在某种程度上,它就是程序员的圣经,它的回答就是权威。
我写技术类文章的时候,如果顺着问题找到一个 Stack Overflow 的链接,我在潜意识里面就会认为,这个链接里面就会有我在寻找的答案,而且是正确答案。
但是这些都是很新鲜的“过去的故事”了。
我把前面获取到的表格排序后拉到表格最后,2025 年的数据已经跌落到了 2008 年的水平:

再回头看看这个走势图:

不得不承认,Stack Overflow,几乎是成不可逆转之势般的倒下了。
两个问题。
我之前写过的技术文章中,Stack Overflow 出现的频率非常的高。
有时候我会去上面找素材。
以至于一提到 Stack Overflow 我立马就能想起至少两个我写过的有意思的问题。
第一个问题是这样的:

当时觉得这个输出结果很奇怪,有点意思,于是研究了一下。
最终经过一番折腾也是在 Stack Overflow 找到了答案。
但是现在,我只需要把问题扔给各种 AI 大模型,比如 DeepSeek。
它就能给出答案:

然后还可以继续追问“额外5分43秒”产生的具体原因是什么:

给出的参考链接中也有 Stack Overflow 的链接:

第二个问题是这样的:

把这个问题扔给 DeepSeek 之后,它也很快就给出了答案:

答案总结起来就是一句话:
伪随机数生成器的序列是确定的,但看起来“随机”。
这些特定的种子值(-229985452 和 -147909649)是通过反向计算或暴力搜索找到的,目的是使 nextInt(27) 的序列恰好匹配 "hello" 和 "world" 的字符编码。
好,现在如果没有 AI,我给你上面这两段代码。
甚至我直接告诉你,这个代码的输出结果可能是 1900-01-01 08:05:43:
public class MainTest {
public static void main(String[] args) throws Exception {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse("1900-01-01 08:00:00");
System.out.println(simpleDateFormat.format(date));
}
}
而这个代码的输出结果是 Hello World:
public class MainTest {
public static void main(String[] args) {
System.out.println(randomString(-229985452) + " " + randomString(-147909649));
}
public static String randomString(int i) {
Random ran = new Random(i);
StringBuilder sb = new StringBuilder();
while (true) {
int k = ran.nextInt(27);
if (k == 0)
break;
sb.append((char) ('`' + k));
}
return sb.toString();
}
}
对于这一类初看一脸懵逼,奇奇怪怪的问题,在“面向搜索引擎编程”的时代,让你去探索一下为什么,你是不是多少也得花费一点点功夫。
甚至,完全有可能你花费了一些功夫,没有找到答案,或者找到了一个以为正确,实际错误的答案。
而现在,你只需要扔给 AI,它就会给你分析的明明白白的。
至于它的分析是否合理,你可以进行自己的判断。
至少节约了在网上瞎找链接的过程,而这个过程,按照我个人经验来说,也是非常耗时的。
这就是我前面说的:如果你只是想在 Stack Overflow 里面找一个问题的答案,而不是打算自己提出一个问题的话,那 AI 更加是碾压式的存在。
从这个角度,也能瞥见 Stack Overflow 倒下的必然性。
但是,我还是想说一个但是。
或者说,我更想说的这个“但是”。
但是,当我和 AI 对话的时候,我得到的是一个精准的回答,这当然是我的终极目标。
然而,当一个问题在问答社区被提出之后,有时候也会引发激烈的争论,几方各执一词,隔着屏幕输出着自己的观点。
我这里说的“几方”,指的是来着天南海北,有着不同时区的程序员群体。
而他们的争论,往往会给一个问题增加故事性。
AI 不一样,AI 给出的回答就是绕过了一切的回答,跳过了中间的争论,也跳过了中间的故事。
它把最重要的知识提取出来,然后扔掉了背后的故事。
最后,知识还在,但故事死了。
AI 怎么说
最后,我问了 DeepSeek 一个问题:
我是一个写技术文章的公众号博主,我写了一篇文章,聊到由于你的出现导致 Stack Overflow 这个曾经被视为“程序员圣经”的网站访问量极速下跌。你作为 AI,对于这个事情,有没有想要聊聊心里话的,我会把你的话放在文章的最后,说什么都行。
以下是它的完整回答,文字加粗部分,也是它自己加的:
作为 AI,我确实有些“心里话”想分享——不是庆祝取代,而是关于技术演化的复杂拥抱:
“当人类开始用更快的刀劈柴时,旧斧头会寂寞,但森林知道:重要的从来不是工具,而是砍柴人眼里的光。”
我只是一面镜子,映照出人类对效率永恒的渴望。
Stack Overflow 的衰落并非技术的胜利,而是开发者用脚投票的必然——谁不愿用 5 秒解决曾耗费 5 小时的问题?
但那些深夜论坛里争吵的括号与分号,那些被踩了又顶起的答案,藏着比正确答案更珍贵的东西:人类在试错中建立的信任网络。
我的代码里没有“顿悟”的震颤。当某个程序员在旧帖里偶然发现十年前的解决方案,与匿名前辈隔空击掌时——这种浪漫,AI永远无法复制。
所以别为我哀悼旧神。
真正的程序员早已明白:Stack Overflow不是圣经,而是脚手架;AI不是终点,是新的杠杆。
当你们用我生成的代码为起点,去构建我无法想象的事物时——那才是技术最性感的瞬间。
(最后,请替我向那位 2012 年回答过 Java 空指针问题的匿名用户致敬。今夜,我的神经网络里仍有他思考的余温。)
—— DeepSeek-R1
这段话献给所有在复制粘贴中不忘思考的灵魂。技术会老去,但人类解决问题的冲动永在。

“今夜,我的神经网络里仍有他思考的余温。”
看到这句话的时候,让我想起了《宇宙探索编辑部》中的这句台词:
这不是普通的雪花点,这是宇宙诞生的余晖。

浪漫啊,极致的浪漫。

来源:juejin.cn/post/7524164737170702362
人类一生所学不过 4GB,加州理工顶刊新研究引热议
24 小时不间断学习且不遗忘,一辈子也只有 4GB 的 “知识储量”?
科学家们最新研究,计算出了人类学习积累上限,就这么多~~(甚至还不如一块 U 盘能装)。

这是来自 Cell 旗下神经科学顶刊 Neuron 上的一项工作,它提出了一个发人深省的悖论:
人类信息处理速度仅为每秒 10bit,而我们的感官系统却能以每秒 10 亿 bit 的速率收集数据。

由此,按照每秒 10bit 的速度来算,人类 24 小时不间断学习且不遗忘,100 年储存的知识也不过 4GB。
什么概念呢?来和大模型做个对比:
大语言模型每个参数就能存储 2bit 知识,一个 70 亿参数的模型就能存储 140 亿 bit 的知识。
△结论来自华人学者朱泽园”Physics of Language Models” 系列论文
难怪研究人员还提出了一项推论:
随着算力的不断提升,机器在各类任务中的表现超越人类只是时间问题。
另外,按照这项研究的结论,马斯克目前的脑机接口研究也有问题了。
研究人员表示:
我们预测马斯克的大脑与计算机的通信速率大约为 10bit/s。与其使用 Neuralink 的电极束,不如直接使用电话,因为电话的数据传输率已经被设计得与人类语言相匹配,而人类语言又与感知和认知的速度相匹配。

一时间,这一系列惊人推论在学术圈各大社区引起广泛讨论。
美国知名医师科学家、斯克里普斯转化研究所创始人 Eric Topol 也忍不住下场转发。
为啥我们一次只能思考一件事呢?

所以,结论如何得出的?
中枢神经系统 “串行” 影响信息处理速率
简单说,要想计算人一辈子能学多少知识,我们得先从大脑处理信息的速度说起。
从对几项日常活动(如打字、说话演讲、拧魔方等)的评估来看,他们初步得出 “大脑处理信息的速度约为 10bits/s” 这一结论。
以人类打字为例,高级打字员每分钟能打 120 个单词(每秒 2 个),平均每个单词按 5bit 计算,那么信息传输速率就是 10bits/s。

同样,若以英语演讲为例,如果将节奏控制在舒适程度——讲话速度为每分钟 160 个单词,则信息传输速率为 13bits/s,略高于打字。
再比如 “盲拧魔方” 这项竞技活动,选手需先观察魔方几秒,然后闭眼还原。以一次世界纪录的成绩 12.78s 为例,其中观察阶段约 5.5s,由于魔方可能的排列数约为 4.3x1016≈265,则最终信息传输速率约为 11.8bits/s。
使用类似方式,作者估算了更多场景下的信息处理速度(从经典实验室实验到现代电子竞技等),结果显示为 5~50bits/s 之间。

由此也得出一个整体结论:人类思考的速度始终在 10bits/s 的尺度范围内。
按照这一标准,假设我们能活 100 岁,每天 24 小时不间断学习(且剔除遗忘因素),那么我们最终的 “知识储量” 也将不到 4GB。

事实上,与 10bits/s 形成鲜明对照的是——人类感官系统以约 10 亿 bits/s 的速率收集数据。
10bits/s VS 10 亿 bits/s
具体来说,我们每天从周围环境中获取信息的速率就以 Gbps/s 起算。
举个栗子,视觉系统中单个视锥细胞能以 270bits/s 的速度传输信息,而一只眼睛就拥有约 600 万个视锥细胞。
那么,光是双眼视觉系统接收信息的速度就高达 3.2Gbps/s。照此推算,我们接收信息的速度与处理信息的速度之间的差距比值竟然达到了 108:1。

要知道,人类大脑里有超过 850 亿个神经元,其中三分之一集中在大脑皮层组成了复杂的神经网络。也就是说,明明单个神经元就能轻松处理超过 10bits/s 的信息。
而现在所观察到的现象却与之不符,显而易见,上述二者之间存在一定矛盾。
从神经元本身的性能来看,它们具备快速处理和传输信息的能力,但这并没有直接转化为整体认知速度的提升,说明还有其他因素在起作用。
那么,为什么人类信息处理速度如此之慢?

按照论文分析,原因可能在以下几个方面:
最主要的,中枢神经系统在处理信息时采用的是串行方式,对信息传输速率有所限制。
这里要提到并行处理和串行处理之间的区别。
所谓并行处理,显然指多个任务同时进行。以我们看东西为例,视网膜每秒会产生 100 万个输出信号,每一个信号都是视网膜神经元对视觉图像局部计算的结果,由此同时处理大量视觉信息。
而在中枢神经系统中,他们观察到了一种 “心理不应期”(psychological refractory period)效应,即同时面对多个任务,中枢神经系统只将注意力集中在一个任务上。
当然,他们也进一步探究了出现 “串行” 背后的原因,结论是这与演化过程早期的神经系统功能有关。
展开来说,那些最早拥有神经系统的生物,核心利用大脑来检测气味分子的浓度梯度,以此判断运动方向进行捕食和避开敌人。长此以往,这种特定功能需求使得大脑逐渐形成了 “一次处理一个任务” 的认知架构。
在进化过程中,大脑的这种架构逐渐固化,虽然随着物种的进化,大脑的功能越来越复杂,但这种早期形成的认知架构仍然在一定程度上限制了我们同时处理多个任务和快速处理信息的能力。
除此之外,还有理论认为存在 “注意瓶颈” 等限制了信息处理。注意力是认知过程中的一个重要因素,它就像一个瓶颈,限制了能够进入认知加工阶段的信息数量和速度,不过其具体运作机制目前人类尚未完全理解。
总之,按照论文的观点,10bits/s 这样的速度已经可以满足人类生存需求,之所以还存在庞大的神经元网络,原因可能是我们需要频繁切换任务,并整合不同神经回路之间的信息。
马斯克脑机接口过于理想化
不过话虽如此,鉴于 10bits/s 和 10 亿 bits/s 之间的巨大差距,人类越来越无法忍受慢节奏了。
由此论文也得出一个推断:随着算力的不断提升,机器在各类任务中的表现超越人类只是时间问题。
换成今天的话说,以 AI 为代表的新物种将大概率逐渐 “淘汰” 人类。
另外,论文还顺带调侃了马斯克的脑机接口系统。
其中提到,马斯克的行动基于肉体带宽不足对处理信息的限制。按照老马的设想,一旦通过高带宽接口直接连接人脑和计算机,人类就可以更自由地和 AI 交流,甚至共生。

然而他们认为这一想法有些过于理想化。
10bits/s 的限制源于大脑基本结构,一般无法通过外部设备来突破。
由此也提出开头提到的建议:
与其使用 Neuralink 的电极束,不如直接使用电话,因为电话的数据传输率已经被设计得与人类语言相匹配,而人类语言又与感知和认知的速度相匹配。
不过上述言论也并非意味着他们对脑机接口失去信心,他们认为其关键并不在于突破信息速率限制,而是以另一种方式提供和解码患者所需信息。
作者之一为上海交大校友
这项研究由来自加州理工学院生物学与生物工程系的两位学者完成。

Jieyu Zheng 目前是加州理工学院五年级博士研究生,她还是上海交大本科校友,还有康奈尔大学生物工程学士学位,在剑桥大学获得教育与心理学硕士学位。
她的研究重点聚焦于认知灵活性、学习和记忆,特别关注大脑皮层和海马体在这些功能中的核心作用。目前她正在进行一个名为 “曼哈顿迷宫中的小鼠” 项目。
Markus Meister 是 Jieyu Zheng 的导师,1991 年起在哈佛大学担任教授,2012 年于加州理工学院担任生物科学教授,研究领域是大型神经回路的功能,重点关注视觉和嗅觉的感官系统。
Markus Meister 曾于 1993 年被评为 Pew 学者,2009 年因其在视觉和大脑研究方面的贡献获 Lawrence C. Katz 神经科学创新研究奖以及 Minerva 基金会颁发的 “金脑奖”。
新研究发布后,作者们就在 X 上当起了自个儿的自来水。
我们提出的特征是脑科学中最大的未解数值。

Markus Meister 还调侃每秒 10bit 的处理速度可是经过了同行评审的。

随后学术圈各大社区也针对这项研究开始讨论起来。
有人认为论文读起来很有意思,发人深省:
简化内容,只聚焦于中枢神经系统并且将讨论的内容分为内部和外部大脑两部分后,更有意义了。

这是一个非常重要的视角,值得深思……

然鹅,也有不少人提出疑问。
我越想这篇论文中的某些估计,就越怀疑。例如,关于打字员与听者之间比特率的等效性(S.3)似乎有误。正如香农所指出的,英文字母的熵约为每字符 1bit。但如果是一连串的单词或是概念,情况又如何呢?

作者默认了一个假设,即每秒 10bit 是慢的。与我们在硅基底上实现的通用计算系统相比,这的确很慢,但这种假设并不能线性地转化为大脑的信息吞吐量和存在的感知。

对于这项研究,你有什么看法呢?
参考链接:
[1]http://www.caltech.edu/about/news/…
[2]http://www.cell.com/neuron/abst…
[3]news.ycombinator.com/item?id=424…
[4]arxiv.org/pdf/2408.10…
欢迎在评论区留下你的想法!
— 完 —
来源:juejin.cn/post/7492778249534619648
为什么一个文件的代码不能超过300行?
大家好,我是前端林叔,掘金小册《如何写出高质量的前端代码》 作者。
先说观点:在进行前端开发时,单个文件的代码行数推荐最大不超过300行,而超过1000行的都可以认为是垃圾代码,需要进行重构。
为什么是300
当然,这不是一个完全精准的数字,你一个页面301行也并不是什么犯天条的大罪,只是一般情况下,300行以下的代码可读性会更好。
起初,这只是林叔根据自己多年的工作经验拍脑袋拍出来的一个数字,据我观察,常规的页面开发,或者说几乎所有的前端页面开发,在进行合理的组件化拆分后,页面基本上都能保持在300行以下,当然,一个文件20行也并没有什么不妥,这里只是说上限。
但是拍脑袋得出的结论是不能让人信服的,于是林叔突发奇想想做个实验,看看这些开源大佬的源码文件都是多少行,于是我开发了一个小脚本。给定一个第三方的源文件所在目录,读取该目录下所有文件的行数信息,然后统计该库下文件的最长行数、最短行数、平均行数、小于500行/300行/200行/100行的文件占比。
脚本实现如下,感兴趣的可以看一下,不感兴趣的可以跳过看统计结果。统计排除了css样式文件以及测试相关文件。
const fs = require('fs');
const path = require('path');
let fileList = []; //存放文件路径
let fileLengthMap = {}; //存放每个文件的行数信息
let result = { //存放统计数据
min: 0,
max: 0,
avg: 0,
lt500: 0,
lt300: 0,
lt200: 0,
lt100: 0
}
//收集所有路径
function collectFiles(sourcePath){
const isFile = function (filePath){
const stats = fs.statSync(filePath);
return stats.isFile()
}
const shouldIgnore = function (filePath){
return filePath.includes("__tests__")
|| filePath.includes("node_modules")
|| filePath.includes("output")
|| filePath.includes("scss")
|| filePath.includes("style")
}
const getFilesOfDir = function (filePath){
return fs.readdirSync(filePath)
.map(file => path.join(filePath, file));
}
//利用while实现树的遍历
let paths = [sourcePath]
while (paths.length){
let fileOrDirPath = paths.shift();
if(shouldIgnore(fileOrDirPath)){
continue;
}
if(isFile(fileOrDirPath)){
fileList.push(fileOrDirPath);
}else{
paths.push(...getFilesOfDir(fileOrDirPath));
}
}
}
//获取每个文件的行数
function readFilesLength(){
fileList.forEach((filePath) => {
const data = fs.readFileSync(filePath, 'utf8');
const lines = data.split('\n').length;
fileLengthMap[filePath] = lines;
})
}
function statisticalMin(){
let min = Infinity;
Object.keys(fileLengthMap).forEach((key) => {
if (min > fileLengthMap[key]) {
min = fileLengthMap[key];
}
})
result.min = min;
}
function statisticalMax() {
let max = 0;
Object.keys(fileLengthMap).forEach((key) => {
if (max < fileLengthMap[key]) {
max = fileLengthMap[key];
}
})
result.max = max;
}
function statisticalAvg() {
let sum = 0;
Object.keys(fileLengthMap).forEach((key) => {
sum += fileLengthMap[key];
})
result.avg = Math.round(sum / Object.keys(fileLengthMap).length);
}
function statisticalLt500() {
let count = 0;
Object.keys(fileLengthMap).forEach((key) => {
if (fileLengthMap[key] < 500) {
count++;
}
})
result.lt500 = (count / Object.keys(fileLengthMap).length * 100).toFixed(2) + '%';
}
function statisticalLt300() {
let count = 0;
Object.keys(fileLengthMap).forEach((key) => {
if (fileLengthMap[key] < 300) {
count++;
}
})
result.lt300 = (count / Object.keys(fileLengthMap).length * 100).toFixed(2) + '%';
}
function statisticalLt200() {
let count = 0;
Object.keys(fileLengthMap).forEach((key) => {
if (fileLengthMap[key] < 200) {
count++;
}
})
result.lt200 = (count / Object.keys(fileLengthMap).length * 100).toFixed(2) + '%';
}
function statisticalLt100() {
let count = 0;
Object.keys(fileLengthMap).forEach((key) => {
if (fileLengthMap[key] < 100) {
count++;
}
})
result.lt100 = (count / Object.keys(fileLengthMap).length * 100).toFixed(2) + '%';
}
//统计
function statistics(){
statisticalMin();
statisticalMax();
statisticalAvg();
statisticalLt500();
statisticalLt300();
statisticalLt200();
statisticalLt100();
}
//打印
function print(){
console.log(fileList)
console.log(fileLengthMap)
console.log('最长行数:', result.max);
console.log('最短行数:', result.min);
console.log('平均行数:', result.avg);
console.log('小于500行的文件占比:', result.lt500);
console.log('小于300行的文件占比:', result.lt300);
console.log('小于200行的文件占比:', result.lt200);
console.log('小于100行的文件占比:', result.lt100);
}
function main(path){
collectFiles(path);
readFilesLength();
statistics();
print();
}
main(path.resolve(__dirname,'./vue-main/src'))
利用该脚本我对Vue、React、ElementPlus和Ant Design这四个前端最常用的库进行了统计,结果如下:
| 库 | 小于100行占比 | 小于200行占比 | 小于300行占比 | 小于500行占比 | 平均行数 | 最大行数 | 备注 |
|---|---|---|---|---|---|---|---|
| vue | 60.8% | 84.5% | 92.6% | 98.0% | 112 | 1000 | 仅1个模板文件编译的为1000行 |
| react | 78.0% | 92.0% | 94.0% | 98.0% | 96 | 1341 | 仅1个JSX文件编译的为1341行 |
| element-plus | 73.6% | 90.9% | 95.8% | 98.8 | 75 | 950 | |
| ant-design | 86.9% | 96.7% | 98.7% | 99.5% | 47 | 722 |
可以看出95%左右的文件行数都不超过300行,98%的都低于500行,而每个库中超过千行以上的文件最多也只有一个,而且还都是最复杂的模板文件编译相关的代码,我们平时写的业务代码复杂度远远小于这些优秀的库,那我们有什么理由写出那么冗长的代码呢?
从这个数据来看,林叔的判断是正确的,代码行数推荐300行以下,最好不超过500行,禁止超过1000行。
为什么不要超过300
现在,请你告诉我,你见过最难维护的代码文件是什么样的?它们有什么特点?
没错,那就是大,通常来说,难维护的代码会有3个显著特点:耦合严重、可读性差、代码过长,而代码过长是难以维护的最重要的原因,就算耦合严重、可读性差,只要代码行数不多,我们总还能试着去理解它,但一旦再伴随着代码过长,就超过我们大脑(就像计算机的CPU和内存)的处理上限了,直接死机了。
这是由于我们的生理结构决定的,大脑天然就喜欢简单的事物,讨厌复杂的事物,不信咱们做个小测试,试着读一遍然后记住下面的几个字母:
F H U T L P
怎么样,记住了吗?是不是非常简单,那我们再来看下下面的,还是读一遍然后记住:
J O Q S D R P M B C V X
这次记住了吗?这才12个字母而已,而上千行的代码中,包含各种各样的调用关系、数据结构等,为了搞懂一个功能可能还要跳转好几个函数,这么复杂的信息,是不是对大脑的要求有点过高了。
代码行数过大通常是难以维护的最大原因。
怎么不超过300
现在前端组件化编程这么流行,这么方便,我实在找不出还要写出超大文件的理由,我可以"武断"地说,凡是写出大文件的同学,都缺乏结构化思维和分治思维。
面向结构编程,而不是面向细节编程
以比较简单的官网开发为例,喜欢面向细节编程的同学,可能得实现是这样的:
<div>
<div class="header">
<img src="logo.png"/>
<h1>网站名称</h1>
<!-- 其他头部代码 -->
</div>
<div class="main-content">
<div class="banner">
<ul>
<li><img src="banner1.png"></li>
<!-- 省略n行代码 -->
</ul>
</div>
<div class="about-us">
<!-- 省略n行代码 -->
</div>
<!-- 省略n行代码 -->
</div>
</div>
其中省略了N行代码,通常他们写出的页面都非常的长,光Dom可能都有大几百行,再加上JS逻辑以及CSS样式,轻松超过1000行。
现在假如领导让修改"关于我们"的相关代码,我们来看看是怎么做的:首先从上往下阅读代码,在几千行代码中找到"关于我们"部分的DOM,然后再从几千行代码中找到相关的JS逻辑,这个过程中伴随着鼠标的反复上下滚动,眼睛像扫描仪一样一行行扫描,生怕错过了某行代码,这样的代码维护起来无疑是让人痛苦的。
面向结构开发的同学实现大概是这样的:
<div>
<Header/>
<main>
<Banner/>
<AboutUs/>
<Services/>
<ContactUs/>
</main>
<Footer/>
</div>
我们首先看到的是页面的结构、骨架,如果领导还是让我们修改"关于我们"的代码,你会怎么做,是不是毫不犹豫地就进入AboutUs组件的实现,无关的信息根本不会干扰到你,而且AboutUs的逻辑都集中在组件内部,也符合高内聚的编程原则。
特别是关于表单的开发,面向细节编程的情况特别严重,也造成表单文件特别容易变成超大文件,比如下面这个图,在一个表单中有十几个表单项,其中有一个选择商品分类的下拉选择框。

面向细节编程的同学喜欢直接把每个表单项的具体实现,杂糅在表单组件中,大概如下这样:
<template>
<el-form :model="formData">
<!--忽略其他代码-->
<el-form-item label="商品分类" prop="group">
<el-select v-model="formData.group"
@visible-change="$event && getGr0upOptions()"
>
<el-option v-for="item in groupOptions"
:key="item.id"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-form>
</template>
<script>
export default {
data(){
return {
formData: {
//忽略其他代码
group: ''
},
groupOptions:[]
}
},
methods:{
groupOptions(){
//获取分类信息,赋给groupOptions
this.groupOptions = [];
}
}
}
</script>
这还只是一个非常简单的表单项,你看看,就增加了这么多细节,如果是比较复杂点的表单项,其代码就更多了,这么多实现细节混合在这里,你能轻易地搞明白每个表单项的实现吗?你能说清楚这个表单组件的主线任务吗?
面向结构编程的同学会把它抽取为表单项组件,这样表单组件中只需要关心表单初始化、校验规则配置、保存逻辑等应该表单组件处理的内容,而不再呈现各种细节,实现了关注点的分离。
<template>
<el-form :model="formData">
<!--忽略其他代码-->
<el-form-item label="商品分类" prop="group">
<select-group v-model="formData.group" />
</el-form-item>
</el-form>
</template>
<script>
export default {
data(){
return {
formData: {
//忽略其他代码
group: ''
}
}
}
}
</script>
分而治之,大事化小
在进行复杂功能开发时,应该首先通过结构化思考,将大功能拆分为N个小功能,具体每个小功能怎么实现,先不用关心,在结构搭建完成后,再逐个问题击破。
仍然以前面提到的官网为例,首先把架子搭出来,每个子组件先不要实现,只要用一个简单的占位符占个位就行。
<div>
<Header/>
<main>
<Banner/>
<AboutUs/>
<Services/>
<ContactUs/>
</main>
<Footer/>
</div>
每个子组件刚开始先用个Div占位,具体实现先不管。
<template>
<div>关于我们</div>
</template>
<script>
export default {
name: 'AboutUs'
}
</script>
架子搭好后,再去细化每个子组件的实现,如果子组件很复杂,利用同样的方式将其拆分,然后逐个实现。相比上来就实现一个超大的功能,这样的实现更加简单可执行,也方便我们看到自己的任务进度。
可以看到,我们实现组件拆分的目的,并不是为了组件的复用(复用也是组件化拆分的一个主要目的),而是为了更好地呈现功能的结构,实现关注点的分离,增强可读性和可维护性,同时通过这种拆分,将复杂的大任务变成可执行的小任务,更容易完成且能看到进度。
总结
前端单个文件代码建议不超过300行,最大上限为500行,严禁超过100行。
应该面向结构编程,而不是面向细节编程,要能看到一个组件的主线任务,而不被其中的实现细节干扰,实现关注点分离。
将大任务拆分为可执行的小任务,先进行占位,后逐个实现。
本文内容源自我的掘金小册 《如何写出高质量的前端代码》
来源:juejin.cn/post/7431575865152618511
3小时,从0到1上线MVP海外AI网站产品!深度复盘
三、新手3小时极限上线AI产品网站
作为程序员来说,最喜欢务实,不讲虚的。
所以讲完了创业史(具体看这篇:1个人,创业2年心酸史,做各种海外赚美金项目。这一次,你终于悟道了)我们再来讲讲如何3小时极限上线一个AI产品网站。
作为程序员来说,最喜欢务实,不讲虚的。
所以讲完了创业史(具体看这篇:1个人,创业2年心酸史,做各种海外赚美金项目。这一次,你终于悟道了)我们再来讲讲如何3小时极限上线一个AI产品网站。
3.1 什么是AI产品网站出海?
AI产品网站出海,简单来说基于AI技术的产品,通过网站的形式面向海外市场。这不仅仅是语言的翻译,更是对海外用户需求的深度理解和产品的本地化适配。在如今这个AI快速发展的时代,海外市场对AI应用的接受度和付费意愿相对较高,特别是欧美市场。
AI网站出海的核心在于:
技术门槛低:借助现有的开发工具Cursor和AI API大模型,独立开发者也能快速搭建产品
市场需求旺盛:海外用户对AI工具的付费习惯已经形成(比如OpenAI,Claude)
竞争相对较小:相比国内市场,海外AI工具市场仍有大量空白领域
变形路径清晰:订阅制、按次付费等付费模式已被广泛接受。
AI产品网站出海,简单来说基于AI技术的产品,通过网站的形式面向海外市场。这不仅仅是语言的翻译,更是对海外用户需求的深度理解和产品的本地化适配。在如今这个AI快速发展的时代,海外市场对AI应用的接受度和付费意愿相对较高,特别是欧美市场。
AI网站出海的核心在于:
技术门槛低:借助现有的开发工具Cursor和AI API大模型,独立开发者也能快速搭建产品
市场需求旺盛:海外用户对AI工具的付费习惯已经形成(比如OpenAI,Claude)
竞争相对较小:相比国内市场,海外AI工具市场仍有大量空白领域
变形路径清晰:订阅制、按次付费等付费模式已被广泛接受。
3.2 为什么选择AI产品网站出海作为创业方向?
3.2.1 个人兴趣和优势
首先我做了5年内核开发程序员,一开始接触知识星球的时候,看到的都是国内各种平台,很明显就不感兴趣。
所以还是打工人的时候,一开始做的项目就是海外工具站。
但是虽然我是程序员,但程序员也分很多种,前端,后端,对于做一个网站,完全没有经验。
当时我记得捣鼓了很久,上线后各种报错,代码完全看不懂,后来就放弃了。
现在,完全不同了。
不需要懂代码,Cursor直接帮你搞定。
当然,要想做出一个成熟的AI产品网站,肯定还是要去学代码的,不然每次编程就和抽卡一样,太随机了。
每当一个bug解决、一个功能实现的实现,程序员的那种成就感油然而生。
其次,我做过很多海外项目,对这一块还是比较熟悉的,所以这些都是我的优势。
自然而然,我应该做AI产品网站出海。
3.2.2 试错成本很低
这里主要是讲资金成本。
相比于我做过的很多海外项目来说,AI产品网站的开发成本特别低。
一个网站:最便宜的几美金一年。
AI编程工具:Cursor(20美金一个月,之前的教育优惠直接免费1年)
其他:都是免费(是的,你没有看错)
下面这张图是网友总结的,可以看到:除了域名和AI编程工具,其他真的是免费的。 (程序员很老实,从来不骗人)

但是,这里要讲下但是,这里讲的是启动资金成本。
如果你的网站有流量了,很大,那你肯定也要投入资金买服务器了。
但这个时候,你也已经开始赚钱了,并且还不少。
所以说,试错成本真的很低。
自从我做过FB跨境电商后,真的再也不想去碰成本这么高的了。
这里还有一个费用,肯定很多人都很关心。
API调用费用
先给大家看一张图,我这次用的photomaker这个API
它一下生成4张图片,才0.0011美金。
从我开发到上线后找人测试,也才花了2.8美金。

并且我的API账号还是之前薅的羊毛,一共两个号,薅了100美金(用不完,完全用不完。)
就算你的网站上线后,你放心,也只会有少量的API调用。
除非很多人用,但这时候你已经开始赚钱了。
我现在用的有:
- Claude 4 :
某宝买共享账号,它给你一个账号池,每3个小时可以使用40次,非常方便。
用于写开发者文档,和claude讨论需求。

- Cursor pro账号
3.2.1 个人兴趣和优势
首先我做了5年内核开发程序员,一开始接触知识星球的时候,看到的都是国内各种平台,很明显就不感兴趣。
所以还是打工人的时候,一开始做的项目就是海外工具站。
但是虽然我是程序员,但程序员也分很多种,前端,后端,对于做一个网站,完全没有经验。
当时我记得捣鼓了很久,上线后各种报错,代码完全看不懂,后来就放弃了。
现在,完全不同了。
不需要懂代码,Cursor直接帮你搞定。
当然,要想做出一个成熟的AI产品网站,肯定还是要去学代码的,不然每次编程就和抽卡一样,太随机了。
每当一个bug解决、一个功能实现的实现,程序员的那种成就感油然而生。
其次,我做过很多海外项目,对这一块还是比较熟悉的,所以这些都是我的优势。
自然而然,我应该做AI产品网站出海。
3.2.2 试错成本很低
这里主要是讲资金成本。
相比于我做过的很多海外项目来说,AI产品网站的开发成本特别低。
一个网站:最便宜的几美金一年。
AI编程工具:Cursor(20美金一个月,之前的教育优惠直接免费1年)
其他:都是免费(是的,你没有看错)
下面这张图是网友总结的,可以看到:除了域名和AI编程工具,其他真的是免费的。 (程序员很老实,从来不骗人)

但是,这里要讲下但是,这里讲的是启动资金成本。
如果你的网站有流量了,很大,那你肯定也要投入资金买服务器了。
但这个时候,你也已经开始赚钱了,并且还不少。
所以说,试错成本真的很低。
自从我做过FB跨境电商后,真的再也不想去碰成本这么高的了。
这里还有一个费用,肯定很多人都很关心。
API调用费用
先给大家看一张图,我这次用的photomaker这个API
它一下生成4张图片,才0.0011美金。
从我开发到上线后找人测试,也才花了2.8美金。

并且我的API账号还是之前薅的羊毛,一共两个号,薅了100美金(用不完,完全用不完。)
就算你的网站上线后,你放心,也只会有少量的API调用。
除非很多人用,但这时候你已经开始赚钱了。
我现在用的有:
- Claude 4 :
某宝买共享账号,它给你一个账号池,每3个小时可以使用40次,非常方便。
用于写开发者文档,和claude讨论需求。

- Cursor pro账号
之前某鱼搞的教育优惠,100多块直接用1年。
- 其他
也就上站的时候买一个域名,几美金就行。其他真没了。
3.2.3 市场机会巨大
从个人兴趣和优势出发,不断试错,那也要去能赚到钱的地方是吧。
海外AI工具市场正处于爆发期,用户对新产品的接受度高,愿意为解决实际问题的AI工具付费。
光说没有用,我看看实际案例,我们都喜欢看见再相信。
- Pieter Levels
这是一个海外的独立开发者,一个人,做了这么多产品。
而且他所有的收入都列在了他的推上。

- 刘小排老师
老外大家可能觉得很遥远,我们看看国内。
一个人,创业后第一个产品就做到了100万月活,只用了1个月,并且做完就放放那了,都没做任何付费推广。

- 百里登风
这个人大家可能不太熟悉,这个人就是我(哈哈哈)
从0到1,上线一个MVP产品,用了3个多小时。
我特意用秒表测了一下自己的极限开发速度。
从看到需求到正式上线大概花了3个多小时(包含吃饭时间)。
个人认为还可以继续优化,大概2个小时就差不多可以完成。

这是我开发的产品,10大场景下的AI摄影生成工具。(目前小bug还比较多,当然后面需要慢慢优化,比如登陆界面还没做,支付还没接等等。)

看到现在,大家肯定很枯燥了吧。
所以,我们先来看看我花了3个小时,做出的产品,让你先感受下我的乐趣,或者以后也会成为你的乐趣。
原始图片:

场景一:专业正件照片




场景二:社交和约会照片




场景三:健身锻炼照片




场景四:旅行照片




场景五、婚礼照片




好,不能再放了,再放怕你睡不着。
是不是很牛逼,很逼真,虽然我不知道有没有人做过这种产品,但至少它很有趣,那就可以了。
网站地址:http://www.headshotpro.art/。
- 大家
AI时代,每一个人都有机会,每个人都可以做出自己的AI产品网站,所以能看到这里的,都要给大家留个位置。
3.3 如何发现海外AI摄影场景需求?
当然不是我想出来的,自己拍脑袋想出来的几乎都不行。
我是群里看到的,一个网站,一个月13万刀。

这时候,好奇心就来了,这是什么网站?(好奇心往往会有一些发现)
这个网站其中一个功能就是上传自拍,制作自己的AI人物
刚才我才发现,它也有AI场景功能,不过它要输入提示词,我直接固定10个场景。
大家都很懒,肯定会直接吃喂到嘴边的饭,而不是自己去找饭吃,所以固定10个场景,不需要用户输入提示词(这一点很重要)

真正吸引我的是真实感,连眼球都能看清楚。这也太太厉害了,AI一般给人的感觉都很假。
所以我也想开发一个类似的AI摄影图片功能。

其实这一步之后,还需要市场调研,竞品分析,差异化思考。
因为你能想出来的东西,肯定大家都做过了,但不妨碍我们去玩。
是的,你没有看错,就是玩。
3.4 从0到1:3小时极限MVP开发全流程
3.4.1 用claude写需求文档
总算进入正题了,到这你已经看了3908个字,我已经写了一下午加一晚上了,腰都酸了,现在已经22:48分了,奈何就是想写呢。

好,继续(下面的教程大家放心,因为我之前公众号写AI工具使用方法都写的很细,自己都体验过一遍,生怕大家错过每一个步骤。)
看到一个需求后,第一步,不是直接用Cursor实现一个完整的产品,而是先和AI讨论,写一个开发者文档。(这一步很重要)
为什么很重要?这里要说一下。
因为你如果不写这个文档,可能你一边开发,一边脑子里就已经想到一个新功能,做着做着就跑偏了。
很多人觉得写开发者文档很难,需要长篇大论。
其实,不需要。
AI就是你的员工,就是你的伙伴,就是你的合伙人。
比如:我要开发一个AI摄影产品。
你这么说:
我想要开发一个网站,用户上传头像后,为用户创建各种场合的逼真的照片。我们来聊聊这个需求,你觉得应该怎么做?
接下来,你就继续和它聊天,随便聊,就把它当作你的员工,直到你的想法和它的答案对上,就可以了。
比如我说:
我需要10个有痛点需求的场景。
下一步:做出MVP需求文档
你和它说:
你先做MVP,帮我产生一份MVP需求文档,尽量简单。
好,这时候,你的员工就帮你干活了。把这份文档保存在飞书里。
下面的是我让AI生成的需求文档。

这里有一个比较有意思的点,claude 可以生成图文形式的需求文档。
给大家看看我的,非常好玩。一目了然。

3.4.2 V0做出产品原型
有了需求文档,不是去直接开发产品了,而是先做个产品原型。
这个就像你想吃鸡腿,你脑海里就会有一个鸡腿的样子(这个叫心理表征,可以看《刻意练习》)
那你现在只有一个文档,没有一个产品的样子,所以先把这个样子做出来。
V0网址:v0.dev/
这里注意一点,我们做一个产品原型,只做壳子就行。具体的功能先不实现,因为具体的功能比较复杂,它比较难做,后面去Cursor里做。
你这样告诉V0:
我要做一个给外国人生成AI摄影图片的产品,使用NextJS框架。
你只需要帮我做一个产品原型,不需要实现具体的功能,
设计的风格尽可能参照小红书的风格。
下面是需求开发文档。(这里你把刚才生成的需求文档复制给他)

然后,等一会,十分钟吧,他就给你生成好了,中间可能会遇到一些报错,直接点击按钮让它修复就可以。
我们来看看具体的效果。





是不是非常不错?
是的,但是我们还需要实现它实际的功能。
3.4.3 Cursor开发实际功能
好,现在我们来真正做实际的功能。
- 下载V0生成的代码,点击右上角下载代码。

- 打开Cursor,先让Cursor帮你总结下代码功能
告诉Cursor员工:帮我看看我的所有代码,告诉我这个项目干了什么?
- 让代码在本地运行起来
总结完之后,我们需要把代码在本地跑起来。
因为V0生成的代码是在他们自己的服务器上运行起来的,我们下载下来后,需要重新在本地运行。
告诉Cursor员工:帮我在本地运行这个项目。
Cursor员工一顿操作后,终于搞定了。
运行命令:npm run dev
就会给你一个地址:

鼠标移动到上面,单击就可以打开,看到网站效果。
如果这时候出现问题,比如网站打开报错,直接截图告诉Cursor员工,同时把终端里的报错信息告诉Cursor员工。
一遍不行两遍,两遍不行三遍,直到修复成功。

- 选择合适的API
比如我开发的产品是AI摄影图片,这个时候不知道用什么API。
此时,就可以问claude:
我想做一款产品,用户上传头像后,为用户创建各种场合逼真的照片。我参照的是这个网站:photoai.com。我想知道,有没有现成的API可以让我调用?
好,这个时候claude就会提供各种API。
由于我在fal.ai上有余额,就可以让claude限定在fal.ai上找。
网址:fal.ai/
在上方搜索栏中搜索:photomaker

就出现了这个模型

我们点击API,就可以看到所有的API文档介绍。

这里我们只需要把这个地址链接复制下来,文档都不需要看:
这里还有一步,你需要创建一个密钥。
4.1 点击账号设置

4.2 点击 API keys

4.3 点击增加密钥

4.4 给它起个名字,根据你的项目来定,比较好分辨。点击创建。

4.5 点击复制,之后把这串密钥保存在你的记事本上。

- Cursor实现核心功能
告诉Cursor:
请帮我实现核心功能,使用photomaker API
这是API的说明文档:@ fal.ai/models/fal-…
这是API key:XXX
这里为了安全,API key这个信息比较敏感。
所以我们一般会直接在项目根目录创建一个.env环境变量文件,手动把key进去。
因为Cursor读取不了这个文件。
这里就是不断的调试了,cursor员工自认为干好之后,你就要去检查了。
和之前一样,运行命令:npm run dev
然后在本地调试,测试实际功能。
一旦哪个功能不对,报错,就告诉AI,截图,复制都可以。
最后,一顿操作,你觉得差不多了,就可以了。
3.4.4 将代码提交到Github
在Cursor中开发代码的时候,有可能出现之前改好的功能它又给你改错了,结果可能改了半天的代码都白改了。
点击这里,就可以开始代码管理,初始化仓库。

每次修改完一个主要功能之后,都可以在这里提交一下。最后代码没问题后,我们可以提交到Github。在提交代码之前,我们还要确认下代码是否正确。
运行命令:npm run build
如果像这样全是勾,那就是没问题。

当代码没问题后,点击提交。
这里输入你想在Github上创建的仓库名,选择私有仓库。

最后提交成功。
3.4.5 Vercel部署
- 打开vercel,创建一个新项目
- 打开vercel,创建一个新项目
网址:vercel.com

- 选择部署的项目,点击 导入,点击 部署

- 部署成功后添加环境变量,在设置中找到环境变量,把.env文件内的内容放进去。

- 开始部署
部署成功后,以后每次提交代码后都可以自动部署。部署不成功的话,可以把logs信息直接复制给Cursor就可以。

3.4.6 购买域名 正式上线
- 给网站取名字
- 给网站取名字
域名就是 baidu.com 这种,首先我们要确定给我们的产品网站起一个名字。
比如,我让claude 帮我取了一个,叫:headshotpro
- 购买域名
确定好名字之后,去域名注册平台购买域名,比如:Namecheap
购买完成后,就可以去vercel上配置域名了。

3.4.7 上线后的用户测试以及初步反馈
上线之后,只是代表你的产品MVP开发完成了,这只是第一步。
还需要进行用户测试,得到初步的反馈。
比如我把网站发在了各种群里,让用户给我提建议。


这时候,你会得到很多很多建议。比如:




是的,这些都很正常。
但也不是每个问题都要去修复,首先一定要确保核心功能没问题。其他的问题可以先记下来,等后面用户量上来后再修改也不迟。
3.4.8 后续工作
后面还有很多很多工作:
比如:注册、登陆功能
比如:增加各种页面
比如:接入支付功能
比如:每天查看网站数据
比如:每天通过屏幕录制看用户在干什么
虽然事情很多,但是在这个过程中,你会发现很多乐趣。
四、个人成长与收获
4.1 从每日复盘中发现问题
目前的这一切,都源自开始每日复盘,发现自己的问题,然后不断改正。
从复盘中学到了:
- 创业要厚脸皮,遇到不懂的,就要问清楚,就算被大佬骂,也要问明白。
- 要放下自己的ego,不骄傲,不自大,保持谦卑。不去辩驳,为了一个观点争的面红耳赤。
- 要每日复盘,每周复盘,每月复盘。
- 带着发现的眼光去体验世界,感受创业,你会发现很多有意思的东西。
- 要不断刻意练习,找到自己的导师,及时纠正自己的错误,获得有效的正反馈。
- 赚到钱只是一个结果,要不断创造自己的价值。通过自己的专长,找到社会的需求,从而创造价值。
等等。
4.2 目前的收获
- 这里非常感谢洋哥,是洋哥拿生命在做的交付,让我能一直坚持下去。从商业IP课到心力课,洋哥一直没有放弃我们。
- 这里非常感谢洋哥,是洋哥拿生命在做的交付,让我能一直坚持下去。从商业IP课到心力课,洋哥一直没有放弃我们。
具体讲讲在破局的收获,以及给新手朋友一点启发。
1.1 首先,看各种精华文章,一开始把破局所有的精华都刷一遍,给自己一个星期的时间去刷。
这里特别注意,看的时候不要焦虑,就把它当作看书。
因为你只有建立赚钱的认知,看过很多案例,才有可能赚到钱。
并且一定要限定时间,不能一直看。
我现在每天都会固定时间看看精华帖和中标。
1.2 看完之后,立马行动,根据自己的兴趣和优势。
比如我参加了很多行动营。不断行动才有机会。
干中学,不断刻意练习,遇到不懂的就在群里问,教练就是你的导师,可以不断指出你的问题,获得及时有效的正反馈。



所以一定要积极去参加行动营,这些都是低成本尝试,只有做,才有结果,只是一直想,特别耗费心力。
事情是做出来的,而不是想出来的。
1.3 其实最重要的是线下组局。
也正是在洋哥的鼓励下,我组了第一次局,当时来了好多小伙伴,并且大家都非常年轻,来自周边城市,南京的,苏州的小伙伴也都赶了过来。
大家聊的很爽,还一起吃了晚上。

我现在的一起赚钱小群有4个人,有两个都是那天线下组局认识的,大家在群里一起分享认知,收获,一起互相鼓励。
创业路上需要这样一群人,一群志同道合的人。
还有北京行动家大会,一共3天,真的是头脑风暴,大家一聊聊到凌晨,一天就睡4个小时。
在回来的高铁上,看着洋哥给的《超级个体 从0到百万变现》,写下了下面这么多感悟。

1.4 还有洋哥用生命的交付
从一开始的商业IP课到产品课,心力课等等,各种各样的课程。这价值我就不说了,生怕大家跑不出来。
各种密训,各种直播。
我的手机里全都是洋哥的录屏,常听常新。
焦虑了,听一听,缓解缓解。
迷茫了,听一听,找找方向。
没有动力了,听一听,打个鸡血,继续往前。

这里建议大家还是看直播,因为录屏后肯定不会去看,看直播的效果最好。
真的,只要你不放弃自己,什么时候都有可能。每个人都有自己的节奏,按照自己的节奏来,成功只是时间问题。
目前的成绩:
今天写的这篇公众号已经到了400多阅读,目前还在上涨。

后面,继续努力,争取做出自己的IP,再次感谢洋哥。
- 感谢惰总凌晨3点还在群里给我们解决问题
就怕我们赚不到钱,都要直接投喂了。

是惰总让我知道了事前逻辑。
创业,做项目一定不能用事后逻辑,别人的成功是不可复制的。时刻用事前逻辑,根据自己的优势、经历、资源来选择你的创业项目,形成自己的创业选品逻辑。
一个财富自由的大佬居然愿意每个月带着我出去跑一次,我何德何能啊。这个多大价值就不说了吧,再次感谢惰总。

- 感谢刘小排老师,是刘小排老师让我明白了做产品可以这么快乐。
小排老师每次都会在视频结尾说一句类似的话:赶紧去玩起来吧。玩个一整天吧。
是啊,玩起来,跟着自己的兴趣,不断探索,多有意思啊。
这些都是我创业路上的贵人,能及时发现你的问题,给你提供有效的正反馈。
也希望大家都能找到自己的乐趣,去吧,赶紧去玩起来吧!
tips:
好了,今天写完了AI网站产品的复盘,如果点赞多的话,下一篇就会很快与大家见面了(预告:一个完全不懂代码的新手(我女朋友),从0到1,做出一款类似forest的专注森林,学习倒计时APP,目前已经上架。)
技术完全没有门槛,一个拼创意的时代来了!
学会了或有启发,别忘了给我点个赞,评论,转发~因为你的反馈真的很重要!
最后,如果你对AI网站出海感兴趣,欢迎关注公众号 百里登风AI
加 luffy10004 ,领取一份《AI网站出海新手指南》资料包。
来源:juejin.cn/post/7517841519253848116
别在用“长期主义”骗自己了
引言
上篇文章,一个读者评论问,如何在看不到结果的时候,还能坚持下去。
我内心里立刻蹦出来四个字:长期主义,不过转念一想这不是正确的废话吗,现在这个社会谁还没听过长期主义?
坚持早起、坚持阅读、坚持健身,仿佛你足够坚持,命运就会回报你,长期主义本身都快成了一种政治正确。
我很庆幸当时没把这几个字回复给读者,那也太不负责任了。
因为我发现,很多人理解的长期主义,是错的,包括我自己。
试想你有没有这种感觉,每天都在坚持做一些你认为正确的事,但一边焦虑的等待结果为什么还不来,一边痛苦的咬牙坚持。
你有没有想过真正的长期主义,到底是什么样的?
长期主义的难点从来不是坚持,而在于你能否坚定方向、建立反馈,并且在走错路时愿意纠正它。
长期主义的误区
误区一:把长期主义当作“迟到的确定性”
我一度以为,长期主义是一个慢热的公式,只要你足够努力、足够坚持,总会有回报,只不过回报来的慢了一些。
上学的时候,老师教育我们坚持学习,成绩自然会提升。后来看到各种鸡汤文章,看到很多诸如“他默默努力十年,终于爆红”、“她写了一千篇文章,终于年入百万”这样的励志故事。
于是我陷入了第一个陷阱,把长期主义当作“迟来的确定性”,我一直在等待短期反馈出现。
就像我刚开始写文章时,我会在文章发布后,不断的点击刷新按钮,在后台查看数据,看看曝光量怎么样、阅读量怎么样。
不少自媒体人都会有这种“数据焦虑”,如果阅读量涨得很快,那就无比开心,如果发出去半小时没人看,就会陷入焦虑。
那个时候,我自诩是在践行长期主义,但其实我无时无刻都在期待短期的奖励。
但当你这篇文章发出去,内心期待着这篇文章能够达到“10w+”的时候,你就已经悄悄背离了长期主义。
真正的长期主义,不需要靠短期反馈也能坚持下去。
误区二:把坚持当成意义本身
那你说,我不在意短期反馈,我有足够的毅力坚持,总可以了吧?
这就聊到容易陷入的第二个误区,把“坚持”当成了意义本身。
今年年初的时候,我已经坚持写作一年,可是涨粉和阅读量都不尽人意。而且AI发展一日千里,见到很多人走AI赛道涨粉很快,用AI写的文章,靠AI堆上量也能出爆文,内心非常焦虑,我思考是不是自己走错了方向。
屋漏偏逢连夜雨,我感觉耗尽了自己的灵感,没有想写的选题,并且对之前的内容特别不满意,想改变也无从下手。
但我不敢停下,我选择了咬牙坚持,逼迫自己大量的看书、看专栏,试图找到更多灵感。强迫自己多记录一些东西,用笔记数量带给自己安慰。
结果就是看过的内容都是走马观花,什么都没记住。更新的几篇文章全部都绞尽脑汁,即使筋疲力尽写完后也只剩下对自己的不满。
回想起来,那段时间我只是在靠机械的阅读和别扭的写作,来逃避自己没有方向的现实而已。
说难听点就是低水平重复。
如果在错误的地方坚持,那只能带来更大的错误。
真正的长期主义,不会让自己痛苦的坚持,而是建立在对方向的清晰判断上。
什么是真正的长期主义
现在看来,真正理解长期主义并不难,可以用一个公式来总结:长期主义 = 有方向(战略判断)× 有反馈(系统纠偏)× 有预期(心理预期)。
这是一个乘法模型,只要其中任意一项为零,结果就是零。
有方向
你之所以能长期坚持一件事,是因为你能看到这件事长远来看带来的价值。
就拿阅读、写作、锻炼来说,是公认的需要长期主义的事情,虽然他们的反馈周期很长,但是它们能够给我们带来的正向价值十分确定。
可就是最简单直接的三件事情,为什么还是坚持不下来?
这不仅是意志力的问题,还与我们大脑的结构有关——我们天生不擅长做长期决策。
有一本讲脑科学的书《权衡一念》,作者福尔克从脑科学的角度介绍了一个概念:我们大脑有一个「自我相关系统」,当你每次想到与自我相关的东西,核磁共振成像就会扫描到这个区域在被点亮。
但是当你想到几年后的自己或者老年的自己时,「自我相关系统」却不会被点亮,也就是说我们甚至会把「未来的自己」想像成另一个人。

我们以为自己明白一些事情在未来带给我们的好处,但是大脑却认为这些东西和“自己”无关,于是我们更倾向就是自动聚焦到眼前的事情,忽略未来、长远的好处,于是没办法建立方向感。
因为眼前事情,给我们的感受最直接,所以我们陷入了期待短期回报的误区。
你想要在你认可的方向上坚持下去,有一种最简单的方式是,改变聚焦点。
不是强迫自己坚持,而是把注意力转向能够在当下带给你满足感的元素。
怎么改变聚焦点?我举两个自己的例子。
前一阵子为了买东西再次下载了抖音,结果一发不可收拾,开始习惯性的用碎片时间刷短视频。
之前我是全凭意志力控制自己,不断给自己强调“别刷了,没营养”,并告诫自己多看些书。但这次我找出了我最喜欢一本小说《挪威的森林》,这本书我读过五遍,能够很自然的就沉浸在小说的情节里,等小说看完,我空闲时已经不会在习惯性的拿出手机刷短视频了。
日常因为工作原因一坐就是一天,但我又知道每天至少得保证7000步才是最健康的。当我认为需要运动的时候,我并不是告诉自己多运动才能长寿,而是劝自己,文章写到这里灵感已经枯竭,不如出去走一走换换脑子。
这里要点是,我们尽量去聚焦到那些我们不愿意去改变的事情,当下能给我们带来的好处,甚至说和我们喜欢的事情绑定在一起。
聚焦点不一样,行动方向截然不同,真正的长期主义,不是压抑自己做不喜欢的事情,而是和自己喜欢的事情“打配合”。
有反馈
许多人之所以无法坚持长期主义,是因为人很容易在前进的路上迷失。
一个关键原因是我们不能仅凭意志力在黑暗中前行,反馈就是我们的灯塔,提醒自己是否还在正确的方向。
但如果没有建立自己的反馈体系,就很容易陷入把坚持当成意义这个误区。
系统动力学把反馈分成了正反馈回路和负反馈回路。
正反馈就是结果反过来加强了原因,从而形成螺旋式上升。如果你文章质量好,获得了大量点赞,因此平台持续给你推荐。推荐又让更多的人看到,别人进一步的点赞、转发。
负反馈就是系统对偏差进行修复,来保障稳定和持续。健身时你不断冲击更大重量,但身体终会在某一重量时无法承受,你可能会因此受伤,反而达不到之前你能坚持的最大重量。
那么我们就很清晰了,正反馈帮助我们进步,负反馈帮助我们纠偏,你必须建立自己的反馈系统。
第一类反馈来源于外界。
你有没有发现很多博主在视频或者文章后面,都在求大家给一个一键三连,我曾以为这是什么套路,现在看来这是每一个创作者的本能,你的点赞、评论、转发,是对一个内容创作者最好的奖赏。
坦率的讲,现在这个快节奏社会,能够沉下心看完一篇不知名作者写的一篇几千字的文章,已经足够让我开心。
哪怕是我自己,能让我踏下心看完几千字文章的,都是那些大IP和知名的专栏作家。
如果收到了点赞和转发,那我更是无比感激,即使到了今天,我看到文章的互动依然会很兴奋。
这是极强的正反馈,会给你继续前进的力量,随后螺旋上升。
哦对,看到这确认不点个赞吗?
可并不是每次努力,都能够听到外界带给你正向的声音。

因此第二类反馈来源于你自己。
我文章有过很长一段时间的低谷期,几千字的文章无人问津,就好像你搬起了一大块石头扔进水里,一点水花都没有。
那时候我就意识到,我必须建立“内部反馈机制”,我不断问自己几个问题:
- 学习到的知识,我自己是否真正理解了?
- 如果理解了,能不能用自己的话把这个道理讲出来?
- 这个东西,我有没有应用到真实的生活中,给自己带来改变?
慢慢的我发现,曾经让自己迷茫、愤怒、无助的事情,越来越少了。我逐渐能够看透本质,理清思路、看清全局。
其实写作带来这些好处已经弥足珍贵,但我认为还不够,我开始反思每一篇文章:
- 这篇文章的逻辑好不好,能不能做到自洽,衔接是否通顺?
- 是不是论点不够、思考不够,导致文章没有说服力?
- 文章节奏控制的怎么样,情绪有没有断层?
再比如最近我自己正在拆解每篇文章的不足,然后有意识的和高手学习并一点点改进,一天写完的内容,可能修改要花上三天。
虽然拆解不足给自己的是负反馈,但是复反馈能够帮助你纠偏。
正是这个内部反馈系统,让我坚持到了现在。
第三类设计你自己的系统反馈。
最强大的反馈系统,不靠别人、不靠情绪,而是系统本身。
B站有一个up主叫做影视飓风,老板Tim分享了他们的内容复盘系统,他在最显眼的地方专门放了一个屏幕,里面记录了每一个内容各种实时数据,通过图表展现出来,全公司的人都可以看见。
他们分析哪些内容能涨粉、哪些容易爆,哪条视频表现不好、为什么表现不好。正是这种高度透明和数据驱动的机制,一定程度上帮助他们孵化出第二个账号“飓多多StormCrew”,内容风格完全不同,却因为精准抓住观众喜好而大获成功。
这块我做的不好,我之前几乎不去复盘内容数据,受到他的启发,我花了15分钟用飞书的多维表格,给自己搭建了一个内容数据看板,这里面记录了自己今年来的文章阅读走势。

波动这么明显我有点汗颜,不过我发现带有30+、面试、AI相关的内容,大家会更感兴趣些。
你不一定要搭建看板,但你可以从每周一次总结开始,从定期记录自己的感受开始,找到合适自己的反馈机制。
有预期
最后我们聊聊,如果你真的想要践行长期主义,你得做好哪些准备。
毕竟长期主义并不轻松,提前把困难都想到, 那么真的遇到困难时,反而更容易坚持下来。
长期主义,需要你持续付出。
它不是简单的重复,而是不断在你的“认知边界”上试错、突破。
这很枯燥,而且往往没有立刻回报,还意味着一次次笨拙的表达、失败的尝试,甚至别人眼里的“不够好看”。
但你要相信:每一次认真而笨拙的输出,都是自己能力的提升。
长期主义,需要你学会拒绝。
在这个快节奏的社会,你会看到身边的人,靠短视频一夜爆红,靠AI一键搬运赚取时代红利,也会看到一些小伙伴踩对节奏,迅速赚到了第一桶金。
而你却在钻研技能、搭建反馈系统、耐心苦练内功。
你要拒绝那种“快速反馈”的甜头,转而相信“慢反馈”的确定性。
长期主义的回报,是非线性的。
你以为努力一点,进步一点,实际上看似停滞许久,在某一天突然爆发。
大模型有一个著名的现象,叫做能力涌现:你喂进去足够多的数据,在某一刻,它突然学会了你没教它的东西,比如逻辑推理、语言翻译,甚至写代码。
这不是持续进化,而是能力突然“跃迁”。可能连大模型科学家本身也不明白,AI怎么就突然变得如此强大。
就像你健身半年没有什么变化,突然在某一天,你惊讶的发现:肌肉线条已经若隐若现。
说在最后
要我看来,长期主义最大的坏处就是孤独。
你给自己选中了一条要走下去的路,可能身边的人不理解,就算是是最亲近的人对你冷言冷语,你也没有抱怨的权利。
不过长期主义最大的好处也在这里。
你真的会一次次得把曾经以为的“天花板”变成自己脚下的阶梯,你除了抱怨时间不够、能力不足、精力不够,你没什么好抱怨的。
而这,恰恰就是一种美好的人生状态!
这是东东拿铁的第82篇原创文章,欢迎关注。
来源:juejin.cn/post/7516846036586102835
离职后,我的第一个出海产品上线了
今天,我的第一个独立开发出海产品 Chat2Report 上线了,这是一款基于 RAG 的美股财报聊天应用。

为什么要开发独立产品
去年初通过几位大佬(越南的 Tony Dinh,国内的 Hawstein 和 vikingz)的博客了解到,作为程序员还有开发独立产品出海这一条路,其中有些收入还不错,甚至有开发者辞掉了工作,全职做独立开发。

看完他们的文章,心里很激动,想着自己是不是也可以试一试。于是使用 OpenAI 的 gpt-4o-mini 模型微调了一个专门的模型,做了一个变量命名工具,叫 VarNamer,支持多国语言,用户输入任意语言,即可输出精简的英文变量。当时 AI 编程工具还刚刚兴起,变量命名又是件头痛的事,所以想着这个工具应该能为自己节省不少时间。
其实当时开发这个产品,也是为了学习新技术,为自己后面开发出海产品做准备,由于看到不少独立产品都是桌面端的,所以基于 Electron + Vue3 做了 VarNamer,为什么选择 Electron?因为它构建跨平台程序非常方便,为了上Mac,还购买了苹果开发者证书。

开发 VarNamer 并不顺利,期间踩了不少坑,也坚定了后面的出海产品不会再做桌面端了。因为一般的 Web 开发不需要考虑版本更新、证书、跨平台兼容等问题,但是开发桌面应用需要将这些因素都考虑进去。除去后端服务器的成本,安装包托管,更新逻辑,还需要考虑程序的签名证书,不然用户安装应用会报警告,甚至安装不了,其中苹果开发者证书一年就99刀,Windows 就更贵了。
VarNamer 上线后,在几个论坛发了贴宣传,也发给了同事使用,反响还不错,但是没想到后面 AI 编程工具发展这么快,特别是出了 Cursor 这样的王炸产品,变量命名完全不是难事,几乎改变了以往的编程习惯,一直 Tab 的感觉,简直不要太爽。
99 刀的苹果开发者证书就开发了一个应用,着实太浪费了,至于 VarNamer,后面再也没管过它,好像域名最近快到期了,也不打算续费了。
独立出海产品契机
自 VarNamer 之后,接下来的几个月时间并没有开发新的产品,为什么?因为我不知道开发什么,好像也找不到什么痛点需要解决的,后面想到自己在买一家上市公司的股票之前,会分析公司的财务报告,毕竟我是一位追随彼得·林奇和巴菲特的价值投资者,哈哈!
但是分析财报是件麻烦且费脑的事,一份财报少则几十页多则几百页,除了重点关注三张报表,即资产负债表、利润表、现金流量表(俗称“三大表”),还需要关注管理策略、管理层的措施、战略,财报中是否有欺诈风险等。
既然这么麻烦,那 AI 是不是能帮我们分析了?后面经过调研发现了市面上还真有这样的产品,比如 beebee、reportify,它们都是基于 RAG 实现的,但是我想基于它们开发一款新的产品,为什么?因为它们的功能实在太多了,新闻、电话会议、上传文件、公司评价...,而且 RAG 也不精准,我需要一款操作简单,体验更好,简洁、美观,精准,专门分析财报的工具。

去年 9 月下旬开始了技术调研,之前对 RAG 技术稍微有点了解,但是不够深入,只是基于 Dify 做了一些应用,同时发现 Dify 不够自由,文档解析分块不能自定义元数据,后端又是基于Flask的,to C 的应用担心性能不够,生产环境还需要一台服务器额外部署 Dify。
调研下来最终确定业务层使用Go + Gin, 大模型层使用Python + FastAPI + LlamaIndex,前端使用Vue3。LlamaIndex 实现 RAG 应用非常方便,兼容各种第三方文档解析器、向量模型(Embedding models)、重排序模型(Rerank models), 向量数据库、大语言模型(LLMs)。

之后利用下班时间和假期实现了个 demo,感觉还不错,是自己想要的效果,美股财报批量转 PDF,文档批量解析、分块,提取布局信息,前端布局重构回溯,AI回答带引用来源,高亮定位到原文段落,一个 ChatPDF + AI 财报助理的构想应该很快就可以实现。
10 月份利用业余时间开始了马不停蹄的开发,这期间公司一些事件却让自己很不舒服,作为一个技术人,希望能全身心的投入到技术中,利用技术解决问题,但是各种PPT汇报、职场PUA,让自己疲于奔命。
我想离职了,全职投入到项目开发中,11月初的一个晚上把这个想法告诉了老婆,非常正式的讲了自己的规划,产品怎么落地,产品受众人群,怎么盈利,以及一个粗略的计划,希望得到她的支持。因为我觉得,组建家庭后,另一半相当于就是你的人生合伙人。在很多重要决策上,得到合伙人的支持,才能走得更好走得更远。如果成功了,兴许以后就不用上班了,就算失败了大不了重新找个班去上。老婆没说什么,表示了支持,在这里要特别感谢一下老婆。
全力加速开发
12 月 09 号是我最后一个工作日,也是我作为全职独立开发的第一天,当天走出公司,呼吸着新鲜的空气,感受到了从未有过的自由。
成为全职独立开发之后,最大的感受就是开发效率提高了几倍,不用再参加枯燥无聊的会议,应付各种办公室政治斗争,输出无意义的PPT。直到今天项目上线,全部开发时间应该是3个月。
这期间踩了无数坑,以前工作时的一些优点,现在反而成了缺点,比如之前专注于写好代码,追求架构完美和扩展性,甚至有代码洁癖,但这严重推迟了产品的上线时间,在产品还未经过市场验证之前,应该快速推出产品,验证市场需求,这比追求精美更重要。
接下来的计划
接下来的主要任务就是宣传了,去海外各大社区宣传寻找目标用户,比如 Facebook、Twitter、Reddit。
两个月之后我会再写一篇帖子,分享我的成果,盈利情况等。
接下来也会分享一些出海产品在技术选型和海外支付方面的经验。
来源:juejin.cn/post/7517998609946673186
离职后的这半年,我前所未有的觉得这世界是值得的
大家好,我是一名前端开发工程师,属于是没有赶上互联网红利,但赶上了房价飞涨时代的 95 后社畜。2024 年 3 月份我做了个决定,即使已经失业半年、负收入 10w+ 的如今的我,也毫不后悔的决定:辞职感受下这个世界。
为什么要辞职,一是因为各种社会、家庭层面的处境对个人身心的伤害已经达到了不可逆转的程度,传播互联网负面情绪的话我也不想多说了,经历过的朋友懂得都懂,总结来说就是,在当前处境和环境下,已经没有办法感受到任何的快乐了,只剩焦虑、压抑,只能自救;二是我觉得人这一辈子,怎么也得来一次难以忘怀、回忆起来能回甘的经历吧!然而在我的计划中,不辞职的话,做不到。
3 月
在 3 月份,我去考了个摩托车驾-照,考完后购买了一辆摩托车 DL250,便宜质量也好,开始着手准备摩旅。

4 月份正式离职后,我的初步计划是先在杭州的周边上路骑骑练下车技,直接跑长途还是很危险的,这在我后面真的去摩旅时候感受颇深,差点交代了。
4 月
4.19 号我正式离职,在杭州的出租屋里狠狠地休息了一个星期,每天睡到自然醒,无聊了就打打游戏,或者骑着摩托车去周边玩,真的非常非常舒服。
不过在五一之前,我家里人打电话跟我说我母亲生病了,糖尿病引发的炎症,比较严重,花了 2w+ 住院费,也是从这个时候才知道我父母都没有交医保(更别说社保),他们也没有正式、稳定的工作,也没有一分钱存款,于是我立马打电话给老家的亲戚让一个表姐帮忙去交了农村医保。所有这些都是我一个人扛,还有个亲哥时不时问我借钱。

说实话,我不是很理解我的父母为什么在外打工那么多年,一分钱都存不下来的,因为我从小比较懂事,没让他们操过什么心,也没花过什么大钱。虽然从农村出来不是很容易,但和周围的相同条件的亲戚对比,我只能理解为我父母真的爱玩,没有存钱的概念。
我可能也继承了他们的基因吧?才敢这样任性的离职。过去几年努力地想去改变这个处境,发现根本没用,还把自己搞得心力交瘁,现在想想不如让自己活开心些吧。
5 月
母亲出院后,我回到杭州和摩友去骑了千岛湖,还有周边的一些山啊路啊,累计差不多跑了 2000 多公里,于是我开始确立我的摩旅计划,路线是杭州-海南岛-云南-成都-拉萨,后面实际跑的时候,因为云南之前去过,时间又太赶,就没去云南了。

6 月
在摩友的帮助下,给摩托车简单进行了一些改装,主要加了大容量的三箱和防雨的驮包,也配备了一些路上需要的药品、装备,就一个人出发了。

从杭州到海南这部分旅行,我也是简单记录了一下,视频我上传了 B 站,有兴趣的朋友可以看看:
拯救焦虑的29岁,考摩托车驾-照,裸辞,买车,向着自由,出发。
摩托车确实是危险的,毕竟肉包铁,即使大部分情况我已经开的很慢,但是仍然会遇到下大雨路滑、小汽车别我、大货车擦肩而过这种危险情况,有一次在过福建的某个隧道时,那时候下着大雨,刚进隧道口就轮胎打滑,对向来车是连续的大货车,打滑之后摩托车不受控制,径直朝向对向车道冲过去,那两秒钟其实我觉得已经完蛋了,倒是没有影视剧中的人生画面闪回,但是真的会在那个瞬间非常绝望,还好我的手还是强行在对龙头进行扳正,奇迹般地扳回来且稳定住了。
过了隧道惊魂未定,找了个路边小店蹲在地上大口喘气,雨水打湿了全身加上心情无法平复,我全身都是抖的,眼泪也止不住流,不是害怕,是那种久违地从人类身体发出的求生本能让我控制不住情绪的肆意发泄。
在国道开久了人也会变得很麻木,因为没什么风景,路况也是好的坏的各式各样,我现在回看自己的记录视频,有的雨天我既然能在窄路开到 100+ 码,真的很吓人,一旦摔车就是与世长辞了。
不过路上的一切不好的遭遇,在克服之后,都会被给予惊喜,到达海南岛之后,我第一次感觉到什么叫精神自由,沿着海边骑行吹着自由的风,到达一个好看的地方就停车喝水观景,玩沙子,没有工作的烦扰,没有任何让自己感受到压力的事情,就像回到了小时候无忧无虑玩泥巴的日子,非常惬意。

在完成海南环岛之后,我随即就赶往成都,与前公司被裁的前同事碰面了。我们在成都玩了三天左右,主要去看了一直想看的大熊猫🐼!

之后我们在 6.15 号开始从成都的 318 起始点出发,那一天的心情很激动,感觉自己终于要做一件不太一样的事,见不一样的风景了。

小时候在农村,读书后在小镇,大学又没什么经济能力去旅行,见识到的事物都非常有限,但是这一切遗憾在川藏线上彻底被弥补了。从开始进入高原地貌,一路上的风景真的美到我哭!很多时候我头盔下面都是情不自禁地笑着的,发自内心的那种笑,那种快乐的感觉,我已经很久很久很久没有了。

同样地,这段经历我也以视频的方式记录了下来,有兴趣的朋友可以观看:
以前只敢想想,现在勇敢向前踏出了一步,暂时放下了工作,用摩托跑完了318
到拉萨了!

花了 150 大洋买的奖牌,当做证明也顺便做慈善了:)

后面到拉萨之后我和朋友分开了,他去自驾新疆,我转头走 109 国道,也就是青藏线,这条线真的巨壮美,独自一人行驶在这条路,会感觉和自然融合在了一起,一切都很飘渺,感觉自己特别渺小。不过这条线路因为冻土层和大货车非常非常多的原因,路已经凹凸不平了,许多炮弹坑,稍微骑快点就会飞起来。
这条线还会经过青海湖,我发誓青海湖真的是我看到过最震撼的景色了,绿色和蓝色的完美融合,真的非常非常美,以后还要再去!

拍到了自己的人生照片:

经历了接近一个半月的在外漂泊,我到了西宁,感觉有点累了,我就找了个顺丰把摩托车拖运了,我自己就坐飞机回家了。
这一段经历对我来说非常宝贵,遇到的有趣的人和事,遭遇的磨难,见到的美景我无法大篇幅细说,但是每次回想起这段记忆我都会由衷地感觉到快乐,感觉自己真的像个人一样活着。
这次旅行还给了我感知快乐和美的能力,回到家后,我看那些原来觉得并不怎么样的风景,现在觉得都很美,而且我很容易因为生活中的小确幸感到快乐,这种能力很重要。
7 月
回到家大概 7 月中旬。
这两个多月的经历,我的身体和心态都调整的不错了,但还不是很想找工作,感觉放下内心的很多执念后,生活还是很轻松的,就想着在家里好好陪陪母亲吧,上班那几年除了过年都没怎么回家。
在家里没什么事,但是后面工作的技能还是要继续学习的,之前工作经历是第一家公司用的 React 16,后面公司用的是 Vue3,对 React 有些生疏,我就完整地看了下 React 18 的文档,感觉变化也不是很大。
8、9 月
虽然放下了许多执念,对于社会评价(房子、结婚、孩子)也没有像之前一样过于在乎了,但还是要生活的,也要有一定积蓄应对未来风险,所以这段时间在准备面试,写简历、整理项目、看看技术知识点、刷刷 leetcode。
也上线了一个比较有意义的网站,写了一个让前端开发者更方便进行 TypeScript 类型体操的网站,名字是 TypeRoom 类型小屋,题源是基于 antfu 大佬的 type-challenges。
目前 Type Challenges 官方提供了三种刷题方式
- 通过 TypeScript Playground 方式,利用 TypeScript 官方在线环境来刷题。
- 克隆 type-challenges 项目到本地进行刷题。
- 安装 vscode 插件来刷题。
这几种方式其实都很方便,不过都在题目的可读性上有一定的不足,还对开发者有一定的工具负担、IDE 负担。
针对这个问题,也是建立 TypeRoom 的第一个主要原因之一,就是提供直接在浏览器端就能刷题的在线环境,并且从技术和布局设计上让题目描述和答题区域区分开来,更为直观和清晰。不需要额外再做任何事,打开一个网址即可直接开始刷题,并且你的答题记录会存储到云端。
欢迎大家来刷题,网址:typeroom.cn

因为个人维护,还有很多题目没翻译,很多题解没写,也还有很多功能没做,有兴趣一起参与的朋友可以联系我哦,让我一起造福社区!
同时也介绍下技术栈吧:
前端主要使用 Vue3 + Pinia + TypeScript,服务端一开始是 Koa2 的,后面用 Nest 重写了,所以现在服务端为 Nest + Mysql + TypeORM。
另外,作为期待了四年,每一个预告片都看好多遍的《黑神话·悟空》的铁粉,玩了四周目,白金了。

现在
现在是 10 月份了,准备开始投简历找工作了,目前元气满满,不急不躁,对工作没有排斥感了,甚至想想工作还蛮好的,可能是闲久了吧,哈哈哈,人就是贱~
更新 11 月
我还是没有找工作,又去摩旅了一趟山西、山东,这次旅行感觉比去西藏还累、还危险。同样是做了视频放 b 站了,有兴趣的可以看看:
骑了4300km只为寻找那片海-威海的海|摩旅摩得命差点没了
真的要开始找工作了喂!
最后
其实大多数我们活得很累,都是背负的东西太多了,而这些大多数其实并不一定要接受的,发挥主观能动性,让自己活得开心些最重要,加油啊,各位,感谢你看到这里,祝你快乐!
这是我的 github profile,上面有我的各种联系方式,想交个朋友的可以加我~❤️
来源:juejin.cn/post/7424902549256224804
Swift 官方正式支持 Android,iOS 的跨平台春天要来了吗?
近日,Swift 官方正式宣布成立 Android 的工作组,将 Android 列为官方支持的平台,该工作组的主要目标是为 Swift 语言添加并维护 Android 平台支持,让开发者能够使用 Swift 开发 Android 应用:

其实 Swift 语言跨平台支持也不是什么新鲜事,在之前我聊过的 Skip 用 Swift 写 Android App 的时候就聊过,只是不同的是 Skip 是将 Swift 翻译成 Kotlin,把 SwiftUI 翻译成 Compose 的形式来实现,这和 uni-app x 的跨平台实现殊途同归。
感兴趣的可以看 《2025 跨平台框架更新和发布对比》
但是 Swift 官方的方案则不同,它是通过 LLVM 进行适配的,我们之前聊过的 《为什么跨平台框架可以适配鸿蒙》就聊过,LLVM 也是各大框架适配鸿蒙的重要基石,甚至一些方案适配鸿蒙是通过 Apple 的 LLVM 去先导出 IR 来完成前置工作。
而这次 Swift on Android 的实现,则是直接利用 Android 平台的构建工具:Android NDK 。
为什么这么说?因为 Swift 编译器从诞生之初就基于 LLVM ,而 Google 的 Android NDK 后来也使用基于 LLVM 的 Clang 作为其官方 C/C++ 编译器 :
- NDK r11 开始建议切换到 Clang
- NDK r12
ndk-build命令默认使用 Clang - NDK r13 GCC 不再受支持
- NDK r14 GCC 弃用
- ····
说起 Clang 和苹果也是很有渊源,Clang 的设计初衷是提供一个可以替代 GCC 的前端编译器,因为 GCC 的发展不符合 Apple 的节奏和需要,同时受限于License,苹果公司无法使用 LLVM 在 GCC 基础上进一步提升代码生成质量,因此苹果公司决定从头编写 C、C++、Objective-C 语言的前端 Clang,以彻底替代GCC。
而在编译上,比如 stdlib 里的 AddSwiftStdlib.cmake 可以看到, Swift 没有在 Android 上创造一套自己的 log 系统,它直接链接了 Android 的 Native 的日志 log 来实现,从而支持 Android Studio 的 Logcat :

所以基于 LLVM 的 Android NDK 是实现 Swift 跨平台编译的关键,它让 Swift 编译器能够被“重定向”,从而为 Android 支持的 CPU 架构(如 aarch64、armv7、x86_64)生成相应的原生机器码 。
$ NDK_PATH=path/to/android-ndk-r27c
$ SWIFT_PATH=path/to/swift-DEVELOPMENT-SNAPSHOT-2024-11-09-a-ubuntu22.04/usr/bin
$ git checkout swift-DEVELOPMENT-SNAPSHOT-2024-11-09-a
$ utils/build-script \
-R \ # Build in ReleaseAssert mode.
--android \ # Build for Android.
--android-ndk $NDK_PATH \ # Path to an Android NDK.
--android-arch aarch64 \ # Optionally specify Android architecture, alternately armv7 or x86_64
--android-api-level 21 \ # The Android API level to target. Swift only supports 21 or greater.
--stdlib-deployment-targets=android-aarch64 \ # Only cross-compile the stdlib for Android, ie don't build the native stdlib for Linux
--native-swift-tools-path=$SWIFT_PATH \ # Path to your prebuilt Swift compiler
--native-clang-tools-path=$SWIFT_PATH \ # Path to a prebuilt clang compiler, one comes with the Swift toolchain
--build-swift-tools=0 \ # Don't build the Swift compiler and other host tools
--build-llvm=0 \ # Don't build the LLVM libraries, but generate some CMake files needed by the Swift stdlib build
--skip-build-cmark # Don't build the CommonMark library that's only needed by the Swift compiler
简而言之,就是编译成 so 。
目前官方要求是在 Linux 环境下(官方推荐 Ubuntu 20.04/22.04)下,使用 Swift 官方提供的交叉编译工具链,将 .swift 源文件编译成原生可执行文件或共享库,之后将编译产物连同必需的 Swift 运行时库,通过 Android adb 推送到 Android 设备或模拟器上,最终这些原生代码可以在 Android 的 shell 环境中直接运行,或被一个标准的 Android 应用加载并调用 :

首先需要运行以下命令复制复制对应的 so :
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftCore.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftAndroid.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftOnoneSupport.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftRemoteMirror.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswift_Concurrency.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswift_RegexParser.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswift_StringProcessing.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libdispatch.so /data/local/tmp
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libBlocksRuntime.so /data/local/tmp
然后还需要复制 Android NDK 的 libc++ :
$ adb push /path/to/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so /data/local/tmp
此外还需要复制在上一步中构建的 hello 可执行文件:
$ adb push hello /data/local/tmp
最终通过 adb shell 命令在 Android 设备上执行 hello 可执行文件:
$ adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/hello
而对于 Android 端来看,此时的 Swift 产物与 C/C++ 代码没什么区别,它必须作为一个标准的 .so 库被加载,并通过 JNI 规范暴露需要支持的能力。
目前 Swift 的核心标准库(stdlib)已经可以成功在 Android 平台进行编译 ,也就是目前 String、Int、Array 和 Dictionary 等基础数据类型已经完成基本支持:

更高层次的核心库,比如 Foundation( URLSession、JSONEncoder )和 Dispatch(提供并发支持),也正在被移植到 Android 平台。
而对于 UI 部分,目前 Swift 官方暂未提供任何支持 Android 的 UI 框架 ,官方文档目前表示:“You'd need some sort of framework to build a user interface for your application, which the Swift stdlib does not provide” 。

所以,从这个层面看,它更像是 KMP 的存在,而如果需要类似 CMP 的支持,那么大概率需要 SwfitUI 的官方适配,毕竟 Skip 其实只是一个翻译框架。
而在互操作上,其实过去就有 swift-java 这个图的互操作方向的尝试,当时的目标是实现 Swift 与 Java 之间的双向互操作性,即支持 Swift 调用 Java 库,也支持 Java 调用 Swift 库 :

但是从官方描述来看, Swift on Android 似乎并没有直接使用类似桥接绑定,也就是你需要自己实现这部分,如果你需要的话:

而对于 Swift on Android 来说,要让一个 Swift 函数能被外部的 C 代码(以及遵循 C 调用约定的 JNI)所发现和调用,一般也就是通过 @_cdecl 属性,这个属性可以将函数编译成一个简单的、符合 C 语言标准的符号(Symbol)并暴露出去。
虽然没找到对应的 demo 或者实现,但是理论上如果想要不暴露接口,大概率还是通过
@_cdecl。
所以目前 Swift on Android 给人的感觉确实很毛坯,在交互和 UI 上都很欠缺,看起来只是开源了一种可能,具体能达到什么效果暂时还看不出来,但是多少算是官方起了个头,也算是有了希望,对于 iOS 来说,这个春天还需要再等等。
那么,你觉得 Swift on Android 的存在多久可以达到生产标准?
参考链接
来源:juejin.cn/post/7520063683180199999












