Skip to content

程序员工作流

Obsidian 是开发者的理想知识管理工具,可以帮助你管理技术笔记、代码片段、项目文档和学习路径。本文介绍一套完整的程序员工作流。

核心理念

程序员使用的特点

  • 技术更新快:需要持续学习和记录
  • 代码复用:需要代码片段管理
  • 项目管理:多项目并行需要追踪
  • 文档需求:API 文档、架构设计等

推荐组织方式

开发者仓库/
├── 00-Inbox/              # 快速捕获
├── 10-技术栈/
│   ├── 前端/
│   │   ├── React/
│   │   ├── Vue/
│   │   └── CSS/
│   ├── 后端/
│   │   ├── Node.js/
│   │   ├── Python/
│   │   └── Go/
│   ├── 数据库/
│   └── DevOps/
├── 20-项目/
│   ├── 项目A/
│   └── 项目B/
├── 30-代码片段/
│   ├── JavaScript/
│   ├── Python/
│   └── Shell/
├── 40-学习路径/
│   ├── 2024/
│   └── 2025/
├── 50-日记/
└── templates/

技术笔记系统

技术笔记模板

markdown
---
title: <% tp.system.prompt("技术名称") %> - 学习笔记
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
tags:
  - 技术笔记
  - <% tp.system.prompt("技术分类", "前端/后端/数据库/DevOps") %>
level: <% tp.system.suggester(["入门", "进阶", "精通"], ["入门", "进阶", "精通"]) %>
---

# <% tp.file.title %>

## 概述

### 什么是 <% tp.file.title.split(" - ")[0] %>?

<% tp.file.cursor() %>

## 核心概念

### 概念1

解释...

### 概念2

解释...

## 快速开始

### 安装

```bash
# 安装命令

Hello World

javascript
// 代码示例
console.log("Hello World");

进阶用法

1. 功能一

javascript
// 代码示例

2. 功能二

javascript
// 代码示例

最佳实践

常见问题

问题1

解决方案

问题2

解决方案

相关资源

  • 官方文档:
  • GitHub:
  • 教程:

相关笔记

  • [[]]

### 技术栈索引(MOC)

```markdown
# React MOC

## 基础概念

- [[React-组件基础]]
- [[React-Props与State]]
- [[React-生命周期]]
- [[React-Hooks入门]]

## 进阶内容

- [[React-自定义Hooks]]
- [[React-性能优化]]
- [[React-状态管理]]
- [[React-路由管理]]

## 实战项目

- [[React项目-TodoApp]]
- [[React项目-博客系统]]
- [[React项目-后台管理]]

## 常见问题

- [[React常见问题汇总]]

## 学习资源

- 官方文档:https://react.dev
- 最佳实践:[[React最佳实践]]

## 代码片段

```dataview
TABLE
  description as "描述",
  file.ctime as "创建时间"
FROM "30-代码片段/JavaScript"
WHERE contains(tags, "react")
SORT file.ctime DESC

### 问题解决笔记

记录 Bug 解决方案:

```markdown
---
title: 解决 <% tp.system.prompt("问题简述") %>
date: <% tp.date.now("YYYY-MM-DD HH:mm") %>
tags:
  - 问题解决
  - <% tp.system.prompt("技术标签") %>
solved: true
---

# <% tp.file.title %>

## 问题描述

### 错误信息

<% tp.system.prompt("错误信息") %>


### 复现场景

1.
2.
3.

## 环境信息

| 项目 | 版本 |
|------|------|
| 操作系统 | |
| Node.js | |
| 相关包 | |

## 排查过程

### 尝试1

结果:

### 尝试2

结果:

## 解决方案

```javascript
// 解决代码

原因分析

预防措施

相关链接

  • 参考:
  • 相关 Issue:

## 代码片段管理

### 代码片段模板

```markdown
---
title: <% tp.system.prompt("片段名称") %>
language: <% tp.system.suggester(["JavaScript", "Python", "Go", "Shell", "SQL"], ["JavaScript", "Python", "Go", "Shell", "SQL"]) %>
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
tags:
  - 代码片段
  - <% tp.frontmatter.language %>
---

# <% tp.file.title %>

## 描述

<% tp.system.prompt("简要描述此代码片段的用途") %>

## 代码

```<% tp.frontmatter.language.toLowerCase() %>
<% tp.system.prompt("代码内容") %>

使用场景

参数说明

参数类型说明

示例

javascript
// 使用示例

注意事项


### 常用代码片段示例

**防抖函数**:

```javascript
function debounce(fn, delay = 300) {
  let timer = null;
  return function (...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

深拷贝

javascript
function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') return obj;
  if (obj instanceof Date) return new Date(obj);
  if (obj instanceof Array) return obj.map(item => deepClone(item));

  const clone = {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key]);
    }
  }
  return clone;
}

