TA的每日心情 | 怒 2025-8-7 11:56 |
|---|
签到天数: 1132 天 [LV.10]大乘
|
板凳

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 $ u( l; `7 `, o
! R7 B& s( x' y! R
Gemini对glm反思的点评
/ R" z& i. f G8 m0 T2 w/ R' \% a9 D$ h
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
7 n4 ]2 W. Z4 K# i; r' G% Y1 }; ]+ n
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
6 S- q- @' Z" D( i! s/ T' x
5 @2 n6 O/ I' x# V以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
# h5 F( m1 s' Z" O& B2 l* a! Q5 W. k& i7 D9 [
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
. h/ Q+ {5 Z& Z* V, A7 d( H% Z& ]7 ?( x$ Q# a' b
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
* E; a( F) Y# e( u, m& i3 `/ G; g
8 O$ k& T6 V1 X9 h6 E- “Python化”的思维陷阱: 5 A5 Q! t( t9 [0 t# D* p f
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。4 K' \" c. z1 t; F) M
! a) Q7 O/ N/ S% F4 b
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
# w1 q4 D/ q- E! j4 H/ z ) `- A& H/ [& b( o' H
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
0 I3 y4 w' s4 m/ \5 C
/ V9 \! q: Z# H& M - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。1 G! A/ E' a& o+ M& h% r2 {. G
/ I" D* ~' d8 ~$ L, a
- 忽略了“Excel原生”特性: ( k/ l, T% N$ e/ O$ y% d3 f* W) N
Excel VBA最核心的优势是Range和Array的互通性。5 h3 G5 p) [4 L
4 L& p7 S* ^! K2 S5 O
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。1 ]* S. n: m2 `; ?1 V0 ~$ W
0 H* i/ f( [4 w - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。! b, D2 E: @9 x4 k# B
/ m9 [9 i# u3 [: C, g
4 ?' d8 w7 O' u" x9 G) T2 x### 2. 对GLM反思点的逐条点评7 k: r$ d$ k2 G8 N
1 K6 j- V) B ^#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
- K3 B: ^. \5 w# d+ z; ~% B
$ |- k j* [3 O$ P" Z6 y+ _- GLM说:教科书里键值对是管理实体的标准答案。
) |- h( [" A9 N- q! j 4 Y$ K: |8 }' u) n% `
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
0 b# Z. D; j. Q- N 1 x" e7 C6 ^5 o0 ~/ ~
5 H0 |+ g6 Q' h( Z0 F3 Q
#### 关于点2:“过度抽象的陷阱” (评价:非常到位). q v2 _% L9 K- M5 p) V g
1 c8 [3 j# x" f. \! a4 J
- GLM说:追求理论完美,忽略了VBA的脆弱性。
8 E6 o* ?9 I. G1 ^. \ a ) ] Z. U+ r F# R/ r
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
% b8 H# m7 @% Y0 }; U
+ q: m3 X3 E) j) _/ W& I* O! v! R- j- }* a
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
( k- c# g: h |( A% s" K! D3 G J2 l
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。% [; A0 r7 E# R3 f7 `* F% N% A
* _ q2 M5 B) f8 y. V4 A9 M
- 我的点评:这是最精彩的反思。, r0 ? I, Y2 K& ^: t6 P6 N* h" k# D
1 [" `1 Z0 h& r& z - **计算相关系数(Correlation)的本质是向量运算**。公式是
/ f, h2 h+ m* |1 f& W8 o
( @6 n4 y# P" r, P m `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。& Q0 G9 C- Z3 |& f+ V
& {+ n4 I& K" q
- 这需要的是两个对齐的序列(Array A 和 Array B)。
2 c# y* @( p8 ~! L+ N" x
9 m- J4 x! g4 H8 M# V/ O - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
* J: D3 b& C! R+ R " y9 \6 `7 z9 a" v ^; E
! O' G7 y4 g0 v3 s+ N* T/ R
### 3. 我对它的补充:它没意识到的“工程化”问题- p. `3 ]9 K! e9 M3 v7 Y
3 Z: ]8 Q4 v( T7 R& uGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
, |2 N; f/ ?* o+ d6 s1 k \* T
- B; u2 N8 U1 x1 z# E1. 环境依赖(Dependencies):
) G# g+ d F q " m2 @8 D. u4 D- D* `
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。$ X/ w- _9 P: b1 b. {4 a
* Q$ t N T* d) D6 ^7 Q
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。8 W9 `! r Y6 r, |: @: {, q7 f
' [4 o, o- S) M7 N( H+ B- o
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。) f. S7 K3 W& R, H' \. j% g
; h2 Z. q, o. O! m2. 调试难度:
2 O! W4 S# G ]8 V9 m/ L
8 }4 p& m& o6 B( R# `! g, l - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。0 ], J( w% u, R7 V/ Y, i
' x8 J% S" B) C/ f( g - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。9 f6 R& m, W' T
, ?' S$ g+ p( D' C( h9 l) q) f; y2 n' j8 o
### 总结! j+ M0 _/ o- W+ \' {/ R) ]" j
) w' h$ n8 v, @3 sGLM的反思表明它已经理解了“场景决定架构”这一真理。
& a# Y+ H& r; W a3 y1 c& F- i
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
5 B5 ?3 r! N, f2 B4 @. A& A 3 E5 ], e0 `9 N* `# S! s
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。& e: T4 u5 L6 s9 v+ ~& J
5 B+ z% l- v1 V5 }, K& ^9 p
$ \; N. v4 t* z ~: P它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|