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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
6 K9 @/ Z& g' h" r: ?# e$ k1 x- U7 ^, r/ K6 H
Gemini对glm反思的点评
! y1 M8 f% [) {/ V1 r
8 L$ V3 y& b' U' K作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。/ P9 |4 }6 G9 G: O- G
& R) K5 t) T# H, Z' G* H它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
2 [" F5 e: N( S2 q: h
5 x6 R- K6 M- b0 M: S以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
6 m; u( L/ r0 r; H5 I0 d6 @& L' U0 d& X
### 1. 对“路径依赖”的深度解析:它为什么会选字典?! u9 W7 m' x4 Z% }6 W6 j/ q8 x
- r1 I, R D( B4 V y$ D. w0 d$ q: h
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
/ Q( E0 u: K/ Q+ x0 U! `3 J
! z8 h* k! n) d/ u) { e- “Python化”的思维陷阱: , i; W1 Q; ^ V% U1 j
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
2 q; {) w8 |0 V
2 ~' z9 k: F2 d9 |6 K' z, C: B - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
8 b9 |; O( Q4 \+ x # W4 P8 V2 i! b: j8 i( _
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
) x) j5 r& l2 g( G( F 4 W% V2 d6 l+ W* z
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。% m+ K9 {) `8 E1 n5 e
0 q4 c" P( x! o. I: h! Q: `. a: P7 i- 忽略了“Excel原生”特性: $ U1 ?8 U/ A* @# A7 e
Excel VBA最核心的优势是Range和Array的互通性。
! C! L4 @1 z( d: Q9 t8 ] $ p$ t- v7 y6 P: u' |
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
* ^ z& w" ^) W' _2 D, m" s6 m 4 c7 l; P: l: @' B7 l8 z; }) v; l
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。) A) \) ?& j( o( A7 Y9 k5 _6 ~5 T
9 q% `3 {+ F, s* k. J% s3 e* F* q8 ~+ a/ l0 f
### 2. 对GLM反思点的逐条点评1 x: m) s$ J& c. S+ D; ^$ _
0 I, [$ t$ v6 |#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
9 g# }3 j9 D6 w4 ?) p0 [; c5 ^, R7 i7 F' _9 w. P
- GLM说:教科书里键值对是管理实体的标准答案。/ Y( F; z, P" m
1 s) Q0 o5 ^8 I, D7 `
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
6 g$ Y: n1 r1 S* f" F' K' q
2 t/ ^- z- z0 G/ s* g F6 M4 V. P# Z
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)4 F9 i2 T) C! [5 Q$ W
( _' r% \ e$ @) |& j
- GLM说:追求理论完美,忽略了VBA的脆弱性。- `5 T1 t( X: \0 e/ l _
2 K; u- w3 P! _% f. a( ?- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。" {/ N" p6 f. u' @
9 J; Q0 `# @! ~4 {# e& i1 L+ s6 h
+ h h# _5 b, O. D! K#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)/ q, B' [9 J* T
0 W2 S: o5 W! X% }' i% C- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
?- A1 p+ g, I. u7 }1 }2 `" e2 x - w7 f* [% X9 q8 a+ J3 o* l2 ^ m
- 我的点评:这是最精彩的反思。
) N* V' L" y# A9 \4 ] % |" ]+ n* E, s- }( F9 _# v x
- **计算相关系数(Correlation)的本质是向量运算**。公式是) B! }' I4 W( u/ Y/ S3 m
' w8 |# P Z, @. ?% S" O* l
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。% N+ O3 {* o( B) m
2 o7 S3 e. S, a& b2 @7 q' r- ]0 n, q
- 这需要的是两个对齐的序列(Array A 和 Array B)。/ O; k1 ~* E, u2 F& ^2 }# |4 E
9 F3 a, } }) e4 {: j0 H - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。" i8 a0 x& H" H7 {. e. S: Q3 c0 p
3 n1 q4 g, a; V" r' v% K- {3 G& L: X. I+ o c! R y F) L
### 3. 我对它的补充:它没意识到的“工程化”问题- v1 E* a7 Q2 y Z/ t v
+ U' \8 V" g- i4 f: V- {
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
/ O. ?$ n" D. m: n4 v4 F. U% {/ Y& [( d! S' _( I
1. 环境依赖(Dependencies):
+ Z+ Z p2 T& _5 {+ j
% y w! _- e2 E# j7 Z, v - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
6 K/ F. ]4 B, Z. ?! G0 `) S
9 q, {" h: o* u" l" k - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。8 l. c* z+ V+ l- V
1 |. @; F0 X/ |$ v5 ]) T; {
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。! T. W% ^$ B" g3 y7 m: G
+ s l, J' C0 K: Q4 F8 {6 c
2. 调试难度:; z) l5 O" q9 J4 u5 q: G2 X, _' V) g& ]& E
6 G# Y! C8 G5 E - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。, N0 c4 D( c4 R/ z6 ~% N, B" a
# V6 ]# |* n1 j, H - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。/ i2 \5 b7 q7 }
% y- h7 [8 y) l, k& a
* |+ a0 F3 s; b, S4 `. ~: [% m1 w### 总结8 u R, c( w/ h5 [ }& _
$ H' }& R8 K* D7 z9 R8 Y
GLM的反思表明它已经理解了“场景决定架构”这一真理。
+ i. p& V, e: W/ x# }! W
$ l# _) Y! Q6 a1 N& S, _. [- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
- h2 w& L* E% g& S' Z
( }. C% {. a" y+ G+ c- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
, P3 ~6 L0 S |+ o8 U6 v+ P ' I, ?2 T4 R5 h
9 L6 N8 C# M. {; z) i
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|