薪资计算器只计算收入多少,编写程序,换算每份工作时消耗的内心热情值,优先推荐热情损耗最低的岗位,而非单纯高薪岗位。
项目名PassionCalc — 内心热情值岗位推荐系统一、实际应用场景描述在心理健康与创新能力课程中有一个被广泛验证却难以落地的命题薪资本身不是动力热情才是可持续创造力的燃料现实场景包括- 高薪岗位让人看起来成功内心却日益枯竭- 职业选择工具只对比薪资、福利、通勤时间- 没有人量化每天上班前你是期待还是抗拒- 长期热情损耗导致职业倦怠Burnout创造力归零心理学与创新研究指出- 内在动机Intrinsic Motivation比外在奖励更能驱动创造力Deci Ryan, Self-Determination Theory- 热情损耗是职业倦怠的早期信号Maslach Burnout Inventory- 长期做高薪但无意义感的工作创新产出反而下降PassionCalc 的目标不是劝你别赚钱而是在职业决策中把内心热情损耗从隐形感受变成可量化、可对比的结构化指标二、引入痛点现有薪资计算工具的盲区维度 薪资计算器 PassionCalc核心指标 月薪、年薪、税后 热情值、意义感决策导向 收入最大化 热情损耗最小化隐性成本 忽略 核心考量输出结果 这份工作值多少钱 这份工作消耗你多少真实痛点- 职业选择 人生最大决策之一工具却只算钱- 高薪 好工作的默认假设无人挑战- 热情损耗是软性的缺乏可操作的记录方式- 创新课程讨论内在动机但学生缺乏个人实验工具三、核心逻辑讲解先讲思想核心隐喻薪水是外在回报热情是内在资本——后者耗尽前者毫无意义程序做了什么1. 定义热情值评估维度- 意义感是否认同工作的价值- 自主性能否主导自己的工作方式- 成长感是否在学习和进步- 社交滋养同事关系是否 energize- 心流频率是否经常进入专注忘我状态2. 每份工作 一组维度评分- 每个维度 1-10 分- 综合计算热情净值3. 引入热情损耗率概念- 不是静态评分而是每天消耗多少- 高薪但低热情 高损耗- 中薪但高热情 低损耗4. 推荐逻辑反转- 传统按薪资排序取最高- PassionCalc按热情损耗排序取最低关键设计原则- 不否定高薪的价值- 不替代薪资计算而是平行增加热情维度- 所有评分主观自评程序只做结构化呈现四、代码模块化设计项目结构passion_calc/│├── README.md├── requirements.txt├── main.py├── core/│ ├── passion_metrics.py # 热情值维度定义与计算│ ├── job_profile.py # 岗位档案│ ├── comparator.py # 岗位对比与推荐│ └── reporter.py # 报告生成└── data/└── job_profiles.json五、核心代码实现Python1️⃣ 热情值维度定义与计算passion_metrics.py# core/passion_metrics.pyfrom dataclasses import dataclassfrom typing import Dict, List, Optionaldataclassclass PassionScore:一份工作的热情值评分全部为主观自评无客观标准meaning: int # 意义感1-10我觉得这份工作有价值吗autonomy: int # 自主性1-10我能自己决定怎么做吗growth: int # 成长感1-10我在变强吗social_energy: int # 社交滋养1-10周围人让我更有活力吗flow_frequency: int # 心流频率1-10我常进入忘我状态吗def validate(self):for field_name, value in self.__dict__.items():if not 1 value 10:raise ValueError(f{field_name} 必须在 1-10 之间当前为 {value})def raw_score(self) - float:热情原始分简单平均values [v for v in self.__dict__.values() if isinstance(v, int)]return sum(values) / len(values)def weighted_score(self) - float:加权热情分意义感和自主性权重更高基于 Self-Determination Theoryweights {meaning: 0.30,autonomy: 0.25,growth: 0.20,social_energy: 0.15,flow_frequency: 0.10,}score 0.0for dim, w in weights.items():score getattr(self, dim) * wreturn round(score, 2)def to_dict(self) - Dict:return {meaning: self.meaning,autonomy: self.autonomy,growth: self.growth,social_energy: self.social_energy,flow_frequency: self.flow_frequency,raw_score: round(self.raw_score(), 2),weighted_score: self.weighted_score(),}class PassionCalculator:计算热情损耗率核心公式热情损耗率 1 / 加权热情分热情分越低 → 损耗率越高 → 越不推荐def compute_drain_rate(self, score: PassionScore) - float:热情损耗率每天上班消耗多少内心燃料范围约 0.1极低损耗~ 1.0极高损耗weighted score.weighted_score()# 避免除零if weighted 0:return 1.0drain round(1.0 / weighted, 3)return min(drain, 1.0) # 上限 1.0def interpret(self, drain_rate: float) - str:将损耗率翻译为可读提示if drain_rate 0.15:return 极低损耗 — 这份工作在滋养你elif drain_rate 0.25:return 低损耗 — 热情可持续elif drain_rate 0.40:return 中等损耗 — 需要主动补充能量elif drain_rate 0.60:return 高损耗 — 长期可能倦怠else:return 极高损耗 — 警惕职业枯竭设计说明热情损耗率 1/热情分这个倒数关系模拟了热情越低每天消耗越剧烈的非线性感受2️⃣ 岗位档案job_profile.py# core/job_profile.pyfrom dataclasses import dataclass, fieldfrom typing import Optionalfrom .passion_metrics import PassionScoredataclassclass JobProfile:一份工作的完整档案包含薪资传统维度和热情值新增维度name: strcompany: strannual_salary: float # 年薪万元passion: PassionScore # 热情评分work_hours_per_week: int 50 # 周工时commute_hours_per_day: int 1 # 单程通勤notes: str def daily_drain(self) - float:每天消耗的热情值from .passion_metrics import PassionCalculatorcalc PassionCalculator()return calc.compute_drain_rate(self.passion)def weekly_drain(self) - float:每周总消耗return self.daily_drain() * self.work_hours_per_weekdef annual_drain(self) - float:年化热情消耗return self.weekly_drain() * 52def salary_per_passion_unit(self) - float:每单位热情消耗的薪资回报类似性价比但反过来你每损失 1 点热情赚回多少万if self.annual_drain() 0:return float(inf)return round(self.annual_salary / self.annual_drain(), 2)def summary(self) - dict:return {岗位: f{self.name} {self.company},年薪(万): self.annual_salary,周工时: self.work_hours_per_week,通勤(h/天): self.commute_hours_per_day,热情加权分: self.passion.weighted_score(),日损耗率: round(self.daily_drain(), 3),年损耗总量: round(self.annual_drain(), 1),万元/损耗单位: self.salary_per_passion_unit(),解读: PassionCalculator().interpret(self.daily_drain()),}设计说明salary_per_passion_unit 是最反直觉的指标高薪岗位如果热情损耗巨大这个比值可能很低3️⃣ 岗位对比与推荐comparator.py# core/comparator.pyfrom typing import Listfrom .job_profile import JobProfilefrom .passion_metrics import PassionCalculatorclass JobComparator:对比多份岗位按热情损耗排序推荐def __init__(self, jobs: List[JobProfile]):self.jobs jobsself.calc PassionCalculator()def rank_by_drain(self) - List[JobProfile]:按热情损耗从低到高排序损耗越低越推荐return sorted(self.jobs, keylambda j: j.daily_drain())def rank_by_salary(self) - List[JobProfile]:按薪资从高到低排序传统方式return sorted(self.jobs, keylambda j: j.annual_salary, reverseTrue)def rank_by_efficiency(self) - List[JobProfile]:按万元/损耗单位排序综合考虑薪资和热情的性价比return sorted(self.jobs,keylambda j: j.salary_per_passion_unit(),reverseTrue)def comparison_table(self) - str:生成对比表文本格式lines []lines.append(f\n{ * 100})lines.append(f{热情损耗排序:^100})lines.append(f{ * 100})ranked self.rank_by_drain()lines.append(f\n{排名:4} {岗位:35} {年薪:8} {热情分:8} {日损耗:8} {年损耗:10} {解读})lines.append(- * 100)for i, job in enumerate(ranked, 1):summary job.summary()lines.append(f{i:4} {summary[岗位]:35} f{summary[年薪(万)]:8} f{summary[热情加权分]:8} f{summary[日损耗率]:8} f{summary[年损耗总量]:10} f{summary[解读]})lines.append(f\n{ * 100})lines.append(f{传统薪资排序对比:^100})lines.append(f{ * 100})salary_ranked self.rank_by_salary()lines.append(f\n{排名:4} {岗位:35} {年薪(万)})lines.append(- * 50)for i, job in enumerate(salary_ranked, 1):lines.append(f{i:4} {job.name} {job.company:25} {job.annual_salary})# 关键对比best_drain ranked[0].name if ranked else N/Abest_salary salary_ranked[0].name if salary_ranked else N/Alines.append(f\n 关键对比)lines.append(f 热情损耗最低{best_drain})lines.append(f 薪资最高{best_salary})if best_drain ! best_salary:lines.append(f\n ⚡ 热情推荐 ≠ 薪资推荐 — 这正是本工具存在的意义)return \n.join(lines)设计说明三种排序损耗 / 薪资 / 效率并列呈现让使用者看到不同价值观下的不同答案4️⃣ 报告生成reporter.py# core/reporter.pyfrom .comparator import JobComparatorclass Reporter:生成岗位热情分析报告def __init__(self, comparator: JobComparator):self.comparator comparatordef generate(self):print(self.comparator.comparison_table())# 额外洞察jobs self.comparator.jobsif len(jobs) 2:returnprint(f\n{ * 100})print(f{ 深度洞察:^100})print(f{ * 100})# 洞察 1薪资与热情的相关性salaries [j.annual_salary for j in jobs]passions [j.passion.weighted_score() for j in jobs]# 简单相关系数教学用avg_salary sum(salaries) / len(salaries)avg_passion sum(passions) / len(passions)numerator sum((s - avg_salary) * (p - avg_passion)for s, p in zip(salaries, passions))denom_s sum((s - avg_salary) ** 2 for s in salaries) ** 0.5denom_p sum((p - avg_passion) ** 2 for p in passions) ** 0.5if denom_s 0 and denom_p 0:corr numerator / (denom_s * denom_p)print(f\n1. 薪资与热情的相关性{corr:.2f})if corr 0:print(f → 负相关薪资越高热情可能越低需要警惕)elif corr 0.5:print(f → 正相关薪资与热情方向一致较为理想)else:print(f → 弱相关薪资和热情基本独立需要综合判断)# 洞察 2万元/损耗比print(f\n2. 薪资-热情综合效率排名)eff_ranked self.comparator.rank_by_efficiency()for i, job in enumerate(eff_ranked, 1):eff job.salary_per_passion_unit()print(f {i}. {job.name} {job.company} — 每单位损耗赚 {eff} 万元)print(f\n 教学提示)print(f 1. 本工具不替代职业决策只提供结构化视角)print(f 2. 热情评分完全主观建议间隔 1-2 周重复评估)print(f 3. 同一岗位在不同阶段热情评分可能变化)print(f 4. 高薪低热情不一定是坏事关键是你要知情选择)5️⃣ 主程序main.py# main.pyfrom core.passion_metrics import PassionScorefrom core.job_profile import JobProfilefrom core.comparator import JobComparatorfrom core.reporter import Reporterdef main():# 定义几份候选岗位实际应由用户输入jobs [JobProfile(name高级后端工程师,company大厂 A,annual_salary65,passionPassionScore(meaning4, # 做业务系统意义感一般autonomy3, # 需求驱动自主性低growth5, # 技术栈成熟成长中等social_energy4, # 团队氛围尚可flow_frequency3 # 很少进入心流),work_hours_per_week55,commute_hours_per_day1.5,notes高薪但重复性工作居多),JobProfile(name独立开发者,company自由职业,annual_salary30,passionPassionScore(meaning9, # 做自己热爱的产品autonomy10, # 完全自主growth8, # 什么都得学social_energy5, # 独处多社交少flow_frequency8 # 经常进入心流),work_hours_per_week45,commute_hours_per_day0,notes收入不稳定但极其充实),JobProfile(name产品经理,company中厂 B,annual_salary45,passionPassionScore(meaning7, # 影响用户生活有意义autonomy6, # 有一定自主权growth7, # 跨部门协调学习面广social_energy6, # 人际密集flow_frequency5 # 偶尔心流),work_hours_per_week50,commute_hours_per_day1,notes平衡型选择),]# 对比分析comparator JobComparator(jobs)reporter Reporter(comparator)reporter.generate()if __name__ __main__:main()六、README 文件# PassionCalc一个内心热情值岗位推荐工具。## 目的- 在职业决策中引入热情损耗维度- 不替代薪资计算而是与之并列- 帮助个人做出知情选择而非盲从高薪## 使用说明### 运行环境- Python 3.8- 仅使用标准库### 启动bashpython main.py### 添加岗位修改 main.py创建 JobProfilepythonfrom core.passion_metrics import PassionScorefrom core.job_profile import JobProfilejob JobProfile(name你的岗位名,company公司名,annual_salary40, # 年薪万元passionPassionScore(meaning7, # 意义感 1-10autonomy6, # 自主性 1-10growth7, # 成长感 1-10social_energy5, # 社交滋养 1-10flow_frequency4 # 心流频率 1-10),work_hours_per_week48,commute_hours_per_day1)### 热情维度说明| 维度 | 问题 ||---|---|| meaning | 我觉得这份工作有意义吗 || autonomy | 我能主导自己的工作方式吗 || growth | 我每天都在进步吗 || social_energy | 同事让我更有活力还是更疲惫 || flow_frequency | 我常进入忘我的专注状态吗 |## 输出内容- 三种排序热情损耗 / 薪资 / 综合效率- 每份岗位的详细指标- 薪资与热情的相关性分析- 教学提示## 适用场景- 职业选择决策辅助- 心理健康课职业倦怠预防模块- 创新能力课程中的内在动机讨论- 个人年度复盘## 核心原则- 所有评分为主观自评- 不替代决策只提供视角- 高薪 ≠ 坏选择低热情 ≠ 不能选- 关键是知情而非正确七、核心知识点卡片去营销化卡片 1内在动机与外在动机- 关键词Self-Determination Theory、Deci Ryan- 要点外在奖励金钱短期有效内在动机意义感、自主性才是创造力的长期燃料卡片 2职业倦怠的早期信号- 关键词Maslach Burnout Inventory、情感耗竭- 要点热情损耗先于身体症状出现是更早、更敏感的预警指标卡片 3多维度决策模型- 关键词加权评分、价值观澄清、知情选择- 要点好决策不是选最好的而是知道自己选的是什么八、总结工程师视角这个程序不是在劝你别赚钱而是在悄悄追问一个更深的问题。技术层面- 用不到 300 行标准库代码构建了一个反主流的职业评估框架- 三种排序并列呈现拒绝唯一正确答案-salary_per_passion_unit 这个指标本身就是一种价值观宣言心理层面- 把上班前的内心感受从模糊情绪变成可观察、可记录、可对比的数据- 帮助使用者从我是不是不够努力的 self-blame转向我的热情在怎样被消耗的self-awareness最终价值不是告诉你别去大厂去追梦而是给你一个安静的工具让你在拿到 offer 的那天能诚实地问自己如果我五年都做这份工作我的热情账户会怎样答案没有对错——但看见本身就是力量。利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