# 任务 1：Tasking 任务分解

## Tasking 的方法论

接下来我们会系统地讲解 Tasking 的方法论。

### Tasking - 任务描述

![](/files/-LqvN9WYt51shJPorFtg)

完成任务没有思路首先是因为我们对问题描述得不够清晰。很多人在思考问题的时候是用蛮力的，想不出来就使劲想，憋着不干别的，等着大脑里蹦出一个答案。这种做法是非常不可取的，尽管我们大脑的潜意识具有仅次于阿尔法 Go 的思考力，你也不能这么虐待它，好钢要用在刀刃上。 正如上图所示，很多人思考任务也就是一句话的任务描述，而一句话根本是不够清晰的，我们需要一些思维框架让问题更加清晰。

#### 清晰的思维是第一步，不能看到就不能思考

### 抽象：输入 & 输出

![](/files/-LqvN9W_tkHGvezwFTnk)

计算机程序可以简单的抽象为输入，处理和输出。所谓的处理，是处理过程的简称，也就是代码，它既可以是左边的结构化的代码块，也可以是右边封装好的函数。无论哪一种，都有输入输出。 这个思维框架就是很好的思维框架，既然程序是要考虑输入和输出的，而我们的任务就是写程序，那么自然也要考虑输入输出

### 使用 输入/输出 描述 Task

![](/files/-LqvN9WbrLb2V58w5Fvc)

回到之前的图，把输入输出加上，就变成了上面这个样子。 每个输入输出都有名字和数据结构。 就输入来说，如果是代码块，那么就是另一块代码创建某个变量，如果是函数，那可能就是参数。 就输出来说，如果是代码块，那么就是创建出来给别的代码块使用的变量，如果是函数，那可能就是返回值。 而不管哪一个，都是有名字和数据结构的。 往往输入的数据结构可以从前面的输出中找到，所以可以省略掉就不想了。

如果是面向对象的话，输出的 name 就不太重要了，重点是数据结构的类名。

### 一个典型的示例

请看如下示例，我们有 3 个函数，这也是描述我们任务的一种方式。

```bash
#1 函数a
输入：
    paramX: TypeX
输出：
    aValue: TypeA

#2 函数b
输入：
    paramY: TypeY
输出：
    bValue: TypeB

#3 函数c
输入：
    paramZ: TypeZ
输出：
    cValue: TypeC
```

![](/files/-LqvN9Wdhy2932zTEEE_)

唯一需要强调的就是穷尽了，我们思考问题的时候，需要把输入输出穷尽。在实际工作中需要和业务和产品尽可能地沟通了解清楚。 如果不把输入输出穷尽，和  森林里谁没有参加会议的问题一样，我们是无法想清楚问题的。

## 练习一

#### 使用任务的方法论分解来描述制作西红柿炒鸡蛋

* 拿一张白纸
* 进行粗粒度的任务拆分
* 对其中复杂一些的步骤进行进一步分解
* 检查和梳理所有任务的输入输出，确保穷举
* 检查所有任务，确保输入输出明确的情况下，任务独立

#### 使用任务的方法论分解来描述伊隆·马斯克的远大计划

* 对火星移民计划进行上述操作


---

# 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://jimmylv.gitbook.io/tdd-frontend/coding/01-marsrover/02-tasking.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.
