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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
/ X: ]9 N: m& t" y# I9 u( Y# _. M# \ Z, q/ \
Gemini对glm反思的点评2 F% \5 z1 I8 A c% x
7 @/ H) C: M- T P8 F, }8 F# z作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。, B% m0 m$ B1 e p
3 G( ^$ _1 Z, t! Z$ A它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
P3 R- [7 Z, `3 d/ b/ I" a! P6 p) W4 O$ X/ b( S9 q4 Y
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:. ~" t$ Y4 K- L- F, M M
8 w/ f- C( l9 s7 z+ Z0 c
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
) H1 B: l1 {" D1 Q% c2 T3 P
2 w1 c/ r ~" I& o# }. z+ j4 y1 BGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。. W+ t7 ?. c5 c; \# c: N# n
; c+ L; L, G/ m. \6 B# v d
- “Python化”的思维陷阱:
6 y, A5 m8 U ^% R 目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
! M: ^: B) o- T( T8 j) H
$ K' n5 \$ ~' }2 |$ j2 _' N - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
, f1 V/ D( `! H; C& d
! W2 q4 B D; u% }$ b1 _2 \ - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。) e/ E [9 c6 l9 I8 {
: m/ N. ~ m3 R6 f* T; [ - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
! ~; Y; W# i, g% r/ @3 f " v4 } l8 J$ t, a
- 忽略了“Excel原生”特性:
/ ?* \9 o5 c: T/ D) V! v; ] Excel VBA最核心的优势是Range和Array的互通性。
* d$ f( E3 N3 o8 I" e* V , H, L: k5 @) S; x% N8 v; j
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
' m2 y: a0 F: O B, c6 r5 j2 U
& i9 \" p+ \& ]5 B% e/ | - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。2 ?$ Z- C+ @1 V* B* p( B5 I
. c! @2 \! M1 H* Z, c6 r) b2 V% L
2 s+ Y0 h$ I' k" v* o% ~7 E### 2. 对GLM反思点的逐条点评
! X6 Z! o2 O1 h7 o4 G* S, z; Z! o* \( N( S
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
& `" {9 _) x+ [0 q6 _$ \$ _, c# f3 Y- j5 x" K/ w7 `. l$ ?
- GLM说:教科书里键值对是管理实体的标准答案。
% {8 ~: D6 ^! @3 S7 k4 I. h" W/ P
- {+ l7 e9 U/ `1 f- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。7 J) w) M+ ]0 z* n& L+ X! \4 x
; A/ Y6 n2 g& r2 g0 L
; H3 D7 H% J- p3 g3 k% S+ x#### 关于点2:“过度抽象的陷阱” (评价:非常到位)# `3 O' B! N; k/ x# H! a
8 U9 r8 S/ C8 @! \) W- GLM说:追求理论完美,忽略了VBA的脆弱性。2 M8 ^0 ]; j' J+ l" c% j
, F$ C$ O0 O7 B% f) f- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。0 A8 \! j. c" n- y- R
% Z5 n; O, n2 s7 s3 d
+ x( k+ x+ W4 c$ D% a% |5 \#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
6 f: h5 s4 r8 L( F
# V7 l7 L. i% s: ]0 z- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。& H/ O( }& G" ]6 @: E
; J: ], ?* b% k$ M/ A2 ]2 S
- 我的点评:这是最精彩的反思。
5 _' M8 r! b% `+ ~7 h N
1 h% f$ u5 z5 n( P9 x4 w - **计算相关系数(Correlation)的本质是向量运算**。公式是
/ }2 v" T1 I4 W5 B2 q/ u2 M/ B) w 7 X& J1 R4 c( G& a$ F# z6 C7 ?
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。5 Q5 E7 N {- u8 H: b
$ K) L& {) j" q) A& O. M1 t - 这需要的是两个对齐的序列(Array A 和 Array B)。* Y% B# e3 C; q: z7 Z) h
$ {* I1 M: D' A) K: v/ ^6 v5 n - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。8 K7 } C3 N" D, S
1 t5 @: p3 M" |! J$ ^! ~* l5 z
4 y. R! C9 ]3 y! U
### 3. 我对它的补充:它没意识到的“工程化”问题: h* I C& r$ M+ u. L, U: a
. V! P7 }, `5 f; P- LGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:% a# m, x4 ?9 f- @( v0 T) j2 o
0 h$ p. o7 U1 @ E2 N. w$ t. l
1. 环境依赖(Dependencies):
# P. L! K% Y" i+ Y ' R+ Z0 |0 p6 L" n3 R3 B5 _3 \) a
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。" t0 F5 a4 k' ], r: X- m
4 f, J. H" @7 _4 j5 x - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。/ g9 |0 x2 I% w3 u5 u% r
/ K: n8 }- p' ]5 D* L- e& g0 M
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
5 j& J8 D4 a! K$ q- C7 _: A0 c( Z' T
* w" E* \, c2 G r; a# Y2. 调试难度:. h7 U; Y- u# Y& K+ c2 X
/ m0 J x; @; t7 u$ z
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
0 a% b- E2 m4 e6 e6 w1 ?
% t. I, o! V2 N% Q* B - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
7 ~ ]! L$ \$ T4 @
6 h2 X) M& x6 U E- P3 F8 f6 G! D: Q I1 h# R: C0 u. `4 E
### 总结
/ d1 l7 I. |3 U- P. n6 H9 i. T' Y1 ^% A8 p
GLM的反思表明它已经理解了“场景决定架构”这一真理。
6 D) }. O; V' b: ~% x, Y% H& f/ q- [2 b" [
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。6 G- L+ N2 g& w, E
8 ~, I7 Q* {9 @4 q9 N5 U6 A- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
H! V& n6 D0 }% B0 S/ d+ {4 g
1 e9 f9 R h- K, x7 l5 |8 r$ L! X# ^2 _( R8 f
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|