mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-17 08:46:40 +08:00
961 lines
28 KiB
HTML
961 lines
28 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
||
<head>
|
||
|
||
<head>
|
||
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
|
||
<link rel="icon" href="/static/favicon.png">
|
||
|
||
<title>23 站在生活的十字路口,如何用数学抉择?.md.html</title>
|
||
|
||
<!-- Spectre.css framework -->
|
||
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
|
||
<!-- theme css & js -->
|
||
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
|
||
</head>
|
||
|
||
|
||
|
||
<body>
|
||
|
||
|
||
|
||
<div class="book-container">
|
||
|
||
<div class="book-sidebar">
|
||
|
||
<div class="book-brand">
|
||
|
||
<a href="/">
|
||
|
||
<img src="/static/favicon.png">
|
||
|
||
<span>技术文章摘抄</span>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="book-menu uncollapsible">
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="../">上一级</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/00 开篇词 数学,编程能力的营养根基.md.html">00 开篇词 数学,编程能力的营养根基.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/01 从计数开始,程序员必知必会的数制转换法.md.html">01 从计数开始,程序员必知必会的数制转换法.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html">02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/03 用数学决策,如何规划好投入、转化和产出?.md.html">03 用数学决策,如何规划好投入、转化和产出?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/04 万物可数学,经典公式是如何在生活中应用的?.md.html">04 万物可数学,经典公式是如何在生活中应用的?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/05 求极值:如何找到复杂业务的最优解?.md.html">05 求极值:如何找到复杂业务的最优解?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/06 向量及其导数:计算机如何完成对海量高维度数据计算?.md.html">06 向量及其导数:计算机如何完成对海量高维度数据计算?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/07 线性回归:如何在离散点中寻找数据规律?.md.html">07 线性回归:如何在离散点中寻找数据规律?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/08 加乘法则:如何计算复杂事件发生的概率?.md.html">08 加乘法则:如何计算复杂事件发生的概率?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/09 似然估计:如何利用 MLE 对参数进行估计?.md.html">09 似然估计:如何利用 MLE 对参数进行估计?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/10 信息熵:事件的不确定性如何计算?.md.html">10 信息熵:事件的不确定性如何计算?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/11 灰度实验:如何设计灰度实验并计算实验的收益?.md.html">11 灰度实验:如何设计灰度实验并计算实验的收益?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/12 统计学方法:如何证明灰度实验效果不是偶然得到的?.md.html">12 统计学方法:如何证明灰度实验效果不是偶然得到的?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/13 复杂度:如何利用数学推导对程序进行优化?.md.html">13 复杂度:如何利用数学推导对程序进行优化?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/14 程序的循环:如何利用数学归纳法进行程序开发?.md.html">14 程序的循环:如何利用数学归纳法进行程序开发?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/15 递归:如何计算汉诺塔问题的移动步数?.md.html">15 递归:如何计算汉诺塔问题的移动步数?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/16 二分法:如何利用指数爆炸优化程序?.md.html">16 二分法:如何利用指数爆炸优化程序?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/17 动态规划:如何利用最优子结构解决问题?.md.html">17 动态规划:如何利用最优子结构解决问题?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/18 AI 入门:利用 3 个公式搭建最简 AI 框架.md.html">18 AI 入门:利用 3 个公式搭建最简 AI 框架.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/19 逻辑回归:如何让计算机做出二值化决策?.md.html">19 逻辑回归:如何让计算机做出二值化决策?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/20 决策树:如何对 NP 难复杂问题进行启发式求解?.md.html">20 决策树:如何对 NP 难复杂问题进行启发式求解?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?.md.html">21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/22 面试中那些坑了无数人的算法题.md.html">22 面试中那些坑了无数人的算法题.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
<a class="current-tab" href="/专栏/程序员的数学课/23 站在生活的十字路口,如何用数学抉择?.md.html">23 站在生活的十字路口,如何用数学抉择?.md.html</a>
|
||
|
||
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/程序员的数学课/24 结束语 数学底子好,学啥都快.md.html">24 结束语 数学底子好,学啥都快.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
|
||
<div class="sidebar-toggle-inner"></div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script>
|
||
|
||
function add_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.add('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function remove_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function sidebar_toggle() {
|
||
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let content = document.querySelector('.off-canvas-content')
|
||
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
|
||
sidebar_toggle.classList.remove('extend')
|
||
|
||
sidebar.classList.remove('hide')
|
||
|
||
content.classList.remove('extend')
|
||
|
||
} else { // hide
|
||
|
||
sidebar_toggle.classList.add('extend')
|
||
|
||
sidebar.classList.add('hide')
|
||
|
||
content.classList.add('extend')
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
function open_sidebar() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.add('show')
|
||
|
||
overlay.classList.add('show')
|
||
|
||
}
|
||
|
||
function hide_canvas() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.remove('show')
|
||
|
||
overlay.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
<div class="off-canvas-content">
|
||
|
||
<div class="columns">
|
||
|
||
<div class="column col-12 col-lg-12">
|
||
|
||
<div class="book-navbar">
|
||
|
||
<!-- For Responsive Layout -->
|
||
|
||
<header class="navbar">
|
||
|
||
<section class="navbar-section">
|
||
|
||
<a onclick="open_sidebar()">
|
||
|
||
<i class="icon icon-menu"></i>
|
||
|
||
</a>
|
||
|
||
</section>
|
||
|
||
</header>
|
||
|
||
</div>
|
||
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
|
||
overflow-x: auto;
|
||
|
||
overflow-y: hidden;">
|
||
|
||
<div class="book-post">
|
||
|
||
<p id="tip" align="center"></p>
|
||
|
||
<div><h1>23 站在生活的十字路口,如何用数学抉择?</h1>
|
||
|
||
<p>人的一生需要面临很多重大的选择和决策,举例而言:</p>
|
||
|
||
<ul>
|
||
|
||
<li>大漂亮毕业一年后遇到了一个小伙靠谱哥;面对靠谱哥的追求,大漂亮是应该接受还是拒绝?</li>
|
||
|
||
<li>大迷糊工作 3 年,猎头推荐给他一个不错的工作机会,面对年薪 30% 的涨幅,大迷糊是接受 offer 还是拒绝 offer?</li>
|
||
|
||
</ul>
|
||
|
||
<p>除了这些重大决策以外,我们生活中也需要做一些小的决策。</p>
|
||
|
||
<ul>
|
||
|
||
<li>例如,点外卖时遇到满 30 元减 8 元,是强迫自己多消费到 30 元,还是只买自己所需的物品?</li>
|
||
|
||
<li>打德州扑克的时候,面对对手的加注,是跟注还是弃牌?</li>
|
||
|
||
</ul>
|
||
|
||
<p>其实,当你面对这些选择时,完全可以利用数学知识来做出更合理的决策。这一讲的彩蛋,我们就围绕其中的几个场景,试着从数学的角度来进行解析。</p>
|
||
|
||
<h3>放弃还是继续,如何选择最优?</h3>
|
||
|
||
<p>人生充满了不确定性。在面临不确定性的时候,我们经常会面临下面的选择:是珍惜眼前,还是寄希望于未来?</p>
|
||
|
||
<p>举个例子,大漂亮是个各方面条件都很不错的女孩子。工作之后,她遇到一个男生靠谱哥,靠谱哥身上有优点,也有缺点,但综合来看,确实是个靠谱的年轻人。</p>
|
||
|
||
<p>那么,大漂亮是应该放弃靠谱哥,期待以后能遇到更优秀的男生;还是珍惜眼前,接受聪明哥的爱意,继续这段姻缘呢?</p>
|
||
|
||
<p>这就是一个在不确定性环境中,需要做出最优决策的问题。在这里,大漂亮面对的不确定性环境是,拒绝靠谱哥后还能不能遇到更优秀的男生。</p>
|
||
|
||
<p>人生的魅力就在于未来,而未来的特点就是不确定,人生中诸如此类的选择还有很多。而我们的数学家们,对这一类问题进行了抽象,总结出了经典的最优停止问题。</p>
|
||
|
||
<h4>【最优停止问题】</h4>
|
||
|
||
<p>最优停止问题有很多中描述方式,我们以“聘请秘书”为例来描述。</p>
|
||
|
||
<p>假设大聪明要聘请一名秘书,现在有 n 人来面试,其中 n 是已知的,每个候选人的能力有量化的得分。现在,这些候选人被按照随机的顺序进行面试,大聪明每次只能面试一个候选人,查看该候选人的能力得分,并需要立即决定是否聘用该候选人。</p>
|
||
|
||
<p>如果决定不聘用该候选人,这个候选人便不会再回来;如果决定聘用该候选人,后续的候选人就没有面试的机会了。</p>
|
||
|
||
<p><strong>问:大聪明用怎样的策略,才能让他有更高的概率选到能力得分最高的候选人?</strong></p>
|
||
|
||
<p>顾名思义,最优停止问题,就是面对一个又一个的输入样本,去选择一个最好的停止时刻。它有以下几个特点。</p>
|
||
|
||
<ul>
|
||
|
||
<li>第一,候选人只能一个接一个地面试,不能同时参加面试;</li>
|
||
|
||
<li>第二,面试官大聪明能且只能选择聘用 1 个候选人;</li>
|
||
|
||
<li>第三,面试当场,大聪明就需要做出聘用与否的决策,不能“骑驴找马”地选择待定。</li>
|
||
|
||
</ul>
|
||
|
||
<p>接下来,我们就来通过数学的方式去计算出最优的策略。</p>
|
||
|
||
<p>其实,最优停止问题的答案很简单;有时候,也被人简称为“三七法则”。具体而言,是对前 m 个候选人,不论多么优秀,都拒绝聘用。接着,从第 m+1 个人开始,如果遇到了一个比先前所有面试者都优秀的候选人,那么就聘请这个人。</p>
|
||
|
||
<p><img src="assets/CgqCHl_4On2AWkMfAAFOSLgthls359.png" alt="图片1.png" /></p>
|
||
|
||
<p>流程上如上图所示,而之所以被称为“三七法则”,是因为当 m/n 等于 37% 时,选到能力得分最高的候选人的概率是最大的,而且这个选中最优候选人的最大的概率也恰好是 0.37。</p>
|
||
|
||
<h4>【代码实现】</h4>
|
||
|
||
<p>我们先试着用代码仿真一下上面的结论。我们假设候选人的人数 n 为 100,每个候选人都有一个能力得分,取值为 0 到 1 之间的小数,则代码如下:</p>
|
||
|
||
<pre><code>import random
|
||
|
||
|
||
|
||
import numpy as np
|
||
|
||
|
||
|
||
t = 0
|
||
|
||
|
||
|
||
f = 0
|
||
|
||
|
||
|
||
for i in range(1000):
|
||
|
||
|
||
|
||
a = np.random.random((100,1))
|
||
|
||
|
||
|
||
all_max = max(a)
|
||
|
||
|
||
|
||
get = 0
|
||
|
||
|
||
|
||
m_max = max(a[0:37])
|
||
|
||
|
||
|
||
for k in range(37,100):
|
||
|
||
|
||
|
||
if a[k] > m_max:
|
||
|
||
|
||
|
||
get = a[k]
|
||
|
||
|
||
|
||
break
|
||
|
||
|
||
|
||
if get == all_max:
|
||
|
||
|
||
|
||
t += 1
|
||
|
||
|
||
|
||
else:
|
||
|
||
|
||
|
||
f += 1
|
||
|
||
|
||
|
||
print "true: " + str(t)
|
||
|
||
|
||
|
||
print "false: " + str(f)
|
||
|
||
|
||
|
||
print "percentage: " + str(100.0*t/(t+f))
|
||
|
||
</code></pre>
|
||
|
||
<p>我们对代码进行走读:</p>
|
||
|
||
<ul>
|
||
|
||
<li>第 4 行和第 5 行,分别定义两个变量,用来存放找到最优候选人的次数和没有找到最优候选人的次数;</li>
|
||
|
||
<li>第 6 行开始,执行一个 1000 次的循环;</li>
|
||
|
||
<li>在每次的循环中,第 7 行,调用随机函数生成一个 100 维的数组 a,数组 a 中的每个元素,都是 0 到 1 之间的小数,代表候选人的能力得分;</li>
|
||
|
||
<li>第 8 行,调用 max 函数,保存好数组 a 中的最大值,也就是能力最高的候选人的能力得分;</li>
|
||
|
||
<li>第 9 行,定义 get 变量,用来保存用“三七法则”找到的候选人的能力得分;</li>
|
||
|
||
<li>第 10 行,再调用 max 函数,计算出前 37% 的候选人的能力最大值;</li>
|
||
|
||
<li>第 11 行开始,对 a 数组的 37% 位置之后的元素,开始执行 for 循环;</li>
|
||
|
||
<li>第 12 行,判断循环过程中的元素,是否比前 37% 个元素的最大值还要大;</li>
|
||
|
||
<li>如果是,则执行第 13 行,找到“三七法则”的输出结果,并跳出循环;</li>
|
||
|
||
<li>接着,第 15 行,判断“三七法则”找到的最大值,和a数组全局视角的最大值是否相等;</li>
|
||
|
||
<li>如果是,则第 16 行的 t 变量加 1;</li>
|
||
|
||
<li>否则,则第 18 行的 f 变量加 1;</li>
|
||
|
||
<li>最后,第 19~21 行,打印 1000 次循环的结果。</li>
|
||
|
||
</ul>
|
||
|
||
<p>我们运行代码的结果如下图所示。在 1000 次的试验中,采用“三七法则”找到最大值的次数有 376 次,没有找到最大值有 624 次。综合来看,找到最大值的概率是 37.6%,这远比我们随机去猜(100 个样本选最优,1% 的选中概率)要好得多。</p>
|
||
|
||
<p><img src="assets/Cip5yF_4JNOAZbefAABj-yXEv6M405.png" alt="Drawing 1.png" /></p>
|
||
|
||
<p>这里我们通过代码仿真,已经模拟并验证了“三七法则”这一结论;而关于“三七法则”的数学推导,则需要用到调和级数等高等数学的知识,感兴趣的同学可以自己去查阅一些资料来补充学习。</p>
|
||
|
||
<h4>【婚恋中的“三七法则”】</h4>
|
||
|
||
<p>在这里,我们给出一些基于“三七法则”的实战建议。老话说,“枪打出头鸟”“万事开头难”,这些话在“三七法则”面前还是有一定道理的。</p>
|
||
|
||
<p>如果最优秀的候选人出现在了前 37% 个样本中,那么无论如何他都是不会被选中的;反过来,躲在最后也不是最好的选择。这是因为,如果最优秀的候选人躲在最后才去参加竞争,很可能被第二优秀或者第三优秀的人,捷足先登抢到了机会。</p>
|
||
|
||
<p>我们回到最开始大漂亮和靠谱哥的故事中,试着用“三七法则”给大漂亮一些建议。我们假设女孩子会在 18~30 岁结婚。那么,这个年龄段的前 37% 的时间内,不论遇到谁、不论他多么优秀,大漂亮都不应该去考虑结婚。</p>
|
||
|
||
<p>而此阶段的终止年龄是 18+(30-18)×0.37=22.44 岁,也就是大漂亮到了 22.44 岁后,如果她遇到了一个比先前所有遇到的人都优秀的男孩子,那么她应该去考虑与这个男孩子相处并结婚。所以,决定大漂亮是否要接受靠谱哥有两个条件,分别是:</p>
|
||
|
||
<ul>
|
||
|
||
<li>大漂亮的年龄是否到达了 22.44 岁;</li>
|
||
|
||
<li>靠谱哥是否比大漂亮之前遇到过的人都优秀。</li>
|
||
|
||
</ul>
|
||
|
||
<p>在《王牌对王牌》的一期节目中,韩雪喊出的青春告白,就是“三七法则”的道理。虽然她的表述不完全正确,但她还是准确地提到了 22.44 岁。看来,这背后定有数学高人在指导韩雪和节目组啊。</p>
|
||
|
||
<p>当然啦,你可能认为人在大学四年的时期都过于幼稚迷茫,并不是好的择偶期,那你可以将时间定义为 22~30 岁,那么对应的 37% 就是 25 岁,也刚好是毕业三年后,职场新人蜕变的时期,希望你可以在这时事业、爱情双丰收。</p>
|
||
|
||
<p>又聊回了“职场话题”,我们看看大漂亮的学长“大迷糊”的职业发展情况吧。</p>
|
||
|
||
<h3>涨薪 30%,跳槽吗?</h3>
|
||
|
||
<p>很多人,尤其是那些不愁 offer 的优秀的人,常常会纠结要不要跳槽。其实,这也可以用数学去进行一些计算,来辅助做出一些决策的。</p>
|
||
|
||
<p>我们先把所有可能影响跳槽的因素列出来。在这里,我大致总结出以下几个关键因素:薪酬、职级、个人能力成长空间、适应成本、与领导的信任关系、公司发展前景。接着,我们需要对比出新旧两份工作在这些因素上的得失。如果总得比总失多,就可以考虑跳槽;如果总得比总失少,得不偿失,就不应该跳槽。</p>
|
||
|
||
<p>下面给你一个关于跳槽涨薪的案例。大迷糊是一线互联网公司的工程师,他的薪酬在所在职级中是中等偏上的水平。由于多年的刻苦努力工作,大迷糊在公司中与领导的信任关系很好。下半年,因为公司高管调整,大迷糊的主管被调整到其他部门。随之而来的,是一个毫不认识的新主管。</p>
|
||
|
||
<p>在同年 11 月,大迷糊拿到了另一个超一线互联网公司的工程师 offer,获得了 30% 的薪酬涨幅,职级也相应提高了一级。对方要求大迷糊在 11 月内做出决策,是否接受 offer 并入职。</p>
|
||
|
||
<h4>【现在是否应该跳槽?】</h4>
|
||
|
||
<p>我们来帮大迷糊计算一下得失吧,以“新 offer”代表新机会,以“旧公司”代表当前的公司。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>首先,算一下薪酬</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>在 11 月内跳槽,意味着失去了旧公司当年的年终奖,这是“失”。我们假设年终奖是 3 个月,大迷糊在旧公司的月薪是 a 元,那么总“失”为 L=3a;</p>
|
||
|
||
<p>新的 offer 年薪上有 30% 的涨幅,但 11 月入职的员工,却不会被新公司普调覆盖,而旧公司的普调平均值是 8%。那么大迷糊未来一年内的总“得”,为 G=(30%-8%)a×(12+3)=3.3a。</p>
|
||
|
||
<p>这样,总“得”和总“失”的差值为 G-L=0.3a>0。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>其次,再计算一下职级</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>新的 offer 涨了一级,这是“得”;然而,旧公司次年也有晋升机会,大迷糊是骨干,我们假设大他在旧公司的晋升概率为 0.7,这显然就是潜在的“失”。</p>
|
||
|
||
<p>那么在职级这里的总“得”和总“失”的差值,为 G-L=1-0.7×1=0.3级 > 0</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>接着,个人能力成长空间</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>我们假设这一项是差不多的,毕竟在一线互联网公司中,工程师还是比较吃香的。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>下一个,适应成本</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>大迷糊是旧公司的老员工,对于公司的制度文化、工作环境、同事相处,都必然会更适应,这里没有“得”,因为不跳槽并不会让自己的适应性增强。</p>
|
||
|
||
<p>然而,到了新公司后,新的工作环境、全新的同事、新公司的文化氛围,都是需要一定的时间来适应。这样看,适应成本就由适应期时间长短决定了。</p>
|
||
|
||
<p>因为适应期必然大于零,所以这里一定会有“失”,即 G-L<0。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>再下一个,与领导的信任关系</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>很多人会说,旧公司因为高管调整,空降了一个新的主管。这对阿强来说并不是个好消息。然而问题就在于,跳槽也是无法解决这个矛盾的。大迷糊去了一个新的公司,仍然要与一个不认识的领导,要去重新相处,去建立新的信任关系。</p>
|
||
|
||
<p>所以说,在这个维度上,没有“得”,也没有“失”,即 G-L=0。</p>
|
||
|
||
<ul>
|
||
|
||
<li><strong>最后,公司发展前景</strong></li>
|
||
|
||
</ul>
|
||
|
||
<p>大迷糊由一线公司,跳槽到超一线公司,公司前景必然是更广阔了。然而,公司的前景和个人的回报之间,很难有明确、量化的兑换关系,这里的得和失很难被计算了。</p>
|
||
|
||
<p>明确的是,得大于失,G-L>0。</p>
|
||
|
||
<p>好了,我们把以上所有的因素总结在下面的表格里,来帮助大迷糊做最后的抉择。</p>
|
||
|
||
<p>|
|
||
|
||
<img src="assets/Ciqc1F_4OgWAEs7eAAIt1zKMAGE193.png" alt="图片1.png" />
|
||
|
||
根据这个表格,我们能发现,任何一个维度都不支持大迷糊做出跳槽的动作。所以,大迷糊更好的选择是,拒绝 offer,继续在旧公司工作。</p>
|
||
|
||
<h4>【跳槽合适的时机?】</h4>
|
||
|
||
<p>那么,什么时候大迷糊才能跳槽呢?我们把上面的环境稍稍改动就会得到不一样的结果。假设,新 offer 的时间并不是 11 月,而是次年的 4 月份,此时改变的因素有二:</p>
|
||
|
||
<ul>
|
||
|
||
<li>第一,大迷糊已经收到了年终奖,或者旧公司经营惨淡,年终奖几乎为 0;</li>
|
||
|
||
<li>第二,大迷糊已经参加了旧公司的晋升,并且晋升失败。</li>
|
||
|
||
</ul>
|
||
|
||
<p>那么上面的表格就要做出下面红色部分的修正。在薪酬和职级上,原本的损失都没了。得失关系,也由原来的“大得大失”变成了“大得无失”。此时的环境,就足够支撑大迷糊去做出跳槽的抉择了。</p>
|
||
|
||
<p><img src="assets/CgpVE1_4OhyACU_MAAI3FrPAu7s931.png" alt="图片2.png" /></p>
|
||
|
||
<p>最后,我们为跳槽的决策做一些实战性总结。跳槽时,一定要算清楚、想明白“得”和“失”。在考虑跳槽时机的时候,一定要尽量让结果是增加自己的“得”,降低自己的“失”,充分考虑清楚,千万不能因为一时冲动而做出“小得大失”的决定。那样,最终吃亏的还是自己。</p>
|
||
|
||
<p>另外,在薪酬和职级这两个维度上,通常在上半年的 3~4 月是“失”最小的时间。这是因为,你已经拿到了上一年的年终奖,且绝大多数的互联网公司的晋升和普调都是在这个时间点上。这样,不管是钱还是级,你的损失都已经降到了最低。这也是找工作中常说的“金三银四”背后的道理。</p>
|
||
|
||
<p>当然了,如果你决定跳槽,也一定要在拉勾网这样的大平台上去多多寻找机会。大平台有更多一线以上公司的招聘机会,所以你在公司发展前景这个维度上,会有更多收益。</p>
|
||
|
||
<h3>小结</h3>
|
||
|
||
<p>人生的魅力来自未来的不确定性。也是因此,人们常常需要在不确定性的环境中,做出选择。在做抉择时,一个通用的思路是计算得失。你所有的决策依据,都应该是尽可能降低自己的“失”,而谋求更多的“得”。</p>
|
||
|
||
<p>与此同时,有了数学武器,不代表你能做出最完美的选择。这是因为,在人生的不确定性中,总有你计算之外的不确定因素。因此,在做抉择时,你还需要调整好心态,做到“不以物喜,不以己悲”。只要你计算的过程是正确的,就不需要因为一时的得失而气馁。</p>
|
||
|
||
<p>因为,只要你坚持这样的思考方式,长期统计看,收益一定是更可观的。相信无论哪个决定,只要你脚踏实地,深耕你的专业,热爱你的生活,你一定会有意外之喜。</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
|
||
<div style="float: left">
|
||
|
||
<a href="/专栏/程序员的数学课/22 面试中那些坑了无数人的算法题.md.html">上一页</a>
|
||
|
||
</div>
|
||
|
||
<div style="float: right">
|
||
|
||
<a href="/专栏/程序员的数学课/24 结束语 数学底子好,学啥都快.md.html">下一页</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
|
||
</div>
|
||
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70997bf1bbf03cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
|
||
</body>
|
||
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
|
||
<script>
|
||
|
||
window.dataLayer = window.dataLayer || [];
|
||
|
||
|
||
|
||
function gtag() {
|
||
|
||
dataLayer.push(arguments);
|
||
|
||
}
|
||
|
||
|
||
|
||
gtag('js', new Date());
|
||
|
||
gtag('config', 'G-NPSEEVD756');
|
||
|
||
var path = window.location.pathname
|
||
|
||
var cookie = getCookie("lastPath");
|
||
|
||
console.log(path)
|
||
|
||
if (path.replace("/", "") === "") {
|
||
|
||
if (cookie.replace("/", "") !== "") {
|
||
|
||
console.log(cookie)
|
||
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
setCookie("lastPath", path)
|
||
|
||
}
|
||
|
||
|
||
|
||
function setCookie(cname, cvalue) {
|
||
|
||
var d = new Date();
|
||
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
|
||
var expires = "expires=" + d.toGMTString();
|
||
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
|
||
}
|
||
|
||
|
||
|
||
function getCookie(cname) {
|
||
|
||
var name = cname + "=";
|
||
|
||
var ca = document.cookie.split(';');
|
||
|
||
for (var i = 0; i < ca.length; i++) {
|
||
|
||
var c = ca[i].trim();
|
||
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
|
||
}
|
||
|
||
return "";
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
</html>
|
||
|