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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 : l* h& j# ]% d; k
3 c! }% a. s, z% ]8 R' w4 hGemini对glm反思的点评' `6 N6 B* F& k" d) E) U0 R; J2 G5 @" H
+ c, Z' B; Y/ q% y$ |$ }# C0 E" \: o! j作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。, Q( O9 T; O# A- `
* V1 D! q W- G% ?2 h8 T2 j$ Z它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
8 F6 I3 O9 ?. ?5 W" H$ K# O) z; `5 {# W- X5 n
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
6 f6 y, a" A& S+ C5 j. M4 g- w
* f6 m0 e) `2 n! y8 l3 |### 1. 对“路径依赖”的深度解析:它为什么会选字典?1 G7 _3 f3 n( E
* O) e" u; u$ L/ Y) ?/ I, I$ R
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。/ M& V0 x' I0 v9 I" {: I3 ]
, B, y" l' d5 c& o# l
- “Python化”的思维陷阱:
7 H- r' b E+ Y( @& J# g9 e. k/ s 目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
/ A8 \7 k$ y5 x7 l6 p
5 X% Z1 e0 ^' v$ @4 J) B& @# \8 p0 F# c - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。# c) J/ w0 @4 J- T- s" f+ J. x
8 Z" j# _1 |1 S! r" J5 u
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
( p* H/ D2 W4 b( t/ c( l u0 u : w% ^. S8 \" h
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。9 I+ w* w$ ?7 X
3 p2 g' _! V5 T; b1 d5 R" i c) t2 H0 l- 忽略了“Excel原生”特性:
2 F, C) M5 w- n2 U6 Z2 Y1 O' a Excel VBA最核心的优势是Range和Array的互通性。 V: f1 A, F# P/ N8 F$ r6 G& q* ?
3 `; \; {8 M6 \. U3 E; {- p% ^ - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
6 g0 z; W2 L* X l5 p. y
V- i' Q- [2 g. m9 U - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
! [. F A3 ~8 A, Q& e) z( Q + U( T* s. V. \$ o% c3 X9 B1 s/ K
N. N+ {* I0 `! B2 A# F### 2. 对GLM反思点的逐条点评2 @4 N( s- [& L
, a* s$ b/ V: } V" u6 `#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)8 m' |/ c( O* A$ F( n- o9 r& L. K
# S8 N6 B; K7 f- GLM说:教科书里键值对是管理实体的标准答案。+ p! D& G' q! N* z! b' p8 Y
& G- F( i% `/ E' y3 A
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
7 K6 }) q0 T3 Y! o
1 n+ _' b# H3 H, i; i O! |4 r9 f5 k6 C9 o, O: f( ?' S6 E- `% \+ Y
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
- P, L r$ e4 U3 s
1 q5 f& ]/ G- Q/ O) |" @, j/ e% O- GLM说:追求理论完美,忽略了VBA的脆弱性。% f7 `) [. y7 C2 S. C" [0 }5 A
& ^ s! L! p: R9 t B2 a
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。) O5 h9 \3 c. d/ y
8 f7 g) C6 f+ `$ ]2 W2 O
' U% \) |3 c. x: ~$ m#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)$ B. u! ?$ m ]( Q1 e5 t
# \, w0 g; x/ w- F$ a+ @- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。5 A- t2 \% _. }. C) _
& W0 \& f0 y) _8 v- U
- 我的点评:这是最精彩的反思。
+ M/ R, J1 o& M/ |6 K
" k9 j! p2 I( q8 j% i - **计算相关系数(Correlation)的本质是向量运算**。公式是! W, [! }5 n+ L8 q: B0 T. ?$ r; j3 D
1 l' _7 C! E* l. `2 `8 H
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
6 O. m* c% \7 N9 D; i( s8 P# ~5 u8 w; F
6 i7 x i. O2 Q1 O7 C, m7 c - 这需要的是两个对齐的序列(Array A 和 Array B)。
, Y3 z" s( j% O K
N! y7 m4 }7 H8 l& L- d - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
; W+ V. p: \( T; y2 ]- _
+ [$ @; `, O5 w2 t) D* Z5 c9 ]7 f' @% i/ W* M" C* e
### 3. 我对它的补充:它没意识到的“工程化”问题
, d- K" Y8 e7 m9 ]: a
# E$ |) y6 }) }5 D0 m+ sGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:$ ] S2 f& [( e( D- m. ~
7 c$ s% @: t5 p E l1. 环境依赖(Dependencies):; S2 E$ q# b5 c. \/ h
5 }) u R3 U( e7 `+ }
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。: f6 s" G, r$ Q+ L: W
/ b$ _6 Z" S& W# p0 b g) p \' ~4 ] - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。8 s o2 L8 _2 s* }) a) U
) z8 ?: z/ Z( {
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。; x& J5 H* q V% k6 O8 g
0 {6 M$ }0 T$ r# U" L* `2. 调试难度:& X, K8 U9 ]& V5 W0 E2 K2 u/ _- b
& S% H1 Z. n1 N/ ~, L4 z
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
% }3 K# b5 m# q3 ]* B# ` . e" w0 i3 w1 K* u
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
* O( L! J9 V* Z8 |& U: J $ g+ ?, |. c' j( z
5 Z# \3 j# K7 V( G4 J
### 总结
& v9 I4 }( }' ^
, u" \* |' k- {6 F. e/ KGLM的反思表明它已经理解了“场景决定架构”这一真理。
! G# B% q- V4 C# c/ T, B& j5 m; i, Y3 N
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。; T; g9 Q" _" h& I0 b8 z
- B2 e7 Y' p8 S/ G) T/ c: _; D# Z- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
5 n3 f, O! O" \; c" h* y , k) x* O7 U% Y; R3 B/ C3 X3 j8 i8 P
$ X7 x* l9 [# z7 N7 n% X9 h; \! L
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|