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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
# _8 C% K0 C2 H
# ]% U* J/ p3 ^1 XGemini对glm反思的点评) R! ~8 E& R* Y1 k" u
' O" q( Y; ]& n' k o0 }, L1 e
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
8 Y$ m; Z& q8 j/ `
Y$ s$ U6 t1 k a! f# V- R R4 h它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。3 o( b* [4 K3 W; m! ^, l! I/ R0 A
/ j1 X c8 |/ z7 i. y2 K2 s以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
! L4 F6 s; i/ v* H8 e
1 A1 p! P4 U/ X; @### 1. 对“路径依赖”的深度解析:它为什么会选字典?
0 h# v/ L8 W, m: k6 W! o |' ?$ p5 \. e9 D3 @& N m
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。$ P. {% E1 j( a
5 C6 w7 j; S. T# W+ x0 {& J$ e9 b
- “Python化”的思维陷阱: 8 \, _5 _( G C- D4 _: V* I f
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。. y% ?) S: v+ y) }
5 g; j) d: R/ q' X* }3 y2 E
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
8 S# f% V j+ N; t4 d$ z2 a$ V ( s5 y+ J( ], j2 c
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
- r- }2 x, ^6 d8 e0 S ( m4 ^! r. p7 ]7 i$ m, }! o
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。& ^% M3 A; o% J+ R7 Z* O& \
5 R8 W/ U6 [5 y4 N/ |7 ~/ s- 忽略了“Excel原生”特性: - d: b; l3 g7 |, Y7 B' H
Excel VBA最核心的优势是Range和Array的互通性。) ?' [8 H" | f1 |. r1 j: t% U
: D+ j& Y" l- |# F, A, K
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
4 H# C0 t: V" `' o, B/ l% R . [8 m/ X# [9 h+ {& O
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。7 ^4 J4 J$ {, y# C" |
, R% H$ \4 b- }1 ]$ U. A$ X; H0 U* q% |7 s
### 2. 对GLM反思点的逐条点评4 }- ^8 U, U, R! m1 K5 ^ K
! S* s% ]2 _! _8 E( T, m2 L; @. o4 m
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)" ~- Y5 g+ Z8 f& k+ l
, w3 L' @. N& z- V5 C- GLM说:教科书里键值对是管理实体的标准答案。' @- e5 N7 j+ R/ V
: O8 ?" t9 t( L
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
Z! t" k/ m9 ^5 ~2 H$ j: k( l ( U' W! \0 F3 b
7 n* Z2 ]. d2 j6 U
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
2 K3 B& O ?. Y4 r8 Z1 z
6 ?: V) j9 W: A. N! i) j! Q& `, J: z- GLM说:追求理论完美,忽略了VBA的脆弱性。
: A9 A7 ~0 G$ [) z( X. u5 w8 D
, m; q" I( |+ O9 i- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
# T$ r w3 m8 f
$ {) K! |( W, Z- h8 B% T# g9 J7 p9 T+ r6 ^: i0 _8 e
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)3 Q" q9 T4 Y4 L/ D' i
& X" F9 L8 ?6 e6 a- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。: _- f- m( G4 i2 k3 |! Q3 w* M
: |/ H3 _# a3 y- Z4 d& F
- 我的点评:这是最精彩的反思。1 l& I! y' r; I: C( i
& i7 a* ~) _9 I7 w
- **计算相关系数(Correlation)的本质是向量运算**。公式是
* P( h1 b, ?& X. R* [5 Z 5 c& A, Y: u. g/ X0 L" b
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。: W6 y6 |, @! |1 o
% c* a* a/ w# T; Q8 e
- 这需要的是两个对齐的序列(Array A 和 Array B)。5 H+ O( k3 f. q3 V0 K% r
" m- L8 r' ^% M+ D$ I& b' } - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
8 k, m% w6 h1 W, B+ }, m$ {% T
" H/ R3 R; `+ i! a) R, a" X+ A+ A0 [( @5 |
### 3. 我对它的补充:它没意识到的“工程化”问题2 N6 w! Y) x; y3 p! l6 m3 m
( j0 o7 ~4 L1 B& N( h
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
' e, E' b) f% q$ S( b* H% P. H0 r2 ^; _ \+ |( V
1. 环境依赖(Dependencies):
. v( G5 Z- S& j! Y: M8 B
% x% n- e0 v9 r - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。$ H+ M. P* U; q. h6 n
! Y9 ^+ Z' _5 r& R8 Q - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
1 Y4 f$ e3 B8 [# H# v; Y o/ d3 P8 \" h$ c& ?
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。1 A, U3 W+ d' Y8 [( j% J
; d8 U. a2 |3 I. G5 P' k- j
2. 调试难度:
2 Z$ E6 U5 e: z# I- u
* b, H# }5 t' X$ T - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。8 M% }2 f' a A9 M! n" J4 x" _& @: A
! x9 w- P/ T8 {; {& W$ B6 P/ b - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
" c0 F2 Z1 ]9 e 3 k% z3 y1 U2 I! T$ a
' b' ^, Y4 k. M4 B- y
### 总结
% ]& R9 Z3 l* E. X7 c
: R$ u8 z* E9 q+ L/ [GLM的反思表明它已经理解了“场景决定架构”这一真理。
, L0 G) A3 a3 q+ w2 A; {7 [9 A* k7 d; u$ |8 ], \* Z X5 X: S
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。! s' T8 X7 C( x0 D- ~- x; t9 f
: O7 K: f1 J# k- i: }9 H# n6 b
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。 t4 U% J) O# s, v& y' E
7 x+ u$ x5 r, D
/ D1 h) x8 K1 D1 N) k它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|