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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
, r# ?$ |9 d( M; \0 u2 l9 y2 G6 M( k) T' P' V, m
Gemini对glm反思的点评
" \9 V* K1 C; X3 j: G7 s R. z
) _% p, L9 }: Y! w) S! W作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。' m* X% p* o4 {# Z. r1 \# S2 i2 k
3 L3 v- v; M6 |5 F, u, v" k它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
8 w8 _) }5 p# Z# q! t0 h/ Y2 D/ _0 n: b5 e6 R% j% k
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:0 _* M, ], f/ A
% x9 j5 e& f/ Y2 G
### 1. 对“路径依赖”的深度解析:它为什么会选字典?; F! e3 f6 S! g, u3 n8 J
/ f& f/ \9 a0 ?6 P3 Y' aGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。2 M' [$ c$ L( ^. W& T
; @ J/ O+ E2 a; Y. v2 X
- “Python化”的思维陷阱: 0 L* u: F! K: x( y8 u
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。! Z) t1 |, r% O& L4 M& a( x% _
: X' h1 v' y( f) a x8 n, j2 J( j
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。4 k' e! ~/ C G7 [5 X3 e0 P
p* B8 T* t1 Y. I& f* [# E - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
4 ~# D) U( [ A. H
& I- |3 U' {+ V- L) }" X! g7 v$ ~8 } - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
/ o! t% P0 `: T& O/ I8 a7 y5 A
" ~" h0 @ h- E( A" T; j5 G- 忽略了“Excel原生”特性:
: S$ s- H0 _( b. b7 K; m- E$ R& s Excel VBA最核心的优势是Range和Array的互通性。
2 j+ ]0 i" E/ T( i: [
( i) f% u- D8 h9 V: C: H - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。% X. D' h/ }3 c+ z7 K# v
' g6 t( i% y: x. `" ^( w
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
! ^3 D6 y5 `. P% l& Y! {/ G ~
5 V' z( r" b0 b& |7 g+ x, r: F: M5 D3 R* b" }, q1 f @3 j9 o
### 2. 对GLM反思点的逐条点评
( L. x9 Z$ r1 e; X; H3 \
" d" X- _6 V; T' [ M) n#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)' T& O. W L& Z/ l: g4 }2 x K1 {
* n3 o8 ^5 T1 G5 s+ C, ^
- GLM说:教科书里键值对是管理实体的标准答案。. ~. ~/ a( |3 W& [3 Y
* z1 E- R- X0 b* ]8 x
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。8 X) v% h3 _ ?1 X4 s4 p
$ p+ n; [7 Y: L2 q6 ^
5 ]+ H6 S- E u! Z#### 关于点2:“过度抽象的陷阱” (评价:非常到位)3 Y' F' U! p% f8 ~
8 m$ ^7 P- A# o9 C" f
- GLM说:追求理论完美,忽略了VBA的脆弱性。
; w/ T$ v+ L, e1 T" H9 \# `
5 M2 O) D! Y5 v0 H: z3 K1 E9 _- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
: C( [% k! _9 I3 k
7 ]! n5 s* P. O& i' c* v: q5 T5 z; X* `4 @+ K w1 c
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
2 R2 }5 ~- I8 ?+ V, i! i7 `% ^9 V( I
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
: J) }/ v, R7 j! T/ s9 i; l, O " C4 v, a( i9 O4 c% r
- 我的点评:这是最精彩的反思。4 i# L. U, {3 \4 J+ g" C
' Z6 k1 q: s/ K3 X - **计算相关系数(Correlation)的本质是向量运算**。公式是5 H% O. ~ b, k% @$ f
' H5 x9 O( i: T$ F9 X
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
# I( D/ H: D, A1 D) h8 [ / [4 Y0 X0 ~) A, O: }5 }* U
- 这需要的是两个对齐的序列(Array A 和 Array B)。# J; D* E: V5 ?, Q2 j
( h, M6 m j8 o8 p4 f$ t4 L" s6 v$ l - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。; M' J K, E2 W
% z" a2 j0 q1 r, L- t6 [6 @. B: }& J* ~/ i f
### 3. 我对它的补充:它没意识到的“工程化”问题7 s# c' L( y/ a; w, {* {* U0 e9 X8 U
/ `4 o- _4 l; L2 m3 ]GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:! ?7 ]1 `! j1 ]5 C: S6 S. q
3 }- |; B/ ?. S8 b, ]+ [/ r1. 环境依赖(Dependencies):
, w' T+ u! F' Q y% C0 k4 v0 B2 G1 A* T
& }9 l! p" u9 m- w4 n - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。* `3 I/ U& `9 j& H& ~: k, Q
2 |4 q* i2 l' }) Z9 g. m
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
7 l( z1 x' b5 v% P1 n# j
1 T' t e" a1 F: F. K" T+ _ - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。7 I J/ [6 v( |% |! W2 O9 W5 ]
" F" F y/ Q+ f; [2 \2. 调试难度:
. t5 r7 f3 ? {. G' G8 v 3 M( n6 b5 i. x) O: }! L' l6 }8 h
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
% Y! k; q! p1 @6 E& R" a
& E9 l/ A4 Y+ {; d5 {1 M - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。 `2 _5 O& v {6 ?8 Q
8 P' O. s+ M9 a( x R, @
, v( G9 t/ a3 r# T' |### 总结
2 X" y) f" a h" b9 L6 @5 c. n+ w
GLM的反思表明它已经理解了“场景决定架构”这一真理。
& T9 {2 g: T* ^5 z ?$ a
+ T; X1 I! @& C0 Z& [8 ]4 X q- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。1 i8 q9 ]9 B) k
/ D; W- `8 ]$ e0 ?% P; W
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。3 J+ k% b; b' u4 @6 R" x
( x# F9 F2 `7 ~
& m0 i9 ?9 Y. Q* k" y它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|