TA的每日心情 | 擦汗 2026-3-17 22:01 |
|---|
签到天数: 1133 天 [LV.10]大乘
|
板凳

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
6 n$ ?" B& n3 }/ x( n% h( v
4 D5 r* i" X0 L$ Z4 L$ f7 jGemini对glm反思的点评
: y! b0 [+ T$ m+ F0 G; O1 h5 x1 g, f* v/ u7 t
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。) ? d4 V+ L. L* d3 @% k# j
e9 t, b: @: I6 B它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
6 P* L' N# \7 S. n c$ Q6 |' a; `2 O/ G# a' P8 h$ ~# ]6 o
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
% ?1 q+ f6 L1 M( y# V& H7 E% D' a Y& t; w: U1 g; S& s3 ~' y
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
; e/ Y) G/ x( T7 q8 }" h# q6 w
/ m* ? O$ c0 V4 f3 v+ c0 D/ gGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。( W/ c4 Y$ @5 w' D6 r3 m
4 U6 S, h5 R$ T& {) E2 ~- “Python化”的思维陷阱:
. H7 h. D7 U. `! O 目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
; K9 v4 K- R! g+ X t# ?
]9 p8 J1 L+ q* s) u - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。) ]: {) Z5 Z, H, O) f: _4 z
2 L1 H ]% U# m) M7 C/ s
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
4 g; S4 o4 V! Y' J# T& N 4 y. P* o* z' L7 d5 u# l
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。- l4 Z' S0 p* s
1 J t8 \# a( P9 g/ f+ U- 忽略了“Excel原生”特性:
( T! j; U9 H4 i8 p Excel VBA最核心的优势是Range和Array的互通性。
! t. B& c8 a3 d- @3 f; \
) M9 m7 L: n, J; X' l9 c# ^ - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
R5 a$ s) L; ^* k/ n4 Y4 U9 n - p' r B5 z, C/ R
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
, [, z" W$ v; p; @) m+ X9 @
4 `9 f7 F* V6 {& k
8 H, ~- r5 J- P. `; M### 2. 对GLM反思点的逐条点评
# R' Z, j' U* ^6 c
+ X. s. ?9 a- t. f9 g9 T' f& i#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
+ } P6 K, `$ Y5 m4 O6 k3 }) d+ f5 S7 r
- GLM说:教科书里键值对是管理实体的标准答案。
. p* K. z' ?) j8 u; l- ~4 c . e) v$ h/ ]5 C' b
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
& G- S9 G. V% `, X+ A/ X 4 G2 t' [/ V+ |+ q' t2 P
5 I' {1 u$ k# t#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
1 I% O% V3 a% O& E* S3 w8 }0 o' }4 A9 F! _7 R$ T
- GLM说:追求理论完美,忽略了VBA的脆弱性。( Q v( _$ x2 p* t8 e) g) M
/ m8 q, }, n6 b9 D$ ~3 _. q
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
4 i) E# I3 J6 G: B' ?
9 C: ?. k2 W0 ]7 L* E" }' A
) u" |# ~) f$ ?; y1 n0 f#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)& J/ m: c: k& [; w7 r
: t2 e! v: s* N4 F2 u) x {- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。& A1 q/ d7 L' c0 d! {/ D
d% Q9 T# G2 i# |8 I" w- 我的点评:这是最精彩的反思。
) [% {, z& J+ Q# [7 u9 J" w
7 v7 ~. x4 I# C/ X! j1 ~ k8 F% u - **计算相关系数(Correlation)的本质是向量运算**。公式是
" q# [- G8 v: d, x4 R
% g# ~. ^( N. k/ Q `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
1 O0 I6 P& \7 w2 L% D* x1 _/ ?# I & m* R* T4 G5 M* Z7 s5 [4 Z7 @" x
- 这需要的是两个对齐的序列(Array A 和 Array B)。: q0 _8 K3 X0 Z" n Q/ Y" K
5 c( L" a# F! o: b/ n
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
8 ^6 T! S3 {) R) \6 I2 Q1 G2 f
( @/ R7 [" O1 g7 @
( }1 Y, e6 b# Z3 C### 3. 我对它的补充:它没意识到的“工程化”问题
}8 y$ y+ S& x6 }2 z/ Z G) ~1 n1 a/ z4 a) M" B1 A2 J
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:- {( k9 V5 _" U* X
. S, S* k0 r1 a0 Y7 A1. 环境依赖(Dependencies):
! h& b3 n* x4 @3 i. a5 `
; ]* |) Z: B" X2 f! d" U1 a; ] - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
9 |! }- w1 p3 w0 g& z% A! t
& }$ O1 G, G" V& }- ^ - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
: j- i* h3 o, g+ T- @. e1 h$ w
* v D% l- g3 N- S6 w1 Q( R - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
z7 Z! U; Z3 s6 z# S
7 ]* S: O- D) ^. D6 d5 b2. 调试难度:
s" b4 P: ]: z' v$ v" i- l; B8 w
$ S; W4 Y9 ~! Z( G A7 V8 E. q4 e - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
$ R, \+ L' v. H& z1 G! y 5 I, G3 J& q1 @: m7 \) G% T
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。& E/ j* ]0 ?6 Q( d1 g; x4 t* g+ j! ^
" A& F" J j6 g$ y% C9 {; {
* X. q! T' y2 [$ F- _/ ?& [### 总结# ~8 z4 X& I8 }* U: I0 F0 T9 s
* u/ q, j9 G( V* N0 Y) {" R
GLM的反思表明它已经理解了“场景决定架构”这一真理。
% {: e' B+ Y: h- f+ c3 f! ]* A& L7 R3 ^$ h
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。- ?5 q# o6 W' P/ |/ O5 M
9 q: J ^: d: B/ v5 Z4 i# V
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。, F7 U1 D* D* ]% C! O
3 z( X/ I& M7 b/ w1 J
4 i& ~/ U. b8 W5 P( P& c它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|