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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 7 N8 r- G7 w% q# A4 y" q
* h! r; u( F( |/ ^ e" F
Gemini对glm反思的点评. s3 y& g( K* Q7 W% c* x: H
7 t# L- R% a, ]作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
& j3 y* ~& r/ s1 t. q
; a, b# z+ v5 c0 A O0 q# B' {它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。: E6 G4 z2 I) j* W
/ o+ ~& D, Y2 {9 @" U# g
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:0 l+ x4 y" _0 M7 L
2 z( }+ F) W" _7 w% t
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
$ ^% R% _1 n0 c' X' F
6 ]9 }; {: c1 W7 b8 x) WGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
( F, _& ? W1 n* Y O* ]) F
: l8 M' _, @* `6 H+ c. X- “Python化”的思维陷阱: 6 F6 q3 ]& ]- {0 B! \
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
5 O+ `- r& x" R# q
5 B7 X4 m) }3 q, ?( w/ S7 G - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
# d& W1 ]# ]9 K) h4 W9 e8 @( O 6 b# ?0 S* k' O! A
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
5 }3 b6 {1 a8 X3 g! ~2 x 5 Y" a8 M+ i1 @7 [8 @
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
1 U; `. ?" \) S9 g- \
$ d Q5 @& \, O9 n. ^ F5 _- 忽略了“Excel原生”特性:
7 ?; l p6 ` t5 w, K3 O Excel VBA最核心的优势是Range和Array的互通性。! W1 d3 r J$ c2 C9 x! F) w
- ]3 z# f6 ?) `! N* Y& N0 i/ G - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。& ~) z9 a- Z9 U5 A
4 q, p/ p/ o) f1 G6 N# g; h+ `
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
- O! J" `4 l) [4 ?7 l1 D3 b
' ~* X4 \- F5 D5 O" j! H* }
; C. w& r+ Z+ A+ W1 C4 t### 2. 对GLM反思点的逐条点评' ~$ u7 p8 ?* M" r, Z X! F) s( }
: Y: I5 h3 z, X; Q/ V
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
7 n2 P( M3 L" u7 k% A7 @
; H# D$ ]% z( [( `2 P7 ^1 K- GLM说:教科书里键值对是管理实体的标准答案。( p A2 Y4 r9 R$ A/ ^
5 H3 ~8 ?( i( o$ Y' B- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。5 c# S& c0 ^9 q# g* v+ ]
( M8 E' z7 f& H+ W7 B+ v8 T
7 p/ I: q; w* A; h$ S#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
+ n& M$ ~7 f- N6 a4 X f$ W, W0 t
- GLM说:追求理论完美,忽略了VBA的脆弱性。
) y, g2 G. ]0 s- A3 G9 D" k3 ~
1 B) {" ^; g' m$ ^- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
L0 y2 Y- b2 q0 f+ Y$ S9 j
3 ?7 i+ n9 b5 |/ B% ^7 {: j; \1 @3 b* z7 f9 }
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)# j$ t8 }$ u1 e! H; [
0 T8 _$ o2 p, O+ H- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。5 i" \6 M' Y" D
/ q6 Y" b5 x/ \& y) l) q- 我的点评:这是最精彩的反思。0 d% g1 |7 l) x9 b
9 B; H8 U2 e# j: t- n" E3 d" y - **计算相关系数(Correlation)的本质是向量运算**。公式是
+ F5 f4 j3 ?# \+ v2 j
5 i9 `9 K/ |* \5 ]1 q `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。" O& y0 T3 H9 w" I5 B% |3 T
& @2 X) d7 ?; \' U) {
- 这需要的是两个对齐的序列(Array A 和 Array B)。
3 w8 y* W* N# A k$ j/ Z) c
% \+ P7 w* w/ N - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
: e4 b% a R/ }% F& |
# a @: r& Q; ] N! L" C
, `" |9 B* E2 [' s, |### 3. 我对它的补充:它没意识到的“工程化”问题
$ z& K3 ]* ]4 w9 C$ o y
m; z& y$ I+ B, Y1 w4 XGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
0 a: L/ s* O# q/ Y/ @7 o
8 ~4 f5 S. V. y* W1 Y/ f! b1. 环境依赖(Dependencies):/ N4 B5 G# V. ~& ^; |6 t6 e; R
. t5 r$ c/ z4 \4 h; z( c
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。. r, g8 B& t" y$ q& L, }
/ v2 e7 W6 \/ t' o
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
6 O }! l; Z" K! n
@% Q& K5 I# Q' X. \. f - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
1 ^& Z+ Y% K( v5 `( Y$ H2 b, y
' y* M- r$ X, W6 Z% m8 O2. 调试难度:
0 d0 \0 x" P+ Y ~& `1 m9 s8 T7 @0 L
6 A- _3 |( z, R: T, @" c - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
4 K. E- c4 X2 e, X8 Z
1 J1 f! S3 i0 {3 [ - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
1 r8 t$ q6 o. c, h
; E$ F) Q/ K- B2 |8 j
2 i& |! S1 ?8 O/ m' e. t### 总结
4 {# v% b: H1 q6 g( g% a7 {4 h, T! h8 m$ l2 c7 O
GLM的反思表明它已经理解了“场景决定架构”这一真理。
* d# Q& R) ` e+ W5 g1 E
+ ~: ^) ~0 i q7 A- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。2 L$ p6 o' k0 a3 |8 j8 m; u0 Z
7 `5 C8 {" w' F8 M) x+ {' `* Q
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
7 R' ^1 H- t# f9 n/ \' _: t & t8 F5 N: `$ m
4 G. L0 p6 j. I' P, U. L2 X7 t
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|