手写代码与AI共舞:我的技术探索日常

堆上种月亮
2025-12-25 10:21
阅读 552

上周五晚上十点,我正坐在成都家里阳台上,左手咖啡右手键盘,试图用ChatGPT帮我重构一个老旧的JavaScript模块。突然弹窗提示:“您的会话已达到今日使用上限。” 我叹了口气——这已经是本周第三次了。作为一位嘴上说着“坚持手写代码”的老派程序员,身体却很诚实地重度依赖AI辅助开发,这种矛盾感简直成了我日常的背景音。

坐标成都,节奏舒服,但项目 deadline 从不讲情面。去年双11前夕,我们组临时接了个紧急需求:给一个三年没动过的管理后台加个实时数据看板。前端用的是原生 JavaScript + jQuery 混搭(别问,问就是历史遗留),而我那会儿刚更新完简历,正准备投几家新公司,结果被产品经理一句“你最熟这块”拉回火线。

说实话,那一刻我真的想砸电脑。


简历写得再漂亮,也得能跑通代码

很多同行可能都有类似经历:简历上写着“精通现代前端工程化”、“熟练掌握 React/Vue 生态”,结果一进公司,接手的却是十年前写的 JS 脚本,变量名全是 a, b, tmp123,注释比代码还少,更别提什么可读性、可维护性了。

我一度觉得自己的“代码人生”充满了讽刺。明明崇尚清晰架构、模块化设计,却天天在屎山里打滚。直到某天凌晨三点,我看着满屏的 var 和全局函数,突然意识到:技术探索不是为了炫技,而是为了解决真实问题

于是,我开始尝试把 AI 工具当成“结对编程”的搭档——虽然它不会递咖啡,但至少能帮我快速生成骨架代码、解释晦涩的报错、甚至重构命名。

举个例子,有段逻辑是这样的:

function calc(x, y, z) {
  if (z == 1) {
    return x * 0.8 + y;
  } else if (z == 2) {
    return x * 0.9 - y * 0.5;
  }
  return x + y;
}

这玩意儿连个函数名都看不出用途。我把这段代码扔给 Claude,附上一句:“这是计算订单折扣的,但命名太烂,请重构成可读版本,并加 JSDoc。”

不到十秒,它回了:

/**
 * 根据客户等级计算订单最终金额
 * @param {number} basePrice - 基础价格
 * @param {number} shippingFee - 运费
 * @param {1|2|3} customerTier - 客户等级:1-普通,2-VIP,3-黑卡
 * @returns {number} 最终应付金额
 */
function calculateFinalOrderAmount(basePrice, shippingFee, customerTier) {
  switch (customerTier) {
    case 1:
      return basePrice * 0.8 + shippingFee;
    case 2:
      return basePrice * 0.9 - shippingFee * 0.5;
    default:
      return basePrice + shippingFee;
  }
}

虽然细节还需要人工校验(比如黑卡客户居然没有优惠?产品经理背锅!),但至少命名和结构清晰多了。AI 不是替代思考,而是放大效率——这是我用血泪换来的认知。


可维护性不是口号,是生存技能

在成都这种“巴适得板”的城市,很多人以为程序员可以慢悠悠敲代码。但现实是,一旦系统出问题,半夜被 PagerDuty 叫醒的滋味一点都不安逸。

去年我们线上有个 JS 错误导致用户无法提交表单,监控告警响了半小时才有人响应。事后复盘发现,问题出在一个嵌套五层的回调里,某个异步操作没做错误处理。而那段代码,居然是我两年前写的。

自闭了三天后,我下定决心推行几个“土办法”最佳实践:

1. 命名即文档

变量名不能偷懒。userListdata 好,filteredActiveUsersres 强一百倍。AI 能帮你想名字,但判断是否准确还得靠人。

2. 小函数,单一职责

一个函数只干一件事。超过 20 行?考虑拆。有多个 if/else 分支?抽成策略模式。我甚至写了个 ESLint 插件,强制限制函数复杂度。

3. 日志比注释有用

与其写“这里处理登录逻辑”,不如直接打日志:

console.log('[Auth] Attempting login with email:', email);

上线后排查问题快如闪电。

4. 自动化重构

借助 VS Code 的 AI 插件(比如 GitHub Copilot 或 Continue.dev),选中一段代码,按 Ctrl+Shift+P 输入“Refactor this”,经常能获得意想不到的优化建议。

当然,这些都不是银弹。有一次我让 AI 把一段 jQuery 代码转成 Vue 3 Composition API,结果它把事件绑定搞错了,导致点击失效。测试同事当场发来灵魂质问:“你改了啥?怎么点不动了?” ——那一刻,我深刻体会到:AI 是副驾驶,方向盘还在你手里


技术探索的边界:别为工具迷失目标

最近面试了几位候选人,简历上清一色写着“熟悉 AI 编程”、“Copilot 高效开发者”。我问:“如果 Copilot 突然不能用了,你还能写出合格的代码吗?” 有人愣住,有人笑说“不至于吧”。

其实我想说的是:工具再强,也不能替代对问题本质的理解

我在团队内部做过一个小实验:两组人实现同一个功能,一组纯手写,一组允许用 AI 辅助。结果发现,手写组虽然慢,但代码结构更合理;AI 组快,但容易引入冗余或不符合业务语境的抽象

比如有个需求是“根据用户地域动态加载配置”,AI 直接给了个通用的 loadConfigByRegion(region) 函数,但忽略了我们系统里“地域”其实是通过 cookie 里的 city_code 字段传递的。这种上下文,AI 不知道,只有长期泡在业务里的开发者才懂。

所以,我的最佳实践是:

  • 用 AI 快速生成原型或样板代码
  • 人工介入做业务对齐和逻辑校验
  • 最终代码必须经过 Code Review,哪怕只有自己 Review

写在最后:代码人生,贵在平衡

有人说,未来的程序员要么会用 AI,要么被淘汰。我不完全同意。我觉得,真正会被淘汰的,是那些既不用 AI 提效,又不提升工程素养的人

我现在依然坚持手写核心逻辑——因为只有亲手敲过,才知道哪里会疼。但我也毫不避讳地用 Claude 帮我写单元测试、生成 API 文档、甚至润色 commit message。这种“保守派+AI辅助”的混合模式,反而让我在成都这座慢城里,跑出了自己的节奏。

上周,那个双11的看板项目终于上线了。性能达标,bug 清零,产品经理请我们吃了顿火锅。席间他开玩笑:“你简历是不是该更新了?‘精通屎山拯救术’?”

我笑着回他:“不,就写‘擅长在传统 JS 项目中引入现代化实践,兼顾可维护性与交付效率’——听起来高大上,实则全是血泪。”

技术探索没有标准答案,但实践永远是最好的老师。无论是手写还是 AI 辅助,只要代码能跑、能读、能改,那就是好代码。

毕竟,我们的目标不是写出“看起来很酷”的简历,而是过好自己的代码人生。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