薪资计算器只计算收入多少,编写程序,换算每份工作时消耗的内心热情值,优先推荐热情损耗最低的岗位,而非单纯高薪岗位。

项目名: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

五、核心代码实现(Python)

1️⃣ 热情值维度定义与计算(passion_metrics.py)

# core/passion_metrics.py

from dataclasses import dataclass

from typing import Dict, List, Optional

@dataclass

class 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 Theory)

"""

weights = {

"meaning": 0.30,

"autonomy": 0.25,

"growth": 0.20,

"social_energy": 0.15,

"flow_frequency": 0.10,

}

score = 0.0

for dim, w in weights.items():

score += getattr(self, dim) * w

return 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.0

drain = round(1.0 / weighted, 3)

return min(drain, 1.0) # 上限 1.0

def 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.py

from dataclasses import dataclass, field

from typing import Optional

from .passion_metrics import PassionScore

@dataclass

class JobProfile:

"""

一份工作的完整档案

包含薪资(传统维度)和热情值(新增维度)

"""

name: str

company: str

annual_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 PassionCalculator

calc = PassionCalculator()

return calc.compute_drain_rate(self.passion)

def weekly_drain(self) -> float:

"""每周总消耗"""

return self.daily_drain() * self.work_hours_per_week

def annual_drain(self) -> float:

"""年化热情消耗"""

return self.weekly_drain() * 52

def 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.py

from typing import List

from .job_profile import JobProfile

from .passion_metrics import PassionCalculator

class JobComparator:

"""

对比多份岗位,按热情损耗排序推荐

"""

def __init__(self, jobs: List[JobProfile]):

self.jobs = jobs

self.calc = PassionCalculator()

def rank_by_drain(self) -> List[JobProfile]:

"""按热情损耗从低到高排序(损耗越低越推荐)"""

return sorted(self.jobs, key=lambda j: j.daily_drain())

def rank_by_salary(self) -> List[JobProfile]:

"""按薪资从高到低排序(传统方式)"""

return sorted(self.jobs, key=lambda j: j.annual_salary, reverse=True)

def rank_by_efficiency(self) -> List[JobProfile]:

"""

按"万元/损耗单位"排序

综合考虑薪资和热情的性价比

"""

return sorted(

self.jobs,

key=lambda j: j.salary_per_passion_unit(),

reverse=True

)

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/A"

best_salary = salary_ranked[0].name if salary_ranked else "N/A"

lines.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.py

from .comparator import JobComparator

class Reporter:

"""生成岗位热情分析报告"""

def __init__(self, comparator: JobComparator):

self.comparator = comparator

def generate(self):

print(self.comparator.comparison_table())

# 额外洞察

jobs = self.comparator.jobs

if len(jobs) < 2:

return

print(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.5

denom_p = sum((p - avg_passion) ** 2 for p in passions) ** 0.5

if 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.py

from core.passion_metrics import PassionScore

from core.job_profile import JobProfile

from core.comparator import JobComparator

from core.reporter import Reporter

def main():

# 定义几份候选岗位(实际应由用户输入)

jobs = [

JobProfile(

name="高级后端工程师",

company="大厂 A",

annual_salary=65,

passion=PassionScore(

meaning=4, # 做业务系统,意义感一般

autonomy=3, # 需求驱动,自主性低

growth=5, # 技术栈成熟,成长中等

social_energy=4, # 团队氛围尚可

flow_frequency=3 # 很少进入心流

),

work_hours_per_week=55,

commute_hours_per_day=1.5,

notes="高薪但重复性工作居多"

),

JobProfile(

name="独立开发者",

company="自由职业",

annual_salary=30,

passion=PassionScore(

meaning=9, # 做自己热爱的产品

autonomy=10, # 完全自主

growth=8, # 什么都得学

social_energy=5, # 独处多,社交少

flow_frequency=8 # 经常进入心流

),

work_hours_per_week=45,

commute_hours_per_day=0,

notes="收入不稳定但极其充实"

),

JobProfile(

name="产品经理",

company="中厂 B",

annual_salary=45,

passion=PassionScore(

meaning=7, # 影响用户生活,有意义

autonomy=6, # 有一定自主权

growth=7, # 跨部门协调,学习面广

social_energy=6, # 人际密集

flow_frequency=5 # 偶尔心流

),

work_hours_per_week=50,

commute_hours_per_day=1,

notes="平衡型选择"

),

]

# 对比分析

comparator = JobComparator(jobs)

reporter = Reporter(comparator)

reporter.generate()

if __name__ == "__main__":

main()

六、README 文件

# PassionCalc

一个"内心热情值"岗位推荐工具。

## 目的

- 在职业决策中引入"热情损耗"维度

- 不替代薪资计算,而是与之并列

- 帮助个人做出"知情选择",而非盲从高薪

## 使用说明

### 运行环境

- Python 3.8+

- 仅使用标准库

### 启动

bash

python main.py

### 添加岗位

修改 main.py,创建 JobProfile:

python

from core.passion_metrics import PassionScore

from core.job_profile import JobProfile

job = JobProfile(

name="你的岗位名",

company="公司名",

annual_salary=40, # 年薪万元

passion=PassionScore(

meaning=7, # 意义感 1-10

autonomy=6, # 自主性 1-10

growth=7, # 成长感 1-10

social_energy=5, # 社交滋养 1-10

flow_frequency=4 # 心流频率 1-10

),

work_hours_per_week=48,

commute_hours_per_day=1

)

### 热情维度说明

| 维度 | 问题 |

|---|---|

| 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解决实际问题如果你觉得这个工具好用,欢迎关注长安牧笛!