格式化日期

javascript
function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
  const d = new Date(date);
  const map = {
    YYYY: d.getFullYear(),
    MM: String(d.getMonth() + 1).padStart(2, '0'),
    DD: String(d.getDate()).padStart(2, '0'),
    HH: String(d.getHours()).padStart(2, '0'),
    mm: String(d.getMinutes()).padStart(2, '0'),
    ss: String(d.getSeconds()).padStart(2, '0'),
  };
  return format.replace(/YYYY|MM|DD|HH|mm|ss/g, match => map[match]);
}

代码片段搜索

使用 Dataview 快速查找:

dataview
TABLE
  language as "语言",
  description as "描述",
  file.ctime as "创建时间"
FROM "30-代码片段"
WHERE contains(file.content, "<% tp.system.prompt('搜索关键词') %>")
SORT file.ctime DESC

项目管理工作流

项目笔记模板

markdown
---
title: <% tp.system.prompt("项目名称") %>
status: <% tp.system.suggester(["规划中", "开发中", "测试中", "已上线", "维护中"], ["规划中", "开发中", "测试中", "已上线", "维护中"]) %>
tech_stack: [<% tp.system.prompt("技术栈") %>]
created: <% tp.date.now("YYYY-MM-DD") %>
updated: <% tp.date.now("YYYY-MM-DD") %>
priority: <% tp.system.suggester(["P0-紧急", "P1-高", "P2-中", "P3-低"], ["P0", "P1", "P2", "P3"]) %>
---

# <% tp.file.title %>

## 项目概览

| 项目 | 信息 |
|------|------|
| 状态 | <% tp.frontmatter.status %> |
| 优先级 | <% tp.frontmatter.priority %> |
| 技术栈 | <% tp.frontmatter.tech_stack %> |

## 技术架构

```mermaid
graph TD
    A[前端] --> B[API 网关]
    B --> C[后端服务]
    C --> D[数据库]

开发任务

进行中

tasks
not done
path includes 20-项目/<% tp.file.title %>
heading includes 进行中

待办

  • [ ]

已完成

  • [x]

API 文档

接口1

项目说明
URLGET /api/xxx
参数id: string
返回{ code: 0, data: {} }

数据库设计

表1

字段类型说明
idINT主键
nameVARCHAR(255)名称

部署记录

日期版本说明
<% tp.date.now("YYYY-MM-DD") %>v1.0.0初始版本

问题记录

  • [[问题-xxx]]

相关文档

  • [[]]

### Sprint 计划模板

```markdown
---
title: Sprint <% tp.system.prompt("Sprint编号") %> - <% tp.system.prompt("Sprint名称") %>
start: <% tp.date.now("YYYY-MM-DD") %>
end: <% tp.date.now("YYYY-MM-DD", 13) %>
---

# <% tp.file.title %>

## Sprint 信息

| 项目 | 内容 |
|------|------|
| 开始日期 | <% tp.frontmatter.start %> |
| 结束日期 | <% tp.frontmatter.end %> |
| 工作日 | 10天 |

## Sprint 目标

1.
2.
3.

## 任务看板

### 待办 (To Do)

- [ ]

### 进行中 (In Progress)

- [ ]

### 代码审查 (Code Review)

- [ ]

### 测试中 (Testing)

- [ ]

### 已完成 (Done)

- [x]

## 每日站会记录

### Day 1 - <% tp.date.now("YYYY-MM-DD") %>

**昨日完成**:

**今日计划**:

**阻碍问题**:

## Sprint 评审

### 完成情况

| 任务 | 状态 | 说明 |
|------|------|------|
| | | |

### 演示内容

1.
2.

## Sprint 回顾

### 做得好的

-
-

### 需要改进的

-
-

### 行动项

- [ ]

学习路径追踪

技术学习计划

markdown
---
title: 2024年学习计划
year: 2024
---

# 2024年技术学习计划

## 学习目标

### Q1 (1-3月)

- [ ] 深入学习 React 18 新特性
- [ ] 掌握 TypeScript 高级类型
- [ ] 学习 Docker 容器化部署

### Q2 (4-6月)

- [ ] 学习 Node.js 性能优化
- [ ] 掌握 Kubernetes 基础
- [ ] 学习 GraphQL API 设计

### Q3 (7-9月)

- [ ] 学习 Go 语言基础
- [ ] 掌握微服务架构设计
- [ ] 学习分布式系统

### Q4 (10-12月)

- [ ] 深入学习系统设计
- [ ] 掌握云原生技术
- [ ] 完成个人项目

