技术笔记不只是保存几行命令。好的记录能让未来的自己理解:这个方法解决了什么问题,又在什么条件下成立。

下面是一份可以复用的文章结构。命令和代码都是演示,不代表某次真实项目经历。

1. 背景:先把问题说清楚

用几句话交代目标、预期和实际结果。

需要记录的内容可以回答的问题
目标想实现什么功能,或者弄懂什么概念?
预期正常情况下应该得到什么结果?
现象实际看到了什么?能否稳定复现?
环境使用了什么系统、工具和版本?

例如,要记录一个 Python 小实验,可以先确认解释器版本:

python3 --version

提示:版本信息会影响结论。记录实际输出,不要直接把示例版本当成自己的运行环境。

2. 过程:保留有价值的尝试

按顺序写出复现步骤,再解释关键选择。不必保存每一次重复操作,但要留下影响判断的信息。

可以使用这个小清单:

  • 最小复现步骤是什么?
  • 最先怀疑的原因是什么?
  • 哪条证据支持或否定了这个判断?
  • 最后修改了哪一处,为什么?

用一个小例子说明思路

假设要练习“去重并保留原顺序”,可以先写出输入和期望输出,再编写实现:

def unique_in_order(items):
    """去除重复元素,并保留第一次出现的顺序。"""
    seen = set()
    result = []

    for item in items:
        if item not in seen:
            seen.add(item)
            result.append(item)

    return result


numbers = [3, 1, 3, 2, 1]
print(unique_in_order(numbers))  # [3, 1, 2]

这段实现用集合判断元素是否出现过,用列表保留顺序。这里的元素必须能放入集合,例如数字、字符串;列表等不可哈希对象不能直接使用这个实现。

把限制一起写下来,结论才更完整。

3. 验证:区分“看起来对”和“检查过”

至少检查正常输入和明显的边界情况:

assert unique_in_order([3, 1, 3, 2, 1]) == [3, 1, 2]
assert unique_in_order([]) == []
assert unique_in_order([7, 7, 7]) == [7]
assert unique_in_order(["b", "a", "b"]) == ["b", "a"]

再记录测试结果、尚未覆盖的情形,以及是否有其他更合适的方案。

注意:几条断言只能验证这些具体例子,不能证明程序适用于所有输入。对于真实项目,还要结合实际需求继续检查。

4. 总结:留下可以复用的结论

收尾时,不妨回答下面四个问题:

  1. 这次真正弄明白了什么?
  2. 下次遇到类似问题,可以先检查什么?
  3. 方案有哪些限制或取舍?
  4. 还有什么问题值得继续研究?

如果参考了文档或其他文章,在结尾放上准确链接,方便日后追溯。比如这个例子可以继续阅读 Python 官方的集合类型说明。

可直接复用的大纲

## 背景与目标
想解决什么问题?预期和实际结果有什么不同?

## 环境与复现
使用了哪些版本?最小复现步骤是什么?

## 尝试与方案
做过哪些判断?为什么选择最终方案?

## 验证结果
检查了什么?哪些情况仍未验证?

## 总结与下一步
学到了什么?有哪些限制?接下来想研究什么?

## 参考资料
列出使用过的文档和文章链接。

结构是为了帮助表达。短小的笔记可以合并章节,复杂的主题可以拆成系列。能把问题和思路讲清楚,就已经很有价值。