程序员常说的LBT,一文给你讲明白

puppy

别担心,这真不是什么高深的技术黑话。这篇文章就用大白话给你讲清楚:为啥我们明明有现成的框架和库,还总有人热衷于“造轮子”?这背后其实藏着程序员的成长哲学——有时候,重复是为了更深刻的理解。看完你不仅能秒懂这个梗,还能get到什么时候该用轮子,什么时候该自己动手,让你在团队里沟通更自信,轻松融入本土技术圈!

LBT 速览:留学生生存包

这不是黑话:LBT (Let's Build a Thing) 或“造轮子”,本质是一种学习方式,不是让你在工作中瞎搞。

目的不同:学习时“造轮子”是为了拆解技术黑箱,搞懂原理;工作时“用轮子”是为了效率和稳定。

面试加分项:很多面试官会让你现场“造轮子”,考察的是你的基础和思考过程,而不是造出完美产品。

沟通利器:搞懂 LBT 的文化,能让你更快地融入北美技术团队,理解同事的决策,自信地参与技术讨论。

程序员常说的LBT,一文给你讲明白

哈喽,各位在 lxs.net 的小伙伴们!我是你们的老朋友,专挖技术圈那些“梗”背后实用干货的小编。

刚来美国读研的学弟 Leo 最近有点emo。他刚进一家初创公司实习,第一次参加 team meeting,大家讨论一个新功能的数据可视化模块。组里的 senior engineer,一个叫 Dave 的小哥,在白板上画了画,突然冒出一句:“The existing charting libraries are too heavy for our real-time dashboard. For this part, LBT.”

Leo 当场就懵了。LBT?啥玩意儿?最新的前端框架?还是什么设计模式的缩写?他悄悄Google了一下,没查到什么正经的技术名词。后来吃饭时鼓起勇气问了 Dave,Dave 笑着解释:“Oh, it just means ‘Let's build a thing.’ 咱们自己动手写一个轻量级的图表组件。”

Leo 更困惑了。明明有那么多现成的、功能强大、经过市场检验的图表库,比如 ECharts, D3.js, Chart.js,为啥要自己费劲“造轮子”?这不是浪费时间吗?他甚至开始怀疑,这是不是本土工程师圈子的一种“排外”黑话,故意让他这种新人听不懂?

相信不少刚踏入海外职场的留学生朋友们,都可能遇到过和 Leo 类似的窘境。听到同事们嘴里蹦出一些看似高深莫测的“行话”,心里直打鼓,生怕自己显得不专业。别担心,今天咱们就来把 LBT 这个概念,也就是程序员圈子里更常说的“造轮子”(Reinventing the wheel),用大白话给你彻彻底底讲明白。

“造轮子”?听起来就很蠢,为啥大家还乐此不疲?

没错,从字面上看,“造轮子”绝对是个贬义词。想象一下,汽车工业发展了100多年,有米其林、普利司通这些巨头,你却非要自己回家拿橡胶和钢圈鼓捣一个轮胎出来。这在追求效率的商业世界里,听起来简直是反人类的操作。

在软件开发领域也一样。我们有无数优秀的开源框架和库,它们是成千上万顶尖工程师智慧的结晶,经过了海量用户和复杂场景的考验。比如,你要写个网站后端,有 Spring Boot、Django 这种全家桶;你要做个前端页面,有 React、Vue 帮你处理复杂的UI逻辑。根据 Stack Overflow 2023 年的开发者调查,超过 40% 的专业开发者在使用 React.js,这背后是一个多么庞大和成熟的生态系统。

放着这么好用的“轮子”不用,非要自己从头写一个,在项目经理眼中,这可能等同于“延期”和“预算超支”。

但神奇的是,这个看似“愚蠢”的行为,在程序员的世界里却有着非同寻常的意义。它不仅仅是“重新发明”,更是一种深刻的学习和探索过程。LBT 的精髓,不在于“造出一个比现有轮子更好”的结果,而在于“通过亲手制造,彻底搞懂轮子是怎么转的”这个过程。

这就像你想学好车,不一定非要自己造一台发动机。但如果你想成为一名顶级的赛车工程师,亲手拆解、组装甚至设计一台发动机,绝对是无法替代的学习路径。软件开发也是如此,调用一个API,你只是个使用者;而亲手实现这个API背后的逻辑,你才能成为一个真正的创造者。

LBT 的三大核心价值:从“使用者”到“创造者”的跃迁

那么,花时间去 LBT,到底能给我们带来什么具体的好处呢?

1. 击穿技术黑箱,建立真正的知识体系

我们平时使用的框架和库,对我们来说就像一个“黑箱”。我们知道输入什么,它会输出什么,但中间发生了什么?一概不知。这种“API 调用工程师”的模式在入门阶段很高效,但很快就会遇到天花板。

举个例子,几乎所有前端同学都用过 React。你知道 `useState` 可以管理状态,`useEffect` 可以处理副作用。但是,当你在 `useEffect` 里修改一个状态,为什么页面会重新渲染?React 的 Virtual DOM 到底是怎么工作的?为什么它比直接操作真实 DOM 更高效?

只看文档,你可能永远只能得到一些模糊的概念。但如果你尝试 LBT,花一个周末,跟着网上的教程,用几十行 JavaScript 代码写一个最最基础版的 React 呢?

当你亲手实现了 `createElement` 函数来创建虚拟节点,写出了 `render` 函数将虚拟 DOM 转换成真实 DOM,并实现了 `diff` 算法来比较新旧两棵树的差异时,你才算真正“击穿”了这个黑箱。你不再是死记硬背“key 很重要”这个规则,而是深刻理解了 `diff` 算法依赖 `key` 来识别和复用节点,从而避免了不必要的 DOM 操作。据统计,优化不当的 DOM 操作是导致网页性能下降的主要原因之一,一个页面的卡顿,80% 都与 JavaScript 对 DOM 的频繁读写有关。

这种通过“造轮子”获得的底层知识,会内化成你的技术直觉。下次遇到性能问题,或者复杂的组件状态管理难题时,你的脑子里不再是一片空白,而是能立刻联想到框架底层的运行机制,从而找到问题的根源。

2. 满足“变态”需求,打造专属解决方案

通用的“轮子”虽然好,但它们的设计目标是满足 80% 用户的 80% 需求。总有一些场景,它们的性能要求、功能需求非常独特,通用库反而会成为累赘。

想想 Leo 遇到的问题。他们的产品是一个需要展示毫秒级变化数据的实时交易看板。像 ECharts 这样的库,功能非常强大,动画效果也很酷,但它的包体积可能就有几百 KB,而且为了兼容各种图表类型,内部逻辑非常复杂。对于一个只需要展示简单折线图,但对刷新率要求极高的场景来说,引入一个“重型航母”级别的大库,无异于杀鸡用牛刀。

根据 Google 的研究,页面加载时间从1秒增加到3秒,用户跳出率会增加32%。在金融交易这种分秒必争的领域,每一毫秒的延迟都可能造成损失。这时候,Dave 提出 LBT 就非常合理了。他们可以基于 SVG 或 Canvas,自己写一个几 KB 大小的、只包含核心渲染逻辑的轻量级组件。这个“小轮子”虽然功能单一,但在特定场景下,它的性能、响应速度和可控性,是任何通用库都无法比拟的。

很多大公司的核心技术,其实都是内部“造”的轮子。比如,Google 有自己的分布式数据库 Spanner,Facebook(Meta)搞出了 GraphQL 来替代传统的 REST API。他们之所以这么做,不是因为市面上没有数据库或 API 标准,而是因为他们的业务规模和业务场景,已经超出了现有通用工具能高效处理的范畴。他们需要为自己量身定做一个最合身的“轮子”。

3. 面试官的“照妖镜”,程序员的“修炼场”

对于我们留学生来说,LBT 还有一个最直接的价值——应对技术面试。

在北美找工作的同学会发现,面试官特别喜欢让你“现场造轮子”。比如:

  • “请你实现一个自己的 `Promise`。”
  • “你能写一个简单的事件总线(Event Bus)吗?”
  • “我们来构建一个迷你的 Redux 状态管理器吧。”

面试官真的指望你在30分钟内写出一个能媲美开源库的完美代码吗?当然不是。他想看的,是你解决问题的思路:

  • 你是否理解这项技术背后的核心原理?(比如 Promise 的状态机、Redux 的单向数据流)
  • 你的代码结构是否清晰,边界条件是否考虑周全?
  • 当遇到问题时,你是如何沟通、调试和迭代的?

这就像一场开卷考试,题目就是你天天在用的工具。平时只会“用轮子”的人,此时就会原形毕露。而那些有过 LBT 经验,自己动手实践过的人,则能从容不迫地讲解设计思路,写出关键代码。这背后展现出的,是扎实的基本功和真正的技术热情,这正是大厂最看重的品质。

什么时候该“造”,什么时候该“用”?

聊了这么多 LBT 的好处,是不是感觉应该马上扔掉所有第三方库,开始自己的“造神计划”?千万别!在真实的工作环境中,滥用 LBT 和完全不用 LBT 一样,都是灾难。

你需要像一个老道的将军一样,清楚地知道什么时候该派上自己训练的特种兵(造轮子),什么时候该动用成熟的集团军(用轮子)。

果断“造轮子”的场景:

  1. 学习和探索阶段:这是 LBT 的黄金时期。无论你是学生,还是刚接触一门新技术,都应该尝试去“造”一些小轮子。比如学习 Node.js,就自己动手写一个简单的 HTTP 服务器;学习数据库,就自己实现一个基于哈希表的内存键值存储。目标是学习,过程比结果重要。
  2. 项目的核心竞争力:如果某个模块是你的产品区别于竞争对手的关键,并且市面上的方案都无法满足你的特殊需求,那就值得投入资源去自研。这部分代码,是你公司的护城河。
  3. 性能或体积要求极致的场景:就像前面提到的实时看板,或者在物联网设备、移动端等对资源极其敏感的环境中,一个定制的、极度精简的轮子,价值千金。

坚决“用轮子”的场景:

  1. 有明确交付日期的商业项目:在工作中,时间和效率永远是第一位的。使用成熟的、有社区支持的开源库,可以让你专注于业务逻辑,而不是重复发明基础组件,大大加快开发速度。
  2. 非核心且复杂的通用功能:比如用户认证、日志系统、加密算法、支付接口等。这些领域水非常深,充满了各种你意想不到的坑,特别是安全相关的。2021年底爆发的 Log4Shell 漏洞,影响了全球数亿台设备,连苹果、亚马逊、特斯拉都未能幸免。你确定你写的日志库,能比 Apache 基金会维护的 Log4j 更安全吗?在这些领域,“用轮子”不仅是效率问题,更是安全和责任问题。
  3. 你完全不了解的领域:不要在你知识的荒原上“造轮子”。如果你对图形学一无所知,就不要尝试去写一个渲染引擎。专业的事情,交给专业的轮子去做。

所以你看,LBT 从来都不是一个非黑即白的选择题,它考验的是一个工程师的判断力和工程素养。它是一种思维方式,一种让你在“使用”和“创造”之间自如切换的能力。

下次在团队里再听到有人说“LBT”,你心里就不会再犯嘀咕了。你甚至可以自信地参与讨论:“我同意,这里的确需要一个轻量级的解决方案。不过我们也要考虑维护成本,或许可以先找找有没有更小众、更专注的开源库?”

你看,当你真正理解了 LBT 背后的哲学,你就不再是一个只会埋头写代码的留学生,而是一个能从更高维度思考技术选型的工程师了。这,不就是融入本土技术圈最酷、最地道的方式吗?


puppy

留学生新鲜事

322816 博客

讨论