|第二篇 · 处理篇|核心命题:决策逻辑|LCN: 0000-0110
摘要
输入篇的五关帮你解决了“什么数据该进入大脑”的问题。但同样的输入,在不同人的大脑里,产出截然不同。
三个人同时读到《纳瓦尔宝典》
- 有人合上书继续躺平
- 有人发了条朋友圈
- 有人开始写自己的第一个产品
差异不在输入,在分支逻辑。
第6关,我们进入大脑的决策程序,检查你的条件分支——if 写对了吗?else 写了吗?紧急事务是不是短路了你所有重要但不紧急的分支?
Issue:你的人生是一行行写出的 if 和 else
你一定在Code Review时见过这样的代码:
if user.age > 18: return True你会毫不犹豫地指出:Magic Number,硬编码,建议提取配置。
但你有没有想过——你的大脑里运行着成千上万行这样的代码,而且没有任何人给你做 Code Review。
你现在的 if 条件,是你自己写的吗?
大部分人用的是"出厂默认设置":
if 别人不同意: 放弃—— 童年被否定的残留配置if 有风险: 拒绝—— 父母"稳妥一点"的编译指令if 不确定: 等待—— 学校标准答案思维的持久化缓存
这些默认 if 条件,是你从小到大的环境"预装"的——家庭、学校、社会、文化,在你不知不觉中写入了这些条件判断。它们是别人写的代码,但你一直在执行。
更可怕的是:这些代码没有版本控制,没有单元测试,没有重构日志。它们在你大脑里跑了二三十年,你甚至不知道它们存在。
编程概念1:Magic Number 硬编码的魔法数字
先看一段你大概率在生产环境见过、甚至可能写过的代码:
def should_take_opportunity(opportunity): if opportunity.risk_score > 0.7: # 这个 0.7 从哪来? return False return True这个0.7是从哪来的?
也许是童年某次考试失败的疼痛记忆,也许是父母某句“稳妥一点”的编译指令,也许只是你第一次独立做决策时恰好失败的那个数值。
它被硬编码进你的认知系统,从此成为不可变的常量。
人生重构: 基于可调节变量的决策阈值
图6-1:魔法数字 vs 配置化
问题是:你的人生版本已经升级了无数次,但这段逻辑从未被重构。
- 遇到机会,你的系统自动
return False; - 遇到挑战,自动
raise PermissionError。
你以为是理性分析,其实是过时的配置在替你做决定。
重构后的代码应该长这样:
def should_take_opportunity(opportunity): threshold = evaluate_with_current_context() # 基于当下评估 if opportunity.risk_score > threshold: return False return True把0.7改成变量,把False改成evaluate_with_mentor(),你就从“被过去驱动”变成了“用当下判断”。
映射到人生系统:你的决策阈值不该是锁死的常量,而应该是可调节的变量。
编程概念2:隐式 else
再来看一段更隐蔽的Bug:
def handle_career_change(): if has_better_job: quit() # 没有 else,隐式返回 None在Python里,没有else的函数会返回None。
人生重构:不选择也是选择
图6-2:隐式else可视化
在人生中,没有else的选择会返回什么?
返回的是惯性、是拖延、是“先这样混着”。
- 你裸辞前只写了
if 找到更好的工作: 辞职(),没写else: 骑驴找马(),于是简历投了三份没回音,存款见底,心态崩了。 - 你创业前只写了
if 拿到融资: all_in(),没写else: 保留18个月生活费(),于是A轮没close,团队散了。
在代码里,隐式返回None是低级错误;在人生中,隐式返回“维持现状”是致命陷阱。
因为现状不是静态的,它在腐烂。
重构:
def handle_career_change(): if has_better_job: quit() else: keep_current_and_prepare() # 显式写出 else显式的else是一种勇气——它逼你承认:拒绝和接受一样,都需要设计。
映射到人生系统:每个if都要有else。不选择也是选择,但你应该显式地写出来。
编程概念3:短路求值
程序员都懂短路求值:
if has_time_for_deep_work and not boss.pinged(): do_deep_work()人生重构: 分清轻重缓急
图6-3:短路求值示意图
但很多人的人生逻辑是反的:
# 错误的人生优先级 if boss.pinged() or is_urgent(): handle_emergency() # 以下分支被短路,永远执行不到 elif has_time_for_deep_work: do_deep_work() elif long_term_goal: invest_in_future()boss.pinged()就像一个永远为True的条件,短路掉了你所有重要但不紧急的分支。
你每天忙到飞起,年底一看,年初定的目标一个没动——因为deep_work_time和long_term_goal在求值顺序里排在了后面,永远被短路。
这不是时间管理问题,是运算符优先级问题。
重构:
def daily_schedule(): if is_important_and_not_urgent(deep_work): do_deep_work() # 重要不紧急优先 elif boss.pinged(): reply_with_delay() # 延迟响应 else: handle_routine()把and not is_urgent写进条件,就是给深度工作加一道防火墙。
映射到人生系统:紧急的事不应该放在重要的事前面。被短路的分支永远得不到执行。
编程概念4:递归条件
前面三段都是修Bug,但最高级的优化不是修分支,是升级编译器。
我的人生重构:改变条件
图6-4:递归条件示意图
90年代末,我在重型机器厂职工大学当老师。当时我的核心决策函数长这样:
def life_decision(): if stable_factory_job: stay_at_factory() else: unknown_and_scary() # 这条分支权重太高,形同虚设这个函数跑了三年,每次执行都走stay_at_factory分支。因为unknown_and_scary的权重太高了,高到else形同虚设。
直到有一天,我意识到:我不是在选分支,我是在选条件。
def life_decision_v2(): if aligns_with_my_values(): # 条件升级 pursue_it() else: decline_gracefully()条件从“稳定 vs 未知”变成了“我想要什么 vs 我不想要什么”。
条件一变,整个决策树的重构成本趋近于零——因为所有子分支自动对齐了。
这就是递归思维在条件分支中的应用:if嵌套if,不是判断事,是判断“你用来判断事的标准”。
映射到人生系统:改变分支只是修Bug,改变条件才是重构架构。
| 边界提示:改变条件是横向重构(第6关),解决的是"用什么标准判断"。但有时候你根本不知道标准从哪里来——这就需要纵向深挖,自己调用自己,直到触及那个写标准的人。那是第7关的事。
从意大利面条到状态机
如果你的人生决策写成了这样:
def handle_event(e): if e == "批评": if e.source == "领导": if e.tone == "严厉": return "自我否定" elif e.tone == "温和": return "勉强接受" elif e == "失败": if e.scale == "大": return "逃避" # 无限 elif...这不是决策树,这是意大利面条代码——无限叠加elif,试图用更多的分支解决条件本身的问题。
你每加一个 elif,就增加了一层认知负担。到最后,你连自己有多少个分支都数不过来,更别提维护。
人生真正的决策结构,应该是状态机 + 表驱动:
class LifeStateMachine: def __init__(self): self.state = "探索" def on_event(self, event): transitions = { ("探索", "遇到机会"): "尝试", ("尝试", "遇到失败"): "复盘", ("复盘", "找到规律"): "深耕", ("深耕", "遇到瓶颈"): "探索" } new_state = transitions.get((self.state, event)) if new_state: self.state = new_state return self.state你不是在选路径,你是在管理状态。
每个状态都有合法的出口,每个事件都有定义的响应。
没有隐式None,没有魔法数字,没有死循环。
图6-5:意大利面条 vs 状态机
映射到人生系统:好的决策系统不是靠更多的elif,而是靠更清晰的状态转移。
Action:给你的人生做一次Code Review
打开你的备忘录,完成以下重构:
Step 1:找出你的Magic Number
写下你最近三次重大决策。问自己:那个让你说“不”的阈值,是变量还是常量?
# 你的原始代码 if some_condition > SOME_VALUE: # 某个条件 > 某个数值 return False # 返回拒绝 # 重构任务 # 1. 这个数值从哪来的? # 2. 如果把它改成环境变量,今天的值应该是多少?Step 2:补全所有隐式else
选一个你正在纠结的选择,强制写出else:
# 你的原始代码 if condition_holds(): # 如果条件成立 return action_A() # 执行方案A else: return action_B() # 执行方案B(不能是"再看看")Step 3:重排你的短路优先级
列出你本周实际花时间最多的三件事,和年初计划的三件事。对比:
# 你实际的执行顺序 if is_urgent(): # 紧急事务优先 handle_emergency() elif is_important(): # 重要事务被短路 do_deep_work() # 重构后的执行顺序 if is_important() and not is_urgent(): # 加防火墙,优先重要且不紧急 do_deep_work()图6-6:Action卡
关卡小结
一句话回顾:
你的人生不是被命运执行的脚本,是你一行行写出的条件分支。那些没有else的if,那些硬编码的常量,那些被短路的重要分支——它们不会报错,但它们会悄悄地、持续地、复利式地,把你带到一个你从未选择过的地方。
三个核心要点:
魔法数字需要外部化。你的决策阈值应该像环境变量一样可调节,而不是锁死在过去的代码里。
每个if都要有else。不选择也是选择,但你应该显式地写出来,而不是让系统隐式返回None。
重要分支不能放在紧急分支后面。被短路的分支永远得不到执行——重新排列你的if顺序,就是重新排列你的人生优先级。
上一关回顾:人生代码 | 第5关:环境即上下文 —— 系统跑不跑,全看环境变量
下一关预告:第7关——递归思考
“当你发现所有分支都通向同一个你不想要的结果,问题不在分支,在递归的深度。下一关,我们学习自己调用自己——直到触及那个真正该被修改的条件。”
📚《人生代码:重构自己》|专栏总合集 本系列以软件工程思维看待自我成长,二十一关循序渐进,每一关重在实践落地。 欢迎订阅专栏,跟随闯关调试属于自己的人生程序。
如果这篇文章帮到了你,欢迎点个赞/收藏,这对我很有帮助!
关卡进度:6 / 21
人生代码:重构自己 ——用程序员思维,解决人生难题
#高级程序员#系统分析师#软件工程#人生代码 #条件分支 #决策逻辑 #编程思维 #认知升级