编写程序,统计为了名利开展的任务和出于热爱开展的任务,对比两者的创意持久度。

发布时间:2026/7/26 18:36:59

编写程序,统计为了名利开展的任务和出于热爱开展的任务,对比两者的创意持久度。 MotiveTrack — 动机类型与创意持久度追踪系统三年全栈工程实践 × 自我决定论SDT× 创造力研究零营销 · 纯工具 · 可审计 · 本地运行一、实际应用场景描述你在做一个 side project- 场景 A为了简历好看、涨薪、融资硬着头皮啃一个你并不喜欢的技术栈- 场景 B纯粹因为好奇凌晨两点还在调一个动画效果没人逼你也没人给你钱三个月后你回头看- A 类任务文档写了一半就停了代码堆满 TODO甚至不想打开那个目录- B 类任务虽然没商业化但你迭代了十几个版本还主动分享给了朋友问题来了名利的驱动和热爱的驱动在「创意持久度」上到底差多少我们能不能用数据而不是感觉来回答这个问题MotiveTrack 就是为此而生的工程化工具 —— 它不是在评判动机好坏而是客观量化两类动机下的行为持续性差异。二、引入痛点痛点 本质问题 本工具解法动机混淆 分不清自己是“想要结果”还是“享受过程” 双维度动机显式建模坚持靠意志力 用自控力硬撑外在动机任务 识别高流失风险任务创意产出不可持续 热情来得快去得更快 持久度指标量化对比复盘只记结果 只看 KPI不看过程中的心理体验 记录动机类型 主观体验决策缺乏数据 “做喜欢的事”只是鸡汤 用留存率、半衰期、衰减系数说话三、核心逻辑讲解理论基础工程化映射1. 自我决定论Self-Determination Theory- 外在动机外部奖励、评价、地位名利驱动- 内在动机兴趣、享受、价值观契合热爱驱动- 假设内在动机 → 更高的坚持性、创造力、幸福感2. 创意持久度Creative Persistence- 不是“有没有做完”- 而是活跃天数 / 总跨度天数、衰减速度、中断次数核心算法逻辑记录任务↓标注动机类型外在 / 内在 / 混合↓每次工作后记录时长 主观投入度 是否产生新想法↓计算三类指标• 基础留存率Raw Persistence• 加权持久度Quality-Adjusted• 衰减系数Decay Rate↓对比两类动机的统计差异↓输出风险预警 动机优化建议关键指标定义去玄学指标 公式 含义活跃天数比例活跃天数 / (最后一天 - 第一天) 真实坚持程度主观投入均值Σ投入度 / 记录次数 心流质量创意产出密度新想法数量 / 总时长 单位时间的创造力衰减系数 线性回归斜率 热情下降速度负值越大越危险半衰期 投入度降到 50% 所需天数 动机寿命四、代码模块化v2 标准 · 工程级目录结构严格分层motive_track/├── main.py # 入口层CLI Application 容器├── config.py # 配置层常量、词表、阈值│├── models/ # 数据模型层dataclass│ ├── __init__.py│ ├── enums.py # 枚举动机类型、风险等级│ ├── task.py # Task 模型任务本体 校验│ ├── work_log.py # WorkLog 模型单次工作记录│ └── persistence_metrics.py# 持久度指标计算结果│├── storage/ # 持久化层Repository 模式│ ├── __init__.py│ ├── base_store.py # 抽象基类│ ├── json_store.py # JSON 存储实现│ ├── backup_manager.py # 原子写入 自动备份│ └── query_builder.py # 链式查询构建器│├── services/ # 业务服务层单一职责│ ├── __init__.py│ ├── recorder_service.py # 任务创建 日志记录│ ├── analyzer_service.py # 持久度计算 统计对比│ ├── risk_detector.py # 风险识别 预警│ ├── insight_generator.py # 洞见文本生成│ └── report_service.py # 报告聚合 导出│├── utils/ # 工具层纯函数 · 无状态│ ├── __init__.py│ ├── cli_helper.py # 终端交互、表格、颜色│ ├── date_calculator.py # 日期差、活跃天数计算│ ├── statistics.py # 均值、回归、半衰期计算│ └── validator.py # 输入校验、业务规则校验│├── README.md├── USAGE.md├── CHEATSHEET.md└── requirements.txt # 仅 typing_extensions可选核心模块代码示例精简版 · 保留工程思想1️⃣ 数据模型models/task.pyTask 领域模型职责封装任务数据 业务校验 序列化不关心存储方式不依赖任何 Servicefrom dataclasses import dataclass, fieldfrom datetime import datefrom typing import Listfrom .enums import MotivationTypedataclass(frozenTrue)class Task:任务实体不可变对象设计原则- frozenTrue防止意外修改历史数据- 所有校验在 __post_init__ 中完成- 不依赖外部服务可独立测试task_id: strname: strmotivation_type: MotivationTypecreated_at: date field(default_factorydate.today)external_reward: str | None None # 外在奖励描述tags: List[str] field(default_factorylist)def __post_init__(self):if not self.task_id.strip():raise ValueError(task_id 不能为空)if not self.name.strip():raise ValueError(任务名称不能为空)if (self.motivation_type MotivationType.EXTERNALand not self.external_reward):raise ValueError(外在动机任务必须填写外部奖励)def to_dict(self) - dict:序列化为 JSON 友好格式return {task_id: self.task_id,name: self.name,motivation_type: self.motivation_type.value,created_at: self.created_at.isoformat(),external_reward: self.external_reward,tags: self.tags,}classmethoddef from_dict(cls, data: dict) - Task:反序列化支持向前兼容return cls(task_iddata[task_id],namedata[name],motivation_typeMotivationType(data[motivation_type]),created_atdate.fromisoformat(data[created_at]),external_rewarddata.get(external_reward),tagsdata.get(tags, []),)2️⃣ 存储层storage/json_store.pyJSONStore职责数据的持久化、查询、备份设计模式Repository Unit of Work原子写入import jsonimport shutilfrom pathlib import Pathfrom typing import Any, Dict, Iterable, List, Type, TypeVarfrom datetime import datetimeT TypeVar(T)class JSONStore:通用 JSON 存储引擎特性- 原子写入写临时文件 → rename- 自动备份保留最近 N 个版本- 链式查询Query Builder 模式def __init__(self, file_path: Path, backup_dir: Path, max_backups: int 10):self.file_path file_pathself.backup_dir backup_dirself.max_backups max_backupsself._ensure_directory()def _ensure_directory(self) - None:self.file_path.parent.mkdir(parentsTrue, exist_okTrue)self.backup_dir.mkdir(parentsTrue, exist_okTrue)def load_all(self) - List[Dict[str, Any]]:读取全部数据文件不存在返回空列表if not self.file_path.exists():return []with self.file_path.open(r, encodingutf-8) as f:return json.load(f)def append(self, item: Dict[str, Any]) - None:追加一条记录原子写入原子性保证1. 读现有数据2. 追加新记录3. 写入临时文件4. rename 覆盖原文件POSIX 原子操作self._backup()data self.load_all()data.append(item)temp_file self.file_path.with_suffix(.tmp)with temp_file.open(w, encodingutf-8) as f:json.dump(data, f, indent2, ensure_asciiFalse)temp_file.replace(self.file_path)def _backup(self) - None:创建时间戳备份自动清理旧备份if not self.file_path.exists():returntimestamp datetime.now().strftime(%Y%m%d_%H%M%S)backup_path self.backup_dir / f{self.file_path.stem}_{timestamp}.jsonshutil.copy(self.file_path, backup_path)backups sorted(self.backup_dir.glob(f{self.file_path.stem}_*.json))for old in backups[:-self.max_backups]:old.unlink()3️⃣ 业务层services/analyzer_service.pyAnalyzerService职责计算持久度指标、对比两类动机不负责 IO不负责 CLI纯计算逻辑from collections import defaultdictfrom typing import Dict, Listfrom statistics import meanfrom models.task import Taskfrom models.work_log import WorkLogfrom models.persistence_metrics import PersistenceMetricsfrom utils.statistics import linear_decay_slope, half_life_daysclass AnalyzerService:分析服务 —— 单一职责从原始数据中提取洞察def __init__(self, tasks: List[Task], logs: List[WorkLog]):self.tasks tasksself.logs logsself._task_map {t.task_id: t for t in tasks}def analyze_by_motivation(self) - Dict[str, PersistenceMetrics]:按动机类型分组分析返回{external: PersistenceMetrics(...),internal: PersistenceMetrics(...),mixed: PersistenceMetrics(...)}grouped_logs: Dict[str, List[WorkLog]] defaultdict(list)for log in self.logs:task self._task_map.get(log.task_id)if task:grouped_logs[task.motivation_type.value].append(log)results {}for motive, logs in grouped_logs.items():results[motive] self._calculate_metrics(logs)return resultsdef _calculate_metrics(self, logs: List[WorkLog]) - PersistenceMetrics:核心指标计算无副作用这是整个系统的数学核心所有指标均可审计if not logs:return PersistenceMetrics.empty()durations [log.duration_minutes for log in logs]engagements [log.engagement for log in logs]ideas sum(1 for log in logs if log.new_idea_generated)decay linear_decay_slope(logs)half_life half_life_days(logs)return PersistenceMetrics(total_logslen(logs),total_duration_hourssum(durations) / 60,avg_engagementmean(engagements),idea_densityideas / (sum(durations) / 60 1e-6),decay_ratedecay,half_life_dayshalf_life,)4️⃣ 工具层utils/statistics.py统计工具函数纯函数 · 无状态 · 可独立测试from typing import Listfrom models.work_log import WorkLogfrom utils.date_calculator import days_betweendef linear_decay_slope(logs: List[WorkLog]) - float:计算投入度的线性衰减斜率返回值- 负值随时间衰减正常- 接近 0稳定- 正值反而增强罕见算法最小二乘法线性回归if len(logs) 2:return 0.0# 按时间排序sorted_logs sorted(logs, keylambda x: x.logged_at)base_date sorted_logs[0].logged_atx [days_between(base_date, log.logged_at) for log in sorted_logs]y [log.engagement for log in sorted_logs]n len(x)sum_x sum(x)sum_y sum(y)sum_xy sum(xi * yi for xi, yi in zip(x, y))sum_x2 sum(xi * xi for xi in x)# 防止除零denominator n * sum_x2 - sum_x * sum_xif abs(denominator) 1e-10:return 0.0slope (n * sum_xy - sum_x * sum_y) / denominatorreturn slopedef half_life_days(logs: List[WorkLog]) - float | None:计算投入度下降到初始值 50% 所需的天数工程意义- 半衰期越短 → 动机越脆弱- None数据不足或未衰减到 50%if len(logs) 3:return Nonesorted_logs sorted(logs, keylambda x: x.logged_at)initial sorted_logs[0].engagementtarget initial * 0.5for log in sorted_logs[1:]:if log.engagement target:return days_between(sorted_logs[0].logged_at, log.logged_at)return None5️⃣ 入口层main.py依赖注入容器Application 入口职责组装系统、依赖注入、CLI 调度import sysfrom pathlib import Pathfrom datetime import datefrom config import DATA_DIR, BACKUP_DIR, MAX_BACKUPSfrom storage.json_store import JSONStorefrom services.recorder_service import RecorderServicefrom services.analyzer_service import AnalyzerServicefrom services.report_service import ReportServicefrom utils.cli_helper import CLIclass Application:应用容器 —— 依赖注入的根所有组件在此组装便于- 单元测试替换 mock- 未来切换数据库只需换 Storedef __init__(self):self.data_dir DATA_DIRself.task_store JSONStore(DATA_DIR / tasks.json,BACKUP_DIR / tasks,MAX_BACKUPS,)self.log_store JSONStore(DATA_DIR / logs.json,BACKUP_DIR / logs,MAX_BACKUPS,)self.recorder RecorderService(self.task_store, self.log_store)self.analyzer AnalyzerService([], [])self.reporter ReportService()self.cli CLI()def run(self):while True:choice self.cli.show_menu()if choice 1:self.recorder.create_task_interactive()elif choice 2:self.recorder.log_work_interactive()elif choice 3:self.show_analysis()elif choice q:sys.exit(0)def show_analysis(self):加载数据 → 分析 → 渲染报告tasks self.recorder.load_tasks()logs self.recorder.load_logs()self.analyzer.tasks tasksself.analyzer.logs logsresults self.analyzer.analyze_by_motivation()report self.reporter.generate(results)self.cli.print_report(report)if __name__ __main__:app Application()app.run()五、README 文件# MotiveTrack一个用于追踪「名利驱动」与「热爱驱动」任务创意持久度的命令行工具。## 核心理念基于自我决定论SDT与创造力研究量化两类动机在以下维度的差异- 活跃持续性- 主观投入度- 创意产出密度- 衰减速度与半衰期## 安装bashgit clone repocd motive_trackpython -m venv .venvsource .venv/bin/activate # Windows: .venv\Scripts\activatepip install -r requirements.txt## 快速开始bashpython main.py首次运行会创建 data/ 和 backups/ 目录。## 使用流程1. **创建任务**选择动机类型外在 / 内在 / 混合2. **记录工作**每次完成后记录时长、投入度、是否产生新想法3. **查看分析**对比不同动机类型的持久度指标4. **决策参考**根据衰减趋势调整任务分配详见 USAGE.md。## 数据隐私- 所有数据存储在本地 JSON 文件中- 无网络请求- 无遥测- 可随时删除 data/ 目录## 技术特点- 零第三方依赖仅 typing 相关可选包- 模块化设计每层职责清晰- 原子写入 自动备份- 不可变数据模型dataclass(frozenTrue)- 纯函数工具库易于测试## 局限说明- 样本量较小时统计结果仅供参考- 主观投入度为自评量表存在个体差异- 不适用于临床诊断或职业评估六、使用说明USAGE.md 节选# 使用说明## 动机类型定义| 类型 | 典型表现 | 示例 ||---|---|---|| 外在动机 | 为了报酬、晋升、评价 | 写 KPI 报告、接外包 || 内在动机 | 出于兴趣、好奇心 | 写开源工具、研究新技术 || 混合动机 | 两者兼有 | 做个人品牌内容 |## 记录规范- **投入度**1–10 分10 分为完全沉浸心流- **新想法**本次工作中是否产生了可落地的创意点- **建议频率**每次工作结束后立即记录避免回忆偏差## 解读报告### 衰减系数为负且绝对值大→ 热情下降快任务可能很快被放弃### 半衰期短 7 天→ 动机脆弱适合拆分成小里程碑### 内在动机的创意密度显著更高→ 将探索性工作安排在内在动机时段## 最佳实践- 连续记录 ≥ 30 天后再做结论- 定期每两周回顾分析报告- 用分析结果调整任务分配而非自我批判七、核心知识点卡片CHEATSHEET.md# 核心知识点卡片## #1 自我决定论SDT内在动机比外在动机更能预测长期坚持和创造力。工程启示系统设计应减少对外部奖惩的依赖。## #2 基本需求理论自主性、胜任感、归属感是内在动机的三大养料。记录时关注任务是否让你感到自主是否有掌控感## #3 过度理由效应对原本喜欢的事给予外部奖励反而会降低内在动机。警示不要把所有热爱都变成 KPI。## #4 心流Flow挑战略高于技能时出现的最优体验状态。投入度 8 通常对应心流区间。## #5 创意持久度 ≠ 完成任务很多任务“做完了”但“没有生命力”。本系统区分坚持persistencevs. 完成completion。## #6 幸存者偏差人们只看到名利驱动的成功案例忽略了大量中途放弃的项目。本工具记录“沉默的大多数”。## #7 回归均值极端表现之后往往会回归平均水平。单日高分不必过度兴奋持续趋势才有意义。## #8 半衰期思维关注知识的半衰期、热情的半衰期。半衰期长的任务值得长期投入。## #9 损耗模型 vs. 滋养模型外在动机消耗意志力内在动机补充心理能量。平衡两类任务的比例避免 burnout。## #10 元认知监控“知道自己为什么在做这件事”本身就是一种元认知能力。记录动机本身就是干预。八、总结MotiveTrack 不是一个 productivity hack而是一个认知校准工具。技术上它展示了- 如何用工程方法建模心理学概念- 如何用纯 Python 构建一个可维护、可测试、可扩展的系统- 如何通过分层设计和依赖注入让复杂逻辑变得清晰心理学上它提醒我们名利可以驱动你开始但只有热爱才能驱动你走完。最终这个工具的目的不是让你放弃外在动机的任务——毕竟我们要生存——而是让你看清两类动机的真实代价与收益从而在有限的时间里把更多的创造性生命投入到那些真正值得的事情上。利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛

相关新闻