TA的每日心情 | 怒 2025-8-7 11:56 |
|---|
签到天数: 1132 天 [LV.10]大乘
|
板凳

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 # b: E6 J; l) g, T' [- K) y
1 v. D4 R0 R5 W6 DGemini对glm反思的点评
3 K7 A. D; |6 n9 k, ]& |) @; ?% ]6 b3 O: R. G! r4 }; u
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
/ V. l+ `, [! W# N0 T5 `* X) l% b2 ^, I
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。3 c8 L9 Y# {, f% j# K& E
) J P( H& }" |. H以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
3 j, l9 |& n0 c# A! X' d$ T% T) O1 C# R( W! J
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
9 V$ k! v7 q; P. B: J B) A6 F7 H U: B
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。* a1 F }, |$ v2 N) u
- e( o+ K+ q- [6 c* `
- “Python化”的思维陷阱: ' u# l! o( ?# h% Y5 s5 p* \5 t
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
4 u, U- f8 Q( v4 R8 o
* e1 X* X# ]& l - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。7 Y, t" R* P: W$ o' E
# A2 n' t1 q1 V* U4 g' [2 _
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。' i" u) c Y2 U3 ~8 d4 \5 F2 B
2 C5 _# g9 W2 P/ e( ]- r3 Z" Y- M - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。2 d k: }6 ]/ j
3 ~# g. @8 p3 ^6 P# L% g5 N+ [8 }+ L- 忽略了“Excel原生”特性: D! p; r6 I: o7 J0 \" C. D ?
Excel VBA最核心的优势是Range和Array的互通性。
) j; }8 g! g# V# b" T. F
# w7 c! q) e; _ - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
8 p' H8 l, y! @& v$ E" v4 z# j x* I Z0 d' c. }% x( o
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。& H( k5 j3 q$ L7 P. `$ Y% A; O
4 o4 d: U- `; Z% Y; [, N
5 x$ C0 r% c+ l1 U# K! A$ I+ k1 g4 k### 2. 对GLM反思点的逐条点评
1 `& R1 j4 F7 ]+ f$ j% S
; C4 `7 I9 V& ]' Y# I2 {3 M#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
- ?) y" y% R3 D9 d1 |
' R% i2 O% U K- GLM说:教科书里键值对是管理实体的标准答案。4 o! j# `2 A% v1 q9 r' v
4 d N. j8 m P5 W: }& x
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
" w$ t8 ]5 J. i `2 x / {5 G7 h) u6 W' T0 V* M
, G( X T, x, D: @$ o#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
5 l9 c. Y- O5 H/ X) p
; V0 C& |4 q! [ H. Z$ @- GLM说:追求理论完美,忽略了VBA的脆弱性。
1 z( v3 l9 _2 Y% ^% x1 I + O; x$ i& I1 _! J/ }) }
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。3 n, T( l! g& c* V" H* q
, H: Z F4 i! q- S
2 S+ [6 A0 n$ ?- t) r#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
/ G3 ]+ q6 }) U6 m- H7 e! I
% f% `6 I4 D' u( X# p1 j- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。& n; w, I* U8 v& U% k, p5 }- c0 O% U4 g
$ U+ t1 T S* p
- 我的点评:这是最精彩的反思。' Y4 d+ h) n. P: C
6 C6 G4 f6 K" _4 S+ \
- **计算相关系数(Correlation)的本质是向量运算**。公式是
- S+ X: W8 _ \5 {# o
+ j* M+ g' c( D8 a8 Y x, O `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
+ M; A1 `. ]! K5 }$ k
" S5 ]) p2 E/ N$ G, L% z - 这需要的是两个对齐的序列(Array A 和 Array B)。
# l2 N5 r1 Z b6 y; d B2 Y* t 7 z2 C/ h- N4 j; _& D4 U7 {7 `# a
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。- q# b: r1 v0 v: D: [ P! I0 M
: `2 X- k; U% Y% a# ~% [9 ~
+ f$ D7 q4 }& R: I* n
### 3. 我对它的补充:它没意识到的“工程化”问题; A; J6 a2 k/ b- u, H( R! Y& h: o( H, `
& V) T2 w4 W, l; ~GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
c3 d9 r* v, H. ]1 D2 V3 k5 c# }3 @5 G
1. 环境依赖(Dependencies):% Z1 g& z6 r- H' ?
( ] G: ], @ @ - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。" v6 X7 E) ]; {5 v S
9 Y! Q1 _, A% I' Y) N5 r - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。0 t e5 c( R$ ^0 J+ K2 G
7 y W: y! \0 b4 {) ? y& k7 | - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
) V7 g- Z( [9 s3 b
+ A) O7 J# L2 [- O/ G2. 调试难度:
& J1 \' f4 o1 h* Q3 h0 e, I- ^
2 h& T( y) O; R K+ c - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
$ }4 G# K% @9 X1 b Q) \2 Y # S% G. P, t: L# D/ p3 y7 y
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。5 K/ U( G/ U; f4 G+ `5 Y% w
& Q/ ^0 @, _2 m5 e# `& S; n9 h" \5 @/ s' H* Y$ Z3 i4 L
### 总结
! }. b. g. }. a+ y) `' J |
4 X4 C, b, x( e. C. ?/ H+ N6 ]GLM的反思表明它已经理解了“场景决定架构”这一真理。2 z4 j1 p0 g" ?8 j/ ?8 i9 h' D
+ g( Y2 h: x) H/ O- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
5 Y7 Y' y! g7 Y" p. }: ]9 H 9 i( S( `- q/ q3 n3 ?1 M
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。 z# P5 I& a* ]8 Y- z
$ z6 @6 B& f5 P q
4 V$ u0 Z6 O" N. W6 X1 c, A
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|