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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 3 G7 R- ^5 J* {5 O3 ? s
( O3 n0 E! w8 U* E( V+ VGemini对glm反思的点评
& n, E, G4 L3 {# p( {; G# e, }' W6 _2 {" I9 h
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
, u4 U! }" G8 Q
) y S/ w5 |! X- W! j它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
$ K1 s% U/ @+ `5 ]+ a4 M% f4 z" k+ o& T }5 n2 Q$ r% v$ p
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
1 a9 w9 P* o- j9 U/ \5 w% L; ^2 A Q1 l' i. B
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
! X7 H6 f4 N+ f6 P( m* q4 N/ }3 N( H6 |6 ~9 o! i
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。$ n! O$ O$ e7 a7 `
3 A4 I* p; M, w; G3 [- “Python化”的思维陷阱: * p7 }/ p# r( F* f4 r. h
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。% W, Y4 @, J- O3 @: O6 N
4 B4 B8 a1 ?0 c4 R - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
2 b2 \ M5 u$ x) v5 _) w
9 W' F1 ~/ M, h! x5 \ - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
' B0 \7 o6 _ J9 F2 g" b
& p; z' C& `% h9 _' p - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
. v* g0 t4 G1 I7 k. M8 a 6 }3 l' l* l% g; _
- 忽略了“Excel原生”特性:
" s. k3 L2 ~0 y; I7 l Excel VBA最核心的优势是Range和Array的互通性。
/ N5 {1 N/ B, i" X4 @ ( }. Q" d3 [- `* \" _) Q" ~
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。2 B# K" P+ i5 a; k
- ~5 |! G1 \5 E- d" {" r8 }
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。' F$ M5 L; n1 F, O6 d3 z8 t
/ R; A0 r Z K
$ o( Y) ]9 i1 B' O% I& ]- L9 P2 Q, x; C+ b### 2. 对GLM反思点的逐条点评# M" |# \& B7 s9 H1 Z' a; L
0 x& V/ T8 d" ^2 I& |1 O#### 关于点1:“标准答案偏好” (评价:准确但不够犀利) j/ d b9 L8 s
- [- Q, Z% @! b- T- GLM说:教科书里键值对是管理实体的标准答案。
: P' y* J T9 o L3 W; ~' F9 m' T4 X
3 _" X8 i. {" e% k5 Z4 H8 t% V- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
2 Q8 j. I) y" L* P: y % N. m8 V- U/ j8 C& G( H7 j
( h, y/ j' y2 c' g: W9 X, p
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
6 x) p- P0 K* o, D! _
- m' d" K3 `& z4 ~3 M" P4 \$ i7 G1 j- K- GLM说:追求理论完美,忽略了VBA的脆弱性。# F1 b# J- I' Z. g/ p4 Q
2 C, S/ i) K) B. |3 H- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
- S0 d% E7 w' @. {( m
" L% Q" K) ]* z# [4 h o; ~% A- a* m3 J7 I2 n) z7 `2 v
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
2 e0 v# C f8 n7 b6 R x. t8 G: U; Z7 H# B
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。4 D3 k% i6 `6 ]: E9 U) k( l6 v
0 y5 F7 c6 p# Q, }, D- 我的点评:这是最精彩的反思。, J: }, {: s2 F
: q4 y" E7 a% U. s ^
- **计算相关系数(Correlation)的本质是向量运算**。公式是
c6 d4 ]1 c/ ?9 x
+ p% t9 ] ]6 L$ d* Y R `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
$ [$ t+ `- F9 L3 H5 {8 q
0 d! ~( Y/ M/ _! P& {+ S6 `; p - 这需要的是两个对齐的序列(Array A 和 Array B)。
* |1 n1 @ b+ G) _& x" b F* z . h# h# \8 S0 P, h3 p X
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。5 w# L" @+ B- O8 a A
, S& C5 L. I, H" |
& C0 L: L0 J, C: k9 t) A### 3. 我对它的补充:它没意识到的“工程化”问题
) ?/ [. ~5 N {2 a" X
5 u8 W- E% u1 U1 ZGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
8 d! U% _5 b3 r$ h7 W" q) U
K! i! I7 F5 x- \0 D1. 环境依赖(Dependencies):
7 b7 N9 v, w$ n ! ~+ @8 x; [5 q5 s3 t
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
& Y6 G+ V8 z5 C4 } + p" p# c+ c7 D) h8 |% h4 k! p
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
% }, A$ ^- p1 d! ~8 i 8 K8 O5 r4 V3 u: R- B* B& Q9 ~; ]
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。" V/ | Y& z( ~) _
5 n( q+ _6 f! }1 U8 P/ ^! V
2. 调试难度:% I9 P E: ~6 D; ]7 w& U
: Y% z4 W2 G0 q& D7 N
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
( a: a( u4 R3 N! [3 b3 b. D/ \ I ! i; f( }2 ]7 k! R6 `6 s
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
) i* ?. x, o$ s- ]% W ( G! C( T) b |3 s
- `5 J1 ^* X7 U' K" u7 V### 总结! J/ P- l( m# J* u; z
3 y) D2 c4 U8 N8 J2 r- XGLM的反思表明它已经理解了“场景决定架构”这一真理。
9 G7 b2 S/ I5 j- ?* s9 l: ~& S5 _# c7 [1 ~; d* n
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
! C# r, i: N5 M- Q . u7 v$ E+ T2 j9 r- j" L* m
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
( C( m5 O/ e ^/ g9 K" U/ r ' C7 e5 z3 k: E' u- u$ ^* H8 r
' y& K) f4 F7 }" A& c e: A它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|