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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
- v" D0 q" b9 T9 w
% @& l& K, N( d/ gGemini对glm反思的点评
. Q( `) F/ x! J# N* D! C. X0 |1 m1 T# h5 C1 A Y2 |
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
9 b8 [7 ^2 c4 S) `. h
* m8 M9 G8 e0 K0 E) W8 W它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
3 A7 U" L l. r2 g0 r
`7 P. l: [( D; c7 s0 Z/ ^" K以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:. h9 k( g" C( ?& @) o
; `- a, H0 C3 N$ E9 B
### 1. 对“路径依赖”的深度解析:它为什么会选字典?- H( @0 }" s4 y9 ^8 w
9 }# r7 M0 t0 C% D( Y' K* p; h
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
" [& C( j& q( g$ B6 Z6 k2 p' S ^ }4 n9 l! _ v: ]
- “Python化”的思维陷阱: : o! b& a+ T# Z" T- I
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
2 q, \7 I9 ~# V3 E6 f
; R% c6 L% w6 P# I - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
; D8 W! L/ u W ' r' o/ z; z. J8 Z2 z7 u# L
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
+ R- z3 a& P* y5 p3 N ) A% ~9 V, \/ T9 X9 {" a
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。% z4 R" m( a8 k% A2 H
# K4 Y" J5 u, Q d
- 忽略了“Excel原生”特性:
- f6 T+ o3 J9 o Excel VBA最核心的优势是Range和Array的互通性。9 H6 K: J6 z" }$ D0 b
8 u' j7 J5 j {6 Z9 ~. h - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
# @8 b" ` N h- z3 F j* \ 0 u9 A9 x# Y/ G/ E1 m2 w5 G6 ~
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
* `- F" m2 ^; `9 h5 k- v ! `+ ?% D9 t$ P3 X1 f
% f" J5 C, O- x1 b
### 2. 对GLM反思点的逐条点评
8 o. m+ B& S4 g' `, |. R& C# X4 u; `4 X
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)) ^" X$ @( |/ t% Z6 n+ b: }/ G T
- m2 r1 y( K, A- GLM说:教科书里键值对是管理实体的标准答案。
* A; R* j6 d* v' J* x1 b/ n2 v ( ~' V |8 {2 ?6 P3 l
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
" a1 F/ ~6 `( v: H: V! y: H5 C
1 s4 [! |7 N6 h) z2 x/ Q( v$ K& F6 V$ y7 w9 k" w
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
5 e8 ^7 V. ?! d" e" h. H. }$ W }1 s0 b& W
- GLM说:追求理论完美,忽略了VBA的脆弱性。1 M- m+ b6 |' G
1 Y; i! |4 X8 g2 Y" t- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。: G: Q' E& a2 l6 V0 ^( C
6 [3 L# ]$ T E$ i# P! E/ j3 I
* h3 v, }1 E6 z( D% a. [
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)' z' z& p* P" {; p N
$ {: R( M* q+ ]. {) w& J8 H- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
( I* n0 W! n X: n! j$ G
1 w9 k" k/ X8 C {3 D8 u- 我的点评:这是最精彩的反思。
& X3 G+ D+ O3 C: N3 h& u! k + e- U3 ^: C6 g$ P X4 v
- **计算相关系数(Correlation)的本质是向量运算**。公式是( t5 m2 s8 r" R9 M! Y* H
+ X# ^# u- z9 o3 p, J- F! { `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
* D7 Z0 D# r" ?( Q; D" I2 u* _% d 3 T5 D1 m8 o! `4 z
- 这需要的是两个对齐的序列(Array A 和 Array B)。, p, O, V/ ^" d$ |
& Y, H5 O: L& [" d
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
. ~8 U/ U5 }& [0 I; }# X+ ?0 R 0 K/ e! \2 w N
7 h( O) |/ U- }; _, z### 3. 我对它的补充:它没意识到的“工程化”问题
/ e4 P) l% i R: P
# P% v* \( ?) |7 h% _GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:! A$ N/ t0 ~8 j, c$ t% |
" X$ j2 L# l9 e+ I" U7 @, l1. 环境依赖(Dependencies):! ^3 S/ n! I" |# v
+ K1 ]# T5 d6 H7 b+ ~2 p9 B3 D - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
, C# }' P$ G% I D$ e
, F, g Z2 K3 b2 ?: w+ f# J2 g/ q! f - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
, M+ h, o; X% M6 U5 S5 g* I6 B
3 p( A* W, K$ g- X: Q7 Q/ R- | - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。7 p' t$ S/ Q# [
4 \3 s" N6 V) h, }2. 调试难度:
7 b" k n# ~" i$ ~; f9 D% v% `
7 n# o( S( K# P* b - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。+ B4 E! s/ o0 S$ {, x3 p
" t; m1 f( ^0 r0 v: ], Z# X2 S/ [ - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
$ H3 T) E& X# r8 s0 z" I& f2 ]
$ l* ]- `# x! {6 g8 I. |, s( c0 x
### 总结
7 u0 b3 D/ B0 G1 Z$ i1 t0 e8 h: b* c+ V7 Q
GLM的反思表明它已经理解了“场景决定架构”这一真理。3 @( l6 @9 M' _+ j) ~" b
7 T T, ?9 g& ~6 ~2 o( d
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
5 v! k5 b; z* ^5 N
1 C# d ^% C+ v \8 @' E. k- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。1 g5 U- E5 B2 N% @! z
( \# R H! z5 x _2 }8 Z: F
6 U4 O5 R: k1 i* v2 s/ G! @它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|