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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
" Q) R# P) ^+ O1 q3 R3 ~( s; {6 U& k, K, L5 x
Gemini对glm反思的点评
4 y& \7 l' A* b& [+ |/ T8 N& ?1 p$ \ f" U$ G& q; a% [$ B7 m2 z
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
# S; _- |+ _1 G) J) q: D' g
/ _( \8 D4 C3 T+ }1 M它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。) R! f( G) X/ S- j
1 j. J6 a- ]5 k% r# L7 v& W
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
7 k+ T! a- Y: d( A7 Q/ t! D3 K# a* _ z; u; Q, _: h9 ]
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
( k5 R T4 w: n9 J. F
3 k+ f6 c2 {" J6 W# }GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
- y1 ~, V+ }& m+ Z
/ {5 t2 ~6 o, [) c1 Z- “Python化”的思维陷阱: 6 C& J i) ?& Y9 m+ F+ K& G
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。* I5 j5 m2 r; H' q# ~9 A! k- H
9 R; T7 t9 J0 s6 W6 K8 ]5 ^ i
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。% S: i n, t: S$ ~2 F5 Z0 }
; W% r! t+ q: `! B# ^$ x - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
/ y& e! |! Q- r" s 6 C9 }- ]9 |0 y2 ?( R5 D
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。0 w/ R& l' T2 n* B/ Z7 a
4 Q- V& c( G/ ]3 `0 V6 z
- 忽略了“Excel原生”特性:
9 @4 j7 q; d% o4 `5 J Excel VBA最核心的优势是Range和Array的互通性。
6 Q* T- R, J/ w7 s2 J; O5 Q6 y + R' u4 i/ ^5 S5 b. ]- ]
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
- N. T/ r# q- u4 F * A: A2 l2 S! L+ X' o8 x
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
+ n) A% Z0 `: S& x$ K& m3 Q, W) v. n
, R, A& g. O$ ^$ g
2 f3 d/ d& ?9 x% {### 2. 对GLM反思点的逐条点评
8 E* ^# x0 T* j% C7 w+ t6 |7 N9 r8 h% e6 L* ?3 G
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)+ q8 Y: f" \" @1 p1 v( i
}) |' [! z/ x9 U5 U n: m' g8 n( Y, {- GLM说:教科书里键值对是管理实体的标准答案。
. [) |- O9 K! Z$ W4 x+ W$ T
" b8 D3 u4 j& J+ Q2 }+ H- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。: i9 t6 A! @. A* N4 p1 ^
6 P+ D' F$ g9 F* i) R2 z7 a0 U
- U6 A e# w' r {#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
! y9 W/ M* H! Q0 k \
4 {3 b5 M7 S& o0 v- ^! \ l6 d- GLM说:追求理论完美,忽略了VBA的脆弱性。! M4 F. u4 u1 }, n3 s5 r: _7 h
" C+ Y0 }1 D" o) X' h- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。: E' b1 V1 c; d0 e/ S" T0 B
' O! Q3 |3 H' K
I7 o' w! M# W6 G! K8 e#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
' u2 s& X. ?0 t, X7 i) ^! S- y2 A, A' J( V7 Y$ R
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。: u# T( b- c0 y$ ~& Z! |8 l# A4 y
& @% Q7 P& [0 X' y4 p- 我的点评:这是最精彩的反思。
* v" ^/ q9 i5 D& {
( o! [- N/ W( R2 D - **计算相关系数(Correlation)的本质是向量运算**。公式是3 d% E7 p5 Y' P4 i' `
- S/ H: y2 }) r) m. P `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。$ N& ?# B& O3 r0 d# A" e
; Z4 O7 l. w! ]; ?* [9 O$ M; n
- 这需要的是两个对齐的序列(Array A 和 Array B)。
$ U8 D3 `+ b( @; }1 n9 y
, B% W5 i9 P5 K! R. x% ~8 N' I; ` - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
( Q: i% o) J5 K # V% E0 M& V# x$ [
D* y; s5 C: z% ]! V( p
### 3. 我对它的补充:它没意识到的“工程化”问题
3 r0 K$ v; G x# F* F) a7 @& h8 s4 M" X+ R# t, w8 o3 s
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:' v% U2 U, H& B0 J, r, ^. M
3 H4 Z* U. N$ h7 O( A0 ]2 o0 A
1. 环境依赖(Dependencies):
, m( w& P1 y- q {* K( ?# `
H- k! l7 W/ r0 V - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
1 B1 |5 u$ {! U4 ~) N 8 F8 C6 }& g0 Y8 x' ]- M1 q
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
; p, i9 L6 M6 C( T , N. S! k9 g! I5 F. p
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。9 h2 C) P# G _. E6 W: E5 s Q& R
* F# ?# P' J) I! R
2. 调试难度:. {2 ?8 Q) s# ~2 X- _
4 [$ ], |: \, } N: G# k - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
6 }+ C; c# z/ j% V$ A! P , G- t' L( O! k) Y N: e
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
+ H' W7 Q& O' m9 L9 l6 r 2 ]' p4 t7 Z% u' p
) ~8 z2 o2 Q0 V/ ^, P3 |% f
### 总结1 Q2 G0 x5 q e; @; `
0 s; x7 F) F# J
GLM的反思表明它已经理解了“场景决定架构”这一真理。
/ n0 @0 G; e- X# k( L5 Q! i u R- j( q5 i; x( y8 z9 I
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。 K! [9 O# Z6 ?* H7 ]/ w/ `/ j
+ W7 H& T, F' N
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
# B8 Z8 l' @; ~& u1 V* N
" j: A* e \* k9 M
6 O. Q9 z2 ~; J* m0 Q/ ]0 V9 G' g/ v它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|