<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>小谷的随笔</title><description>小谷的个人博客 - 分享技术思考、学习心得与生活感悟的知识探索园地</description><link>https://www.zzgu.io/</link><item><title>基础的二维微分方程的数值解法</title><link>https://www.zzgu.io/posts/pde-numerical-method-2d/</link><guid isPermaLink="true">https://www.zzgu.io/posts/pde-numerical-method-2d/</guid><description>从一维热方程推广到二维平面，介绍如何使用显式有限差分法模拟正方形薄板上的热扩散，并通过解析解检验数值结果。</description><pubDate>Fri, 17 Jul 2026 09:20:00 GMT</pubDate><content:encoded>&lt;p&gt;在 &lt;a href=&quot;/posts/pde-numerical-method&quot;&gt;求解基础偏微分方程的数值方法&lt;/a&gt; 我们研究的是一根细金属棒上的温度变化。空间中只有一个方向，所以温度可以写成 $u(x,t)$。&lt;/p&gt;
&lt;p&gt;如果把金属棒换成一块薄板，温度不仅随横向位置 $x$ 变化，还会随纵向位置 $y$ 变化。这时温度场需要写成：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
u(x,y,t).&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;从一维推广到二维并不会改变有限差分法的基本思想。我们仍然使用离散网格代替连续空间，只是原来的一排网格点变成了一张网格，每个内部节点也从两个相邻节点变成了四个相邻节点。&lt;/p&gt;
&lt;p&gt;本文考虑一块边长为 2 的正方形薄板，并分别使用 Python 和 MATLAB 模拟热量在平面上的扩散。&lt;/p&gt;
&lt;h2&gt;二维热方程&lt;/h2&gt;
&lt;p&gt;设正方形薄板所占区域为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\Omega=[0,2]\times[0,2].&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;用 $u(x,y,t)$ 表示薄板上位置 $(x,y)$ 在时刻 $t$ 的温度。没有外部热源时，二维热方程为：&lt;/p&gt;
&lt;h1&gt;$$&lt;br /&gt;
\frac{\partial u}{\partial t}&lt;/h1&gt;
&lt;p&gt;\alpha\left(&lt;br /&gt;
\frac{\partial^2u}{\partial x^2}&lt;br /&gt;
+&lt;br /&gt;
\frac{\partial^2u}{\partial y^2}&lt;br /&gt;
\right),&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;其中 $\alpha&amp;gt;0$ 是材料的热扩散系数。括号中的部分也常写作拉普拉斯算子：&lt;/p&gt;
&lt;h1&gt;$$&lt;br /&gt;
\nabla^2u&lt;/h1&gt;
&lt;p&gt;\frac{\partial^2u}{\partial x^2}&lt;br /&gt;
+&lt;br /&gt;
\frac{\partial^2u}{\partial y^2}.&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;因此方程也可以简写为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
u_t=\alpha\nabla^2u.&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;为简单起见，取热扩散系数 $\alpha=1$。&lt;/p&gt;
&lt;h3&gt;边界条件&lt;/h3&gt;
&lt;p&gt;假设薄板四条边始终保持为 0 度，即采用齐次 Dirichlet 边界条件：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
u(0,y,t)&amp;amp;=0, &amp;amp;u(2,y,t)&amp;amp;=0,\&lt;br /&gt;
u(x,0,t)&amp;amp;=0, &amp;amp;u(x,2,t)&amp;amp;=0.&lt;br /&gt;
\end{aligned}&lt;br /&gt;
$$&lt;/p&gt;
&lt;h3&gt;初始条件&lt;/h3&gt;
&lt;p&gt;设初始温度分布为：&lt;/p&gt;
&lt;h1&gt;$$&lt;br /&gt;
u(x,y,0)&lt;/h1&gt;
&lt;p&gt;3\sin\left(\frac{\pi x}{2}\right)&lt;br /&gt;
\sin\left(\frac{\pi y}{2}\right).&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;薄板中心 $(1,1)$ 的初始温度最高，为 3；越靠近边缘，初始温度越低，并在四条边上恰好等于 0。&lt;/p&gt;
&lt;h2&gt;二维有限差分格式&lt;/h2&gt;
&lt;p&gt;分别在 $x$ 和 $y$ 方向划分网格：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
x_i=i\Delta x,\qquad y_j=j\Delta y,&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;时间方向上的离散时刻为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
t_n=n\Delta t.&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;记&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
u_{i,j}^n\approx u(x_i,y_j,t_n).&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;也就是说，上标 $n$ 表示时间层，下标 $i,j$ 表示平面网格中的位置。&lt;/p&gt;
&lt;h3&gt;时间向前差分&lt;/h3&gt;
&lt;p&gt;在时间方向使用向前差分：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial u}{\partial t}&lt;br /&gt;
\approx&lt;br /&gt;
\frac{u_{i,j}^{n+1}-u_{i,j}^n}{\Delta t}.&lt;br /&gt;
$$&lt;/p&gt;
&lt;h3&gt;空间中心差分&lt;/h3&gt;
&lt;p&gt;在两个空间方向都使用中心差分：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial^2u}{\partial x^2}&lt;br /&gt;
\approx&lt;br /&gt;
\frac{u_{i+1,j}^n-2u_{i,j}^n+u_{i-1,j}^n}{\Delta x^2},&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial^2u}{\partial y^2}&lt;br /&gt;
\approx&lt;br /&gt;
\frac{u_{i,j+1}^n-2u_{i,j}^n+u_{i,j-1}^n}{\Delta y^2}.&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;将它们代入二维热方程，定义：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
r_x=\frac{\alpha\Delta t}{\Delta x^2},&lt;br /&gt;
\qquad&lt;br /&gt;
r_y=\frac{\alpha\Delta t}{\Delta y^2},&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;便得到显式有限差分格式：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\begin{aligned}&lt;br /&gt;
u_{i,j}^{n+1}&lt;br /&gt;
= {} &amp;amp;(1-2r_x-2r_y)u_{i,j}^n\&lt;br /&gt;
&amp;amp;+r_x\left(u_{i-1,j}^n+u_{i+1,j}^n\right)\&lt;br /&gt;
&amp;amp;+r_y\left(u_{i,j-1}^n+u_{i,j+1}^n\right).&lt;br /&gt;
\end{aligned}&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;计算下一时刻某个节点的温度，只需要当前节点及其上、下、左、右四个相邻节点的温度。这种结构通常称为五点差分模板。&lt;/p&gt;
&lt;p&gt;当两个方向使用相同的空间步长 $h=\Delta x=\Delta y$ 时，令&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
r=\frac{\alpha\Delta t}{h^2},&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;格式可以简化为：&lt;/p&gt;
&lt;h1&gt;$$&lt;br /&gt;
u_{i,j}^{n+1}&lt;/h1&gt;
&lt;p&gt;(1-4r)u_{i,j}^n&lt;br /&gt;
+r\left(&lt;br /&gt;
u_{i-1,j}^n+u_{i+1,j}^n&lt;br /&gt;
+u_{i,j-1}^n+u_{i,j+1}^n&lt;br /&gt;
\right).&lt;br /&gt;
$$&lt;/p&gt;
&lt;h2&gt;稳定性条件&lt;/h2&gt;
&lt;p&gt;二维显式格式的稳定条件为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
r_x+r_y\le\frac12.&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;如果 $\Delta x=\Delta y=h$，则 $r_x=r_y=r$，所以：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
r\le\frac14.&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;这个条件也可以从加权平均的角度理解。当 $r\le 1/4$ 时，中心节点的系数 $1-4r$ 和四个相邻节点的系数 $r$ 都是非负数，而且所有系数之和为 1。新温度是旧温度的加权平均，不会凭空产生异常的极大值或极小值。&lt;/p&gt;
&lt;p&gt;与一维问题相比，二维节点拥有更多邻居，因此相同空间步长下允许使用的时间步长更小。程序中应始终检查：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rx = alpha * dt / dx**2
ry = alpha * dt / dy**2
assert rx + ry &amp;lt;= 0.5
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;使用 Python 求解&lt;/h2&gt;
&lt;p&gt;首先导入依赖：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import matplotlib.pyplot as plt
import numpy as np
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;设置空间和时间网格&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;alpha = 1.0

x0, xL = 0.0, 2.0
y0, yL = 0.0, 2.0

Nx = 40
Ny = 40

x = np.linspace(x0, xL, Nx + 1)
y = np.linspace(y0, yL, Ny + 1)

dx = (xL - x0) / Nx
dy = (yL - y0) / Ny

dt = 0.0005
steps = 1000
t = np.arange(steps + 1) * dt

rx = alpha * dt / dx**2
ry = alpha * dt / dy**2

assert rx + ry &amp;lt;= 0.5, (
    f&quot;Unstable: rx + ry = {rx + ry:.4f} &amp;gt; 0.5&quot;
)

print(f&quot;dx = {dx:.4f}, dy = {dy:.4f}&quot;)
print(f&quot;dt = {dt:.6f}, rx + ry = {rx + ry:.4f}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里 $\Delta x=\Delta y=0.05$，所以 $r_x=r_y=0.2$，满足：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
r_x+r_y=0.4\le0.5.&lt;br /&gt;
$$&lt;/p&gt;
&lt;h3&gt;设置初始条件&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;meshgrid&lt;/code&gt; 可以将两个一维坐标数组组合成二维坐标网格：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;X, Y = np.meshgrid(x, y, indexing=&quot;ij&quot;)

def initial_profile(x, y):
    return (
        3
        * np.sin(np.pi * x / 2)
        * np.sin(np.pi * y / 2)
    )

u = initial_profile(X, Y)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;数组 &lt;code&gt;u[i, j]&lt;/code&gt; 保存网格点 $(x_i,y_j)$ 的温度。&lt;/p&gt;
&lt;p&gt;为了绘制不同时刻的结果，可以只保存需要观察的时间切片，而不必保留每一步的完整二维数组：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;snapshot_steps = {0, 100, 400, 1000}
snapshots = {0: u.copy()}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;时间迭代&lt;/h3&gt;
&lt;p&gt;只更新内部节点，边界节点始终保持为 0：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for n in range(steps):
    u_new = u.copy()

    u_new[1:-1, 1:-1] = (
        (1 - 2 * rx - 2 * ry) * u[1:-1, 1:-1]
        + rx * (u[2:, 1:-1] + u[:-2, 1:-1])
        + ry * (u[1:-1, 2:] + u[1:-1, :-2])
    )

    u_new[0, :] = 0
    u_new[-1, :] = 0
    u_new[:, 0] = 0
    u_new[:, -1] = 0

    u = u_new

    if n + 1 in snapshot_steps:
        snapshots[n + 1] = u.copy()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NumPy 的切片运算同时更新所有内部节点，代码与五点差分公式一一对应，也避免了两层 Python 循环。&lt;/p&gt;
&lt;h3&gt;可视化温度场&lt;/h3&gt;
&lt;p&gt;使用等高填色图展示四个时刻的温度分布：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fig, axes = plt.subplots(2, 2, figsize=(10, 8))

for ax, step in zip(axes.flat, sorted(snapshot_steps)):
    contour = ax.contourf(
        X,
        Y,
        snapshots[step],
        levels=30,
        cmap=&quot;hot&quot;,
        vmin=0,
        vmax=3,
    )
    ax.set_title(f&quot;t = {step * dt:.2f}&quot;)
    ax.set_xlabel(&quot;x&quot;)
    ax.set_ylabel(&quot;y&quot;)
    ax.set_aspect(&quot;equal&quot;)

fig.colorbar(contour, ax=axes, label=&quot;u(x, y, t)&quot;)
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随着时间增加，温度分布仍然关于薄板中心对称，但最高温度不断下降，热量逐渐从四条低温边界散失。&lt;/p&gt;
&lt;p&gt;也可以使用三维曲面展示最终时刻：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(projection=&quot;3d&quot;)
ax.plot_surface(X, Y, u, cmap=&quot;hot&quot;)

ax.set_title(f&quot;Solution at t = {steps * dt:.2f}&quot;)
ax.set_xlabel(&quot;x&quot;)
ax.set_ylabel(&quot;y&quot;)
ax.set_zlabel(&quot;u&quot;)

plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;使用解析解验证&lt;/h2&gt;
&lt;p&gt;这组初始条件不仅形状简单，而且拥有解析解：&lt;/p&gt;
&lt;h1&gt;$$&lt;br /&gt;
u(x,y,t)&lt;/h1&gt;
&lt;p&gt;3e^{-\frac{\pi^2}{2}t}&lt;br /&gt;
\sin\left(\frac{\pi x}{2}\right)&lt;br /&gt;
\sin\left(\frac{\pi y}{2}\right).&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;二维情况下，$x$ 和 $y$ 两个方向的扩散作用相加，因此指数衰减率是一维问题的两倍。温度场的空间形状保持不变，振幅则随时间指数衰减。&lt;/p&gt;
&lt;p&gt;可以在最终时刻计算最大绝对误差：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;final_time = steps * dt

u_exact = (
    3
    * np.exp(-(np.pi**2 / 2) * final_time)
    * np.sin(np.pi * X / 2)
    * np.sin(np.pi * Y / 2)
)

max_error = np.max(np.abs(u - u_exact))
print(f&quot;Maximum error at t={final_time:.2f}: {max_error:.6e}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;还可以绘制误差场：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;plt.figure(figsize=(6, 5))
plt.contourf(X, Y, np.abs(u - u_exact), levels=30, cmap=&quot;viridis&quot;)
plt.colorbar(label=&quot;absolute error&quot;)
plt.xlabel(&quot;x&quot;)
plt.ylabel(&quot;y&quot;)
plt.title(f&quot;Absolute error at t = {final_time:.2f}&quot;)
plt.axis(&quot;equal&quot;)
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显式 FTCS 格式在时间方向具有一阶精度，在两个空间方向具有二阶精度，其截断误差可以写为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
O(\Delta t)+O(\Delta x^2)+O(\Delta y^2).&lt;br /&gt;
$$&lt;/p&gt;
&lt;h2&gt;MATLAB 代码&lt;/h2&gt;
&lt;p&gt;下面给出对应的完整 MATLAB 实现：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;% 二维热方程的显式有限差分解法
%
% 方程：
%   du/dt = alpha * (d^2u/dx^2 + d^2u/dy^2)
%
% 稳定条件：
%   rx + ry &amp;lt;= 1/2

clear;
clc;
close all;

%% 参数设置

alpha = 1.0;

x0 = 0.0;
xL = 2.0;
y0 = 0.0;
yL = 2.0;

Nx = 40;
Ny = 40;

x = linspace(x0, xL, Nx + 1);
y = linspace(y0, yL, Ny + 1);

dx = (xL - x0) / Nx;
dy = (yL - y0) / Ny;

dt = 0.0005;
steps = 1000;

rx = alpha * dt / dx^2;
ry = alpha * dt / dy^2;

assert(rx + ry &amp;lt;= 0.5, ...
    &apos;Unstable: rx + ry = %.4f &amp;gt; 0.5&apos;, rx + ry);

fprintf(&apos;dx = %.4f, dy = %.4f\n&apos;, dx, dy);
fprintf(&apos;dt = %.6f, rx + ry = %.4f\n&apos;, dt, rx + ry);

%% 初始条件

[X, Y] = ndgrid(x, y);

u = 3 .* sin(pi .* X ./ 2) .* sin(pi .* Y ./ 2);

snapshotSteps = [0, 100, 400, 1000];
snapshots = zeros(Nx + 1, Ny + 1, length(snapshotSteps));
snapshots(:, :, 1) = u;

%% 时间迭代

for n = 1:steps
    uNew = u;

    uNew(2:end-1, 2:end-1) = ...
        (1 - 2 * rx - 2 * ry) .* u(2:end-1, 2:end-1) ...
        + rx .* (u(3:end, 2:end-1) + u(1:end-2, 2:end-1)) ...
        + ry .* (u(2:end-1, 3:end) + u(2:end-1, 1:end-2));

    % 四条边保持为 0
    uNew(1, :) = 0;
    uNew(end, :) = 0;
    uNew(:, 1) = 0;
    uNew(:, end) = 0;

    u = uNew;

    index = find(snapshotSteps == n, 1);
    if ~isempty(index)
        snapshots(:, :, index) = u;
    end
end

%% 绘制温度场

figure;
tiledlayout(2, 2);

for k = 1:length(snapshotSteps)
    nexttile;
    contourf(X, Y, snapshots(:, :, k), 30, &apos;LineColor&apos;, &apos;none&apos;);
    axis equal tight;
    clim([0, 3]);
    colorbar;
    xlabel(&apos;x&apos;);
    ylabel(&apos;y&apos;);
    title(sprintf(&apos;t = %.2f&apos;, snapshotSteps(k) * dt));
end

colormap(hot);

%% 与解析解比较

finalTime = steps * dt;

uExact = 3 .* exp(-(pi^2 / 2) * finalTime) ...
    .* sin(pi .* X ./ 2) .* sin(pi .* Y ./ 2);

maxError = max(abs(u - uExact), [], &apos;all&apos;);
fprintf(&apos;Maximum error at t=%.2f: %.6e\n&apos;, finalTime, maxError);

figure;
surf(X, Y, u);
shading interp;
colormap(hot);
colorbar;
xlabel(&apos;x&apos;);
ylabel(&apos;y&apos;);
zlabel(&apos;u(x,y,t)&apos;);
title(sprintf(&apos;Numerical solution at t = %.2f&apos;, finalTime));
view(45, 30);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://img.zzgu.io/blog/heat_2d.png&quot; alt=&quot;MATLAB 可视化的结果&quot; /&gt;&lt;/p&gt;
&lt;p&gt;由于现在多了一个维度，总共有 4 个维度，$(x,y,u,t)$ 无法在三维上完成完整的可视化。可以通过设定不同的时间 &lt;code&gt;t&lt;/code&gt; 感受温度变化：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img.zzgu.io/blog/heat_2d_time.png&quot; alt=&quot;不同时间的温度变化&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;从一维到二维发生了什么&lt;/h2&gt;
&lt;p&gt;从算法上看，一维与二维热方程的主要区别可以概括为：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;一维&lt;/th&gt;
&lt;th&gt;二维&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;空间区域&lt;/td&gt;
&lt;td&gt;线段&lt;/td&gt;
&lt;td&gt;平面区域&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;解的表示&lt;/td&gt;
&lt;td&gt;$u(x,t)$&lt;/td&gt;
&lt;td&gt;$u(x,y,t)$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内部节点的邻居&lt;/td&gt;
&lt;td&gt;左、右&lt;/td&gt;
&lt;td&gt;上、下、左、右&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;差分模板&lt;/td&gt;
&lt;td&gt;三点&lt;/td&gt;
&lt;td&gt;五点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;等距网格稳定条件&lt;/td&gt;
&lt;td&gt;$r\le 1/2$&lt;/td&gt;
&lt;td&gt;$r\le 1/4$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;单个时间层的数据量&lt;/td&gt;
&lt;td&gt;$O(N)$&lt;/td&gt;
&lt;td&gt;$O(N^2)$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;二维问题不仅需要更多网格点，而且稳定条件更加严格。当空间步长缩小一半时，为保持稳定，时间步长最多只能取原来的四分之一；与此同时，平面上的网格点数量大约变成原来的四倍。因此，高分辨率二维模拟的计算量会迅速增加。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;二维热方程仍然遵循与一维问题相同的离散思路：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将连续平面划分成有限个网格点；&lt;/li&gt;
&lt;li&gt;使用向前差分近似时间导数；&lt;/li&gt;
&lt;li&gt;使用中心差分近似两个方向的二阶空间导数；&lt;/li&gt;
&lt;li&gt;根据五点差分模板逐层推进温度场；&lt;/li&gt;
&lt;li&gt;检查 $r_x+r_y\le1/2$，确保显式格式稳定；&lt;/li&gt;
&lt;li&gt;使用解析解和误差场验证程序。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;显式有限差分法直观、容易实现，非常适合用来理解二维扩散过程。但它的时间步长受到稳定条件限制。对于更细的网格或更长时间的模拟，可以进一步考虑后向欧拉法、Crank–Nicolson 方法，或者交替方向隐式方法（ADI）。&lt;/p&gt;
</content:encoded></item><item><title>求解基础偏微分方程的数值方法</title><link>https://www.zzgu.io/posts/pde-numerical-method/</link><guid isPermaLink="true">https://www.zzgu.io/posts/pde-numerical-method/</guid><description>最经典的一维热方程为例，介绍如何使用有限差分法，把一个连续的偏微分方程转化成计算机可以执行的数值算法，并分别使用 Python 和 MATLAB 实现。</description><pubDate>Fri, 17 Jul 2026 01:46:47 GMT</pubDate><content:encoded>&lt;p&gt;偏微分方程的求解非常困难，无论是解析还是数值方法，然而在多维度、连续变化且相互耦合的复杂现象（如流体流动、电磁波传播、金融市场波动等）的建模中又需要偏微分方程。&lt;/p&gt;
&lt;p&gt;偏微分方程听起来可能有些抽象，但它研究的其实是一些非常具体的问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一根金属棒被加热后，温度怎样随时间变化？&lt;/li&gt;
&lt;li&gt;水面上的波纹怎样传播？&lt;/li&gt;
&lt;li&gt;空气中的污染物怎样扩散？&lt;/li&gt;
&lt;li&gt;一块薄膜受力后怎样振动？&lt;/li&gt;
&lt;li&gt;电磁场怎样在空间中传播？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些问题的共同特点是：&lt;strong&gt;我们关心的量不仅随时间变化，也随空间位置变化。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;一维热方程&lt;/h2&gt;
&lt;p&gt;这算是偏微分方程最经典（简单）的例子了。想象一根长度为 2 米的细金属棒。&lt;/p&gt;
&lt;p&gt;我们用 $x$ 表示金属棒上的位置：$0\le x\le 2$。&lt;/p&gt;
&lt;p&gt;用 $t$ 表示时间，用函数 $u(x,t)$ 表示位置 $x$ 在时刻 $t$ 的温度。&lt;/p&gt;
&lt;p&gt;如果 $u(1,0)=3$，则表示在初始时刻 $t=0$，金属棒中点 $x=1$ 的温度为 3。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一维热方程&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial u}{\partial t} = \alpha\frac{\partial^2u}{\partial x^2} + f(x, t)&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;为简单起见，我们取 $f(t,x)=0$，即系统不被加热或冷却。方程简化为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial u}{\partial t} = \alpha\frac{\partial^2u}{\partial x^2}&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;假设热扩散系数 $\alpha = 1$，进一步简化为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial u}{\partial t} = \frac{\partial^2u}{\partial x^2}&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;设置边界条件：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
u(0,t)=u(2,t)=0&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;意味着无论何时，两端的温度都是 0。&lt;/p&gt;
&lt;p&gt;设定初始温度曲线函数为：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
u(0, x) = 3sin(\frac{\pi}{2}x), (0\le x\le 2)&lt;br /&gt;
$$&lt;/p&gt;
&lt;h2&gt;有限差分法（FEM）&lt;/h2&gt;
&lt;p&gt;有限差分法核心思想是用有限的差分代替无限的微分，把微积分问题变成代数方程组。这个方法是数值分析和科学计算中最经典、最直观，也是历史最悠久的偏微分方程（PDE）数值求解方法。&lt;/p&gt;
&lt;p&gt;程序涉及的依赖：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits import mplot3d
from scipy import sparse
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;设定条件&lt;/h3&gt;
&lt;p&gt;创建系统物理约束条件的变量，包括金属棒的长度范围和扩散系数 α 的值：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alpha = 1
x0 = 0
xL = 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;划分区间&lt;/h3&gt;
&lt;p&gt;使用 &lt;code&gt;N + 1&lt;/code&gt; 个点将 &lt;code&gt;x&lt;/code&gt; 的范围划分为 &lt;code&gt;N&lt;/code&gt; 个等间隔的区间（相当于对空间的划分）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;N = 10
x = np.linspace(x0, xL, N + 1)
h = (xL - x0) / N
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;划分时间&lt;/h3&gt;
&lt;p&gt;我们需要设置时间方向上的步长。在这里设置了时间步长 &lt;code&gt;k&lt;/code&gt; 和步数（在隐含意义上，我们假设从时间 0 开始）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k = 0.01
steps = 100
t = np.array([i * k for i in range(steps + 1)])
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;稳定性&lt;/h3&gt;
&lt;p&gt;由于这里用的是显式有限差分格式，也叫 &lt;strong&gt;FTCS&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Forward Time：时间向前差分&lt;/li&gt;
&lt;li&gt;Centered Space：空间中心差分&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;稳定条件为 $r \le 0.5$，其中&lt;br /&gt;
$$&lt;br /&gt;
r = \frac{ak}{h^2}&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;所以有：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;r = alpha * k / h ** 2
assert r &amp;lt; 0.5, f&quot;Must have r &amp;lt; 0.5, currently r = {r}&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果是不稳定的，微小的扰动就会像雪崩一样迅速放大，最终导致系统崩溃或计算结果炸掉，比如输出为无穷大或 &lt;code&gt;NaN&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;为什么 $r=\dfrac{\alpha k}{h^2}$&lt;/h3&gt;
&lt;p&gt;一阶差分：&lt;br /&gt;
$$&lt;br /&gt;
\Delta f(x_0) = f(x_0 + \Delta x) - f(x_0)&lt;br /&gt;
$$&lt;br /&gt;
二阶差分：&lt;br /&gt;
$$&lt;br /&gt;
\begin{align*}&lt;br /&gt;
\Delta^2 f(x_0) &amp;amp;= \Delta f(x_0 + \Delta x) - \Delta f(x_0) \&lt;br /&gt;
&amp;amp;= (f(x_0 + 2 \Delta x) - f(x_0 + \Delta x)) - (f(x_0 + \Delta x) - f(x_0)) \&lt;br /&gt;
&amp;amp;= f(x_0 + 2 \Delta x) - 2f(x_0 + \Delta x) + f(x_0)&lt;br /&gt;
\end{align*}&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;对时间导数使用向前差分：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial u}{\partial t}&lt;br /&gt;
\approx&lt;br /&gt;
\frac{u_j^{n+1}-u_j^n}{k},&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;对空间二阶导数使用中心差分：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{\partial^2u}{\partial x^2}&lt;br /&gt;
\approx&lt;br /&gt;
\frac{u_{j+1}^n-2u_j^n+u_{j-1}^n}{h^2}.&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;代入热方程：&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\frac{u_j^{n+1}-u_j^n}{k} =\alpha\frac{u_{j+1}^n-2u_j^n+u_{j-1}^n}{h^2}&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;两边乘以 $k$：&lt;/p&gt;
&lt;h1&gt;$$&lt;br /&gt;
u_j^{n+1}-u_j^n&lt;/h1&gt;
&lt;p&gt;\frac{\alpha k}{h^2}&lt;br /&gt;
\left(&lt;br /&gt;
u_{j+1}^n-2u_j^n+u_{j-1}^n&lt;br /&gt;
\right)&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;于是定义&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
r=\frac{\alpha k}{h^2}&lt;br /&gt;
$$&lt;/p&gt;
&lt;p&gt;公式就可以简写为差分形式：&lt;/p&gt;
&lt;h1&gt;$$&lt;br /&gt;
u_j^{n+1}&lt;/h1&gt;
&lt;p&gt;r u_{j-1}^n&lt;br /&gt;
+&lt;br /&gt;
(1-2r)u_j^n&lt;br /&gt;
+&lt;br /&gt;
r u_{j+1}^n&lt;br /&gt;
$$&lt;/p&gt;
&lt;h3&gt;保存有限差分方案的系数&lt;/h3&gt;
&lt;p&gt;可以构建一个矩阵来保存有限差分方案的系数。&lt;/p&gt;
&lt;p&gt;为此，我们使用 &lt;code&gt;scipy.sparse&lt;/code&gt; 模块中的 &lt;code&gt;diags&lt;/code&gt; 来创建一个稀疏的对角矩阵：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;diag = [1, *(1 - 2*r for _ in range(N - 1)), 1]
abv_diag = [0, *(r for _ in range(N - 1))]
blw_diag = [*(r for _ in range(N - 1)), 0]

