为什么技术探索与实践?一个前技术总监的碎碎念
上周五晚上十点半,我坐在空荡荡的办公室里,盯着屏幕上一行 Rust 编译器报错:cannot move out of borrowed content。那一刻,我真的想砸键盘——不是因为 Rust 多难,而是因为我明明已经提交了离职申请,却还在为一个“可能永远不会上线”的 side project 折腾到深夜。
对,你没看错,我已经从前东家裸辞了。在那个组干了快两年,从 Senior Engineer 干到技术总监,熬过无数个双11大促、凌晨三点的线上报警、还有产品经理那句万年不变的“这个需求很简单,明天能上线吗?”现在终于解脱了,准备搞点自己的事情。但奇怪的是,反而比上班时更爱折腾技术了——尤其是最近沉迷 Rust,感觉像发现了新大陆。
所以今天不聊创业计划,也不灌鸡汤,就想认真回答一个问题:为什么我们(尤其是老油条程序员)还要花时间去探索和实践新技术?
不是因为 KPI,是因为痛
先说说我为啥开始研究 Rust。
去年双11前夕,我们团队负责的核心交易服务突然 CPU 打满,接口延迟飙到 2s+。运维兄弟半夜把我从被窝里薅起来,查了一圈发现是 Go 写的某个中间件在高并发下 GC 停顿太狠。最后临时方案是加机器 + 降级非核心功能,勉强扛过去了。
但问题没解决。事后复盘会上,CTO 问:“有没有可能用更底层、更可控的语言重构关键路径?” 有人提 C++,我摇头——内存安全太难保证;有人说 Java,但 JVM 的 GC 还是绕不开;最后我说:“要不试试 Rust?”
全场沉默。产品经理小声嘀咕:“Rust 是不是那个连 Hello World 都写不对的语言?”
我苦笑。但就是那次事故,让我意识到:当你的产品做到一定规模,技术债会以指数级速度反噬你。而“稳定”、“高性能”、“低资源消耗”这些词,不再是 PPT 里的漂亮话,而是真金白银的服务器账单和用户流失率。
于是,我开始偷偷在业余时间啃《Rust 权威指南》。一开始被所有权、生命周期折磨得怀疑人生,但越学越上头——这语言简直是为系统编程量身定制的:零成本抽象、无 GC、内存安全、并发无数据竞争……最关键的是,它强迫你写出更严谨的代码。
技术探索不是炫技,是为了“综合”解决问题
很多人觉得,探索新技术就是堆砌 buzzword,或者为了跳槽简历好看。但在我眼里,真正的技术探索,是为了提升“综合”解决问题的能力。
什么叫“综合”?举个例子:
我们有个内部日志采集 Agent,原来用 Python 写的,开发快,但资源占用高,每台机器跑一个就吃掉 200MB 内存。运维天天抱怨:“你们开发是不是把笔记本当服务器用?”
如果只从“产品”角度想,可能直接说:“换 Go 吧,轻量又快。”
但如果从“综合”视角看,就得考虑:
- 部署复杂度(是否依赖运行时)
- 跨平台支持(Linux/Windows/macOS)
- 安全性(会不会被注入恶意脚本)
- 维护成本(团队是否熟悉)
- 未来扩展性(比如要不要支持 WASM)
最后我们决定用 Rust 重写。虽然学习曲线陡,但好处显而易见:
| 维度 | Python 版 | Rust 版 |
|---|---|---|
| 内存占用 | ~200MB | ~8MB |
| 启动时间 | 1.2s | 0.03s |
| 二进制大小 | 依赖解释器 | 单文件 5MB |
| 线程安全 | 需手动加锁 | 编译器保证 |
| 跨平台 | 需安装环境 | cargo build --target 直接出各平台可执行文件 |
最爽的是,部署时运维大哥瞪大眼睛:“这就完了?一个文件扔进去就能跑?不用装 Python?”
那一刻,我觉得值了。
实践中的坑:别信教程,信日志
当然,过程没那么顺利。Rust 的编译器虽然严格,但也救了我好几次。
比如写一个异步日志刷盘模块时,我一开始图快用了 Arc<Mutex<Vec<Log>>>,结果压测时发现性能瓶颈在锁竞争。后来改用 tokio::sync::mpsc 通道 + 单消费者写入,QPS 从 5k 提升到 40k。
关键代码长这样:
use tokio::sync::mpsc;
// 创建无界通道(实际项目建议用有界)
let (tx, mut rx) = mpsc::unbounded_channel::<LogEntry>();
// 生产者:多线程发日志
tokio::spawn(async move {
while let Some(log) = get_next_log().await {
let _ = tx.send(log); // 忽略错误(实际应处理)
}
});
// 消费者:单线程批量写入
tokio::spawn(async move {
let mut buffer = Vec::with_capacity(1000);
loop {
tokio::time::sleep(Duration::from_millis(10)).await; // 每10ms刷一次
while let Ok(log) = rx.try_recv() {
buffer.push(log);
if buffer.len() >= 1000 { break; }
}
if !buffer.is_empty() {
write_to_disk(&buffer).await; // 异步写磁盘
buffer.clear();
}
}
});
这段代码看似简单,但踩过几个坑:
- 一开始用
try_recv()在select!里轮询,结果 CPU 占用 100% - 后来改用
recv()阻塞等待,但会导致刷盘延迟不可控 - 最终折中:定时主动拉取 + 批量处理
这就是实践的价值:文档不会告诉你这些细节,只有线上跑过才知道。
技术探索 ≠ 脱离产品
有些工程师容易陷入“技术洁癖”——觉得只要用最新最酷的技术就行,管它能不能落地。但我干了这么多年技术管理,深知一点:脱离产品的技术探索,就是自嗨。
我们曾有个同事,非要用 Haskell 重写配置中心,理由是“类型系统更安全”。结果呢?团队没人会维护,CI/CD 流水线搞不定,最后上线三天就回滚了。产品经理气得在群里发了个“???”表情包。
所以,我在推动 Rust 试点时,特别注意三点:
- 小范围验证:先选一个边缘但重要的组件(比如日志 Agent),不影响主链路
- 可回滚设计:保留旧版本切换开关,出问题秒切回去
- 团队共建:组织每周 Rust 小课堂,让感兴趣的人一起学,避免知识孤岛
最终,这个 Agent 不仅上线了,还被推广到其他 5 个业务线。更意外的是,有位测试同学主动学 Rust,写了个自动化校验工具,帮我们提前发现了两个边界 case。
离职后,我反而更爱写代码了
说回开头那个周五晚上。我折腾 Rust,不是为了找工作(已经裸辞了),也不是为了融资(还没到那步)。纯粹是因为——我喜欢那种“用技术把问题干掉”的爽感。
在大厂待久了,容易变成“流程人”:PRD 评审、排期、站会、复盘……写代码的时间越来越少。但技术探索和实践,能让我找回做程序员最初的快乐:面对一个难题,查资料、试方案、debug、优化,直到搞定。
而且,创业之后你会发现,你的“综合”能力决定了你能走多远。
你不仅要懂技术,还要理解产品逻辑、用户痛点、成本结构。比如我现在做的一个 SaaS 工具,既要保证 API 响应快(技术),又要控制云成本(商业),还要让 UI 足够傻瓜(产品)。这时候,Rust 写的高性能后端 + WASM 前端计算,就成了一个“综合”解法。
最后几句真心话
如果你还在职场,别觉得“学新技术没用”。老板可能只看 OKR,但你的技术视野决定了你能解决什么 level 的问题。
如果你已经自由了,更别停止折腾。技术人的护城河,从来不是某个框架的熟练度,而是持续探索、动手实践、综合权衡的能力。
对了,上周那个 Rust Bug 最后怎么解决的?
我把 &T 改成了 Cow<T>,完美。
果然,Rust 教会我的不仅是内存安全,还有——别想偷懒,该拷贝时就拷贝。
(完)
P.S. 有同样在折腾 Rust 的朋友吗?求交流!我建了个小群,纯技术唠嗑,不卖课不割韭菜。

评论 0