# 课程目标&安排

重构实战训练营。

## 零、课程需求背景综述

重构是每个开发者都必须掌握的技能。无论是重构刚刚写下的代码，或是对付复杂的遗留系统，在数字化竞争日益激烈、对软件响应力要求日益提高的今天，具备“在代码写好之后修改它”的能力至关重要。重构技艺里的“坏味道列表“，详细备至的“重构手法”，是今天软件开发者需要系统掌握并且不断练习的必备匠艺。

优秀的开发者很少花大段的时间专门重构，从不让系统停摆几天、“重构”后才能勉强重新工作。他们懂得重构是行为保持的，他们会在“十六字心法”的指导下工作，用科学而有纪律的重构手法保证重构过程代码随时可提交、可运行；他们懂得设定重构目标，始于“坏味道”、终于“坏味道”被修复，每天都能进行许多次小而美的重构；他们懂得要小步前进，快速反馈，每做一点小的（2、3 行代码的）修改就运行测试，出了错就回滚重做，从而时刻保证系统行为保持不变，维护他们的专业承诺。

如果你：

* 只是隐约地知道“重构”的概念，也依靠本能开展过一些重构，但不知道重构有科学的思路和纪律的手法；
* 依靠灵感，但还不太了解什么是“坏味道”、不知道用于指导重构开展的“坏味道列表”有多少条、每一条用什么手法对应；或者：
* 重构到哪里算哪里，不会把握范围，无法做到随时停止、随时提交代码，也不知道有这样的技巧；
* 重构过程总是战战兢兢，不知道有没有搞坏系统，还不太了解什么是行为保持的、有纪律性的重构手法；
* 甚至还不太清楚 IDE 有专门的快捷键，帮助我们更快、更安全地把心法和手法变成实在的质量提升；
* 有技术追求，渴望写（重构）出高质量、可维护的代码，也想成为一个优秀的软件开发者；

那么我强烈推荐你来参加这个实战训练营，跟广大敏捷实践者一起，掌握原汁原味的手法和重构精髓，为日常工作带来实实在在的质量和效率双提升，同时成为更好的开发者。

## 一、训练目标

**改进错误的重构方式**，学会在测试安全网的保护下，频繁运行测试，小步修改，随时回滚，而非在没有测试保护的情况下本能地进行大规模“重写”。

**养成正确的重构意识**，遗留代码清理非一日之功，摈弃“一次做完、做完一周”的想法，而是每天花小段时间清理、持续改善代码质量。

**掌握科学的重构思路**，学会以**坏味道驱动**开展重构，避免漫无目的、没有目标地开展工作，陷入停不下来又无法回退的尴尬境地。

**行为保持的重构手法**，掌握行为保持的十六字心法，通过练习掌握有纪律的重构手法和步骤，具备随时停止、每分钟都能保持系统行为不变的安全重构能力。

## 二、实战营适用人群

1. 具备初级开发基础（前后端均可），可以理解基本的 Java 或 JavaScript 语言；
2. 工作 1-3 年，希望掌握原汁原味的重构心法，脱颖而出的新人；
3. 工作 3-5 年，希望突破技术瓶颈，跳槽一线大厂的进阶程序员；
4. 技术 leader，想整体提高团队效率和代码质量，完成质的飞跃。

## 三、完成实战你将能

1. 掌握安全开展重构的“十六字心法”，在重构过程时刻保持系统行为不变
2. 养成重构习惯，能在 5 分钟内完成一次重构，不断提升项目质量
3. 掌握 20 余种常见的重构手法
4. 掌握科学的“坏味道驱动”重构方法
5. 掌握重构快捷键，掌握组合运用重构手法完成更大重构的技能

## 四、学习周期

学习周期：28 天。

| 总时长 | 项目 1 单位转换 | 项目 2 镶金玫瑰 | 项目 3 Bugszero | 项目 4 对象健身操 |
| :-: | :-------: | :-------: | :-----------: | :--------: |
| 28h |     5h    |     8h    |       9h      |     6h     |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ethan-lin.gitbook.io/refactoring/goals.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
