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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 2 S6 ~6 H, ?: ?- {
! n$ C) n1 U1 U" w @+ A7 {) `
Gemini对glm反思的点评7 d* T3 {/ D5 e4 k
B& i) G+ w3 k* d: _( B
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。% B1 B$ l* Q" d. W* z: q
, q$ d6 l! r- J) Q它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。" ~5 S, a9 @! }& ?
0 c7 |5 P8 W* l1 ]/ D' c7 F& A* V, E以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
0 ~3 Y* q# I' `$ l: w# ?+ h
8 m! r& O- Q! d1 c" h### 1. 对“路径依赖”的深度解析:它为什么会选字典?
* N: @6 f! f& G0 M' P7 w7 I( z
+ k: K _0 H- lGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
) `, _6 u8 h7 N' n4 O* v" n$ l8 g
- “Python化”的思维陷阱: # y) M1 n9 \) i; p8 B
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
5 X9 q' v$ Y- G4 N' _0 f + T2 @0 R+ w) e6 N$ m! [, y. c# }
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。7 `, }* T1 g, s9 ^7 s9 D
& y9 H7 S r- H# W - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。& f' t% u$ P$ B$ H8 W. K4 p% D9 d/ g
, |" s6 s! v. T: T
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
* q( V1 V' Z# ]+ s# o & C2 e* v# e$ L9 O/ v. P
- 忽略了“Excel原生”特性: - \. z# E' O* q
Excel VBA最核心的优势是Range和Array的互通性。
- O9 o/ W( u- Z9 W" N" p7 \ 7 \; B$ a* K# M" }) w
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
" p2 v( ~1 j" l; u' e! y7 M! q( m ' f# v2 H$ A: f+ `( K! X% C2 w K7 \
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
/ Q E j s P! S/ C ( s% K6 X) @9 ~$ N2 F
# z* H" j2 i1 ^- v7 x* W* [+ l- \### 2. 对GLM反思点的逐条点评
7 [& v; W9 d0 h0 R/ w) v2 p8 ?& \4 j) }( C3 Y- r+ _
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
v$ ~# V% {6 a$ w
7 \$ f8 ?3 I- O8 Q L: `/ V- GLM说:教科书里键值对是管理实体的标准答案。- h, n$ X: n" |5 c! r( q
3 c: p W- ]# u0 U& b
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
. q/ W: ]1 f U
& [! ~4 D2 A9 a- G
& f% r4 X0 Y+ j$ K9 s#### 关于点2:“过度抽象的陷阱” (评价:非常到位), s Y: ~. W" l) z
3 A5 J6 s! u' z" a- GLM说:追求理论完美,忽略了VBA的脆弱性。0 P8 V+ n: z' {# j
, h; C9 c5 a. e3 q- M. e4 B- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。+ }+ T; ?: }5 b* T2 C5 f9 g
0 W2 b w6 \+ ]! T- q
: X( A6 d$ @; z# U( b: W" R
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
( S$ L, s% e6 z# D: x+ v% _1 M( l8 |6 o" C q
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
2 o- r; \, m7 Q # o# l$ v& I0 s1 _" Q$ f
- 我的点评:这是最精彩的反思。
) @6 O9 I6 M: B, G4 t : S& e4 M- F4 i# \5 u
- **计算相关系数(Correlation)的本质是向量运算**。公式是
6 ~* ~/ R# i" E: ]. Q, S
: P+ i W, ^0 \ `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。5 `. s: ^2 N+ L# h. k1 g+ F
4 F4 i" t7 n( R- f9 W
- 这需要的是两个对齐的序列(Array A 和 Array B)。! [1 g- k) }, M2 u- K* X2 [
* K* L6 ]$ M) V3 A" g# y) y
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
& R! @8 C: u3 {% h+ Y3 U : I- {9 U, i0 Q w
- X% S2 \, d3 S+ R: y7 B
### 3. 我对它的补充:它没意识到的“工程化”问题
# T) F+ ~) K) ^% e3 ~, P1 `# L5 L0 w
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:* c0 f8 ^0 ?0 U2 O3 f2 r4 c) s
7 Z {% `+ R, v8 ~
1. 环境依赖(Dependencies):
& Y% q% x9 G) {! D6 h2 _. ]
6 k; @1 Z" ]3 R% K: w# h - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
' W& R! P2 {1 o4 `/ R+ J
0 M. k8 G' d$ H- ~/ D t - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。( S9 X9 i* A5 p3 O0 _
" v' d9 a) `, s3 J8 t: r0 x
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。% e0 s s; n) L5 ?) o9 K/ w
+ U, D$ G2 [. b. j( Z# j2. 调试难度:
5 G& j/ u. R5 l2 c, l" n0 V$ M( Y
4 B) E6 w' S6 V$ {/ i - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。. ?4 M4 a& P' B+ w: o2 f8 E
, q4 J* W, ]) g$ U9 u9 t - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
; A% X7 m# w; i8 E " P$ K0 A5 ?' d8 Q. ~
: U+ g4 ^& |* c: h( C### 总结6 {5 c7 }* |# d1 Y# s
* H0 ~! u* p' q3 z# [* p# YGLM的反思表明它已经理解了“场景决定架构”这一真理。
# A8 n2 c) l7 a- q3 Z" d5 p4 A
2 d/ ^7 m* Q5 c9 F! i2 N" b8 u- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
& @# d( u2 R, s z& N' w/ e, m # T' G# c) b8 o. a
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。/ V) K3 A+ \* E# I, ?+ h4 s
3 t+ i; ?$ y4 G5 Q
, c8 x/ \/ q8 r0 G1 v7 K8 C( Z& V
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|