## 学习进度

```dataview
TABLE
  status as "状态",
  progress as "进度"
FROM "40-学习路径/2024"
WHERE status
SORT file.ctime DESC

已完成

dataview
TABLE
  completed_date as "完成日期"
FROM "40-学习路径/2024"
WHERE status = "completed"
SORT completed_date DESC

学习统计

指标数值
学习笔记数45
代码片段数120
完成课程8
学习时长200h

### 学习资源笔记

```markdown
---
title: <% tp.system.prompt("资源名称") %>
type: <% tp.system.suggester(["书籍", "视频", "文章", "课程"], ["书籍", "视频", "文章", "课程"]) %>
status: <% tp.system.suggester(["待学习", "学习中", "已完成"], ["待学习", "学习中", "已完成"]) %>
rating: <% tp.system.suggester(["⭐", "⭐⭐", "⭐⭐⭐", "⭐⭐⭐⭐", "⭐⭐⭐⭐⭐"], [1, 2, 3, 4, 5]) %>
link:
---

# <% tp.file.title %>

## 基本信息

| 项目 | 内容 |
|------|------|
| 类型 | <% tp.frontmatter.type %> |
| 状态 | <% tp.frontmatter.status %> |
| 评分 | <% tp.frontmatter.rating %> ⭐ |
| 链接 | [<% tp.frontmatter.type %>]() |

## 内容概述

<% tp.file.cursor() %>

## 核心要点

1.
2.
3.

## 实践笔记

## 推荐理由

## 相关笔记

- [[]]

日常开发流程

每日启动流程

yaml
早晨流程:
  1. 打开今日日记
  2. 查看今日任务
  3. 回顾昨日进度
  4. 规划今日开发任务
  5. 查看代码审查请求

开发日记模板:

markdown
---
title: <% tp.date.now("YYYY-MM-DD") %> 开发日记
tags:
  - 开发日记
---

# <% tp.date.now("YYYY年MM月DD日 dddd") %>

## 今日任务

| 优先级 | 任务 | 项目 | 状态 |
|--------|------|------|------|
| P0 | | | [ ] |
| P1 | | | [ ] |

## 开发记录

<% tp.file.cursor() %>

## 学到的内容

### 技术点

-

### 最佳实践

-

## 遇到的问题

| 问题 | 解决方案 | 相关笔记 |
|------|----------|----------|
| | | [[]] |

## Code Review

- PR #123:
- PR #124:

## 明日计划

-

代码审查清单

markdown
# Code Review 清单

## 功能检查

- [ ] 功能是否符合需求
- [ ] 边界条件处理
- [ ] 错误处理完善
- [ ] 日志记录合理

## 代码质量

- [ ] 命名规范
- [ ] 代码结构清晰
- [ ] 无重复代码
- [ ] 注释充分

## 性能考虑

- [ ] 数据库查询优化
- [ ] 缓存使用合理
- [ ] 内存管理

## 安全检查

- [ ] 输入验证
- [ ] SQL 注入防护
- [ ] XSS 防护
- [ ] 敏感数据处理

## 测试覆盖

- [ ] 单元测试
- [ ] 集成测试
- [ ] 边界测试

推荐插件组合

开发效率

插件用途
Templater自动化模板
Dataview数据查询统计
Tasks任务管理
QuickAdd快速添加

代码相关

插件用途
Code Styler代码样式美化
Execute Code运行代码块
Advanced Tables表格增强
Editor Syntax语法高亮

可视化

插件用途
Mermaid流程图
Excalidraw绘图
Mind Map思维导图
Kanban看板

Git 集成

插件用途
Obsidian GitGit 同步
Version History版本历史

自动化工作流

自动更新修改时间

在 Templater 启动模板中:

javascript
<%*
// 更新当前文件的修改时间
if (tp.file.title) {
  let content = tp.file.content;
  let newContent = content.replace(
    /updated: .*/,
    `updated: ${tp.date.now("YYYY-MM-DD")}`
  );
  if (content !== newContent) {
    await tp.file.cursor_append("");
  }
}
%>

自动生成周报

javascript
<%*
// 获取本周所有日记
let files = app.vault.getMarkdownFiles()
  .filter(f => f.path.startsWith("50-日记/"))
  .filter(f => {
    let fileDate = moment(f.basename);
    return fileDate.isBetween(
      moment().startOf('week'),
      moment().endOf('week')
    );
  });

// 生成周报内容
tR += `## 本周完成\n\n`;
for (let file of files) {
  tR += `- [[${file.basename}]]\n`;
}
%>

相关内容

最后更新:2026年2月22日编辑此页反馈问题