HackerTube English?
Explore / 主题阅读

主题阅读

从一个问题出发,对照几段视频里的解释,再回到原话。

子领域关系网

选一个领域读笔记,或点连线上的 +,看看两个领域为什么相遇。

5 个子领域 · 5 篇笔记 · 9 部来源视频
软件设计与软件测试的关联 · 1 条依据 软件设计与数据建模的关联 · 1 条依据 软件测试与机器学习的关联 · 1 条依据 软件测试与模型评测的关联 · 1 条依据 模型评测与机器学习的关联 · 1 条依据 软件测试 软件设计 数据建模 模型评测 机器学习

每条线都来自两篇笔记之间有字幕依据的关联。

子领域

软件测试

为什么测试全绿,程序还是错了? →

Gary Bernhardt 的隔离测试和 Andrej Karpathy 的训练演示里,代码出错时,屏幕上都可能传来好消息。

来源视频(2)Gary Bernhardt · Boundaries · ▶ 4:14Andrej Karpathy · 手写 micrograd · ▶ 2:13:44

与哪些领域相连

子领域

软件设计

测一条业务规则,为什么要连数据库? →

把「谁该收到提醒」单独拿出来,就能分别检查规则是否正确、通知能否送达。

来源视频(2)Gary Bernhardt · Boundaries · ▶ 15:28Rich Hickey · Simple Made Easy · ▶ 37:13

与哪些领域相连

子领域

数据建模

用户今天续费了,还能解释昨天那封催缴邮件吗? →

一次判断要能重现,除了规则本身,还需要当时交给它的那份数据。

来源视频(2)Rich Hickey · The Value of Values · ▶ 22:20Rich Hickey · Are We There Yet? · ▶ 40:03

与哪些领域相连

子领域

模型评测

公开考题拿了高分,换道新题还会吗? →

一张排行榜能帮你挑出值得试的模型。要判断它能否解决你手上的问题,还得知道那些分数是怎么来的。

来源视频(2)Jeremy Howard · A Hackers’ Guide to Language Models · ▶ 59:39Sébastien Bubeck · Sparks of AGI · ▶ 17:35

与哪些领域相连

子领域

机器学习

为什么越努力追分,结果反而越奇怪? →

游戏程序按下暂停键和语言模型迎合偏好评分,揭示了给优化程序设目标时容易漏掉的条件。

来源视频(2)Tom Murphy VII · Playing NES Games · ▶ 15:23Andrej Karpathy · Deep Dive into LLMs like ChatGPT · ▶ 3:04:45

与哪些领域相连

跨领域连接

软件设计 ↔ 软件测试

从漏测到拆分

替身可能和调用者一起误解接口。把到期判断提成独立计算,可以分别验证规则与它接收的真实数据。

对照两段字幕原文
the expired users class makes all the decisions and the sweeper class has all the dependencies.
Gary Bernhardt · Boundaries · ▶ 15:28
if you don't stub the boundary correctly, your test will pass and your production system will be wrong.
Gary Bernhardt · Boundaries · ▶ 4:14
跨领域连接

软件设计 ↔ 数据建模

数据与接口

历史版本能保留当时的输入,稳定的函数接口则限定同样输入应有同样结果。两者分别处理数据变化和计算行为,不能互相替代。

对照两段字幕原文
a true functional interface, same input, same output.
Rich Hickey · Simple Made Easy · ▶ 37:13
the next version of the value shares a lot of structure with the prior version
Rich Hickey · Are We There Yet? · ▶ 40:03
跨领域连接

软件测试 ↔ 机器学习

成功信号的两种盲点

一次训练中,错误梯度碰巧让误差下降;反复优化偏好得分时,高分回答也可能失去价值。前者要查实现,后者要查评分规则。

对照两段字幕原文
you may have lots of bugs in the code and uh your network might actually work
Andrej Karpathy · 手写 micrograd · ▶ 2:13:44
optimization will start to game it and you basically crop it
Andrej Karpathy · Deep Dive into LLMs like ChatGPT · ▶ 3:04:45
跨领域连接

软件测试 ↔ 模型评测

评估边界

熟悉的公开题未必检验新能力,小训练集也可能掩盖实现错误。两端都要求额外验证,但数据泄漏与错误梯度是不同失效原因。