A = sparse.diags([blw_diag, diag, abv_diag], (-1, 0, 1),
                 shape=(N + 1, N + 1), dtype=np.float64, format=&quot;csr&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;空白矩阵保存解&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;u = np.zeros((steps + 1, N + 1), dtype=np.float64)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;初始温度曲线&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;def initial_profile(x):
    return 3 * np.sin(np.pi * x / 2)

u[0, :] = initial_profile(x)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;求解&lt;/h3&gt;
&lt;p&gt;循环执行每一步，通过将矩阵与前一行相乘计算矩阵的下一行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for i in range(steps):
    u[i + 1, :] = A @ u[i, :]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;可视化&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;X, T = np.meshgrid(x, t)
fig = plt.figure()
ax = fig.add_subplot(projection=&quot;3d&quot;)
ax.plot_surface(T, X, u, cmap=&quot;gray&quot;)

ax.set_title(&quot;Solution of the heat equation&quot;)
ax.set_xlabel(&quot;t&quot;)
ax.set_ylabel(&quot;x&quot;)
ax.set_zlabel(&quot;u&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;MATLAB 代码&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;% 偏微分方程的数值求解
% 一维热方程
%
% 方程：
%     du/dt = alpha * d^2u/dx^2
%
% 使用显式有限差分格式 FTCS：
%     u_j^(n+1) = r*u_(j-1)^n + (1-2r)*u_j^n + r*u_(j+1)^n

clear;
clc;
close all;

%% 参数设置

alpha = 1;

x0 = 0;
xL = 2;

%% 空间差分

N = 10;                          % 空间区间数量
x = linspace(x0, xL, N + 1);     % N+1 个网格点
h = (xL - x0) / N;               % 空间步长

%% 时间步长

k = 0.01;                        % 时间步长
steps = 100;                     % 时间迭代次数
t = (0:steps) * k;               % 时间网格

%% 稳定性参数

r = alpha * k / h^2;

assert(r &amp;lt; 0.5, ...
    sprintf(&apos;Must have r &amp;lt; 0.5, currently r = %.6f&apos;, r));

fprintf(&apos;h = %.4f\n&apos;, h);
fprintf(&apos;k = %.4f\n&apos;, k);
fprintf(&apos;r = %.4f\n&apos;, r);

%% 构造有限差分系数矩阵

% 初始化稀疏矩阵
A = sparse(N + 1, N + 1);

% 左边界保持不变
A(1, 1) = 1;

% 内部网格点
for j = 2:N
    A(j, j - 1) = r;
    A(j, j)     = 1 - 2 * r;
    A(j, j + 1) = r;
end

% 右边界保持不变
A(N + 1, N + 1) = 1;

%% 初始化解矩阵

% 行表示时间，列表示空间
u = zeros(steps + 1, N + 1);

%% 初始条件

initial_profile = @(x) 3 * sin(pi * x / 2);

u(1, :) = initial_profile(x);

%% 时间迭代

for n = 1:steps
    % MATLAB 中列向量与矩阵相乘，因此需要进行转置
    u(n + 1, :) = (A * u(n, :)&apos;)&apos;;
end

%% 绘制三维曲面

[X, T] = meshgrid(x, t);

figure;

surf(T, X, u);

colormap(gray);
shading interp;

title(&apos;Solution of the heat equation&apos;);
xlabel(&apos;t&apos;);
ylabel(&apos;x&apos;);
zlabel(&apos;u(x,t)&apos;);

grid on;
view(45, 30);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://img.zzgu.io/blog/heat.png&quot; alt=&quot;MATLAB 可视化的结果&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>《人间词话》的审美取向和哲学背景</title><link>https://www.zzgu.io/posts/poetic-remarks-on-the-human-world-1/</link><guid isPermaLink="true">https://www.zzgu.io/posts/poetic-remarks-on-the-human-world-1/</guid><description>要理解人间词话，就不得不回到叔本华哲学，要理解叔本华哲学，又需要了解佛学（印度神秘主义）、康德和柏拉图。</description><pubDate>Fri, 17 Jul 2026 01:46:47 GMT</pubDate><content:encoded>&lt;p&gt;王国维在《人间词话》里讲的「境界」，和我们日常理解的境界并不是一回事。境界并非王国维的独创之见，而是源于叔本华哲学。&lt;/p&gt;
&lt;p&gt;叔本华哲学是由康德、柏拉图和古印度神秘主义（包括佛教）这三块基石支撑起来的。&lt;/p&gt;
&lt;h2&gt;王国维&lt;/h2&gt;
&lt;p&gt;王国维（1877 年12月3日－1927 年6月2日），初名国桢，字静安（庵）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1904 年，王国维苦读康德《纯粹理性批判》与叔本华《作为意志和表象的世界》​，以叔本华哲学为根底撰写《红楼梦评论》​；&lt;/li&gt;
&lt;li&gt;1905 年，撰《论哲学家及美术家之天职》​；&lt;/li&gt;
&lt;li&gt;1906 年，撰《教育小言十二则》​，汇集近年词作刊为《人间词甲稿》​；&lt;/li&gt;
&lt;li&gt;1907 年，撰《教育小言》十三则、​《古雅之在美学上之位置》​、​《三十自序》​。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1908 年，大约在夏秋之际，王国维开始撰写《人间词话》​。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上自然不是王国维这几年撰述的全部，却是我们今天理解《人间词话》最应该参照的材料。&lt;/p&gt;
&lt;h2&gt;古印度的神秘主义与佛教&lt;/h2&gt;
&lt;h3&gt;六道轮回&lt;/h3&gt;
&lt;p&gt;很少有人知道，六道轮回是佛陀生活的时代里印度各宗各教早已形成的一种信仰共识。&lt;/p&gt;
&lt;p&gt;换言之，当时的&lt;strong&gt;印度人一生下来便浸淫在这样一种信仰环境里&lt;/strong&gt;，不自觉中便以六道轮回为天经地义。&lt;/p&gt;
&lt;p&gt;古老的《梵书》：​「为善者当受善生，为恶者当受恶生，依净行而净，依污行而污。​」&lt;/p&gt;
&lt;h3&gt;四圣谛&lt;/h3&gt;
&lt;p&gt;据佛教经典的通常说法，在尚未证悟成佛之时，乔达摩·悉达多王子有一次在城中巡行，于东、西、南、北四座城门处分别见到 &lt;strong&gt;生苦、老苦、病苦、死苦&lt;/strong&gt; 的景象，使他那颗悲天悯人的心灵大震撼，而佛法修证的端倪也在这一天悄然萌生了。&lt;/p&gt;
&lt;p&gt;悉达多王子从此舍弃王位，抛妻弃子，以无上坚定的决心寻求彻底的解脱之道，终于在 &lt;strong&gt;菩提树下悟出四圣谛。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所谓四圣谛，即四大真理：&lt;strong&gt;苦、集、灭、道&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;苦谛&lt;/strong&gt; 揭示世间一切皆苦，短暂的快乐非但微不足道，反而会成为更深一层痛苦的根源。&lt;/p&gt;
&lt;p&gt;人生皆苦，要想找出痛苦的根源，就必须参透 &lt;strong&gt;集谛&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;集即因缘和合&lt;/strong&gt;：宇宙人生，一举一动，莫不在因果律的制约之下，六道轮回皆由业力所致，前世之宿业与今生之现业结成一个又一个的苦果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;贪、嗔、痴、慢（骄傲）​、疑、见（偏见）六类烦恼在其中推波助澜，所有业力与烦恼皆生于无明，归于苦痛。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;既然悲观厌世到这种程度，那么 &lt;strong&gt;自杀&lt;/strong&gt; 显然是我们最容易想到的解脱之道。&lt;/p&gt;
&lt;p&gt;但是，在六道轮回的信仰背景下，&lt;strong&gt;自杀非但毫无意义，反而会造下新的恶业，使来生承担新的恶果&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;只有摆脱轮回才是真正意义上的解脱。&lt;/p&gt;
&lt;p&gt;永恒的轮回缘于生生灭灭永不断绝的 &lt;strong&gt;业力&lt;/strong&gt;，那么显而易见的是，只要想个办法使业力终结。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;终结业力的办法是去除欲望，只要我们对生活不再有任何欲望就可以了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;性欲、贪欲、嗔欲，等等等等，待它们一一遵循 &lt;strong&gt;正道（道谛）&lt;/strong&gt; ​，经由非常手段被修行者彻底驯服之后，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;贪欲永尽，嗔恚（huì）永尽，愚痴永尽，一切诸烦恼永尽​。——​《杂阿含经》​&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们就彻底从六道轮回当中解脱出来。这样一种解脱状态，佛教称之为 &lt;strong&gt;涅槃&lt;/strong&gt;。至于涅槃究竟是怎样的一种状态，这就是无法言说之境了。&lt;/p&gt;
&lt;h3&gt;摩耶之幕&lt;/h3&gt;
&lt;p&gt;《梨俱吠陀》是古印度吠陀时代的一部典籍，其中有 &lt;strong&gt;「彼以摩耶，揭示宇宙」&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你以为山河大地、日月星辰都是真实存在的吗？&lt;/p&gt;
&lt;p&gt;那你就大错特错了，全部宇宙其实只是 &lt;strong&gt;婆楼那神&lt;/strong&gt; 施展的一套幻术，全是幻象。&lt;/p&gt;
&lt;p&gt;一旦婆楼那神收回幻术，宇宙也就消失不见，我们所信以为真的客观世界不过是天神为了娱乐而施展的神通。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;认真生活的人是最愚蠢不过的，被我们信以为真的世界只不过是一张摩耶之幕，虚幻不实&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;那么生活究竟是什么？宇宙人生的真相究竟是什么？&lt;/p&gt;
&lt;p&gt;要想洞悉真相，就必须透过摩耶之幕，看到被这张大幕所掩盖的东西才行。&lt;/p&gt;
&lt;p&gt;接下来的问题：如果我们看破了这个奥秘，应该怎么办才好呢？&lt;/p&gt;
&lt;p&gt;答案只有一个：&lt;strong&gt;冲破幻象，直达本真，梵我一如。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个思想后来被佛教沿袭下来，发展出了三界唯识、万法唯心、寂静涅槃等理论。&lt;/p&gt;
&lt;h3&gt;缘起性空&lt;/h3&gt;
&lt;p&gt;在佛教的观点里，一切物质、运动，都是因缘聚合的结果，本身并不存在实在的属性，这种「空幻不实」也就是佛教常说的「空」​。&lt;/p&gt;
&lt;p&gt;佛教思想中一个 &lt;strong&gt;最根本的概念——因缘&lt;/strong&gt;。佛法种种，大都是附着在这个「因缘」概念之上的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一切事物、现象都不是独立存在的，而是纠缠在因果关系的链条里，受着因果律的制约，此生而彼生，此灭而彼灭。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;万事万物，成住异灭不出此理，是谓 &lt;strong&gt;「诸行无常」&lt;/strong&gt; ​，这就是佛教所谓「四法印」中的第一法印。&lt;/p&gt;
&lt;p&gt;如果认识不到万事万物的无常本质而错认为有些事物是恒常不变的，这类见解是为 &lt;strong&gt;「常见」&lt;/strong&gt; ​，人们必须屏弃「常见」才能认识佛法。&lt;/p&gt;
&lt;p&gt;虽然万事无常，它们却无一不是按照因果律生生灭灭，绵延无尽。&lt;/p&gt;
&lt;p&gt;如果只看到「灭」却看不到「生」​，或者只看到「生」却看不到「灭」​，都是因为没有认识清楚因果链条的绵延无尽的性质，这类见解是为 &lt;strong&gt;「断见」&lt;/strong&gt; ​，同样需要加以屏弃。&lt;/p&gt;
&lt;h3&gt;六大与五蕴&lt;/h3&gt;
&lt;p&gt;佛教称一切生灵为「有情」​，一个「有情」并非一个单独的个体，而是种种物质元素和精神元素的聚合体。&lt;/p&gt;
&lt;p&gt;这些元素归纳起来就是 &lt;strong&gt;「六大」​，即地、水、火、风、空、识。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​「六大」 之中，地为骨肉，水为血液，火为暖意，风为呼吸，空为空隙，识为精神。​&lt;/p&gt;
&lt;p&gt;「有情」从另一个角度来说又是「五蕴」的聚合，&lt;strong&gt;​「五蕴」即色、受、想、行、识&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;是故空中无色，无受想行识，无眼耳鼻舌身意，无色声香味触法。——《般若波罗蜜多心经》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这话几乎人人熟知。既然「有情」​（在这里也可以把「有情」代入为「我」​）并非一个独立存在，而是「六大」和「五蕴」的聚合体，其中种种细小的元素刹那间相生相灭，那这个「我」​，究竟又在哪里？&lt;/p&gt;
&lt;p&gt;有一句著名的佛偈说 &lt;strong&gt;「从前种种，譬如昨日死；从后种种，譬如今日生」​。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;龙军菩萨《弥兰陀王问经》里有过一个比喻，说轮回就像有一支燃烧的蜡烛，你拿着这支燃烧的蜡烛去点燃一支新蜡烛，你会看到火从这支蜡烛传到了那支蜡烛上去，轮回的主体就像这个火一样，你既不能说新蜡烛上的火就是原来那支蜡烛上的火，也不能说这两支蜡烛上的火是毫无关系的。&lt;/p&gt;
&lt;h3&gt;空&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;诸行无常：否定客观世界的真实性&lt;/li&gt;
&lt;li&gt;诸法无我：否定主观自我的真实性&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以在佛法修行里有两大破坏性工作要做，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「破法执」​，即证悟客观世界只是虚像；&lt;/li&gt;
&lt;li&gt;「破我执」​，即证悟主观之自我也是虚像。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;空，并非一无所有，而是「没有自性」的意思。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;简单说，一切事物都是因缘聚散，并不存在什么恒久远、永流传的东西。&lt;/p&gt;
&lt;h2&gt;休谟的怀疑主义&lt;/h2&gt;
&lt;p&gt;休谟在写出他的哲学名著《人性论》时还只有二十几岁，我们很难相信这样一个涉世未深的青年居然可以对人性有如此深刻的理解。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在《人性论》里，休谟和佛陀一样指出所谓「自我」这个概念只不过是人类习焉不察的一个谬见罢了。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;​「我」究竟是什么？&lt;/p&gt;
&lt;p&gt;​「当我亲切地体会我所谓我自己时，我总是碰到这个或那个特殊的知觉，如冷或热、明或暗、爱或恨、痛苦或快乐等的知觉。​」&lt;/p&gt;
&lt;p&gt;休谟做过一个「心灵舞台」的比喻：&lt;/p&gt;
&lt;p&gt;心灵是一种舞台；各种知觉在这个舞台上接续不断地相继出现；这些知觉来回穿过，悠然逝去，混杂于无数种的状态和情况之中。&lt;/p&gt;
&lt;p&gt;恰当地说，在同一时间内，心灵是没有单纯性的，而在不同时间内，它也没有同一性，不论我有喜爱想象那种单纯性和同一性的多大的自然倾向。&lt;/p&gt;
&lt;p&gt;我们决不可因为拿舞台来比拟心灵，以致发生错误的想法。这里只有接续出现的知觉构成心灵；对于表演这些场景的那个地方，或对于构成这个地方的种种材料，我们连一点概念也没有。&lt;/p&gt;
&lt;p&gt;在这段话里最值得我们留意的是：&lt;strong&gt;休谟并不曾否定「我」的存在，而仅仅说明了「我」的存在与否、性状如何，以我们的认识能力都是无法获知的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我动一动念头，我的手就举了起来，抚在电脑键盘上开始打字，可见我是一个运作流畅的统一体。&lt;/p&gt;
&lt;p&gt;休谟对这个质疑必将做出的反驳，是他的人性哲学里最激动人心的一页：你无法证明「你动一动念头」导致了「你的手举了起来」​，&lt;strong&gt;你只能证明前者发生在后者之前，两者具有时间上的先后次序，仅此而已。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;哪怕「你动一动念头」继而「你的手举了起来」这个过程重复了一万次而无一例外，你也无法合乎逻辑地证明两者之间存在因果关系。&lt;/p&gt;
&lt;p&gt;在这个问题上，休谟转而成为佛陀的顽固对手，因为佛教最核心的理论根基就是因果律，正所谓没有无因之果，没有无果之因，因果链条环环相扣，而 &lt;strong&gt;休谟所要阐明的是：因果律只是我们的一种思维习惯而已。​「&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;笛卡儿的追随者提出过一个 &lt;strong&gt;「两个时钟」&lt;/strong&gt; 的理论：有两个时钟，它们的运行速度一模一样，只是时钟 A 比时钟 B 快上一秒，&lt;strong&gt;它们一成不变地以一秒钟的间隔先后报时，然而它们彼此都不是对方报时的原因。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在西方的哲学传统里，中国式的求知之道属于归纳法，由归纳法获得的知识远远谈不上真理，至多只是「经验」而已。&lt;/p&gt;
&lt;h2&gt;康德&lt;/h2&gt;
&lt;p&gt;休谟的怀疑论使我们的世界充满了不确定性。倘若我们真诚认可这样的理论，非但一切自然科学从此皆无可能，甚至道德大厦也会土崩瓦解，任何人都不应该为任何行为负任何责任。&lt;/p&gt;
&lt;p&gt;我们真希望会出现一位既富于社会责任感，又擅长精密思辨的哲人，将休谟结结实实地击倒在哲学的竞技场上，哪怕仅以点数取胜都好。&lt;/p&gt;
&lt;p&gt;于是，我们等来了康德。&lt;/p&gt;
&lt;p&gt;康德发现，因果律并不是客观世界里的客观规律，而是我们人类天然的认知模式。&lt;/p&gt;
&lt;p&gt;所以，在我们试图认识世界之前，有必要率先对自己的认知能力做出清醒的认识。&lt;/p&gt;
&lt;p&gt;「真实的世界」​，康德称之为 &lt;strong&gt;本体&lt;/strong&gt;（或译为物自体）​；感官所呈现给我们的世界，康德称之为 &lt;strong&gt;现象&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我们的认知能力仅可以触及现象世界，而无法达至本体。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们基于感官认识的万事万物，只不过是它的现象罢了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我们所有的知识都是关于现象世界的知识&lt;/strong&gt; ，而我们是戴着有色眼镜来认识现象世界的，这个有色眼镜就是我们天然的认知模式。&lt;/p&gt;
&lt;p&gt;除了时间和空间之外，我们还有次一级的天然认知模式，它们共有十二种，康德称之为 &lt;strong&gt;十二范畴&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;因果律正是十二范畴之一。这也就意味着，我们都是戴着因果律这副有色眼镜看世界的，我们无法摆脱因果律来认识现象世界。&lt;/p&gt;
&lt;p&gt;我们也许永远都无法知道挨打和疼痛之间是否存在真正意义上的因果关系，无法知道在一个大气压下将纯水加热到一百摄氏度和水的沸腾之间，是否存在真正意义上的因果关系，&lt;strong&gt;我们唯一可以确信的是：任何事情的发生都有原因。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这样的一种确信，康德称之为 &lt;strong&gt;「先天综合判断」&lt;/strong&gt; ​。康德的《纯粹理性批判》​（王国维认真读过这本书）花了很大的篇幅来论证「先天综合判断是如何可能的」这个命题，这是哲学史上一场革命性的论证。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有两种东西，我对它们的思考越是深沉和持久，它们在我心灵中唤起的惊奇和敬畏就会与日俱增，这就是我头顶上的星空和心中的道德律。​—— 康德墓碑&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这话并不像表面看上去的那样感人。&lt;strong&gt;事实上在康德所论证的因果律里，并不存在「自由」这回事。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一切都是必然发生的，都是在因果的链条里被牢牢锁定的。&lt;/p&gt;
&lt;p&gt;如此一来，我们每一刻闪现在头脑中的思想，岂不同样是被无数个我们无法认清的原因所决定的吗？&lt;/p&gt;
&lt;p&gt;我们凭借什么为自己的行善或作恶负任何责任呢？&lt;/p&gt;
&lt;p&gt;一个活生生的人，归根结底只是一部结构复杂的神经机器，其运作方式虽然无数倍地复杂于齿轮密布的钟表，但两者的本质究竟有任何不同吗？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;倘若我们真的没有自由意志，道德岂不变成了一座美丽的空中楼阁？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;康德的缜密论证所揭示的是：&lt;strong&gt;自由意志、上帝以及不朽的灵魂，即便真的存在，也仅仅存在于本体世界之中，不是我们凭借理性所能认识到的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一旦我们试图以理性来论证上述三者的存在，就会陷入逻辑上无法自圆其说的尴尬境地（康德称之为 &lt;strong&gt;「二律背反」&lt;/strong&gt; ​）​。&lt;/p&gt;
&lt;p&gt;出于社会责任感的考虑，康德在写成《纯粹理性批判》之后又写了一部《实践理性批判》​，认为出于道德的目的，我们实在有必要假定自由意志、上帝以及不朽灵魂的存在。&lt;/p&gt;
&lt;h2&gt;柏拉图的理念论&lt;/h2&gt;
&lt;p&gt;《创世记》记载着上帝用六天时间创造了世界：&lt;/p&gt;
&lt;p&gt;第一天，上帝创造了光，从此有了昼夜之别；&lt;/p&gt;
&lt;p&gt;第二天，上帝创造了苍穹，把苍穹以下的水和苍穹以上的水分开；&lt;/p&gt;
&lt;p&gt;第三天，上帝分出了大地与海洋，使地上生出青草、树木和蔬菜；&lt;/p&gt;
&lt;p&gt;第四天，上帝创造了日月星辰，用以管昼夜、分光暗；&lt;/p&gt;
&lt;p&gt;第五天，上帝创造了水中的鱼和天上的鸟，使它们繁衍生息，各从其类；&lt;/p&gt;
&lt;p&gt;第六天，上帝要使地上生出活物来，便创造了野兽、牲畜和爬行的动物。&lt;/p&gt;
&lt;p&gt;当然，还有人类——「于是，神照着自己的形象创造人，就是照着神的形象创造了他」​。&lt;/p&gt;
&lt;p&gt;⚠️ &lt;strong&gt;如果上帝是在创世的第六天照着自己的形象创造了人，那么，在之前的那五天里，他又是「照着什么」创造了日月星辰、天空大地和飞禽走兽的呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是一个非常重要的问题，因为在很大程度上，&lt;strong&gt;西方古典哲学与美学正是从这个问题当中衍生出来的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;正如上帝照着自己的形象创造了人，那么在造物的时候，上帝一定在心中先有一个构思。&lt;/p&gt;
&lt;p&gt;譬如在创造飞鸟之前，上帝心中一定先有一个飞鸟的「样子」​。当然，这位上帝不必是基督教的上帝，凡是相信神创论者，他们的神祇亦必在创世之前生出同样的构思。&lt;/p&gt;
&lt;p&gt;**这个「构思」​，或神祇心中的「样子」​，柏拉图称之为「理念」​。**​（有时候被翻译成「理想」，王国维使用的也是「理想」）&lt;/p&gt;
&lt;p&gt;只要我们设身处地以「神创世界」的信念思考宇宙万物，理念论就是非常合情合理的。&lt;/p&gt;
&lt;h2&gt;叔本华&lt;/h2&gt;
&lt;p&gt;印度神秘主义、康德的先天综合判断与柏拉图，一并糅合成叔本华的哲学。&lt;/p&gt;
&lt;p&gt;叔本华虽然是个标准的富贵闲人，有着旺盛的虚荣心，讲求精致典雅的生活，本质上却很有几分悲剧气质。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;叔本华悲观地相信我们生活在摩耶之幕的遮蔽之下，只能感知到虚幻的现象世界，却感知不到康德所谓的本体世界。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;世界的本体是意志，是一种盲目的冲动，&lt;strong&gt;我们经由感官所认识到的万事万物都只是这份盲目冲动的不同表现形式而已。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;叔本华最重要的那本书题为《作为意志和表象的世界》​，&lt;strong&gt;意志&lt;/strong&gt; 就是被康德认为不可知的本体世界，&lt;strong&gt;表象&lt;/strong&gt; 就是康德所谓的现象世界。&lt;/p&gt;
&lt;p&gt;我们一切貌似理性的行为，其根蒂无非是盲目的生存冲动。&lt;strong&gt;我们在这个世界上浑浑噩噩地活着，浑浑噩噩地死去。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;层级越高，盲目欲望的冲动也就越强，生存也就越发痛苦。《红楼梦》中相比于刘姥姥的朴素痛苦，林黛玉的痛苦总是丰富得多，绵长得多，深刻得多。&lt;/p&gt;
&lt;p&gt;痛苦无所不在，因为在欲望被满足之前会有求之不得的痛苦，而在欲望被满足之后，短暂的喜悦迅即便被无聊的餍足感取代，继而生出新的欲求，引出新一番求之不得的痛苦。&lt;/p&gt;
&lt;p&gt;王国维对叔本华哲学一见倾心，尤其倾心于本体论内容。他专门写有一篇《叔本华之哲学及教育学说》​，认为康德哲学只是破坏性的，简直算不得真正的哲学。&lt;/p&gt;
&lt;p&gt;以今天的眼光来看，王国维与其说低估了康德，不如说高估了叔本华。&lt;/p&gt;
&lt;p&gt;当然，王国维的见地也不会一成不变，对于叔本华哲学，本体论是他最早接受又最先抛弃的部分。&lt;/p&gt;
&lt;p&gt;叔本华的本体论很有一点逻辑上无懈可击却相当令人难以置信的内容：&lt;strong&gt;他和康德一样认为时间、空间和因果律都是现象世界里的事情。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那么可想而知，本体世界里应该不存在时间、空间和因果律，这也就意味着，&lt;strong&gt;所谓本体世界，其实只有唯一的本体。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所以在现象世界里，倘若我们两个人秉烛夜话，则你坐在我的对面，我坐在你的对面，我们是分别的两个人，分处在房间的两个位置上，你的问话与我的答话在时间轨迹中相继发生；&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在本体世界里，既然不存在时间、空间与因果律，你的问话与我的答话便不可能有先后的关系，你与我也不可能有位置上的关系。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那么，无论我们再怎样不情不愿，也只有接受这样一个答案：非但你我一体，甚而我们与这世界上的所有人、所有物，皆是一体。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;没有人是一座孤岛，可以自全。每个人都是一座大陆的一片，是大地的一部分。如果一小块泥土被海卷走，欧洲就少了一点，如同一座海岬少一些一样，如同你的朋友或你自己的领地失掉一块。任何人的死亡都是对我的缩小，因为我是处于人类之中；因此不必去知道 &lt;strong&gt;丧钟为谁而鸣&lt;/strong&gt;，它就是为你而鸣。​—— 约翰·多恩，教士兼玄学派诗人&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;海明威小说《丧钟为谁而鸣》​，题目便是从这篇布道词里撷取来的。在叔本华哲学的意义上，基于上述完全合乎形式逻辑的推理，一块石头上小小的残缺也有十足的理由激起我们理性而非多愁善感的同情。&lt;/p&gt;
&lt;p&gt;这是一种悲观主义与乐观主义兼具的论调，对于看透了生活本质的叔本华而言，悲伤至少在理论上总是难免的。幸而他给我们指出一条 &lt;strong&gt;解脱之道&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;苦难的起因是因为意志的本质是邪恶的，是因为盲目的欲望冲动过于强烈，所以我们越是能够克制欲望，痛苦也就越少，&lt;strong&gt;最好就是终其一生守贞禁欲。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参照佛陀讲授的四圣谛，叔本华这套说辞如果说有什么缺憾，那就是太缺乏原创性了。&lt;/p&gt;
&lt;p&gt;一生守贞禁欲当然太难了些，也有某种权宜之计，可以使人暂时摆脱意志的束缚，那就是 &lt;strong&gt;以审美直观的方式沉浸于艺术之美&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这正是叔本华最重要的美学论断，从他那悲观主义哲学当中顺理成章地衍生出来。&lt;/p&gt;
&lt;p&gt;意志即欲望，欲望是充满功利色彩的，时刻把我们束缚在因果律的锁链里，驱使我们追名逐利，在渴求与餍足的两极间饱受折磨。&lt;/p&gt;
&lt;p&gt;但是，当我们欣赏一件艺术品的时候，倘若我们沉迷于其中，物我两忘，就会在这一段短暂的时间里从欲望所驱动的因果锁链里挣脱出来，直达这件艺术品背后的理念（源自柏拉图的概念）​。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;只有在我们陷入物我两忘的审美时刻，时间和空间不复存在。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;艺术品不再作为表象之物，我也不再作为表象之我，物与我一并从因果链条里脱身而出，不沾染任何一点欲望，不再受意志的盲目驱动，物成为纯粹的审美对象（理念）​，我成为纯粹的审美者，物与我才一同摆脱了意志的魔爪。&lt;/p&gt;
&lt;p&gt;这是漫长的悲剧人生中的短暂解脱，艺术的意义恰如酒对于一个需要借酒浇愁的人。&lt;/p&gt;
&lt;h2&gt;审美是悲剧人生的麻醉剂&lt;/h2&gt;
&lt;p&gt;审美不能用到抽象和推理，不能存有功利的审慎，而应该用到直观。&lt;/p&gt;
&lt;p&gt;以美学语言来讲，在这样一场审美经历中，审美者和审美对象都要经历一种角色转变：审美者由认识个体转变为纯粹认识主体，审美对象由个别的、具体的现象转为理念。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;叔本华说过，主观性是属于平庸之辈的，所有富于创造性的天才都是客观的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它意味着「各花入各眼」​、「萝卜白菜，各有所爱」这些古老的格言全是错的。&lt;/p&gt;
&lt;p&gt;​（在康德的美学理论里，这些古老格言所表达的属于「感官的鉴赏」​，仅在感官享受的层面，缺乏普遍标准，而审美属于「反思的鉴赏」​，具有普遍标准。​）&lt;/p&gt;
&lt;p&gt;至少可以让我们略感欣慰的是，即便是叔本华，在他的大半生里也都被他的同时代人视为平庸之辈。&lt;/p&gt;
&lt;p&gt;叔本华生活在理性主义的巅峰时代，被他视为头号竞争对手的黑格尔正是为理性主义之塔盖上塔尖的一代宗师。&lt;/p&gt;
&lt;p&gt;叔本华教学生涯中最惨淡的一幕，就是他特意把自己的哲学课安排在黑格尔哲学课的同一时间，其结果为「自取其辱」这个词做了完美的注解：黑格尔的课堂上人满为患，叔本华却只能对着一个空教室讲课。&lt;/p&gt;
&lt;p&gt;如果时人对叔本华还能有一点钦佩之情的话，那一定是惊叹于究竟是何等充沛的正能量才能使他自信到这般地步。&lt;/p&gt;
&lt;p&gt;事情的另一面是，与其说叔本华输给了黑格尔，不如说他输给了时代风气。&lt;/p&gt;
&lt;p&gt;叔本华并不是一个反智主义者，并不反对理性；相反，他完全承认理性的伟大意义，认为理性才是人之所以区别于动物的标志。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;叔本华反对的是理性至上的观点，他相信理性的认知方式低于直观。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;境界与电影院&lt;/h2&gt;
&lt;p&gt;我们在梳理过康德、叔本华的哲学脉络之后，再来理解王国维就会轻松许多了：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;词以境界为最上。有境界，则自成高格，自有名句。五代、北宋之词所以独绝者在此。​&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;此处所谓境界，并非现代汉语之「精神境界」​，而是源于叔本华的「理想」​，否则我们会很难理解王国维对五代、北宋之词的推崇以及对南宋之词的贬低。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;王国维所谓词的「境界」​，我们可以理解为词所营造出来的一个独立的艺术空间。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个艺术空间独立于现实世界，可以让读者全身心地陶醉进去，在忘我状态中进入一个艺术的幻境，浑然忘记现实生活中的悲欢离合、柴米油盐。&lt;/p&gt;
&lt;p&gt;电影是一种剧场艺术，电影院并不仅仅是为了家庭影院无法达到的视听效果而存在，而是要为我们制造一个相对陌生的环境，使我们与熟悉的世界隔离开来，置于陌生人无害的包围之中。&lt;/p&gt;
&lt;p&gt;这些陌生人在黑暗中无言的存在并不使我们和他们发生任何实际的关系，他们存在的唯一意义就是给我们制造出更深的陌生感，使我们更容易摆脱现实中的种种功利算计，更容易自失于电影所营造的艺术幻境之中。&lt;/p&gt;
&lt;p&gt;所以，爱好家庭影院的人其实并不懂得电影艺术的真谛，即便他们可以打造出不逊于 IMAX 影院的视听效果。&lt;/p&gt;
&lt;h2&gt;广告：打过折扣的境界&lt;/h2&gt;
&lt;p&gt;词没有剧场之类的辅助设备，将读者带入艺术幻境的难度自然更高。&lt;/p&gt;
&lt;p&gt;而在同样的艺术形式之内做比较，五代、北宋的词如何会比南宋以后的词更有境界呢？换言之，在营造艺术幻境的手法上，前者何以比后者高明？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这当然与词人的「思想境界」没有任何关系，只与时代风气和写作技巧有关。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一首词，乃至任何形式的文学作品，只要诉诸人的感性思维，做到以情动人、以景感人，就容易形成自己的艺术幻境，让读者不知不觉地陷入其中而无法自拔。&lt;/p&gt;
&lt;p&gt;若是诉诸人的理性思维，以理服人，哪怕说出来的这个道理多么深刻，哪怕分析论证得多么缜密，最多只可以引起读者的思考，但形不成自己的艺术幻境，不可能将读者完完全全地带入。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;广告商比诗人更懂得这个道理&lt;/strong&gt;，譬如做汽车广告，完全不讲这款车子的任何技术参数，只是用一些精心设计的画面，一些特定的情景，让观众在不知不觉中生出代入感，感到自己分明已经拥有了这款车子，已经过起了广告画面所营造的那种幸福生活。&lt;/p&gt;
&lt;p&gt;当广告结束，观众会生出一种犹如刚刚走出电影院一般的怅然若失的情绪。&lt;/p&gt;
&lt;p&gt;在这一刻，他们对这款汽车的感觉不再是之前的「渴望拥有」​，而变为「曾经拥有过，却被无情地剥夺了」​。&lt;/p&gt;
&lt;p&gt;今天的心理学知识告诉我们：后者的痛感远较前者更强，所以广告创意人越来越钟情于营造影院效果，营造有「境界」的广告作品，尽管这是一种打过折扣的形似的「境界」​，全在诉诸人们的欲望而已。&lt;/p&gt;
&lt;p&gt;广告的意图并非给观众带来单纯的审美体验，而是要使目标受众在看完广告之后结结实实地体会到那种被剥夺的痛感。&lt;/p&gt;
&lt;h2&gt;名句该不该有&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;有境界，则自成高格，自有名句。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;涉及艺术创作中一个争议很大的问题。&lt;/p&gt;
&lt;p&gt;诗歌的历史上，对于「名句」问题素来有两种主要意见，一是如王国维这般强调诗歌需要塑造名句，二是强调一件作品必须浑然一体，任何一个局部的过分突出都会成为整体作品的缺陷。换言之，局部的胜利就是整体的失败。&lt;/p&gt;
&lt;p&gt;在第二种意见上，最著名的就是罗丹的一个例子。罗丹某次创作一个人体雕塑，学生边看边赞：​「手部实在雕得太好了，无与伦比！」&lt;/p&gt;
&lt;p&gt;罗丹立即拿起锤子，砸毁了雕像的手部。&lt;/p&gt;
&lt;p&gt;诗人们对此也有一个漫长的认识过程，从古典诗歌到现代诗歌都是这样。&lt;/p&gt;
&lt;p&gt;莎士比亚把十四行诗从彼特拉克体 4433 的格式变成了 4442，使最后一个诗节变成了两句，目的很简单，就是要营造警句出来。&lt;/p&gt;
&lt;p&gt;这是当时的一个革命，但这个手法很快就从主流的诗歌语言里淡化下去了，因为这种手法过于凸显局部，代价是牺牲了诗歌的完整性。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;卑鄙是卑鄙者的通行证，高尚是高尚者的墓志铭&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;作为格言，这两句话非常精彩，但从诗艺层面讲，这两句却是败笔，破坏了全诗的整体性和流畅感。&lt;/p&gt;
&lt;p&gt;如果以王国维「境界」的标准来看，这两句显然全是诗人经由 &lt;strong&gt;理性反思而做出的抽象归纳&lt;/strong&gt; ，也就是说，诗人运用到了推理和抽象这两种认识世界的方式，却 &lt;strong&gt;没有用到直观&lt;/strong&gt; ，自然没有「境界」​。&lt;/p&gt;
&lt;h2&gt;有境界的词和无境界的词&lt;/h2&gt;
&lt;p&gt;艺术深度完全不同于思想深度，前者指的是境界的深远广大，与思想性没有任何关系。&lt;strong&gt;艺术作品只需要纯粹地传达一种美的感受，不必负载任何或深或浅的思想。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;北宋词人秦观有一首著名的《浣溪沙》​：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;漠漠轻寒上小楼，晓阴无赖似穷秋。淡烟流水画屏幽。&lt;/p&gt;
&lt;p&gt;自在飞花轻似梦，无边丝雨细如愁。宝帘闲挂小银钩。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;它只是传达了淡淡的一抹忧伤罢了，没有讲任何道理，没有任何的「思想深度」​，但读着读着，我们很容易就会陷入那自在飞花、无边丝雨的世界里去，陷入了秦观词中的「境界」​。&lt;/p&gt;
&lt;p&gt;作为对照，选取清代词人张惠言的一首词。张惠言不但擅长填词，也是一位著名的词论家，他曾以长辈的身份写了一组《水调歌头·春日赋示杨生子掞》​，送给当时寄寓在常州的一位叫杨绍文（字子掞）的年轻人。&lt;/p&gt;
&lt;p&gt;这一组词在清代极为著名，是励志型座右铭的典范，常州词派谭献称这一组词是「开倚声家未有之境」​，就是说它们开创了一个古往今来的所有词人从未写出过的崭新局面。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;今日非昨日，明日复何如。朅来真悔何事，不读十年书。为问东风吹老，几度枫江兰径，千里转平芜。寂寞斜阳外，渺渺正愁予。&lt;/p&gt;
&lt;p&gt;千古意，君知否，只斯须。名山料理身后，也算古人愚。一夜庭前绿遍，三月雨中红透，天地入吾庐。容易众芳歇，莫听子规呼。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;起句「今日非昨日，明日复何如」​，劈头道出了对时光流逝的恐惧感。&lt;/p&gt;
&lt;p&gt;不经意间，时光已经匆匆溜走，这才感叹「朅来真悔何事，不读十年书」​。&lt;/p&gt;
&lt;p&gt;若岁月可以重来，定当苦读十年才好。接下来从内在的心事转入外在的风光：​「为问东风吹老，几度枫江兰径，千里转平芜。寂寞斜阳外，渺渺正愁予。​」&lt;/p&gt;
&lt;p&gt;这是将个人的时光放入大自然的时光里，放入一个更大的坐标里去看，在这个更大的坐标里，愈发感觉日月的无情。&lt;/p&gt;
&lt;p&gt;下阕从感怀转入说理。​「千古意，君知否，只斯须」​，​「斯须」就是「片刻」​，千百年的岁月在大自然这个巨大的坐标里也无非是弹指一挥间罢了。人若要追求「千古意」​，追求永恒，追求不朽，更不得不抓住短暂的光阴。&lt;/p&gt;
&lt;p&gt;「一夜庭前绿遍，三月雨中红透，天地入吾庐」​，词人忽然笔锋一转：我在自己的小房间里分明看到了春风一夜之间吹绿了庭前的草地，三月的雨水催开了璀璨的鲜花，仿佛天地之间的一切胜景尽纳于此。我心自足，一切不假外求，这正是道家修心的至高境界。&lt;/p&gt;
&lt;p&gt;词的结尾：​「容易众芳歇，莫听子规呼。​」这里用到了一则典故，传说子规这种鸟儿常常在立夏时节开始啼鸣，子规一啼，草木便开始枯萎。词人这是在做极其审慎的叮咛：流光易逝，年华易老，我们必须珍惜每一寸的光阴。&lt;/p&gt;
&lt;p&gt;张惠言这首词究竟好不好呢？当然有它的好处，但是，若以王国维的「境界」之说而论，它太在意说理，说了那么多劝人珍惜时光、努力读书的道理。&lt;/p&gt;
&lt;p&gt;你总感觉这是一位老师、一位长者在对你谆谆教诲。你或许会认同这些教诲，或许也会被这样美丽的文辞所传达出来的道理打动，但你就是很难陷入这首词的世界里去。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;它所营造的艺术幻境每每才一出现便被说理打破。它确实是一种很好的词，却不是持有境界说的王国维会喜欢的。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;小结&lt;/h2&gt;
&lt;p&gt;理解《人间词话》中的「境界」说，我们需要回溯到其深层的哲学基础：&lt;/p&gt;
&lt;p&gt;从&lt;strong&gt;古印度神秘主义与佛教&lt;/strong&gt;出发，我们看到了「摩耶之幕」的观念。现实世界不过是虚幻的表象，人生皆苦，解脱之道在于去除欲望、破除我执与法执。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;休谟的怀疑主义&lt;/strong&gt;挑战了因果律的客观性，指出我们无法证明真正的因果关系，只能观察到事件的先后次序。这种怀疑论动摇了知识的根基。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;康德&lt;/strong&gt;回应了休谟的挑战，提出时间、空间和因果律并非客观世界的属性，而是我们天然的认知模式。我们只能认识现象世界，而无法触及物自体（本体世界）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;柏拉图的理念论&lt;/strong&gt;为美学提供了形而上学基础。在具体事物背后存在着永恒的「理念」，艺术创作就是要呈现这种理念。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;叔本华&lt;/strong&gt;综合了以上思想，认为世界的本体是盲目的意志，现象世界是意志的表象。人生在欲望的驱使下必然痛苦，而&lt;strong&gt;审美是悲剧人生的暂时麻醉剂&lt;/strong&gt;。在审美直观中，我们超越功利、忘却自我，暂时摆脱意志的束缚，直达艺术背后的理念。&lt;/p&gt;
&lt;p&gt;王国维深受叔本华影响，他所说的「境界」正是指&lt;strong&gt;词所营造的独立艺术空间&lt;/strong&gt;。这个空间能让读者全身心陶醉其中，在忘我状态下进入艺术幻境，暂时脱离现实的功利算计。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有境界的作品诉诸感性与直观，以情动人、以景感人；无境界的作品诉诸理性与说理，难以形成完整的艺术幻境。&lt;/strong&gt; 这就是为什么王国维推崇五代、北宋之词而贬低南宋以后的词。前者更能营造纯粹的审美体验，后者则过多掺杂理性的说教。&lt;/p&gt;
&lt;p&gt;理解了这条从佛学到叔本华、从康德到王国维的哲学脉络，我们才能真正把握《人间词话》的审美标准，理解什么是真正的「境界」。&lt;/p&gt;
</content:encoded></item><item><title>昨日的世界：编程被 AI 祛魅之后</title><link>https://www.zzgu.io/posts/after-ai-coding/</link><guid isPermaLink="true">https://www.zzgu.io/posts/after-ai-coding/</guid><description>当 AI 编程改变了一切后，写代码的人应该做什么了？</description><pubDate>Sat, 11 Jul 2026 04:31:53 GMT</pubDate><content:encoded>&lt;p&gt;这两天，翻到 2022 年 12 月 3 日发的朋友圈，那时候还是 ChatGPT 3.5 的刚出来的时候，充满着幻觉。&lt;/p&gt;
&lt;img width=&quot;75%&quot; alt=&quot;ChatGPT 3.5 充满幻觉的回答&quot; src=&quot;https://img.zzgu.io/blog/chatgpt-3.5-answer.jpg&quot; /&gt;
&lt;p&gt;对于那些比较简单的编程，例如写一个快速排序，已经写得不错了。&lt;/p&gt;
&lt;img width=&quot;75%&quot; alt=&quot;ChatGPT 3.5 已经能写简单的代码了&quot; src=&quot;https://img.zzgu.io/blog/chatgpt-3-coding.jpg&quot; /&gt;
&lt;p&gt;大概在那个时候，很多人也没有想到往后它将颠覆传统写代码的方式。如果要追溯到更早，这波 AIGC 的浪潮更多可能始于文生图的领域。我还使用 Docker 在公司的 3080Ti 的笔记本上部署过 Stable Disffusion。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当然，再往前追溯就是 Alpha Go 了，那时候我还在读高中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一转眼就快到 4 年了。如果一定要评论的话，这几年里，模型越来越智能，其实实质的变化并不大。&lt;/p&gt;
&lt;h2&gt;Claude Code&lt;/h2&gt;
&lt;p&gt;如果说有什么确实改变了我的编程，或者在我这里宣布 Vibe Coding 的开始，那一定是 Claude Code（2025 年 2 月发布）。至少我觉得直到今天（2026 年 7 月 11 日），它依然是一个非常好用的工具。当然，你也可以说那些高大上的名词，诸如 AI Agent。&lt;/p&gt;
&lt;img width=&quot;40%&quot; alt=&quot;App Store 订阅记录&quot; src=&quot;https://img.zzgu.io/blog/app_store_purchase_history.png&quot; /&gt;
&lt;p&gt;至少我认为，&lt;strong&gt;Claude Code 出现标志着 LLM 从简单的问答走向了具备自主规划和执行能力的阶段。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;同时，它也改变了我的编程方式，甚至让我开始很少手写代码了。以前我会欣赏、打磨自己的代码，对于前端我也会去追求更好看的样式，从配色到布局。我还会兴奋地、自豪地给同事演示我最新的工具，讲述我的设计理念，用了什么最新的组件库。&lt;/p&gt;
&lt;p&gt;如今，如果你和别人说你手写代码，已经没有人关心了，大家甚至还会调侃称这是&lt;strong&gt;古法编程&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;茨威格在《昨日的世界》里表达了对欧洲精神的追随和哀悼，今天，我同样试图哀悼昔日的编程世界。&lt;/p&gt;
&lt;h2&gt;面对 AI&lt;/h2&gt;
&lt;p&gt;我相信我比绝大多数人都拥抱 AI。在我和国内的很多人交流中，他们对 AI 的认知很多还停留在 Chat 上。加上需要翻墙以及折腾诸如 ChatGPT 和 Anthorpic 账号，很多人都不清楚最前沿的 AI 已经到什么程度了。&lt;/p&gt;
&lt;p&gt;很多人都认同 AI 对生产力的提升，同时大家也在探索如何与 AI 相处，也在思考 AI 究竟会对人类未来造成什么样的冲击。&lt;/p&gt;
&lt;p&gt;Anthorpic 一直在谈论 AI 伦理，宣称要提防专制政权或者恐怖主义者获得最先进的模型，避免他们发展出诸如数字极权或者危害人类社会的恐怖活动。&lt;/p&gt;
&lt;p&gt;很多人在焦虑，也有很多企业在裁员，只不过到底是公司本身经营不善还是的确是 AI 提升了公司效率，不再需要那么多人，那就不得而知了。&lt;/p&gt;
&lt;h3&gt;教育&lt;/h3&gt;
&lt;p&gt;我个人觉得 AI 已经彻底改变了教育，只不过直到现在，大家也不清楚该怎么改变原有的教育方式。刷题是绝对没有前途的，高考也开始改成需要创新，开始反刷题。今年高考结束后，Anthorpic 推出了宣称断层领先的 Fable，我将高考数学压轴题截图给它。&lt;/p&gt;
&lt;p&gt;毫无疑问地，Fable 完全正确地解决了问题。可惜，我层次太低，我想了好久，也没有找到有必要使用 Fable 来求解的问题。&lt;/p&gt;
&lt;img width=&quot;75%&quot; alt=&quot;Fable 毫无压力地解决了高考数学压轴题&quot; src=&quot;https://img.zzgu.io/blog/fable.jpg&quot; /&gt;
&lt;p&gt;如果学生穷尽几年（甚至一生），耗费无数精力与时间去做题，仍然达不到 AI 的程度，甚至再过几年就已经难以望其项背。那么，学生究竟还有多少必要再进行这些僵化的训练。AI 未来一定也会成为个性化教育中的环节。也许，我们应该去培养下一代的是生而为人独有的精神。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;因为有了人，这些坑坑洼洼才变成了美丽的妻子，高大的桂花树，勤劳的小白兔，清冷的宫殿楼宇，以及没有止境的思念与分离，和西西弗斯一般无尽的砍伐。总是用人类和机器比气力比效率这是不对的，人类只要还能继续命名，人类就依然在赋予一切无生命之物以生命和意义。就像是千百年前人类命名了河流，于是才有了渡口和船只，才有了渔歌和送别；于是横贯天空的灿烂星海才有了银河这样的名字，从此一条天河就那么挂在一代又一代人的头顶，让一代又一代关于船只的想象不断涌现。 ——&lt;a href=&quot;https://www.hecaitou.com/2024/05/What-AI-cannot%20draw.html&quot;&gt;《AI 所画不出来的》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;未来&lt;/h2&gt;
&lt;p&gt;我在现在就职的公司已经工作了 5 年多了，很快也要 6 年了。我也思考我的未来，也在焦虑、犹疑。&lt;/p&gt;
&lt;p&gt;在考虑要不要趁着最后的机会走出去，体验一个更大的世界，想过拿 whv 去澳大利亚体验一下体力工作，而不是成天对着屏幕朝九晚六，见不到阳光；又或者，去其它国家读一个学位，见更多的人，体验国外的教育。不过，AI 快速发展，我究竟有多少必要性去读一个传统计算机科学的研究生学位，而读一个 AI 相关的，我又有多大程度需要呢？&lt;/p&gt;
&lt;p&gt;甚至，也在想换一个工作，接着工作下去。每一种选择都有成本，都有它的困难。&lt;/p&gt;
&lt;p&gt;希望明年我能回来告诉今天的自己，最终我选择了什么。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;（本文没有任何 AI 成分，一字一句都是手敲）&lt;/p&gt;
</content:encoded></item><item><title>Excel 必知必会的基础技巧（上）</title><link>https://www.zzgu.io/posts/textbook-of-excel-1/</link><guid isPermaLink="true">https://www.zzgu.io/posts/textbook-of-excel-1/</guid><description>使用 Excel 必须知道的基础技巧和使用方法</description><pubDate>Fri, 10 Jul 2026 15:15:07 GMT</pubDate><content:encoded>&lt;h2&gt;基本规则&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;根据用途和输出选择字体&lt;/li&gt;
&lt;li&gt;调整行高（字号的 1.6 倍左右）和列宽&lt;/li&gt;
&lt;li&gt;不要从 A1 开始，留出空白行和空白列&lt;/li&gt;
&lt;li&gt;文字左对齐，数值右对齐&lt;/li&gt;
&lt;li&gt;标明千分位分隔符和单位&lt;/li&gt;
&lt;li&gt;设置缩进（可以使用一个列宽为 1 的单元格）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;额外提高易读性的原则&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;根据情况隐藏网格线&lt;/li&gt;
&lt;li&gt;画出边框
&lt;ul&gt;
&lt;li&gt;推荐的边框样式&lt;br /&gt;
&lt;img src=&quot;https://img.zzgu.io/blog/excel-00.png&quot; alt=&quot;推荐的边框样式&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;区分数值的颜色（例如:输入的数值使用蓝色，计算生成的数值使用黑色）&lt;/li&gt;
&lt;li&gt;设置背景色（例如用很淡的颜色区分一下标题行）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;工作表与单元格的基本操作&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;可以设置工作表标签的颜色&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不要使用「隐藏」功能，如果确实需要隐藏部分行和列，使用「组合」（数据 → 组合）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用「跨列居中」，而不是「合并单元格」&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;合并单元格会导致不好复制、插入列和行的操作变得复杂&lt;/li&gt;
&lt;li&gt;纵向是没有「跨列居中」的，先合并单元格，再设置「单元格格式」，点击「方向」里的文本&lt;br /&gt;
&lt;img src=&quot;https://img.zzgu.io/blog/excel-01.png&quot; alt=&quot;纵向文本&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;跨单元格斜线使用「形状」+ Alt（可以沿着单元格边框移动）&lt;br /&gt;
&lt;img src=&quot;https://img.zzgu.io/blog/excel-02.png&quot; alt=&quot;跨单元格斜线&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用条件格式设置单元格颜色、找出错误值等&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;固定标题单元格&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;快速输入当时的时间（&lt;code&gt;Ctrl + Shift + :&lt;/code&gt;）和日期（&lt;code&gt;Ctrl + ;&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;日期和时间的计算和 Serial number&lt;/h3&gt;
&lt;p&gt;输入例如 &lt;code&gt;2025/8/1&lt;/code&gt; 和 &lt;code&gt;8-1&lt;/code&gt; 等日期时，会自动变成 Serial Number。1 天是 1，所以 24 小时是 1，12 小时为 0.5。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://img.zzgu.io/blog/excel-03.png&quot; alt=&quot;日期和时间的计算&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;11 个必须掌握的函数&lt;/h2&gt;
&lt;p&gt;不管做什么工作，有些函数必须掌握。总共也不过 11 种函数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;区域指定 &lt;code&gt;:&lt;/code&gt;，例如：&lt;code&gt;SUM(A1:A3)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;单独指定 &lt;code&gt;,&lt;/code&gt;，例如：&lt;code&gt;SUM(A1,A3)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;函数名称&lt;/th&gt;
&lt;th&gt;概要&lt;/th&gt;
&lt;th&gt;补充&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SUM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;求和&lt;/td&gt;
&lt;td&gt;可以使用 &lt;code&gt;Alt + =&lt;/code&gt; 输入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MAX&lt;/code&gt;、&lt;code&gt;MIN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;最大值、最小值&lt;/td&gt;
&lt;td&gt;还可以使用 &lt;code&gt;MAXIFS&lt;/code&gt; 和 &lt;code&gt;MINIFS&lt;/code&gt;，例如：单元格区域 &lt;code&gt;A1:A10&lt;/code&gt; 值中，小于 101 的值中的最大值，&lt;code&gt;=MAXIFS(A1:A10,A1:A10,&quot;&amp;lt;101&quot;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ROUND&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;四舍五入&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=ROUND(单元格区域,位数)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IFERROR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;错误时显示切换&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=IFERROR(单元格区域,报错时所显示的文字)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;IF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;条件判定&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=IF(逻辑表达式,TRUE时显示的内容,FALSE时显示的内容)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SUMIF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指定条件求和&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=SUM(区域,求和条件[,求和区域])&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SUMIFS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;多条件求和&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=SUMIFS(求和对象区域,条件区域,条件1,条件区域2,条件2,…)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;COUNTIF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;符合条件的值的数量&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=COUNTIF(区域,条件)&lt;/code&gt;，空白单元格计数 &lt;code&gt;=COUNTBLANK&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;COUNTIFS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;符合多条件的值的数量&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=COUNTIFS(计数条件区域1,计数条件1,计数条件区域2,计数条件2,…)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VLOOKUP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;值的查找和显示&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=VLOOKUP(要查找的值,区域,列编号,FALSE)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EOMONTH&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;月末等日期计算&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=EOMONTH(开始日期,月数)&lt;/code&gt;，月数 &lt;code&gt;-1&lt;/code&gt; 则是上月末，&lt;code&gt;0&lt;/code&gt; 本月末，&lt;code&gt;1&lt;/code&gt; 下一个月末&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;检查操作和引用&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;F2&lt;/code&gt; 快速检查单元格内容
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Tab&lt;/code&gt; 移动&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Enter&lt;/code&gt; 默认向下，如果需要横向填写数据，可以在设置中「高级」中将「按 Enter 键后移所选内容」取消勾选，或者设置成「向右」。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;追踪功能确认引用单元格
&lt;ul&gt;
&lt;li&gt;想要显示追踪箭头时，选定输入有算式的单元格，点击「公式」下的「追踪引用单元格」&lt;br /&gt;
&lt;img src=&quot;https://img.zzgu.io/blog/excel-04.png&quot; alt=&quot;公式的追踪箭头&quot; /&gt;&lt;/li&gt;
&lt;li&gt;或者快捷键 &lt;code&gt;Alt → M → P&lt;/code&gt;（按顺序按）&lt;/li&gt;
&lt;li&gt;「追踪从属单元格」可以检查「使用特定单元格的值进行计算的单元格」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;不要引用其它工作表
&lt;ul&gt;
&lt;li&gt;一般最好保证工作簿处于单独使用的状态&lt;/li&gt;
&lt;li&gt;纯文本复制到当前表，更安全&lt;/li&gt;
&lt;li&gt;如果需要复制公式，对应数据也要一并复制&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;明确数据出处
&lt;ul&gt;
&lt;li&gt;专门设置一个「来源」的列，文字较多时可以使用脚注在表格外&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;数据验证&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;四种引用格式&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;引用类型&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;th&gt;复制公式时的变化&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;相对引用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;A1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;行和列都可变动&lt;/td&gt;
&lt;td&gt;行列都会随复制位置改变&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;绝对引用&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$A$1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;行和列都锁定&lt;/td&gt;
&lt;td&gt;行列都不会变&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;列绝对，行相对&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$A1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列固定，行可变&lt;/td&gt;
&lt;td&gt;列不变，行会变&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;列相对，行绝对&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;A$1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;列可变，行固定&lt;/td&gt;
&lt;td&gt;列会变，行不变&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>石黑一雄：黄昏褶皱里的尊严挽歌</title><link>https://www.zzgu.io/posts/the-remains-of-the-day/</link><guid isPermaLink="true">https://www.zzgu.io/posts/the-remains-of-the-day/</guid><description>《长日将尽》绝对是最完美的小说之一，它的伟大不在于恢弘的史诗气魄，而在于用一枚管家袖扣的反光，照见了整个人类文明的暗面。</description><pubDate>Fri, 10 Jul 2026 15:15:07 GMT</pubDate><content:encoded>&lt;h2&gt;石黑一雄&lt;/h2&gt;
&lt;p&gt;石黑一雄（Kazuo Ishiguro，1954年-），出生于日本长崎，5 岁时随家人移居英国。&lt;/p&gt;
&lt;p&gt;1982 年，他出版了处女作《远山淡影》，讲述了一个日裔英国女子回到战后日本的故事，讨论了战后的集体失忆。&lt;/p&gt;
&lt;p&gt;但真正让他声名鹊起的是 1989 年的《长日将尽》，这部作品通过一位英国管家的视角，细腻地描绘了两次世界大战之间的英国社会，并为他赢得了布克奖。&lt;/p&gt;
&lt;p&gt;2017 年，石黑一雄获得诺贝尔文学奖，评委会称赞他「在强大情感力量的小说中，揭示了我们与世界虚幻联系之下的深渊」。他是继川端康成、大江健三郎之后第三位获得诺贝尔文学奖的日裔作家。&lt;/p&gt;
&lt;p&gt;1993 年根据小说《长日将尽》翻拍的同名电影（也叫《告别有情天》）由英国著名演员安东尼·霍普金斯和艾玛·汤普森主演，获得八项奥斯卡提名和六项英国电影学院奖提名。&lt;/p&gt;
&lt;h2&gt;长日将尽&lt;/h2&gt;
&lt;p&gt;故事从史蒂文斯开始一次驾车旅行说起。他此行的目的是拜访二十年前离开庄园的前管家长肯顿小姐 (Miss Kenton)。在六天的旅程中，史蒂文斯不断回忆起他在达林顿庄园的往事。庄园主人达林顿勋爵此时已经去世，这个英国贵族庄园被一个美国人买下，史蒂文斯留了下来，继续担任管家。&lt;/p&gt;
&lt;p&gt;在回忆中，我们看到达林顿勋爵在 1930 年代举办了一系列重要的政治会议，试图在英国和纳粹德国之间促成和解。史蒂文斯始终以完美的职业素养服务于这些活动，即使后来达林顿勋爵因此被指责为纳粹同情者。在这段时期，史蒂文斯与肯顿小姐发展出微妙的感情，但他始终把职责置于个人情感之上，保持着严格的专业距离。&lt;/p&gt;
&lt;p&gt;最具戏剧性的场景之一是史蒂文斯的父亲在庄园重要晚宴期间去世，而史蒂文斯选择继续工作，直到晚宴结束才去看望父亲。这个场景集中体现了他为追求「专业素养」而压抑个人情感的特点。&lt;/p&gt;
&lt;p&gt;当史蒂文斯最终见到如今已婚的肯顿小姐（现在的本顿太太）时，两人都意识到他们已经错过了可能共同拥有的人生。特别是当肯顿小姐含泪述说她有时会想象如果嫁给了史蒂文斯，人生会是怎样时，&lt;strong&gt;史蒂文斯终于意识到自己一生追求的「尊严」和「专业」，可能使他错过了最珍贵的东西。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;故事的结尾，史蒂文斯站在码头的长凳上，看着日落，长日将尽，思考着如何度过「余下的时光」（the remains of the day）。他决定要学会开玩笑，变得更像个「普通人」，这标志着他终于开始正视自己压抑已久的情感需求。&lt;/p&gt;
&lt;p&gt;这部小说以管家史蒂文斯六天的西南部旅行为容器，盛装起三十年的记忆残片，表面上是管家对职业生涯的追忆，内里却是关于尊严、悔恨与自我欺骗的灵魂解剖。《长日将尽》巧妙地交织了两条时间线索，呈现出鲜明的明暗对比。&lt;/p&gt;
&lt;p&gt;第一条线索回溯 1930 年代的欧洲，那是一个阴云密布的动荡年代。第一次世界大战的创伤尚未痊愈，纳粹党在德国攫取政权，欧洲逐渐滑向第二次世界大战的深渊。这些重大历史事件如阴影般笼罩着达林顿庄园，深刻影响了达林顿勋爵的政治抉择和管家史蒂文斯的生活轨迹。在史蒂文斯的回忆中，这段往事总是笼罩着一层沉重而灰暗的色调。&lt;/p&gt;
&lt;p&gt;与之形成鲜明对比的是第二条线索：1956 年盛夏的英国乡间。当史蒂文斯走出庄园，驶入当下的世界时，眼前展现的是一幅截然不同的图景：和煦的阳光洒满乡间小路，鸟儿在碧空中自由翱翔，道路平坦舒展，路旁绿树成荫，野花绽放。这个光明敞亮的世界仿佛在暗示新的可能，而前往拜访肯顿小姐的期待更为这趟旅程增添了几分希望的色彩。&lt;/p&gt;
&lt;p&gt;在小说结尾处，当史蒂文斯终于与肯顿小姐重逢时，时光的残酷真相显露无遗。他们惊觉岁月不仅在他们脸上刻下了皱纹，更在他们的人生中留下了无法弥补的遗憾。&lt;strong&gt;这场迟来的重逢既是一个终点，也是一个领悟的开始——关于错过的爱情，关于虚度的光阴，关于生命中那些再也无法重来的选择。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;石黑一雄以这两条时间线索的交织，深刻展现了个人命运与时代洪流的纠葛，以及人生中那些难以言说的悔恨与惆怅。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;小说的叙事是一场优雅的骗局。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;石黑一雄摒弃了传统意识流的恣意流淌，转而用管家职业特有的秩序感规训着回忆的走向。史蒂文斯的叙述总是恰好在情感即将决堤时，突然转入对「仆人守则」或「雪利酒温度」的冗长讨论。这种自我审查式的叙述，像极了维多利亚庄园里紧闭的百叶窗——阳光必须被切割成规整的菱形，才能被允许照进房间。&lt;/p&gt;
&lt;p&gt;最残酷的瞬间往往藏在最克制的细节里：当肯顿小姐宣布婚讯时，史蒂文斯记得的却是她手中茶杯边缘的裂痕；父亲咽气时，他描述的重点始终是宴会厅水晶吊灯的光晕角度。&lt;strong&gt;这种用器物置换情感的叙事策略，让压抑的力量在文本裂隙中不断蓄积，最终在黄昏的海浪声里轰然决堤。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;《长日将尽》的思想重量，在于它揭示了现代人最隐秘的生存困境：&lt;strong&gt;我们如何成为自己记忆的囚徒。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;史蒂文斯穷尽一生追求的「尊严」，实则是用职业伦理编织的认知牢笼。他将达林顿勋爵的政治错误美化为「绅士的失误」，将父亲临终时的缺席重构为「专业精神的典范」，甚至将爱情降维成「员工情绪管理问题」。&lt;/p&gt;
&lt;p&gt;这种自我欺骗的机制，在当代社会演化成更精密的形态——当我们用绩效指标丈量人生价值，用社交形象替代真实自我时，何尝不是在建造各自的「达林顿府」？石黑一雄用管家的白手套，轻轻掀开了文明社会精心维护的帷幕，露出其后锈迹斑斑的人性真相。&lt;/p&gt;
&lt;p&gt;要真正读懂这部黄昏时分的灵魂史诗，需将目光投向那些未被完全熨平的记忆褶皱。注意史蒂文斯每次修正回忆时的微妙停顿，那是被压抑的自我在叩击叙事牢笼；留心反复出现的浓雾意象，它既遮蔽着历史真相，也模糊了道德判断的边界。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我们越是试图用理性构建完美的人生叙事，记忆就越会异化为囚禁自我的管家。&lt;/strong&gt; 石黑一雄通过管家职业的极端情境，放大了每个人都正在经历的记忆规训过程——当回忆不再是自由的漫游，而成为维护某种价值观的述职报告，人性的温度便永远滞留在黄昏的余晖里。&lt;/p&gt;
&lt;p&gt;石黑一雄用六个黄昏完成的这场记忆解剖术，最终指向每个现代人的精神原罪：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我们越是努力成为人生的完美管家，就越会将灵魂典当给虚无的秩序。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;或许真正的尊严，不在于将回忆擦拭成光可鉴人的银器，而在于有勇气凝视那些永远无法抚平的褶皱——在那里，未被讲述的真相与未曾活过的自我，正等待着迟到的赦免。&lt;/p&gt;
</content:encoded></item><item><title>计算机图形学笔记：从 WebGL 到 WebGPU</title><link>https://www.zzgu.io/posts/webgpu-triangle/</link><guid isPermaLink="true">https://www.zzgu.io/posts/webgpu-triangle/</guid><description>对比 WebGL 和 WebGPU 的 API，实现一个基础的三角形。</description><pubDate>Fri, 10 Jul 2026 15:15:07 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;目前 WebGPU 的标准还没有完全确定下来，需要下载开发者版本的 Chrome Canary 才能开启 WebGPU。(目前正式版中 Chrome 96 / 97 其实已经支持 WebGPU了，但并不是完全支持，98 (据说）会正式支持 WebGPU）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;WebGL 与 WebGPU&lt;/h2&gt;
&lt;p&gt;WebGL 的基础是 OpenGL。OpenGL 的初始版本可以追溯到 1992 年，整个 OpenGL 的设计是基于状态机模型。状态驱动的 OpenGL 难以利用今天 GPU 并行的特点。对于今天的多核计算的设备，使用 OpenGL 非常难以发挥机器的全部计算能力。WebGL 基于 OpenGL，这些 OpenGL 的问题也继承到了 WebGL了。&lt;/p&gt;
&lt;p&gt;除此之外，OpenGL 也被各大厂商抛弃。微软的 Windows 有 Direct X，Apple 则提出了 Metal，并且直接不支持新版本的 OpenGL 4，科纳斯则提出了「次世代 OpenGL「 的 Vulkan。这些新的图形编程语言的特点都是为了适应多核并行的高性能计算。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当然，复杂度也要比 OpenGL 更高。如果学习过 DirectX 12（支持多线程）和 DirectX 11，应该很清楚，DirectX 12 比 11 复杂多了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;需要注意的是，WebGPU 和 WebGL 并没有关系，它不需要显式地依赖 OpenGL ES。从某种意义上，wgsl 也是一门新的语言，然后经由浏览器翻译成更加底层的实现，至于底层是 Vulkan、Metal 或者是 Direct X 等等，则已经不是重点了。&lt;/p&gt;
&lt;p&gt;由于 WebGPU 的入口是浏览器，它的标准会尽可能的大众化，也就是不能对设备要求过高，否则这个标准的通用程度也会是一个很大的问题。不可能要求每个需要使用 WebGPU 的用户的 GPU 都是 RTX 3090。可以理解，这也导致标准的复杂性会相应增加。&lt;/p&gt;
&lt;h3&gt;WebGPU 基本概念&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GPUAdapter&lt;/code&gt; ：WebGPU 中将物理的 GPU 硬件视为 &lt;code&gt;GPUAdapter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPUDevice&lt;/code&gt; ：管理资源（它可能有自己处理单元的显存）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPUQueue&lt;/code&gt; ：执行 GPU 命令的队列&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPUBuffer&lt;/code&gt; （缓冲区）和 &lt;code&gt;GPUTexture&lt;/code&gt; （纹理）：在 GPU 内存（显存）中烘焙的物理资源&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPUCommandBuffer&lt;/code&gt; 和 &lt;code&gt;GPURenderBundle&lt;/code&gt; 是用户记录命令的容器&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPUShaderModule&lt;/code&gt; 包含着色器代码。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPUSampler&lt;/code&gt; 或 &lt;code&gt;GPUBindGroup&lt;/code&gt;，配置 GPU 使用其它物理资源的方式&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;安全性&lt;/h3&gt;
&lt;p&gt;和 Web 一样，会保证是当前页面数据。由于通过浏览器翻译成底层的 GPU 语言，在翻译阶段会严格限定指令集并进行验证，避免出现未定义行为。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;还有其他的针对安全问题的考虑，暂时不讨论&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;图形学基础概念&lt;/h2&gt;
&lt;p&gt;如果没有清楚一些基础概念，无论是学 WebGL 还是 WebGPU 都是无法深入下去的。（由于篇幅有限，这里只是简单概述一下，后续需要具体用到的概念再展开）&lt;/p&gt;
&lt;h3&gt;图形系统&lt;/h3&gt;
&lt;p&gt;计算机图形系统也是一个计算机系统，因此它肯定也包含了一个通用计算机的所有部件。图形系统包括以下 6 个部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;输入设备（鼠标、键盘、手绘板…）&lt;/li&gt;
&lt;li&gt;中央处理单元（CPU）&lt;/li&gt;
&lt;li&gt;图形处理单元（GPU）&lt;/li&gt;
&lt;li&gt;存储器（包括常说的内存、显存）&lt;/li&gt;
&lt;li&gt;帧缓冲区（比如前后缓冲区）&lt;/li&gt;
&lt;li&gt;输出设备（显示器、投影等等）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这是一个通用的模型，从手机到计算机都可以用这个模型。&lt;/p&gt;
&lt;h3&gt;像素和帧缓存&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;现代所有图形系统都是基于光栅的。&lt;strong&gt;输出设备看到的图像是由图形系统产生的&lt;/strong&gt;图形元素&lt;/strong&gt;组成的序列：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图形元素也叫做&lt;strong&gt;像素&lt;/strong&gt;（pixel）&lt;/li&gt;
&lt;li&gt;像素阵列称为&lt;strong&gt;光栅&lt;/strong&gt;（raster）&lt;/li&gt;
&lt;li&gt;帧缓冲区（framebuffer）中的像素称为&lt;strong&gt;分辨率&lt;/strong&gt;（resolution），决定了图像中可以分辨出多少细节
&lt;ul&gt;
&lt;li&gt;帧缓冲区的&lt;strong&gt;深度&lt;/strong&gt;（depth）或者精度（precision）表示的是像素所用的比特数，深度为 1 的帧缓冲区只能有 $2^1$ = 2 种颜色，而深度为 8 的帧缓冲区可以表示 256($2^8$) 种颜色。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全彩&lt;/strong&gt;（full-color）显示中，每个像素 24 比特（现在基本上都有 32 比特）。这样系统可以逼真地表示大多数图像，也被称为&lt;strong&gt;真彩色&lt;/strong&gt;（true-color）系统，或者 &lt;strong&gt;RGB 系统&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;高动态范围&lt;/strong&gt;（High Dynamic Range，HDR）给每一个颜色分配了 12 或者更多的比特位。
&lt;ul&gt;
&lt;li&gt;现在，帧缓冲区已经支持用浮点数表示颜色值，可以更好的支持 HDR&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;在简单的图形系统中，帧缓冲区只存储屏幕上要显示的像素的颜色值。但在目前的图形系统中，帧缓冲区存储的信息其实非常多，比如还有生成 3D 图像所需要的深度信息等等。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;输出设备&lt;/h3&gt;
&lt;p&gt;计算显示设备的历史可以追溯到&lt;strong&gt;阴极射线管&lt;/strong&gt;（Cathode Ray Tube，CRT）。二十多年前那种带着长长尾巴的电视机就是基于这种原理。&lt;/p&gt;
&lt;p&gt;CRT 因为电子轰击涂在管子上的磷光物质而发光。电子束的方向由两对偏转板控制。计算机的输出由数模转换器转换成 x 偏转板和 y 偏转板上的电压值。当强度足够大的电子束轰击到磷光物质上，CRT 屏幕就会发光。&lt;/p&gt;
&lt;p&gt;如果控制电子束偏转的电压以恒定的速率改变，那么电子束就会扫过一条直线轨迹。这样的设备称为&lt;strong&gt;随机扫描&lt;/strong&gt;（random-scan）显示器。&lt;/p&gt;
&lt;p&gt;磷光物质被电子束激发以后，典型的 CRT 的发光只能持续很短的时间，一般是几毫秒。为了让人看到稳定的、不闪烁的图像，电子束必须以足够高的速率重复扫描相同的路径，这就是&lt;strong&gt;刷新&lt;/strong&gt;（refresh），刷新的速率叫做&lt;strong&gt;刷新率&lt;/strong&gt;。在早期的系统中，刷新的速率由电源的（交流电）频率决定，例如美国是 60 Hz，而其他大多数地方是 50 Hz。当然，目前显示器已经远远不止 60 Hz 了，例如 iPad Pro 可以 120 Hz，一些专业的游戏笔记本可以达到 144 Hz。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;逐行扫描：像素按照刷新率一行一行地显示&lt;/li&gt;
&lt;li&gt;隔行扫描：奇数行和偶数行交替刷新
&lt;ul&gt;
&lt;li&gt;60 Hz 的隔行扫描，每秒钟屏幕被完整刷新只有 30 次&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后面，CRT 就被平板显示技术取代了。平板显示器也是基于光栅原理，虽然平板的具体物理实现可能不同，比如是发光二极管（LED）、液晶显示器（LCD）、等离子显示屏等，但都使用了二维栅格来寻址每个单独的发光元件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LED：由传递到栅格上的电信号控制开启和关闭；&lt;/li&gt;
&lt;li&gt;LCD：电场改变液晶的排列方式，可以控制是否阻挡光线通过；&lt;/li&gt;
&lt;li&gt;等离子显示器：通过激发玻璃板的中的气体，获得能量的气体变成发光的等离子体；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3D 显示则利用交替刷新周期在左眼和右眼看到图像进行切换显示。观众需要佩戴满足一定刷新周期的特制眼镜。3D 电影放映机则会产生具有不同偏振方向的两个图像（通常称为左右眼），观众佩戴偏振光眼镜，这样每个眼睛只看到两个图像的一个，经过大脑的视觉合成，从而形成 3D 效果。&lt;/p&gt;
&lt;h2&gt;光学成像模型&lt;/h2&gt;
&lt;p&gt;因为这里不打算讲物理学（虽然后面如果深入了解光和材质的话，像光度学的概念还是要懂的）。这里一笔带过，现实世界中，我们作为&lt;strong&gt;观察者&lt;/strong&gt;看到的图像是由于环境中&lt;strong&gt;光源&lt;/strong&gt;投射到物体上，然后物体反射到我们的眼睛（当然，还有光源直射你的眼睛、包括物体本身的漫反射等等）。&lt;/p&gt;
&lt;p&gt;物体（对象）的&lt;strong&gt;材质不同，对光的反射和折射也会不同&lt;/strong&gt;（目前计算机图形学都是基于几何光学，至于波动光学（诸如衍射、偏振等）是不用于计算机图形学的）。所以材质代表了对光处理模型，例如是完全反射回去（理想镜子），还是会在内部进行不断的散射（蜡烛的次表面散射模型）。&lt;/p&gt;
&lt;h2&gt;三维绘图的 API&lt;/h2&gt;
&lt;p&gt;目前计算机三维模型使用的&lt;strong&gt;虚拟照相机模型&lt;/strong&gt;，按照这个模型，API 就需要有下面四种类型的函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对象&lt;/li&gt;
&lt;li&gt;观察者（也就是视点、相机）&lt;/li&gt;
&lt;li&gt;光源&lt;/li&gt;
&lt;li&gt;材质&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;流水线体系结构&lt;/h3&gt;
&lt;p&gt;图形绘制系统的体系结果经过多次反复，但无论如何演变，流水线结构的重要性依然不变。其他的图形绘制方法，包括光线跟踪、辐射度方法和光子映射都不能获得实时的行为。&lt;/p&gt;
&lt;p&gt;而现在，流水线体系结构中，&lt;strong&gt;顶点处理模块和片元处理模块&lt;/strong&gt;是可以编程的。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;顶点着色器可以在顶点经过流水线的时候&lt;strong&gt;修改每个顶点的位置或者颜色&lt;/strong&gt;。这样就可以实现许多光线-材质模型或者创建新型的投影。&lt;/li&gt;
&lt;li&gt;片元着色器可以用许多新的方式来使用纹理，也可以实现&lt;strong&gt;基于每个片元的光照&lt;/strong&gt;而不是每个顶点的光照。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;WebGL 的三角形&lt;/h2&gt;
&lt;h3&gt;初始化着色器&lt;/h3&gt;
&lt;p&gt;在 WebGL 中，首先需要创建顶点着色器和片段着色器，并且绑定和编译对应的着色器程序。在这之后，需要将这两个着色器程序链接成为一个着色器。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function initShader(gl, vertexShader, fragShader) {
  // 创建顶点着色器
  const v_shader = gl.createShader(gl.VERTEX_SHADER);
  // 绑定顶点着色器代码
  gl.shaderSource(v_shader, vertexShader);
  // 编译顶点着色器
  gl.compileShader(v_shader);
  // 创建片段着色器
  const f_shader = gl.createShader(gl.FRAGMENT_SHADER);
  gl.shaderSource(f_shader, fragShader);
  gl.compileShader(f_shader);
  // 创建着色器程序
  const shaderProgram = gl.createProgram();
  gl.attachShader(shaderProgram, v_shader);
  gl.attachShader(shaderProgram, f_shader);
  gl.linkProgram(shaderProgram);
  gl.useProgram(shaderProgram);
  // WebGL 没有类似 getProgram 的接口，所以绑定到 program 上
  gl.program = shaderProgram;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;绘制一个点&lt;/h3&gt;
&lt;p&gt;要绘制一个点，首先区分流水线上的不同节点，点的位置和大小属于顶点着色器的内容，而顶点的颜色属于片段着色器。和 C 系语言类似，由 &lt;code&gt;main&lt;/code&gt; 函数开始作为程序的入口，需要注意的是，&lt;strong&gt;返回值不是 &lt;code&gt;int&lt;/code&gt;，而是 &lt;code&gt;void&lt;/code&gt;。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;顶点着色器，点的位置最后的 1.0 主要目的是齐次化，这样才可以更好地运用在矩阵运算中，避免由于颜色的 4 个维度（rgba）而无法进行矩阵运算。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 顶点着色器代码
const v_shader = `
    void main() {
        gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
        gl_PointSize = 10.0;
    }`;
// 片段着色器代码
const f_shader = `
    void main() {
        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }`;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;获取 HTML 标签，清空画布就都是比较容易理解的操作：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// DOM 节点与 WebGL 上下文
const canvas = document.getElementById(&quot;hello-point&quot;);
const gl = canvas.getContext(&quot;webgl&quot;);
if (!gl) {
  console.log(&quot;Failed to get the rendering context for WebGL.&quot;);
  return;
}
// 初始化着色器
initShader(gl, v_shader, f_shader);
// 清空 &amp;lt;canvas&amp;gt; 颜色
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
// 绘制点
gl.drawArrays(gl.POINTS, 0, 1);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;绘制多个点&lt;/h3&gt;
&lt;p&gt;对于多个点的组成的图形，例如三角形、矩形和立方体。我们肯定更希望一次性把图形的的顶点全部传入到顶点着色器，而不是用循环一次一个顶点的传入。WebGL 提供了&lt;strong&gt;缓冲区对象&lt;/strong&gt;（buffer object)，它可以一次性地向着色器传入多个顶点的数据。缓冲区对象是 WebGL 系统中的一块内存区域，可以一次性地向缓冲区对象中填充大量的顶点数据。&lt;/p&gt;
&lt;p&gt;使用缓冲区对象向顶点着色器传入多个顶点的数据，需要遵循以下&lt;strong&gt;五个步骤&lt;/strong&gt;（处理其他对象，例如纹理、帧缓冲区对象也类似）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建缓冲区对象 &lt;code&gt;gl.createBuffer()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;绑定缓冲区对象 &lt;code&gt;gl.bindBuffer()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;将数据写入缓冲区对象 &lt;code&gt;gl.bufferData()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;将缓冲区对象分配给一个 attribute 变量 &lt;code&gt;gl.vertexAttribPointer()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;开启 attribute 变量 &lt;code&gt;gl.enableVertexAttribArray()&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;function initVertexBuffers(gl) {
  const vertices = Float32Array.of(...[0.0, 0.5, -0.5, -0.5, 0.5, -0.5]);
  const n = 3;

  // 1. 创建缓冲区对象
  const vertexBuffer = gl.createBuffer();
  if (!vertexBuffer) {
    console.log(&quot;Failed to create the buffer object.&quot;);
    return -1;
  }

  // 2. 绑定目标
  gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
  // 3. 写入缓冲区
  gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
  // 4. 创建分配 attribute 变量
  const a_Position = gl.getAttribLocation(gl.program, &quot;a_Position&quot;);
  if (a_Position &amp;lt; 0) {
    console.log(&quot;Failed to get the storage location of a_Position&quot;);
    return -1;
  }
  // 需要指明数据的格式，这里坐标是 2 个 Float，并且没有归一化
  gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
  // 5. 开启 attribute 变量
  gl.enableVertexAttribArray(a_Position);
  return n;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;着色器程序中片段着色器提供颜色信息，这里不需要修改。由于我们传入的是多个点，需要将顶点着色器中的顶点改为 &lt;code&gt;attribute vec4&lt;/code&gt; ：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const v_shader = `
    attribute vec4 a_Position;
    void main() {
        gl_Position = a_Position;
        gl_PointSize = 10.0;
    }`;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;绘制点的数量也从 1 修改为 n：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 初始化着色器
initShader(gl, v_shader, f_shader);

const n = initVertexBuffers(gl);
if (n &amp;lt; 0) {
  console.log(&quot;Failed to get the positions of the vertices&quot;);
  return;
}

// 清空 &amp;lt;canvas&amp;gt; 颜色
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
// 绘制点
gl.drawArrays(gl.POINTS, 0, n);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;三角形&lt;/h3&gt;
&lt;p&gt;只要在上面的代码上稍微改改，就能得到一个三角形：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把 &lt;code&gt;gl_PointSize = 10.0;&lt;/code&gt; 去掉，因为只有绘制点的时候，点的大小才是有用的；&lt;/li&gt;
&lt;li&gt;将 &lt;code&gt;gl.drawArrays&lt;/code&gt; 的第一个参数从&lt;strong&gt;点&lt;/strong&gt; &lt;code&gt;gl.POINTS&lt;/code&gt; 修改为三角形 &lt;code&gt;gl.TRIANGLES&lt;/code&gt; ；&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;gl.drawArrays(gl.TRIANGLES, 0, n);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;WebGPU 的三角形&lt;/h2&gt;
&lt;p&gt;WebGPU 的流水线体系结构和 WebGL 没什么差别，应该说整个实时渲染的渲染大体步骤都是一样的。顶点着色器到顶点组装（例如组装成三角形），经过剪裁和光栅化后进入片段着色器进行着色再到最终显示。WebGPU 从一开始就考虑的是并发（并行）的计算，所以&lt;strong&gt;异步&lt;/strong&gt;过程贯穿始终。当然，今天的前端开始也是如此。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;wsgl 的语法挺像 Rust 的…代码高亮我都选的是 Rust&lt;/strong&gt;…但却是比 GL 的语法晦涩一点，也可能不止一点。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;初始化&lt;/h3&gt;
&lt;p&gt;由于整个过程是异步的，所以需要使用 &lt;code&gt;async&lt;/code&gt; 声明函数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(async () =&amp;gt; {
  // ... 下面的代码写在这里 ...
})();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;WebGPU 的具体实现是没有限制的，Windows 可能是使用 Direct X 12，而 OSX 则可能是 Metal。为了屏蔽这种差异，引入了适配器层，由适配器提供对应的底层设备：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 适配器
const adapter = await navigator.gpu.requestAdapter();
// 通过适配器获取具体设备
const device = await adapter.requestDevice();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来获取画布和上下文就和 WebGL 没有太大的差别了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const canvas = document.getElementById(&quot;webgpu-canvas&quot;);
const context = canvas.getContext(&quot;webgpu&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于具体实现是由适配器管理的，绘制所需要的纹理格式同样应该通过适配器获取。可以通过 &lt;code&gt;getPreferredFormat&lt;/code&gt; 获取对应的的纹理格式。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const presentationFormat = context.getPreferredFormat(adapter);
context.configure({
  device,
  format: presentationFormat,
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;顶点缓冲区和颜色缓冲区&lt;/h3&gt;
&lt;p&gt;和 WebGL 一样，也需要声明顶点缓冲区和颜色缓冲区，需要注意的是，CPU 和 GPU 是异构的。可以使用 &lt;code&gt;createBuffer&lt;/code&gt; 映射显存，为了让 GPU 能再次访问这块显存，它必须取消映射 &lt;code&gt;umap()&lt;/code&gt; 。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 映射显存
const positionBuffer = device.createBuffer({
  size: 24,
  usage: GPUBufferUsage.VERTEX,
  mappedAtCreation: true,
});
// 取消映射
positionBuffer.unmap();

const colorBuffer = device.createBuffer({
  size: 12,
  usage: GPUBufferUsage.VERTEX,
  mappedAtCreation: true,
});
colorBuffer.unmap();
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;顶点着色器&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;@stage(vertex)
fn main(@builtin(vertex_index) VertexIndex : u32)
    -&amp;gt; @builtin(position) vec4&amp;lt;f32&amp;gt; {
  var pos = array&amp;lt;vec2&amp;lt;f32&amp;gt;, 3&amp;gt;(
      vec2&amp;lt;f32&amp;gt;(0.0, 0.5),
      vec2&amp;lt;f32&amp;gt;(-0.5, -0.5),
      vec2&amp;lt;f32&amp;gt;(0.5, -0.5));

  return vec4&amp;lt;f32&amp;gt;(pos[VertexIndex], 0.0, 1.0);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;stage&lt;/code&gt; 的中文是阶段，&lt;s&gt;&lt;code&gt;[[stage(vertex)]]&lt;/code&gt;&lt;/s&gt; （现在改成类似装饰器的注解模式 &lt;code&gt;@&lt;/code&gt; 取代 &lt;code&gt;[[]]&lt;/code&gt;） 显然说明了这是一个顶点着色阶段。&lt;code&gt;builtin&lt;/code&gt; 则指明是内置类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vertex_index&lt;/code&gt; : 顶点索引，类似数组下标，值的类型为 &lt;code&gt;u32&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;position&lt;/code&gt; : [输出] 当前顶点的输出位置，使用的是齐次坐标。所以从 &lt;code&gt;pos&lt;/code&gt; 中获取到二维坐标后，再补上两个维度（&lt;code&gt;z&lt;/code&gt; 和 &lt;code&gt;w&lt;/code&gt; )的值，组成一个 &lt;code&gt;vec4&lt;/code&gt; 四维的坐标。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;片元着色器&lt;/h3&gt;
&lt;p&gt;片元着色 RGBA，代表不透明的纯红色。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@stage(fragment)
fn main() -&amp;gt; @location(0) vec4&amp;lt;f32&amp;gt; {
  return vec4&amp;lt;f32&amp;gt;(1.0, 0.0, 0.0, 1.0);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;location(0)&lt;/code&gt; 和 WebGL 中 &lt;code&gt;(location = 0)&lt;/code&gt; 是一个意思，都是指定该属性在顶点缓冲区中的位置。&lt;/p&gt;
&lt;h3&gt;创建渲染管线&lt;/h3&gt;
&lt;p&gt;指定渲染管线和提供必要的材料，我们之前已经说过了，GPU 流水线中，可以定制代码的主要就是就是顶点着色器和片元着色器。&lt;code&gt;createShaderModule&lt;/code&gt; 绑定 shader 源码，&lt;code&gt;entryPoint&lt;/code&gt; 指定入口函数。&lt;code&gt;buffers&lt;/code&gt; 则描述了对象的布局。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const pipeline = device.createRenderPipeline({
  vertex: {
    module: device.createShaderModule({
      code: vs,
    }),
    entryPoint: &quot;main&quot;,
    buffers: [
      {
        // 步进值（单位：byte），32位浮点数占 4 bytes，平面坐标x,y 所以是 =&amp;gt; 8
        arrayStride: 8,
        attributes: [
          {
            shaderLocation: 0,
            format: &quot;float32x2&quot;,
            offset: 0,
          },
        ],
      },
      {
        // 8位 无符号整数 = 1byte * 4 = 4bytes
        arrayStride: 4,
        attributes: [
          {
            shaderLocation: 1,
            // UNORM 无符号整数
            format: &quot;unorm8x4&quot;,
            offset: 0,
          },
        ],
      },
    ],
  },
  fragment: {
    module: device.createShaderModule({
      code: fs,
    }),
    entryPoint: &quot;main&quot;,
    targets: [
      {
        format: presentationFormat,
      },
    ],
  },
  primitive: {
    // 图元
    topology: &quot;triangle-list&quot;,
  },
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;提交渲染命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// 创建指令编码器
const commandEncoder = device.createCommandEncoder();
// 视图
const textureView = context.getCurrentTexture().createView();
// 启动渲染通道（WebGPU 还提供了计算通道）
const renderPass = commandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: textureView,
      loadValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 }, // 背景颜色
    },
  ],
});
// 设置渲染管线
renderPass.setPipeline(pipeline);

renderPass.setVertexBuffer(0, positionBuffer);
renderPass.setVertexBuffer(1, colorBuffer);

renderPass.draw(3, 1, 0, 0);
// 结束管道编码
renderPass.end();
// 提交到队列，commandEncoder 调用 finish 完成编码操作，并返回一个指令缓存
device.queue.submit([commandEncoder.finish()]);
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>叶芝：只有一个人爱你那朝圣者的灵魂</title><link>https://www.zzgu.io/posts/when-you-are-old/</link><guid isPermaLink="true">https://www.zzgu.io/posts/when-you-are-old/</guid><description>爱尔兰诗人叶芝代表作《当你老了》赏析和爱尔兰演员科林·法瑞尔（Colin Farrell）动人的朗诵。</description><pubDate>Fri, 10 Jul 2026 15:15:07 GMT</pubDate><content:encoded>&lt;h2&gt;叶芝&lt;/h2&gt;
&lt;p&gt;威廉·巴特勒·叶芝（William Butler Yeats，1865-1939）是 20 世纪最重要的英语诗人之一，也是爱尔兰文学复兴运动的核心人物。&lt;strong&gt;他于 1923 年获得诺贝尔文学奖&lt;/strong&gt;，是爱尔兰历史上第一位获此殊荣的作家。&lt;/p&gt;
&lt;p&gt;叶芝出生于都柏林的一个新教艺术家家庭。他的父亲是一位画家，这种艺术氛围对他早期的创作产生了深远影响。&lt;/p&gt;
&lt;p&gt;年轻时期的叶芝深受爱尔兰民间传说和神秘主义的影响，这些元素在他的诗作中频繁出现。他热爱爱尔兰的文化传统，积极投身于爱尔兰民族文艺复兴运动，与夫人格雷戈里夫人一起创立了爱比剧院，对爱尔兰戏剧的发展作出了重要贡献。&lt;/p&gt;
&lt;p&gt;在创作风格上，叶芝的诗歌经历了显著的演变。早期作品多带有浪漫主义色彩，充满神秘主义和象征主义的特点；而在经历了爱尔兰独立战争等历史事件后，他的后期作品则更加现实主义，展现出对人生、政治和历史的深刻思考。&lt;/p&gt;
&lt;p&gt;他最著名的作品包括《当你老了》、《复活节，1916》、《第二次降临》等。&lt;/p&gt;
&lt;p&gt;叶芝一生都与演员、政治活动家莫德·冈（Maud Gonne）保持着复杂的感情联系。叶芝在日记中写道：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我从来没有想过会在一个活生生的女人身上看到这样超凡的美——这样的美，我一直以为只是属于名画，属于诗歌，属于古代的传说」。那时候，「一切都已模糊不清，只有那一刻除外：她走过窗前，穿一身白衣，去修整花瓶里的花枝。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;虽然他多次向她求婚都被拒绝，但这段未果的爱情成为了他创作的重要灵感来源，产生了许多动人的爱情诗作。&lt;/p&gt;
&lt;p&gt;作为诗人和剧作家，叶芝的作品展现出独特的艺术风格和深邃的思想内涵。他善于将爱尔兰民族传统与现代诗歌技巧相结合，创造出既有民族特色又具有普世价值的文学作品。他的创作对20世纪以来的英语文学产生了深远的影响，被誉为现代主义诗歌的开创者之一。&lt;/p&gt;
&lt;h2&gt;When you are old 当你老了&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;爱尔兰演员科林·法瑞尔（Colin Farrell）天然的爱尔兰口音为这首诗增添了地道的韵味，因为这正是诗人叶芝的母语腔调。他的诵读节奏舒缓，情感真挚，特别是在朗诵「But one man loved the pilgrim Soul in you」这句时，表达出深沉的爱意。&lt;/p&gt;
&lt;/blockquote&gt;

  
Your browser does not support the audio element.

&lt;p&gt;When you are old and grey and full of sleep,&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
当你老了，头白了，睡意昏沉，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
And nodding by the fire, take down this book,&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
炉火旁打盹，请取下这部诗歌，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
And slowly read, and dream of the soft look&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
慢慢读，回想你过去眼神的柔和，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
Your eyes had once, and of their shadows deep;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
回想它们昔日浓重的阴影；&lt;/p&gt;
&lt;p&gt;How many loved your moments of glad grace,&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
多少人爱你青春欢畅的时辰，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
And loved your beauty with love false or true,&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
爱慕你的美丽，假意或真心，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
But one man loved the pilgrim Soul in you,&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
只有一个人爱你那朝圣者的灵魂，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
And loved the sorrows of your changing face;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
爱你衰老了的脸上痛苦的皱纹；&lt;/p&gt;
&lt;p&gt;And bending down beside the glowing bars,&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
垂下头来，在红光闪耀的炉子旁，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
Murmur, a little sadly, how Love fled&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
凄然地轻轻诉说那爱情的消逝，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
And paced upon the mountains overhead&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
在头顶的山上它缓缓踱着步子，&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
And hid his face amid a crowd of stars.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
在一群星星中间隐藏着脸庞。&lt;/p&gt;
&lt;p&gt;（翻译：袁可嘉）&lt;/p&gt;
&lt;h3&gt;其它译本&lt;/h3&gt;
&lt;p&gt;我个人也很喜欢苏缨翻译的版本：&lt;/p&gt;
&lt;p&gt;当你老了，头发白了，睡意渐沉，&lt;br /&gt;&lt;br /&gt;
倦坐在炉边，翻开这本书，&lt;br /&gt;&lt;br /&gt;
慢慢读着，追梦你当年的眼神&lt;br /&gt;&lt;br /&gt;
那轻柔的光和深沉的影；&lt;br /&gt;&lt;br /&gt;
太多人爱过你青春的片影，&lt;br /&gt;&lt;br /&gt;
爱你的美，以虚情，以真情，&lt;br /&gt;&lt;br /&gt;
只一人爱你朝圣者的心，&lt;br /&gt;&lt;br /&gt;
爱你哀戚的脸上岁月的留痕；&lt;br /&gt;&lt;br /&gt;
然后在炉栅边弯下了腰，&lt;br /&gt;&lt;br /&gt;
喃喃着，带着浅浅的伤感，&lt;br /&gt;&lt;br /&gt;
爱是怎样离去，怎样步上群山，&lt;br /&gt;&lt;br /&gt;
怎样在星斗与星斗间，藏起了脸。&lt;/p&gt;
&lt;h2&gt;赏析&lt;/h2&gt;
&lt;p&gt;叶芝的《当你老了》（When You Are Old）是一首极具代表性的十四行诗，灵感借鉴了法国诗人龙萨的作品，但叶芝以其独特的抒情方式赋予了这首诗新的生命和深度。&lt;/p&gt;
&lt;h3&gt;时代背景与情感内涵&lt;/h3&gt;
&lt;p&gt;原诗创作于叶芝年轻时期，表达了他对情人莫德·冈（Maud Gonne）深沉而复杂的情感。这首诗不仅仅是对个人情感的抒发，更隐含着对时间流逝和人性永恒的哲学思考。相比龙萨的诗歌，叶芝更注重私人情感的刻画，而不是普世性的感伤。&lt;/p&gt;
&lt;p&gt;诗中的意象——衰老、容颜的消逝、孤独的沉思——与龙萨的《当你老了》有相似之处。然而，叶芝笔下的衰老并非一种单纯的身体变化，而是一种带有灵魂厚重感的生命历程。这使得诗句不仅停留在表面意象的描摹上，而是引人深思生命的意义和爱之真谛。&lt;/p&gt;
&lt;h3&gt;意象分析&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;“老了”（old）、“头白了”（grey）、“睡意昏沉”（full of sleep）这组意象构建了&lt;strong&gt;时间流逝&lt;/strong&gt;的基调；&lt;/li&gt;
&lt;li&gt;“炉火”（fire）：暗示温暖但也暗示生命的衰落&lt;/li&gt;
&lt;li&gt;“山”（mountains）和&quot;星星&quot;（stars）：象征永恒与遥远&lt;/li&gt;
&lt;li&gt;“朝圣者的灵魂”（pilgrim Soul）：暗示精神的崇高性，区别于单纯的外在美，强调内在精神价值&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;与中文诗歌的对比&lt;/h3&gt;
&lt;p&gt;相比于中文诗歌的平仄对仗，英语诗歌的格律强调轻重音的交替以及元音与辅音的组合之美。英语中复杂的拼读和连读使得诗歌的音律更加多样化，这一点在《当你老了》中表现得尤为明显。喜欢 RAP 音乐的人对英语音韵的丰富性可能会感触更深，因为 RAP 中的押韵与节奏正是西方诗歌传统的现代延续。&lt;/p&gt;
&lt;p&gt;中国流行音乐中也有尝试借鉴英语诗歌音韵美的例子，比如水木年华的《一生有你》。这首歌化用了《当你老了》的核心情感，但在音律上更贴近中国人的审美习惯，采用了更直接的押尾韵，弱化了原诗的格律和音韵复杂性。这种改编虽然削减了原诗的苍凉厚重感，但却让情感表达更加直接，符合中国流行文化的特点。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;多少人曾爱慕你年轻时的容颜 / 可知谁愿承受岁月无情的变迁 / 多少人曾在你生命中来了又还 / 可知一生有你我都陪在你身边&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;格律与韵脚&lt;/h3&gt;
&lt;p&gt;《当你老了》的格律与音韵设计体现了西方诗歌独特的音乐美感。全诗分为三个诗节，每节四行，采用 a b b a 的押韵结构。这种押韵形式通过首尾呼应与中间相对，营造出一种层次分明又圆融统一的音韵效果。&lt;/p&gt;
&lt;p&gt;第一节的尾韵组合为 sleep/book/look/deep，第一句和第四句押韵，第二句和第三句押韵。这里的 “ee” 长音（sleep/deep）与 “oo” 短音（book/look）交错出现，不仅展现了音韵的对称之美，也形成了一种微妙的张力。&lt;/p&gt;
&lt;p&gt;第二节延续了这种韵律美 grace/true/you/face，通过元音的变化表现出感情的递进。而第三节的 bars/fled/overhead/stars 则用强烈的意象对比，使得诗的尾声充满了广阔与深邃的意境。&lt;/p&gt;
&lt;p&gt;叶芝的《当你老了》是一首融合了形式美、意境美和情感美的经典诗作。它既是一首情诗,也是一首关于时间、生命和永恒的哲理诗。精妙的韵律结构和深刻的意象表达，成功塑造了一个跨越时空的爱情意境。&lt;/p&gt;
</content:encoded></item><item><title>维特根斯坦：语言的边界就是世界的边界</title><link>https://www.zzgu.io/posts/wittgenstein/</link><guid isPermaLink="true">https://www.zzgu.io/posts/wittgenstein/</guid><description>20 世纪最具影响力的哲学家维特根斯坦和《逻辑哲学论》简述。</description><pubDate>Fri, 10 Jul 2026 15:15:07 GMT</pubDate><content:encoded>&lt;h2&gt;维特根斯坦&lt;/h2&gt;
&lt;p&gt;路德维希·维特根斯坦（Ludwig Wittgenstein, 1889-1951）是 20 世纪最具影响力的哲学家之一。&lt;/p&gt;
&lt;p&gt;1889 年 4 月 26 日出生于奥地利维也纳，为工业巨头卡尔·维特根斯坦的幼子。他出生在一个富有的犹太裔家庭，在艺术与音乐氛围浓厚的环境中成长。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;维特根斯坦家族不仅是当时奥匈帝国最富有的家族之一&lt;/strong&gt;，其家宅更是维也纳文化艺术界的重要聚集地，著名音乐家勃拉姆斯、马勒等都是常客。这样的成长环境对年轻的维特根斯坦产生了深远影响，为其后来在哲学、逻辑学和数学等领域的卓越成就奠定了基础。&lt;/p&gt;
&lt;p&gt;年轻的维特根斯坦展现出对机械与技术的浓厚兴趣。他原本期待跟随物理学家玻尔兹曼学习，但后者在 1906 年的自杀使这个愿望成为泡影。&lt;/p&gt;
&lt;p&gt;同年，他入读柏林理工大学机械工程专业，并对方兴未艾的航空领域产生热忱，当时飞机刚刚被发明。&lt;/p&gt;
&lt;p&gt;1908 年，他转入英国曼彻斯特维多利亚大学，专攻航空工程与空气动力学。为掌握空气动力学，他深入研究数学，这引发了他对数学基础的探索。&lt;/p&gt;
&lt;p&gt;在追寻数学本源的过程中，维特根斯坦接触到了逻辑学。他研读了罗素与怀特海的《数学原理》和弗雷格的《算术基础》。弗雷格惊异于他的天赋，将其引荐给时任剑桥大学三一学院教授的罗素。尽管两人年龄相差甚远，罗素仍将与维特根斯坦的相遇视为&quot;最令人兴奋的智慧探险之一&quot;。&lt;/p&gt;
&lt;p&gt;在罗素的指导下，维特根斯坦专注于形式逻辑研究，这种不依赖主观概念和具体事件的逻辑系统后来成为计算机科学的基础。随着研究深入，他开始思考更深层的哲学问题。&lt;/p&gt;
&lt;p&gt;为寻求宁静的思考环境，维特根斯坦在一个偏僻的挪威小镇驻留两年。1914 年，他返回维也纳后适逢一战爆发，随即主动请缨上前线。在他看来，唯有直面死亡，才能理解终极的哲学问题。 在战场上，他多次执行危险任务，包括在无人区为炮兵指引炮击方向。他先后在俄意战线服役，并因表现出色获得奥地利军队的带剑绶带勋章。&lt;/p&gt;
&lt;h2&gt;逻辑哲学论&lt;/h2&gt;
&lt;p&gt;1918 年夏天，在奥地利维也纳郊外一处宁静的避暑别墅里，年轻的维特根斯坦请了军假专注于他的哲学巨著。这本仅有 75 页的《逻辑哲学论》(Tractatus Logico-Philosophicus)，不仅凝聚了他对语言、逻辑与现实关系的深刻思考，更开创了分析哲学的新纪元。&lt;/p&gt;
&lt;p&gt;作为一名军人，维特根斯坦深知战场上生死难料。在给他的导师伯特兰·罗素的信中，他恳切地写道：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果我在战场上遇难，请您一定要完整地阅读这部作品。我知道它晦涩难懂，但它包含了我对哲学最重要的思考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;维特根斯坦并没有死于战争，这本著作先后以德文（1921）和英文（1922）出版。英译本由语言学家查尔斯·奥格登完成，为这部深奥的哲学著作在英语世界的传播做出了重要贡献。维特根斯坦的这部早期著作，不仅影响了逻辑实证主义的发展，更为 20 世纪语言哲学的研究开辟了新的道路。&lt;/p&gt;
&lt;p&gt;这本书的内容主要是语言对于思维、逻辑和哲学的作用，或者说语言对思维的限制。&lt;/p&gt;
&lt;p&gt;《逻辑哲学论》的核心论题是语言与现实之间的对应关系。维特根斯坦认为，语言不仅是沟通的工具，它实际上是现实世界的一面镜子。通过语言的逻辑结构，现实世界得以被反映和表达。&lt;/p&gt;
&lt;p&gt;因此，维特根斯坦提出了早期哲学的核心思想——&lt;strong&gt;语言图像论&lt;/strong&gt;（picture theory of language）。&lt;/p&gt;
&lt;p&gt;在这一理论框架下，语言被看作是一种能够再现现实世界的图像或模型。每个语言命题都相当于对世界某一状态的描绘，它所描述的对象、关系和事件通过语言的形式得以呈现。&lt;/p&gt;
&lt;p&gt;语言通过构建出与世界结构相似的图像，使我们能够理解并表达关于现实世界的各种命题。逻辑在这个过程中起到了至关重要的作用，它为语言提供了可以映射到现实的规则和框架。&lt;/p&gt;
&lt;p&gt;据传，他的这一灵感部分来自于一则法国新闻：巴黎法庭上，一位律师用微缩模型重现交通事故现场。这个场景启发维特根斯坦思考：模型之所以能够表达现实，是因为两者具有相同的逻辑形式。同理，&lt;strong&gt;语言之所以能够描述世界，也是因为语言与世界共享着逻辑结构。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;维特根斯坦对命题的分析开创了语言哲学的新视角。他提出，命题可分为三类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一是其真伪取决于经验事实的命题&lt;/li&gt;
&lt;li&gt;二是逻辑上必然真或假的命题&lt;/li&gt;
&lt;li&gt;三是无意义(non-sense)的命题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这第三类命题的提出尤为重要。在维特根斯坦看来，传统哲学中的许多论述都属于无意义命题。比如&quot;死亡是新的开始&quot;这样的说法，它陷入了一个逻辑困境：活着的人无法验证死亡状态，而死去的人又无法表达体验。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;因此，关于死亡本质的讨论从根本上就超出了语言的表达边界。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;他进一步指出，无意义命题常常源于对话者之间缺乏共同的参照系。当我们试图向一个沉浸在幻觉中的人证明其幻象不存在时，这种对话本身就是无意义的，因为双方对&quot;实在&quot;的理解完全不同。这揭示了有意义对话必须建立在共享的世界图景之上。&lt;/p&gt;
&lt;p&gt;语言是我们沟通与理解彼此的媒介，它所能表达的范围决定了我们对世界的认知和理解的边界。无法通过语言表达的想法，便无法为他人所理解。&lt;/p&gt;
&lt;p&gt;因此，维特根斯坦说：「我的语言的边界即是我世界的边界。」&lt;/p&gt;
&lt;p&gt;这句话深刻揭示了语言与世界之间的密切关系。维特根斯坦进一步指出，语言不仅存在极限，理性认知的能力也同样有限。&lt;/p&gt;
&lt;p&gt;他认为，科学虽然能够不断探索和揭示自然规律，但并不能解决所有问题，特别是那些超出语言和理性范围的哲学、道德和审美等问题。对于这些无法用理性与语言准确界定的领域，我们只能承认它们的存在，而无法通过科学的方法给予确切的解答。&lt;/p&gt;
&lt;p&gt;书中最著名的结语写道：&quot;对于不可言说的东西，我们必须保持沉默。&quot;这句话不仅道出了语言的局限性，也暗示了人类思维和认识的边界。正是这种对语言本质的深刻洞察，使《逻辑哲学论》成为现代哲学史上的一座丰碑。&lt;/p&gt;
&lt;p&gt;维特根斯坦自己对这本《逻辑哲学论》下的结论是: &lt;strong&gt;它解决了所有哲学问题。&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>明智行动的艺术：52 条行动指南</title><link>https://www.zzgu.io/posts/a-guide-to-smart-action/</link><guid isPermaLink="true">https://www.zzgu.io/posts/a-guide-to-smart-action/</guid><description>罗尔夫·多贝里《明智行动的艺术》一书的笔记，明智行动必备指南。</description><pubDate>Fri, 10 Jul 2026 15:15:06 GMT</pubDate><content:encoded>&lt;h2&gt;用理由辩护&lt;/h2&gt;
&lt;p&gt;如果我们给自己的行为一个理由，就会得到更多的理解和支持。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为什么错过最后期限？ &lt;strong&gt;因为我很遗憾没有赶上。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;结论：必须要有 &lt;strong&gt;因为&lt;/strong&gt; 。&lt;/p&gt;
&lt;h2&gt;选择疲劳症&lt;/h2&gt;
&lt;p&gt;做决定是会令人疲惫的，每一个为笔记本电脑进行上网配置的人，或者组织过类似团体旅行等集体活动的人都会了解这一点。&lt;/p&gt;
&lt;p&gt;你应该选择合适的时机介绍你的项目，例如早上。&lt;/p&gt;
&lt;h2&gt;关联谬误&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;你会穿希特勒穿过的衣服吗？&lt;/li&gt;
&lt;li&gt;从物质的角度，希特勒的衣服和希特勒完全没有关系，但你还是会厌恶它。(有某种非理性的情感因素？)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;人与物之间的关联 —— 即便关联早已不存在或类似照片这种非具体的形式存在 —— 是不容忽视的。&lt;/p&gt;
&lt;p&gt;这就是关联谬误。&lt;/p&gt;
&lt;h2&gt;平均数的问题&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;「不要试图去过一条平均一米深的河流」 —— 纳西姆·塔勒布&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;总使用平均值来考虑事情很可能是有害的，因为平均值掩盖了事情的真实分布情况。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;幂律分布&lt;/strong&gt; 的情况下，一旦有极为特殊的个体在控制分布情况，那么平均的概念就没有意义。&lt;/p&gt;
&lt;p&gt;因此，在提到「平均」的时候，你最好考虑一下背后的整体分布情况。&lt;/p&gt;
&lt;h2&gt;激励排挤效应&lt;/h2&gt;
&lt;p&gt;当人们不是为了挣钱去做一件事的时候，付钱给他们会破坏其做事的意愿。换句话说，金钱上的激励会排挤掉非金钱意义上的动力。&lt;/p&gt;
&lt;h2&gt;废话倾向&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;「如果你没有什么可说的，那就什么都别说。」 —— 马克·吐温&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;滔滔不绝可以掩饰无知。如果一些内容没有清楚地表达，其实是说话者自己不知道在说什么。语言表达是思想的镜子：清晰的思想会带来清楚的表达，糊涂的思想只会是废话连篇。&lt;/p&gt;
&lt;h2&gt;移民效应 / 威尔·罗杰斯效应&lt;/h2&gt;
&lt;p&gt;假设有两个电视频道，A 的收视率很高，B 的收视率很低。如果要把收视率提高，可以把 A 频道中低于 A 频道平均值的节目转移到频道 B 播放。不用构思新节目，就可以同时提高两个频道的收视率。&lt;/p&gt;
&lt;h2&gt;信息偏倚&lt;/h2&gt;
&lt;p&gt;错误地认为掌握信息越多，做出的决定就越好。&lt;/p&gt;
&lt;p&gt;请你试着用最少的信息生活，这样你可以做出更好的决定，很多信息其实是没有价值的。&lt;/p&gt;
&lt;h2&gt;聚集性幻觉&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;云里看到一张脸&lt;/li&gt;
&lt;li&gt;发现某个「规律」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你认为发现了某个规律，那么你应该把它当成是种偶然。&lt;/p&gt;
&lt;h2&gt;劳力辩证现象&lt;/h2&gt;
&lt;p&gt;你在一件事情上投入了很多的精力，便会对其结果期望过高。&lt;/p&gt;
&lt;p&gt;即使你在一件事情上花费了很多时间，也要保持一定的距离去看待其结果。&lt;/p&gt;
&lt;h2&gt;小数定律&lt;/h2&gt;
&lt;p&gt;两家店，一家店 1000 人，一家店 2 人。1000 的店平均体重应该会接近于国民平均体重，无论有没有新员工加入或者老员工离职。2 个人的小店的平均体重则不一样，取决于雇佣了胖的还是瘦的店员。&lt;/p&gt;
&lt;p&gt;当一项研究得出了不同寻常的结果时，请谨慎对待。&lt;/p&gt;
&lt;h2&gt;期望的正负效应&lt;/h2&gt;
&lt;p&gt;期望仿佛是虚构出来的，但它有真实的效果，有改变现实的力量。&lt;/p&gt;
&lt;p&gt;提高你对自己和对你所喜爱的人的期望，这样可以增强你的动力。同时对于不能控制的事情你要降低期望。&lt;/p&gt;
&lt;h2&gt;简单逻辑&lt;/h2&gt;
&lt;p&gt;不要相信你最先凭感觉想到的内容。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;商场里一个乒乓球拍和一个乒乓球一共卖 1.1 欧元，球拍比乒乓球贵 1 欧元，那么一个乒乓球多少钱？&lt;/li&gt;
&lt;li&gt;纺织厂里的 5 台机器生产 5 件衬衫需要 5 分钟，那么 100 台机器生产 100 件衬衫需要多少时间？&lt;/li&gt;
&lt;li&gt;池塘中长着睡莲，睡莲繁殖的速度很快，每天的面积会增加一倍，增加到完全覆盖池塘表面需要 48 天，那么覆盖池塘表面的一半需要多少天？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;问题的答案，并不是：0.1、100、24。&lt;/p&gt;
&lt;p&gt;思考比感觉更辛苦。理智权衡比依赖感觉需要更多的意志力。&lt;/p&gt;
&lt;p&gt;答案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;0.05&lt;/li&gt;
&lt;li&gt;5&lt;/li&gt;
&lt;li&gt;47 天&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;再问一个问题，你以每小时 100 公里的速度从 A 地到 B 地，返回时速度是每小时 50 公里，那么平均行驶速度是多少？&lt;/p&gt;
&lt;h2&gt;福勒效应（巴纳姆效应）&lt;/h2&gt;
&lt;p&gt;人们有这种倾向，认为一种笼统的、一般性的人格描述十分准确地揭示了自己的特点，这种倾向在心理学上被称为「福勒效应」（或「巴纳姆效应」）。「福勒效应」解释了为什么那些伪科学—占星学、笔迹学、看手相、塔罗牌占卜、与死者沟通等等—能发展得很好。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「你会怀疑自己的决定是否正确」—谁不是这样呢？&lt;/li&gt;
&lt;li&gt;我们会接受不符合情况的恭维说法，「你为自己能够独立思考而自豪」—谁又会把自己视为迟钝的随大流者？&lt;/li&gt;
&lt;li&gt;「正面效应」在这里也起了作用，这段文字没有任何否定的说法，没有说出某人不是什么样的—尽管性格缺陷也应该属于性格描述的一部分；&lt;/li&gt;
&lt;li&gt;所有思维错误的根源—「证实倾向」，即我们会接受符合自身特征的描述部分，而把剩下的部分无意识地过滤掉，从而留下一个很符合自身情况的性格评语。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;志愿者的愚蠢&lt;/h2&gt;
&lt;p&gt;如果你不是名人，没有影响力，你就不应该去参加志愿活动，而是应该捐一些钱。&lt;/p&gt;
&lt;p&gt;比如，如果有一个保护鸟类的志愿活动，需要制作鸟笼。你每小时赚 500 元，木工一小时 50 元。你不应该花一小时去制作鸟笼，你应该去工作一小时，然后雇佣木工 6 小时，同时还能捐出 200 元给公益组织，可以让这个世界变得更加美好。你如果花费一个小时去做鸟笼，可能质量也不行、效率也不行，木工也少了工作，这是非常愚蠢的。&lt;/p&gt;
&lt;h2&gt;情绪激发学&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;我们没有足够的想象力把所有可能的优点和缺点罗列出来，我们能够想到的内容是有限的，而且很少会超出我们的经验范围；&lt;/li&gt;
&lt;li&gt;一些小的可能性是无法计算出来的，因为很少发生的事情不会留下太多资料；&lt;/li&gt;
&lt;li&gt;我们的大脑也不是为了作这种计算而进化的，人类要是在远古时期还进行长时间思考的话，早就被肉食动物吞食了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们是快速做出决定的人类的后代，我们是情绪激发的产物。&lt;/p&gt;
&lt;p&gt;人们往往依赖感情来做出复杂决定。你用「我对此什么感觉」替代了「我对此怎么想」。&lt;/p&gt;
&lt;h2&gt;内省错觉&lt;/h2&gt;
&lt;p&gt;越是你深信不疑的事情，你越是要多一些怀疑。作为聪明人你不需要信奉任何教条，你要做你自己的异教徒。&lt;/p&gt;
&lt;h2&gt;缺乏关门的能力&lt;/h2&gt;
&lt;p&gt;我们这些普通人会作一切努力为自己争取尽可能多的选择。例如，床头放上两摞书，都是想要读的。没有读完任何一本，都是这本读一点，那本读一点。尽管花了大量的时间，还是没有收获多少知识。&lt;/p&gt;
&lt;p&gt;不愿意结束任何事情，一切都悬而未决。这样不会给我们带来成功，我们必须学会关门，给自己制定一套生活策略，有意地忽略一些可能性。&lt;/p&gt;
&lt;h2&gt;对新事物的狂热&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;「你要这样想，大多数已经存在了至少 50 年的技术，还会再存在 50 年，而那些刚刚出现几年的技术，也许会在几年后落伍。」 —— 纳西姆·塔勒布《抵制脆弱》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;最新的呐喊声会比我们以为「垂死」的事物消失得更快。&lt;/li&gt;
&lt;li&gt;我们不需要用好的东西去换新的东西。&lt;/li&gt;
&lt;li&gt;当你对未来进行预测时，不要往窗外探得太远。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;睡眠者效应&lt;/h2&gt;
&lt;p&gt;人类对目的来源的认知要比对表达论据的认知减弱得更快。换一个说法，大家忘掉信息从哪儿来（e.g. 宣传部）要比忘掉信息本身（e.g. 战争是必要的）相对快一些。&lt;/p&gt;
&lt;p&gt;广告片中制作人会被遗忘，但其恶意的言论却会被记住。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不要接受任何未经你要求而得到的建议，即使这个建议据说是为了你好；&lt;/li&gt;
&lt;li&gt;尽可能躲开广告中的信息；&lt;/li&gt;
&lt;li&gt;试着回忆信息来源，是谁说的？为什么是这样？你应该想想，这对谁有利。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;选择盲目症&lt;/h2&gt;
&lt;p&gt;人们会自动忘记将其他可能的选项与眼前最好的选择进行比较。&lt;/p&gt;
&lt;p&gt;举个例子，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;假设你银行账户上有一些钱，投资顾问推荐你一个债券，利率 5%，说:「这比 1% 的储蓄利率好多了」。将它跟 1% 储蓄利率对比是不对的，正确的方式是将这种债券和其他投资选项进行对比，然后选出最好的一种。&lt;/li&gt;
&lt;li&gt;医生说你患上了癌症，你只能再活 5 年，他建议你接受一个复杂手术，如果成功可以完全切除肿瘤，但手术有 50% 的死亡风险。
&lt;ul&gt;
&lt;li&gt;你在保险地活 5 年和 50% 的手术死亡率之间做选择就是选择盲目症。&lt;/li&gt;
&lt;li&gt;也许还有其它的方案，可以保守的活 10 年，谁知道这 10 年里会不会有零风险切除的方案呢？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你不要和现状做对比，而是跟其它选项做对比。（用经济学来讲，大概就是挑出机会成本最低的）&lt;/p&gt;
&lt;h2&gt;竞争偏见&lt;/h2&gt;
&lt;p&gt;请你雇用比自己优秀的人，否则你很快就会拥有一公司的废物。这也体现了「邓宁 - 克鲁格效应」，即无能的人往往无法认识到自己的无能。&lt;/p&gt;
&lt;p&gt;请对比自己有才华的人予以支持，短时间内你会使自己的地位陷入危机，但是你绝对可以从中获益的。&lt;/p&gt;
&lt;h2&gt;最初效应和近因效应&lt;/h2&gt;
&lt;p&gt;如果没有「最初效应」，很多大公司就不会将公司大堂装修得富丽堂皇。你得律师穿旧的运动鞋还是精致的牛津鞋也就不那么重要了。（第一印象）&lt;/p&gt;
&lt;p&gt;和「最初效应」相反，「近因效应」指的是获得的信息越晚，人们回忆得越清楚。这是因为我们得短期记忆得存储空间非常小，如果有新的信息进来，一些旧的信息就会被挤出去。&lt;/p&gt;
&lt;p&gt;无论是一场演讲、一次讨论还是一本书， &lt;strong&gt;中间的部分是最没影响力的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因此，不要先入为主地植入偏见。&lt;/p&gt;
&lt;h2&gt;放血效应&lt;/h2&gt;
&lt;p&gt;我们不是在一种理论被证明是错误的时候放弃它，而是在有更好的理论出现时才放弃它。这不是明智的做法，但这也绝不稀奇。我们将这种现象称为「放血效应」。&lt;/p&gt;
&lt;p&gt;如果事实和你的观点不符，那么请你立刻放弃你的观点，而且更重要的是，你不要去等待一种「更好」的理论出现，这很可能要花上 2000 年的时间。&lt;/p&gt;
&lt;h2&gt;非我发明症候群&lt;/h2&gt;
&lt;p&gt;到今天还有很多人认为哥伦布「发现了美洲」，其实在他之前早就有人类在那里居住了。&lt;/p&gt;
&lt;p&gt;结论：我们会陶醉在自己的想法中。为了能够再次清醒，请你适时地保持一定的距离，回过头去审视你那些想法：在过去 10 年里有哪些想法是真的很超群？你要这样问自己。&lt;/p&gt;
&lt;h2&gt;黑天鹅效应&lt;/h2&gt;
&lt;p&gt;我们可以为未来进一步规划，但「黑天鹅」经常会使得我们的规划无法实现。&lt;/p&gt;
&lt;p&gt;不要负债，尽可能保守谨慎地对待你的储蓄，即便在成功的时候也不要沉溺在奢华的生活中。&lt;/p&gt;
&lt;h2&gt;依赖域现象&lt;/h2&gt;
&lt;p&gt;知识很难从一个领域延伸到另一个领域。这种现象被称为「依赖域现象」。&lt;/p&gt;
&lt;p&gt;哲学家纳西姆·塔勒布是这样描述「依赖域现象」的：「棋手擅长解决棋局的问题，但仅限于这个领域。我们相信自己可以将能力从一个领域延伸到另一个领域，但实际上是不行的。」&lt;/p&gt;
&lt;p&gt;结论：如果人们很擅长某个领域，其能力是很难延伸到另外一个领域的。在学校里学到的知识也是如此，请你想想当时你班上学习最好的学生，我敢打赌你现在已经比他更成功了。&lt;/p&gt;
&lt;h2&gt;虚假同感偏差&lt;/h2&gt;
&lt;p&gt;我们倾向于高估自己和他人的一致性，我们相信其他人的想法与感受和自己的都一样。这种思维错误被称为：「虚假同感偏差」。&lt;/p&gt;
&lt;p&gt;我们的大脑不是为了认识真相而进化，而是为了尽可能多地留下子孙后代，所以谁会借助「虚假同感偏差」勇敢而坚定地站出来，认为其他人和自己想的一样，谁就会得到更普遍的认同，获得更高比例的异性资源，并能留下更多的子孙后代，自己的基因被继承的可能性就会提高。&lt;/p&gt;
&lt;p&gt;结论：你要认识到你对事物的观点不是被普遍认同的，而且你还要理解和你想的不一样的人并不是白痴。你不要先去怀疑他人，而是要先去怀疑自己。&lt;/p&gt;
&lt;h2&gt;篡改历史现象&lt;/h2&gt;
&lt;p&gt;我们会无意识地将过去的观点调整为今天的看法，于是就避开了和自身之前的错误相碰撞的尴尬时刻。&lt;/p&gt;
&lt;p&gt;亚特兰大埃默里大学的乌尔里希·奈塞尔对「闪光灯记忆」进行了实验。在 1986 年「挑战者」号航天飞机失事之后，他让学生写作文，将各自对此事的印象进行了描述。3 年之后他又让学生针对「挑战者」号失事事件重新写了作文，不到 7% 的学生在这次作文中的描述与 3 年前的吻合，50% 的学生描述的内容有三分之二是不相吻合的，有 25% 的学生没有任何细节符合。奈塞尔给一名两次描述完全不吻合的女学生看了她自己3年前的作文，女学生的回答是：「我知道这是我的笔迹，但这不可能是我写的。」&lt;/p&gt;
&lt;p&gt;结论：你对第一次遇到你伴侣的时刻记得像闪光灯拍照那样清晰，但请你换个角度，想象一下这记忆中有一半是不准确的。我们的记忆被错误所充斥，即便是似乎很准确的「闪光灯记忆」。&lt;/p&gt;
&lt;h2&gt;群体内外偏见&lt;/h2&gt;
&lt;p&gt;群体同一性也是经过几千年的进化而形成的。归属感在以前是生存所必需的，从群体中被排除肯定意味着死亡，那时人类靠自己几乎无法找到食物或抵御进攻，而且通常在个人与群体为敌时，个人一定会输。&lt;/p&gt;
&lt;p&gt;所有思维错误中最愚蠢的错误是，为了随意组成的群体而牺牲生活。这种现象也叫作「加入战争」。用「祖国」这个词来暗示联系并不是一种偶然；同样，战争教育的目标是将士兵们像「兄弟」一样团结起来，这也不是个偶然。&lt;/p&gt;
&lt;p&gt;结论：对于陌生人的偏见和厌恶是生物学上的事实。对一个群体的认同感会扭曲你对事实的看法。如果你什么时候被送到前线去，那你还是当逃兵吧，为了其他人而奔赴战场首先就不是勇敢——而是愚蠢。&lt;/p&gt;
&lt;h2&gt;模糊不容性（埃尔斯伯格悖论）&lt;/h2&gt;
&lt;p&gt;模糊不容性指的是依照经验做出判定时，我们更喜欢已知的可能性。&lt;/p&gt;
&lt;p&gt;假设有两个抽奖箱，箱子 A 里面有 50 个红球和 50 个黑球，箱子 B 里面也有 100 个球，一些是红球，另一些是黑球，但具体的数量你不知道。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要你随意地去抽球，如果抽到红球我给你 100 欧元，你会选择去哪个箱子抽球—— A 还是 B ？&lt;/li&gt;
&lt;li&gt;如果你和大多数人的想法一样，那么你会选择箱子 A。（意味着你认为 B 中的红球少于 50 个）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们再换一种方式：还是之前那两个抽奖箱，这次你抽到一个黑球我给你 100 欧元，那么你会选择哪个箱子？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;估计应该还是箱子 A。但这里面的逻辑是不对的！&lt;/li&gt;
&lt;li&gt;第一次的时候你认为抽奖箱 B 中的红球少于 50 个（也就是黑球多于 50 个），那第二次的话你应该是选择箱子 B。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;想要清醒思考的人必须理解风险和模糊之间的区别。只有在很少的情况下我们才能清楚地算出风险概率，大多时候我们只有这种令人厌恶的模糊，你要学着去忍受。&lt;/p&gt;
&lt;h2&gt;默认效应&lt;/h2&gt;
&lt;p&gt;标准的设置（即默认设置）是有吸引力的，是令人感到舒服的。&lt;/p&gt;
&lt;p&gt;「默认效应」以及它的特殊类型「现状偏见」都会产生这样的影响：我们有极为明显的倾向去牢牢抓住现有事物。&lt;/p&gt;
&lt;h2&gt;害怕后悔&lt;/h2&gt;
&lt;p&gt;丹尼尔·卡尼曼的著作《思考，快与慢》（Thinking, Fast And Slow）：在每次坠机事件之后，我们总能听说某个倒霉的人，本来计划早一天或晚一天乘坐飞机，但出于某种原因在最后时刻将机票换成了坠机这一班。所以我们对他比那些一开始就订了这一不幸航班的「大多数人」有更多的同情心。&lt;/p&gt;
&lt;p&gt;为了今后不再有这种可怕的后悔感，我们倾向于保守地行动，也就是不让自己的做法太偏离常规。&lt;/p&gt;
&lt;p&gt;一个团体旅行的广告宣传册上写着：在犀牛灭绝之前看到它的最后机会。如果我们现在并不认为看犀牛是很重要的，那么因为宣传册上的话而打算去旅行就是不理智的了。&lt;/p&gt;
&lt;h2&gt;凸显效应&lt;/h2&gt;
&lt;p&gt;「凸显」描述的是一种十分引人注目的特征，一种非常显著的标志，一种异乎寻常之处，是一种一下子能「吸引住眼球」的东西。&lt;/p&gt;
&lt;p&gt;结论：「凸显」的信息会对你的思想和行动有特别的影响，相反，对于隐晦的、缓慢形成的和无声的消息你不会太当真。请你不要被「「异常」所迷惑：一本有着不同寻常的鲜红色封面的图书进入畅销书排行榜，你的第一反应是将图书的成功归功于惹眼的封面，不要这么想，请你打起精神来抵制那些似乎是顺理成章的解释。&lt;/p&gt;
&lt;h2&gt;知识的另一面&lt;/h2&gt;
&lt;p&gt;特伦斯·基莱的观点：不是因为大学才形成了繁荣的社会，而是繁荣的社会供养了大学，因为社会可以承担这一支出。&lt;/p&gt;
&lt;p&gt;重要的知识在实践中。请你把对文字的敬畏放到一边，从现在开始停止阅读，作些可能会失败的尝试。&lt;/p&gt;
&lt;h2&gt;赌场盈利效应&lt;/h2&gt;
&lt;p&gt;根据钱的来源不同，人们的做法也不同。钱不是赤裸裸的，而是被包在感情的外衣里。&lt;/p&gt;
&lt;p&gt;我们花赢来的、偶然发现的、继承的钱要比花挣来的钱更草率。经济学家理查德·塔勒尔将此称为「赌场盈利效应」。&lt;/p&gt;
&lt;p&gt;结论：当你赢了钱或某些公司「赠送」给你钱时，你要格外小心。你由于高兴而大手大脚花钱的风险很大。你最好将这些钱诱人的外衣剥去，将钱存入你的银行账户中。&lt;/p&gt;
&lt;h2&gt;拖延症&lt;/h2&gt;
&lt;p&gt;「拖延症」是不理智的，因为我们的打算决不会被自动完成。&lt;/p&gt;
&lt;p&gt;因为在付出和收获之间有一道时间的鸿沟，要跨越这一鸿沟需要很大的精神力量。因为自我控制是消耗精力的。&lt;/p&gt;
&lt;p&gt;只有当任务被分解成清晰的步骤，并且每一步都有时间期限时，自我制订的计划才有效，所以每个人的新年决心如果没有清晰的分步目标，肯定是无法实现的。&lt;/p&gt;
&lt;h2&gt;妒忌&lt;/h2&gt;
&lt;p&gt;在所有的感情中，妒忌是最愚蠢的。为什么呢？因为与愤怒、悲伤或害怕相比，它相对来说是比较容易克制的。&lt;/p&gt;
&lt;p&gt;妒忌经常和嫉妒混在一起，因为二者在生理上的反应相似，但区别是：妒忌是在两个人之间，而嫉妒至少要三个人（彼得嫉妒库尔特，因为漂亮的女邻居只按了库尔特的门铃而没有理他）。&lt;/p&gt;
&lt;p&gt;首先，你要停止与其他人比较；第二，找到你自己擅长的事物，建立起以你自己为主导的圈子，这个圈子的大小无关紧要，只要你是其中的国外就行。&lt;/p&gt;
&lt;h2&gt;心智理论效应&lt;/h2&gt;
&lt;p&gt;统计数字展示了灾难的真实程度。但人们不是这样理解的，统计数字使我们觉得冰冷，而人本身却不会。&lt;/p&gt;
&lt;p&gt;小说成功原因，这一文学体裁只将人与人之间的矛盾和人物内心的矛盾集中在了少数个体上。&lt;/p&gt;
&lt;p&gt;结论：当有人给你介绍某个人物命运时，请你谨慎一些。请你问问其背后的事实和统计数据。你不会因此对这个人物的命运感同身受——但你至少可以了解到真实的背景信息。&lt;/p&gt;
&lt;h2&gt;「没有杀死我」谬误&lt;/h2&gt;
&lt;p&gt;「那些未能杀死我的，将使我更坚强。」这句话是尼采说的，但这个道理是错误的。&lt;/p&gt;
&lt;p&gt;人们挺过了一次危机，其实凭的仅仅是运气。&lt;/p&gt;
&lt;p&gt;从整体上来看，危机就是危机，不是什么强化过程。人们只是很容易忘记在危机中还会走向失败（或者说可能走向失败）。&lt;/p&gt;
&lt;p&gt;一场大病，也许是种经历，会给身体留下痕迹，但身体不会比生病之前更健康。&lt;/p&gt;
&lt;p&gt;结论：如果一位总裁宣布，其公司从危机中变得更强大，那这意味着要更谨慎地看待这家公司的经营状况。&lt;/p&gt;
&lt;h2&gt;注意力错觉&lt;/h2&gt;
&lt;p&gt;我们认为没有错过任何在视野范围之内发生的事情，但实际上我们只看到了自身所关注的部分。&lt;/p&gt;
&lt;p&gt;有什么意料之外的事情会发生？在媒体关注的焦点之外还有什么情况？在这些焦点背后还有什么情况？有哪些内容大家都没有提到？对哪些方面大家异常沉默？&lt;/p&gt;
&lt;p&gt;结论：有些异常情况也许特别夸张、特别奇怪，但我们也可能忽视它。夸张和奇怪并不是获得注意力的保证，我们必须要考虑到它们。&lt;/p&gt;
&lt;h2&gt;策略性虚报&lt;/h2&gt;
&lt;p&gt;因为你知道：在一定程度上，诚实的回答会将你淘汰出局。&lt;/p&gt;
&lt;p&gt;情况越复杂，假话就会说得越夸张。&lt;/p&gt;
&lt;p&gt;「策略性虚报」最适用的情况有：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;大型的项目，没有人能承担完全责任（比如政府委托的项目，但政府已经换届）；&lt;/li&gt;
&lt;li&gt;与很多企业相关联的项目，可以互相推诿；&lt;/li&gt;
&lt;li&gt;需要很多年才能完成的项目。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;弗林夫伯格称之为「颠倒的达尔文主义」。谁能把表面功夫做到最好，谁就能拿到项目。&lt;/p&gt;
&lt;h2&gt;想得太多&lt;/h2&gt;
&lt;p&gt;结论：如果人们想得太多的话，就会阻碍了大脑中感性的智慧。&lt;/p&gt;
&lt;p&gt;对于复杂的情况，对于人类进化史上还未有过的情况（比如投资决定），那么理性的思考是对你有帮助的，这时逻辑就要比直觉更有用。&lt;/p&gt;
&lt;h2&gt;计划谬误&lt;/h2&gt;
&lt;p&gt;尽管你知道之前的大多假设都太过乐观，而你却依然严肃地相信，今天可以例外地完成清单上的任务。诺贝尔奖得主丹尼尔·卡尼曼将这种现象称为「计划谬误」。&lt;/p&gt;
&lt;p&gt;应该向你过去的经验请教。不要把你的目光停留在内部—即你的任务本身，而是要朝向外部，参考之前类似的情况。&lt;/p&gt;
&lt;h2&gt;专业偏见&lt;/h2&gt;
&lt;p&gt;马克·吐温曾说：「如果你唯一的工具就是把锤子，那么你会把所有问题都看成钉子。」这句话是对「专业偏见」最好的概括。查理·芒格根据马克·吐温的话将这种现象称为「拿锤子的人」。&lt;/p&gt;
&lt;p&gt;总之：如果被问到一个问题的实质，人们大多会按自己最擅长的领域的思维模式去解释。&lt;/p&gt;
&lt;p&gt;结论：我们的大脑不是中央处理器，对它更合适的比喻应该是带着很多专用工具的瑞士军刀，可惜我们的大脑不是一把完整的军刀。请你思考一下，你对哪个领域一窍不通，然后你可以学习在那一领域的思维模式，大概需要一年的时间才能掌握新领域中最重要的思维模式，但这是值得的：你的瑞士军刀会拥有越来越多的专用工具，你的思路也会因此变得更清晰。&lt;/p&gt;
&lt;h2&gt;蔡格尼克记忆效应&lt;/h2&gt;
&lt;p&gt;未完成的任务一直会追着我们不放，直到我们有了明确的完成任务的计划。布尔玛·蔡格尼克误以为人们一定要完成任务才能将其从大脑中清除，但这不是必须的，一个很好的计划就足够了。&lt;/p&gt;
&lt;p&gt;人们要对还未完成的事情列出一步一步的具体计划。最好是书面的，当所有计划被写下来并被划分为具体步骤时，我们内心才会平静。&lt;/p&gt;
&lt;p&gt;当你下一次不能入睡时，你就会知道原因了。把你的笔记本放在床头柜上，简单地写下行动计划可以让你内心的杂音平息。&lt;/p&gt;
&lt;h2&gt;能力错觉&lt;/h2&gt;
&lt;p&gt;为什么他们只创业一次呢？只有一个答案：运气比实力更有决定性。&lt;/p&gt;
&lt;p&gt;成功肯定离不开天赋，离不开辛勤的工作，但能力和勤劳不是决定能否成功的条件—它们是必要的，但不是决定性的。&lt;/p&gt;
&lt;p&gt;结论：有些人是完全靠技能在生活，比如飞行员、铁匠、律师等等；但也有一些领域尽管需要能力，但能力却没有决定意义，比如公司创立者、经理等等；也还有一些领域，纯粹偶然情况占主导，例如金融领域，在这一领域充斥着「能力错觉」的现象，也就是说你对铁匠应带着应有的尊敬，对于成功的金融玩家则不必认真。&lt;/p&gt;
&lt;h2&gt;正面效应&lt;/h2&gt;
&lt;p&gt;找到「不存在」要比找到「存在」难很多，换句话说，「在这里的」要比「不在这里的」更重要。&lt;/p&gt;
&lt;p&gt;存在的事物比不存在的事物对我们来说意义更大，科学上称这种现象为「正面效应」，&lt;/p&gt;
&lt;p&gt;疾病预防宣传就利用了这一效应。「吸烟会导致肺癌」比「不吸烟可以拥有没有肺癌的生活」能给人留下更深刻的印象。&lt;/p&gt;
&lt;p&gt;对假设进行了求证可以发表著作，如果是卓越的成就还能获得诺贝尔奖，相反证明假设是错误的文章则不能在任何科学杂志上发表，而且据我所知也从未有人因此获得诺贝尔奖。&lt;/p&gt;
&lt;p&gt;结论：我们很少去考虑没有发生的事情，对于不存在的事物我们是盲目的。&lt;/p&gt;
&lt;h2&gt;「挑葡萄干现象」&lt;/h2&gt;
&lt;p&gt;把完成的目标夸大渲染，未完成的绝口不提。&lt;/p&gt;
&lt;p&gt;老练的管理者会在其事业发展中训练出对轶事的敏感，并对于要讲这种故事的请求直接枪毙。&lt;/p&gt;
&lt;p&gt;领域越高端，就越容易掉入「挑葡萄干现象」的陷阱。纳西姆·塔勒布在他的著作《抵制脆弱》中描述了所有研究领域——从哲学到医学再到经济学——是如何来吹嘘自身的成果：「大学的研究擅长于告诉我们，他们为我们做了什么，而不擅长说出他们没能为我们做什么。」&lt;/p&gt;
&lt;h2&gt;单一因果谬误&lt;/h2&gt;
&lt;p&gt;我们没有自由的意志，而是有成千上万相互关联而且引发行动的事实因素——从基因分布到教育水平再到每个单一脑细胞之间荷尔蒙的浓度，但我们却仍抓着最早的人类理解不放。&lt;/p&gt;
&lt;p&gt;这不仅是愚蠢的，而且在道德层面上也是可疑的。因为只要我们相信原因是唯一的，那么我们总能将胜利或灾难归结到一个人身上，将其贴上「应负责任者」的标签。这种寻找一个替罪羊的愚蠢狩猎极适合权力的行使—也是人们几千年以来一直在玩的游戏。&lt;/p&gt;
&lt;h2&gt;意向性治疗谬误&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;研究结果表明，有大量负债的公司要比没有负债的公司更能赚钱，银行家强烈建议每个公司应有限度地负债。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;效益不好的公司不会得到贷款，所以会自动被归入没有负债的一类。换句话说，负债的公司会比未负债的公司更快破产，而只要一家公司无力支付贷款利息。&lt;/p&gt;
&lt;p&gt;严肃认真的研究中，最初打算进行治疗（意向性治疗）的所有病人的资料都会被提取——无论这些病人是否参加了实验。可惜很多研究者并未遵循这一规则——我们暂且不论其是因为故意还是粗心。&lt;/p&gt;
&lt;p&gt;因此你应该开始行动：你要立即检查研究对象——比如发生事故的司机、破产的公司、重病患者——是否以某些原因为由悄悄地避开了作为样品数据，如果真是这种情况，你可以把那项研究结果直接扔进垃圾筒。&lt;/p&gt;
&lt;h2&gt;新闻错觉&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;新闻中构思缜密的、复杂的、抽象的和不易看透的内容都会自动地被隐去，尽管这些内容与我们的生活和与对世界的理解更加相关。&lt;/li&gt;
&lt;li&gt;新闻的意义是不大的。&lt;/li&gt;
&lt;li&gt;浪费时间。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;请你放弃对新闻的消费，而且是全部。你可以阅读长篇的背景文章和书籍，因为如果想要理解这个世界的话，没有比读书更好的方法了。&lt;/p&gt;
</content:encoded></item></channel></rss>