我对技术探索与实践的看法:一个应届生的“Lovable”挣扎史
上周五晚上十一点,我瘫在出租屋的床上,刷着老家某三线城市政府官网的“人才引进计划”——硕士安家补贴15万,三年内每月额外生活补助2000块,还有优先安排公租房。而我眼下住的这间北京回龙观单间,月租3500,走路到地铁站要15分钟,通勤一小时,工资税前22k,扣完五险一金和房租,银行卡余额比我的头发还稀疏。
就在这时,手机弹出一条消息:我妈发来语音,“儿子,你表哥在市里新开了家软件公司,缺个前端,月薪8k,包吃住,离家走路十分钟……你要不要回来?”
我苦笑了一下,把手机扔到一边,点开本地开发群,看到有人在讨论最近面试常考的“React Fiber 原理”,底下回复:“背八股文有啥用,真上项目还不是靠 Lovable(可维护、可读、可协作)的代码?”
那一刻,我突然意识到:我纠结的,从来不只是“回不回老家”,而是“我到底想成为什么样的程序员”。
一、从“背题机器”到“写代码的人”:我的第一道坎
时间倒回到去年十月。我还在读研二,秋招如火如荼。那会儿每天的生活就是:早上六点起床刷 LeetCode,中午啃着煎饼果子看《前端高频面试题100道》,晚上对着 B 站教程敲 React 项目,直到室友吐槽:“你键盘声吵得我梦见自己在写 useEffect 依赖数组。”
我一度以为,只要把“虚拟 DOM diff 算法”“闭包原理”“Event Loop”这些面试题答得滚瓜烂熟,就能拿到大厂 offer。毕竟,我投了 37 家公司,面了 12 轮,最后只有两家给了 offer,其中一家就是现在这家——国内 Top 3 的互联网大厂,前端岗,base 北京,月薪 22k。
但入职第一天,我就被打脸了。
带我的导师老张(花名“张全蛋”)让我接手一个内部工具的重构任务。代码库是三年前写的,jQuery + 原生 JS 混搭,注释是“TODO: 以后再改”,函数名是 doSomething(),变量名是 x, y, z。
我信心满满地打开 VS Code,心想:“这不就是面试题里说的‘如何优化老旧项目’吗?我背过!”
结果三天后,我改出一个 bug,导致整个团队的测试环境挂了。老张没骂我,只是淡淡地说:“你代码写得挺快,但没人看得懂。技术不是炫技,是协作。”
那天晚上,我翻遍了公司内部的 Code Review 记录,发现高赞 PR 里反复出现一个词:Lovable。
不是“高性能”,不是“炫酷动画”,而是 Lovable——让人愿意读、愿意改、愿意接手的代码。
二、什么是 Lovable?一个真实案例
后来我才明白,Lovable 不是某个框架,而是一种开发哲学。
举个例子:我们有个内部报表系统,需要支持动态配置图表。最初的设计是用一堆 if-else 判断图表类型,每加一种新图,就得改核心逻辑。
我提议用“策略模式”重构。但老张摇头:“别一上来就设计模式。先想想,三个月后实习生能不能看懂?”
于是我们改用配置驱动 + 清晰命名的方式:
// chartConfig.js
export const CHART_TYPES = {
BAR: { component: BarChart, label: '柱状图', icon: 'bar' },
LINE: { component: LineChart, label: '折线图', icon: 'line' },
PIE: { component: PieChart, label: '饼图', icon: 'pie' }
};
// 使用处
const ChartRenderer = ({ type, data }) => {
const config = CHART_TYPES[type];
if (!config) return <ErrorFallback />;
const ChartComponent = config.component;
return <ChartComponent data={data} />;
};
没有复杂的抽象,没有炫技的高阶函数,但任何人一眼就知道怎么加新图表——只需在 CHART_TYPES 里加一行,放好组件就行。
Code Review 时,老张批注:“这才是 Lovable。代码不是写给机器看的,是写给人看的。”
那一刻,我醍醐灌顶。
三、教程 vs 实践:我踩过的坑
说到教程,我必须坦白:我曾经是个“教程依赖症患者”。
刚学 React 时,我跟着某知名博主的“React 全栈实战”教程,从零搭建一个电商网站。教程里用 Redux Toolkit + RTK Query + Ant Design,代码写得行云流水,部署上线还带 CI/CD。
我照着敲完,自信满满地把项目放到 GitHub,心想:“这简历项目稳了!”
结果面试时,面试官问:“你这个购物车状态,如果用户同时在两个标签页操作,怎么同步?”
我懵了。教程里根本没提。
后来我才明白:教程教的是“怎么做”,但实践教的是“为什么这么做”。
真正的开发心得,往往来自那些教程不会告诉你的“脏活”:
- 用户网络差,图片加载慢,怎么优雅降级?
- 后端接口字段名突然改了,怎么快速定位影响范围?
- 产品经理临时改需求,怎么在不重写的情况下兼容?
这些,没有标准答案,只能靠动手试错 + 复盘总结。
我现在有个习惯:每次解决一个棘手问题,就写一篇内部 wiki,标题统一叫《XXX 问题的 Lovable 解法》。比如《日期格式混乱的 Lovable 解法》《防抖节流的边界 case 处理》。
这些文档,后来成了新人培训的“非官方教材”。
四、面试题 vs 真实场景:别被八股文骗了
回到开头那个“React Fiber 原理”的讨论。
我承认,面试时确实被问过。我也背过“Fiber 是基于链表的可中断渲染机制……”。
但入职半年,我一次都没用上这个知识。反而是怎么让组件 props 清晰、怎么写单元测试覆盖边界 case、怎么和后端约定错误码规范,天天在用。
有一次,产品提了个需求:列表页要支持“按多个维度筛选+排序”,还要记住用户上次的选择。
我第一反应是:“这不就是 useReducer + localStorage 吗?”
但老张提醒我:“先问问用户是谁?他们真的会频繁切换筛选吗?会不会更希望一键重置?”
我们拉了用户访谈,发现 80% 的用户只用固定两三个筛选组合。
于是我们做了个“常用筛选模板”功能,用户可以保存自己的组合。代码量反而更少,体验更好。
技术不是为了解决“能做”,而是为了“做得好”。
那些面试题,就像健身时的深蹲重量——它证明你有基础能力,但真正上场打比赛,靠的是战术、配合和临场应变。
五、回老家?还是留北京?技术人的选择困境
现在,我又要面对那个终极问题:回不回老家?
老婆(其实是女朋友,但我们都这么叫)上周跟我视频,说:“你在北京,一年见不到我三次。而且,你真的开心吗?”
我沉默了。
我当然知道,回老家意味着:
- 月薪从 22k 降到 8k
- 技术氛围弱,可能几年后就“废了”
- 但每天能回家吃饭,周末能陪父母逛菜市场
留下北京:
- 继续卷,可能三年后升职加薪
- 但房租涨、通勤累、孤独感越来越重
- 而且,我真的喜欢现在的工作吗?
其实,技术探索的终点,从来不是“去哪”,而是“成为谁”。
我在北京学到的最重要的东西,不是 React 或 TypeScript,而是如何写出 Lovable 的代码,如何做一个 Lovable 的工程师——可靠、清晰、愿意帮别人、不装逼。
这种能力,不管在哪,都能发光。
所以,我跟表哥聊了聊。他那家“软件公司”,其实主要接政府外包项目,技术栈是 Vue 2 + jQuery,团队 5 个人,没人写单元测试。
我问他:“你们有没有考虑过代码规范?或者至少用 Git 分支管理?”
他笑:“能跑就行,客户又不看代码。”
那一刻,我知道,我可能回不去了。
不是嫌弃老家,而是我已经被“Lovable”惯坏了。我无法接受“能跑就行”的代码,就像无法接受一碗没放盐的面。
六、写给和我一样的你:技术人的“Lovable”生存指南
如果你也在纠结方向,或者刚入行感到迷茫,分享几点我的开发心得:
别只背面试题,多问“为什么”
面试题是敲门砖,但真正让你走得远的,是理解背后的权衡。比如“为什么 React 用 key?不用会怎样?”把代码当作文写
变量名、函数名、注释,都是你在和未来的自己(或同事)对话。写清楚,是对他人最大的尊重。教程是地图,实践是走路
跟着教程做一遍,只是热身。真正的成长,来自你脱离教程后,独立解决一个没人教过的问题。Lovable 比 “酷” 更重要
一个炫酷的动画效果,可能让产品经理眼前一亮;但一段清晰的错误处理逻辑,能让整个团队少加班两小时。技术选择,本质是人生选择
选大厂 or 小城,选高薪 or 安稳,没有标准答案。但请记住:你写的每一行代码,都在塑造你未来的样子。
结语:做个“可爱”的程序员
上周,我给老家的表哥发了一份《前端工程化入门建议》,包括 ESLint 配置、Git 提交规范、基础测试写法。他说:“太复杂了,我们用不上。”
但我还是发了。因为我知道,技术的价值,不在于它多先进,而在于它能否让做事的人更轻松、更快乐。
也许有一天,我会回老家。但不是因为“卷不动了”,而是因为我已经足够强大,可以在任何地方,写出 Lovable 的代码,过上 Lovable 的生活。
在此之前,我继续在北京的出租屋里,敲着键盘,写着注释,期待着明天 Code Review 时,老张能给我点个赞。
毕竟,做个“可爱”的程序员,比做个“厉害”的程序员,更难,也更值得。
P.S. 如果你也在纠结去留,不妨问自己一个问题:
“五年后,我想成为什么样的人?而现在的选择,是在靠近,还是远离那个目标?”
答案,或许就在你下一行代码里。

评论 0