《构建之法》

《构建之法》
初读邹欣老师的《构建之法》时,我正被课程设计的"学生成绩管理系统"折磨得焦头烂额。那时的我坚信"代码写得越复杂越厉害",甚至在SQL查询里嵌套三层子查询,只为炫耀刚学会的JOIN语法。直到系统演示时,辅导员指着屏幕上错乱的成绩表格问:"为什么删除重修记录时会连带清空选课数据?"我才意识到,那些被我奉为"技术巅峰"的复杂逻辑,不过是没搞懂需求的瞎折腾——这恰如书中所言:"工程师最大的傲慢,是误以为炫技能解决所有问题"。
书中"需求四象限"理论像一面镜子,照亮了我们组第一次做项目时的荒诞。当时我们照着《Java Web开发实战》的模板抄了个系统,却在用户调研时发现:
必要需求被忽略:班长需要批量导入Excel成绩,但我们只做了单条录入;
有害需求却留着:界面上花里胡哨的动态图表,让老教授的笔记本卡到死机。
后来在"课程互评系统"开发中,我们用2周时间泡在自习室观察同学们的操作习惯:发现学委们提交互评表时,总会反复核对"是否漏选课程"。于是我们在表单里加了"未选课程高亮提醒"功能,这个看似简单的改动,让数据提交错误率从41%降到了9%。这才明白,优秀的需求分析不是堆砌功能,而是像剥洋葱一样,看见用户抱怨背后未说出口的焦虑。
大一下学期的小组作业堪称"混乱灾难现场":我负责数据库设计,为了追求"第三范式"把表拆成12张,结果队友写Java代码时,光联表查询就写了200行;前端同学用Bootstrap抄了个漂亮界面,却没考虑下拉菜单在手机端的适配。直到读了书中TSP章节,我们在第二次项目中试行了"Scrum小冲刺":
每日10分钟站会:"我昨天完成了成绩查询接口,但SQL效率低"
燃尽图预警:当"删除功能"进度条连续3天不动时,立刻调整分工
迭代评审:每3天找室友当用户,对着原型图挑刺
最神奇的是代码规范的改变:起初大家各写各的命名风格,我坚持"驼峰法"(studentScore),队友偏用"下划线"(student_score),合并代码时光改命名就花了4小时。后来我们参照书中"代码即沟通"的理念,定下《命名公约》:实体类用名词(Course),方法用动词(queryScore),甚至为枚举值规定了"前缀+状态码"的格式。某次代码评审时,组长指着我写的"delCourse()"说:"删除操作应该用remove前缀,且需要日志记录"——这种"挑刺"反而让代码bug率下降了60%。
开发"实验室设备预约系统"时,我曾踩过一个深刻的坑:为了图快,把设备预约、借用、归还的逻辑全写在一个Servlet里,代码膨胀到800行。某次调试时发现,删除预约记录会误删借用记录,追查后才发现是两个功能共用了同一个数据库连接池对象。这让我想起书中"单一职责原则"的警示,后来用MVC模式重构时,把代码拆成:
Model层:Device.java(设备实体)、Booking.java(预约记录)
Controller层:BookingController.java(专门处理预约的CRUD)
Service层:DeviceService.java(封装设备状态更新逻辑)

拆分后最明显的变化是测试变简单了:以前测删除功能要模拟整个预约流程,现在可以直接调用BookingService的remove方法。单元测试覆盖率从20%提升到75%,连平时最嫌弃写注释的队友都主动在方法名里加了"withdrawal"后缀,让代码一看就懂。
上学期突然被老师要求用Spring Boot重构旧系统时,我对着文档啃了3天却连Hello World都跑不起来。直到想起书中"20小时快速学习法",我改变策略:

  1. 花2小时看官方教程搭环境,遇到报错直接查Stack Overflow
  2. 用5小时照着示例写"学生签到系统"的CRUD接口
  3. 每天花1小时刻意练习:第一天练MyBatis分页,第二天练Security权限控制
    最关键的是第3天遇到的"坑":前端传过来的日期格式总是解析错误,后来发现要在Controller里加@DateTimeFormat注解。这个细节课本里没写,但在实战中却成了必须掌握的技能。18天后,我不仅独立完成了系统重构,还意外发现Spring Boot的自动配置能帮我省去70%的XML配置——这让我真正相信,"学习加速度比知识储备更重要"。
    现在回头看第一次写的学生管理系统,那些为了复杂而复杂的SQL语句、满是魔法值的界面代码,像极了书中说的"幼稚工程师的自我感动"。但正是这些踩过的坑,让我读懂了《构建之法》里最朴素的道理:
    增删改查不是机械劳动,而是理解"数据流转背后的用户需求"
    团队协作不是各写各的代码,而是像拼乐高一样定义清晰的接口
    技术学习不是背API文档,而是用"20小时法则"逼自己动手踩坑
    当我现在为毕业设计的"校园二手交易平台"设计数据库时,不再执着于范式化的完美,而是先画用户旅程图:卖家发布商品时会不会嫌上传图片太麻烦?买家付款时能不能一键跳转支付宝?这些看似和CRUD无关的思考,恰恰是书中"软件=知识+服务"的最佳注解——原来真正的工程智慧,从来都藏在那些被我们忽略的"小细节"里。
posted @ 2025-04-30 23:17  我嘞牛牛  阅读(38)  评论(0)    收藏  举报