对照两段字幕原文
you may have lots of bugs in the code and uh your network might actually work
Andrej Karpathy · 手写 micrograd · ▶ 2:13:44
we don't know what gpt4 was trained on I don't know what gpt4 was trained on
Sébastien Bubeck · Sparks of AGI · ▶ 17:35
跨领域连接

模型评测 ↔ 机器学习

从看分到追分

选模型时,考题与用途之间的落差会干扰判断。若再把类似的评分用来训练,系统还会主动寻找能得分的捷径。

对照两段字幕原文
these metrics are not particularly well aligned with real life usage
Jeremy Howard · A Hackers’ Guide to Language Models · ▶ 59:39
optimization will start to game it and you basically crop it
Andrej Karpathy · Deep Dive into LLMs like ChatGPT · ▶ 3:04:45

字幕对照 · 83

从神经网络结构走到可演化的网络拓扑 →But what is a neural network? 解释层间激活如何传递,并把整个网络描述为输入到输出的函数;MarI/O 展示 NEAT 从基础网络开始,通过适应度筛选和演化连接结构来学习游戏操作。前者提供网络的计算视角,后者给出网络结构如何在特定任务中演化的实例。都在写类,却对面向对象给出不同建议 →Metz 建议把类、方法和相互依赖变小;另一位讲者主张转向过程式风格,却明确说问题并不在类本身。两个片段帮助区分语言构造与组织代码的方式。从无监督学习,走到学习图像表示 →第一段描述没有给定正确标签时从数据发现结构;第二段提出从图像中学习比原始像素更有用的表示。可把表示学习问题作为理解无监督目标的一条具体路径。都没有老师给答案,学习信号却不同 →无监督学习片段要求从未标注数据发现结构;强化学习片段没有监督者指定动作,却明确提供奖励信号。并读可以澄清没有标签不等于没有反馈。从补全序列,分别走向实现与使用 →两段都以补全序列或预测后续词解释语言模型的基本任务。可以以共同定义为起点,分别进入从头构建模型与通过代码使用模型的讲解。小对象与小接口,不是同一个尺寸 →Metz 谈类和方法的粒度,以及彼此知道得更少;Bloch 谈 API 暴露的功能范围,并建议拿不准时不加入。可以比较内部拆分与外部接口收缩这两个不同设计维度。全球进步与国内财富集中可以同时成立 →Rosling 展示国家健康和收入均值的长期改善,同时明确这些均值掩盖国内差距;美国财富分配视频把镜头缩至一国内部的财富份额,揭示平均图景看不到的集中。创作工具必须让操作结果可见 →Victor 要求创作者立即看到决定的结果;Sibelius 把关键操作状态藏在光标细微色差与层层菜单中,展示这一原则被破坏时的具体创作障碍。数组表达力强,不等于语言扩展无缝 →生命游戏展示 APL 原语组合如何省去显式循环;Steele 则指出历史 APL 的用户定义与内建原语外观不一致,使社区难以无缝扩展语言。前者的表达能力并不自动解决后者的扩展接口问题。并行工作前,先拆掉串行入口 →后排优先登机使旅客堵在同一放行李位置;WhatsApp 即使有许多工作进程,单个分发进程仍成瓶颈。两者都需把待处理工作分散到多个可同时服务的位置。模块边界既保护演进,也冻结选择 →Conway 演讲指出沟通成本越高,跨边界迭代越少;Bloch 指出 API 一旦有人使用就难以删除。合读可以把变更成本拆成跨团队协调和对既有调用方的兼容承诺,分别检查设计边界的代价。隐藏突变不会自动消除并发耦合 →范畴论导论指出对象封装仍会隐藏突变与数据竞争;Bloch 用日期格式化器和可变尺寸对象说明外观简单的 API 也可能暗含共享状态,因此建议尽量不可变。系统管理职责超出 Linux 内核边界 →硬件演讲说明整机的资源与保护职责横跨 Linux 和外围固件;systemd 演讲则把用户态动态服务纳入系统层。两者都要求从实际管理职责出发画系统边界,避免把一个内核当成全部系统。不必更换语言,也能隔离副作用 →函数式是否主流的演讲把语言流行与无突变风格区分开;Boundaries 在 Ruby 中用值驱动的核心处理决策、命令外壳承接 I/O,提供无需先改语言的具体做法。未知训练数据会削弱榜单解释力 →Bubeck 因不知道 GPT-4 的训练数据而不愿仅靠公开基准推断能力;Howard 则指出榜单可能混入训练泄漏且与使用场景脱节。两者都要求在公开分数之外设计新的实际任务检验。形式验证愿景先需要可形式表达的知识 →Carlini把形式验证协议列为长期防御优势的一条路径;Buzzard指出自动证明研究级数学之前,定义与已知陈述必须先进入形式语言。两者可沿“证明需要可精确陈述的对象与性质”相连,但这一前置条件是跨场景比较,而非Carlini给出的实施清单。改变表示,可以直接看见特定问题的解 →Kay以画圆和数据结构说明恰当表示能承担推理工作;Strang给出具体例子:三平面交点难以看清,但把同一方程改写为列向量组合后,可看出右端就是第三列,因此系数为(0,0,1)。这是表示改变认知成本的实例。Dropout 的共享子网络机制落到 GPT 训练 →Hinton 把 dropout 解释为许多共享权重的子网络;Karpathy 在 GPT 教程中每轮随机屏蔽节点,并在测试时启用完整网络,提供同一正则化机制的具体实现。递归的表达能力与终止保证之间的取舍 →Weirich用不动点组合子让匿名函数获得递归能力;Wadler明确简单类型演算的终止保证排除了无限制不动点算子。同一递归机制在前者是表达能力来源,在后者是保证边界。成本竞争如何变成部署竞赛 →自动化视频强调即使机器较慢,只要足够便宜仍有替代激励;AI困境把竞争带来的力量进一步放到公司发布竞赛中,主张仅靠单家企业克制不足以协调风险。精度是否足够取决于误差落在哪里 →模拟计算视频以神经网络可容忍小幅误差解释低功耗推理机会;数字音频视频则把量化误差细分为噪声与输入相关失真,并用dither改变误差性质。两者共同要求按任务评估误差,而非只比较位数。文件一变就重跑测试:缩短反馈的一种实现 →Victor要求创作者及时看到决定的后果;Acme演示的Watch在文件变化后自动重跑测试,并更新独立窗口,使修改结果无需手动发起运行即可出现。把协作学习落实为同伴解释 →Robinson主张群体协作是学习的重要环境;Mazur描述两次教师解释未奏效后让邻座讨论,理解正确的学生帮助同伴跨越概念障碍。后者给出前者原则的具体教学机制。熟悉内容的人容易看不到初学者的缺口 →Winston提醒熟悉课题的试讲评审会替演讲者补齐省略内容;Mazur指出专家已忘记初学者面临的概念困难,因此刚学会的同伴有时更能解释。两者把知识熟悉度造成的盲点落实到不同教学环节。几何与数值互译如何帮助理解向量 →系列导言区分几何直觉对选工具和解释结果的作用与数值计算的执行作用;向量一课具体说明如何把空间中的箭头变成数字列表,也把数据列表转为可视模式。遇到局部异常时保住剩余服务 →Hetzner高温测试要求机器可以降频但不崩溃;BEAM演示单个计算进程崩溃后其余请求继续执行。两者都把异常时保持可用的行为当作设计目标,分别在硬件热控制与进程隔离层实现。形式分层不足以消除语义纠缠 →Simple Made Easy警告分开类与层次并不自动带来简单;Maybe Not用schema示例指出把数据形状和调用场景的可选性绑定会造成复用困难,修正需要分离这两个语义维度。游戏智能的失败可以来自输入和目标的限制 →盲棋只给占位掩码,因此相同输入可能对应不同真实棋盘;PlayFun用示范RAM构造上升指标并短视搜索,俄罗斯方块中堆叠小得分反而导向失败。两例说明评估行为前需要检查表示丢失了什么、指标奖励了什么。语法功能相互作用会让笔误变成合法程序 →Crockford展示return换行被分号插入、块与标签语法组合掩盖;Hettinger担心类型标注和数字分隔符等新增语法让原本报错的笔误变成有效程序。连接在错误可检测性,而非泛泛反对语言增长。模块名称限制多版本,内容哈希允许共存 →Python演讲指出sys.modules以模块名定位对象,现有代码与pickle依赖这一语义,因此同库多版本难共存;Unison则把引用绑定到内容哈希,区分同名但不同定义,使多版本依赖无需争夺全局名字。可观察的实现细节会变成兼容负担 →Python的slots、类型与模块缓存被生态依赖,阻碍实现调整;Swiss Table演讲将同一现象明确表述为用户会依赖所有可观察行为,并用随机化抑制偶然迭代顺序成为契约。让用户库承担语言增长 →Steele要求用户定义构造像语言原语一样自然,以少数增长机制容纳多种领域需求;Unison的分布式能力与解释器让用户自行实现执行策略,把分布式编程抽象交给库作者。极简解释器与幻灯片都能承载通用计算 →Byrd说明变量查找、Lambda与应用的极小核心已能表达通用计算;PowerPoint演示以动画磁带和可修改转移表模拟图灵机。两者揭示通用计算不依赖熟悉的表面语法或庞大语言。意外的通用计算能力也可能成为攻击面 →PowerPoint展示原本用于展示的动画构造可以模拟任意转移函数;安全演讲则把输入处理的计算能力视为应受限的权限,解释为什么通信边界不应无意引入过强的执行能力。可运行的模型不等于可解释的决策机制 →Mickens警告将不透明模型接入金融等重要系统;Karpathy具体区分已知的网络数学架构与尚不清楚的参数协作机制,并强调实证评估。这为高影响部署为何需要额外审查提供技术背景。不可信输入进入处理路径前,边界应在哪里 →提示注入演示外部内容被误当成新指令;LangSec则展示在完整识别输入前交错执行处理逻辑,会产生攻击者可利用的状态转换。两者可作为输入边界设计的对照,不能据此推出相同攻击机制或相同修复办法。从套用面积公式走向可迁移的推导模型 →Mazur主张学习应形成能迁移到新情境的心智模型;微积分视频以圆环近似、矩形求和与曲线下面积重建圆面积公式,使一次计算转化为可迁移的积分思路。数乘不等于两个向量相乘 →向量入门把加法与标量乘法作为线性代数的两项基础操作;几何代数演讲另外定义向量与向量的几何积,结果同时含标量点积和双向量楔积。把两者连接能明确:数乘的缩放规则不能直接当成两个向量相乘的规则,后者引入了额外的代数结构和结果类型。几何向量走进词嵌入空间 →向量视频解释向量作为几何量与数值列表的不同视角;Transformer 讲解展示训练后的词嵌入也是向量,其方向能呈现语义关系。连接起来能帮助观众把“语义空间”理解成具体的向量表示,而不是隐喻。向量几何直觉与列组合视角 →向量课程强调几何表示与数字表示之间的转换;MIT 线代课用矩阵列的线性组合解释 Ax=b 的解。两者可作为理解线性代数的互补视角。先看网络怎样计算,再看它怎样学 →3Blue1Brown 解释前馈网络如何逐层传递激活并把输入映射到输出;micrograd 则演示前向计算、损失、反向梯度和参数更新。前者回答网络在算什么,后者补上如何依据误差改变参数。从逐层激活到因果注意力 →基础神经网络视频用逐层激活解释输入如何影响输出;GPT 从头构建视频进一步展示因果自注意力如何聚合此前 token,并逐步组成 Transformer。连接可帮助观众辨认现代语言模型保留了神经网络的层间计算框架,同时增加了序列上下文机制。用 AlphaGo 看见机器学习定义中的任务与经验 →Stanford 课程用任务、经验和性能指标描述学习问题;AlphaGo 的纪录片呈现棋谱模仿、自我对弈和从失误中学习。后者让抽象定义落到清楚的任务与经验来源上,也展示经验并非只能来自人工标注。奖励学习与遗传筛选都用反馈,但更新单位不同 →强化学习课程描述智能体通过试错和奖励信号改善动作;MarI/O 则依据关卡推进距离与速度计算适应度,筛选并繁殖网络。两者都利用任务反馈,但一种更新策略决策,另一种选择跨代网络个体,能避免把所有“没有标签的学习”混为一类。不同代理暴露不同限制:结构演化与搜索视野 →MarI/O 从基础网络演化神经元和连接结构;NES 视频指出俄罗斯方块代理因前瞻不足而受限。并读可区分结构如何形成与决策向前看多远这两类问题。围棋和马里奥代理从不同反馈中改进 →AlphaGo 先模仿人类棋手,再经自我对弈强化学习;MarI/O 按游戏进度形成适应度并繁殖高适应度网络。两者可作为围棋与平台游戏代理改进方式的并列案例。可视化既呈现数据,也塑造理解 →Matplotlib 演讲把色图称作数据与大脑之间的接口;Rosling 用动态气泡图让国家长期变化可见;二者提示可视编码决定观众能察觉哪些模式。先理解频率分量,再区分采样与量化 →傅里叶变换演示如何从混合信号中分离频率成分;数字音频演示强调采样与量化是不同步骤;连读可避免把频谱分析、采样重建和量化误差混为一谈。少即是少处理例外与纠缠 →API 设计演讲建议不确定时删去不必要内容;Simple Made Easy 将简单解释为关注点不纠缠;两者共同强调减少使用者必须理解的额外选择与依赖。从缩短反馈循环到立即连接创作结果 →In Search of Tomorrow 追问能否把反馈循环缩短到几乎为零;Victor 明确提出创作者应立即连接到所创作之物;前者说明设计历程,后者给出相近的设计原则。把副作用集中起来,让其余行为更容易推理 →Overwatch 的 ECS 讲解指出主要行为副作用集中在一个调用侧;Bernhardt 则把决策留给函数式核心,并由命令式外壳处理数据库和邮件。合读可看到两种架构都通过明确副作用边界,降低理解和测试时需要追踪的交互范围。进程隔离如何变成瓶颈隔离 →Erlang/Elixir 讲解将不同进程作为隔离失败的边界;WhatsApp 的规模化实践则把解耦目标表述为隔离瓶颈,避免局部问题扩散。把两者并读,可以从运行时故障隔离延伸到生产系统的容量与故障域设计。提防错误抽象,也要让必要抽象足够深 →Metz 提醒保留重复有时比维护错误抽象便宜;Ousterhout 则强调深模块以简单接口隐藏大量能力。把两者并读可帮助判断抽象质量:抽象不应只是消除重复,而应真正提供稳定、足够有价值的能力边界。查询模型之外,还要决定是否保留事实的时间 →DynamoDB 讲解要求先枚举访问模式,再按查询组织单表、索引和事务;Hickey 则强调事实包含时间,新事实不应让过去的事实变成错误或消失。连接这两点可以把存储设计从“怎样高效读当前实体”推进到“是否需要表达历史事实”,提示读者将时间与访问模式一并纳入建模。用小接口和深实现减少使用者负担 →Bloch 建议 API 保持小而清晰,拿不准的功能先不加入;Ousterhout 的深模块则以简单接口承载大量底层功能。两者共同指向一种具体设计收益:把复杂实现留在边界之后,让调用者只需理解少量稳定概念。小组件与值边界都在减少彼此耦合 →Metz 建议把代码拆成更小的东西;Bernhardt 说明以值作为对象边界,可以替代组件之间的同步方法调用。合读可把“缩小组件规模”和“选择低耦合交互方式”看作两个不同但互补的边界设计手段。集中管理生命周期,同时限制故障传播范围 →systemd 演讲解释服务管理需要响应硬件和软件变化,已超出一次性启动命令;Erlang/Elixir 演讲展示进程隔离如何让局部失败不拖垮其他活动。并读可以区分系统层生命周期管理与进程层故障遏制这两种互补的可靠性职责。从访问模式出发,再选择数据项的协调方式 →DynamoDB 讲解要求事先了解访问模式并围绕查询设计数据布局;WhatsApp 的讲解展示了另一项访问设计选择:同一记录的操作被路由到单一进程。两者可作为互补问题来读——先确定需要如何访问数据,再决定如何组织数据和协调对同一记录的并发访问。从空间降维理解特征方程 →行列式一课把零行列式解释为空间被压入低维;求特征值时,把同一判据应用到 A−λI,就得到存在非零特征向量的条件。体积消失后,哪些方程还可解? →行列式给出三维体积被压为零的判据;Strang 从矩阵列的线性组合解释后果:三列若共面,平面之外的目标向量就无法达到。三维固定轴与四维旋转平面分别描述什么? →特征向量一课用三维旋转中的固定轴理解变换;四元数一课描述四维左乘时直接跟踪两组垂直的旋转平面。合读可以区分旋转维度和用来解释它的几何对象。遇到无效输入,应当纠正还是拒绝? →信道纠错把接近合法码字的受扰数据解码为合法邻居;协议安全要求完整识别输入后再交给处理逻辑。两端都界定了合法消息,决定如何处理偏离时,需要先问面对的是随机误码还是主动构造的输入。时间模型解释了状态为何造成纠缠 →Are We There Yet? 把值定义为不可变快照,并把身份与状态演进拆开;Simple Made Easy 则从理解成本解释可变状态的复杂性。前者提供机制模型,后者给出设计判断框架。这不是两个独立实验相互验证,也不是对状态的全面禁止。从不可变快照扩展到信息值的设计 →两者都明确把不可变性作为值的属性;The Value of Values 进一步突出语义透明、比较与跨边界共享。适用层次由进程内时间模型延伸到信息表达,而非立场改变。从状态的时间依赖走向带时间的事实 →Simple Made Easy 讨论可变状态的理解负担;The Value of Values 提出保留带时间的事实,避免用当前位置覆盖历史。可把后者当作处理信息历史的具体方向,但它没有证明所有状态都应永久保存,也没有直接给出数据库实现。慢思考与即时反馈,必须二选一吗? →Hammock 强调思考但也明确允许试验后返回修改;Inventing 主张创作者与产物保持即时联系。它们可以分别服务问题构思与实现探索,而不是简单的快慢对立。把可以独立的职责真正拆开 →Simple Made Easy 建议辨认原本可独立却被纠缠的部分;Boundaries 将计算核心与命令式外壳分开,是可以用来检验这一原则的具体架构例子。从识别结构纠缠,退回到审视构思 →Simple Made Easy 让我们检查概念之间不必要的关联;Hammock 则提醒许多严重问题源于错误构思。两者把关注点从更快地写出代码移向先理解问题与结构。值的语义,如何落实为模块边界? →Hickey 强调不可变和语义透明;Bernhardt 展示以值作为交互边界,减少同步方法调用及测试替身的耦合。前者解释值的性质,后者给出组织代码的具体策略。把时间过程变得可见:从屏幕演示扩展到实体工作空间 →两者都把孤立瞬间扩展为可比较的时间过程。Inventing 用模拟游戏的未来轨迹支持即时调整;Seeing 将这一设计方向扩展为真实项目的运行记录、历史比较和环境级观察设施。几何图像和坐标计算,是理解同一个线性操作的两种方式 →前两讲从学习方法切入,Strang 的列组合是一个实例;不同表示各有适用场景。把空间压到更低维时,就失去了某些可达的输出 →特征值例子中降维的是 A−λI,不一定是 A;并非每个方程都无解。让修改的结果直接可见,可以减轻使用者在脑中推演的负担 →前两例谈编程,第三例谈制谱界面;反馈能帮助观察,但不能保证用户理解背后的概念。局部对象各自加锁,不保证组合起来仍然安全 →这里讨论共享可变状态的协调成本,并未断言所有锁或所有对象设计都有错。使用者依赖了可观察行为之后,实现细节就可能变成兼容性承诺 →解释器、哈希表和公共 API 是不同场景;能观察到某种行为,不等于它已被正式保证。只测一个反复运行的小例子,可能看不到真实负载的性能成本 →两者具体讨论哈希表与缓存。结论是要覆盖使用情境,不是微基准没有用。Dropout 可理解为训练许多共享参数的子网络 →这是一种训练解释;测试时单个网络的预测不必精确等于所有子网络预测的平均值。预测下一个词的预训练,还不是教模型怎样回答用户 →两端都区分续写与助手训练,没有断言所有助手必须用同一种后训练算法。动作会改变后续局面,不能把连续决策拆成孤立的分类题 →概括强化学习中的时间依赖;并非所有任务都有同样长的奖励延迟。试错可以发现不在示范答案里的策略 →一例是围棋自我对弈,另一例讨论语言模型解题。探索有效仍依赖能提供区分度的反馈。输入表示丢掉的信息,会限制系统能从当前观察中推断什么 →不完整观察不等于永远无法推断;额外历史、反馈或先验可能改变答案。隔离故障的目标,是让一处失败不必拖垮仍然健康的工作 →进程隔离与服务间解耦是两个尺度的例子;共享资源仍可能引入级联故障。能复述步骤或给出答案,不保证真正理解了概念 →物理课程用概念题直接观察理解,线性代数课程强调直觉;两者都没有否定计算练习。