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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 ' A0 y/ Q% o1 g) X) _6 n
. C- H- n! z4 @6 mGemini对glm反思的点评, d9 n9 u0 b# y8 r6 K8 ]. I% @9 A
. ?, W5 u9 B; l$ X
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
9 w; Z7 u4 U$ I; r& ]7 T3 ]9 {' X
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。- W. |5 Z$ I x) s9 Y
' |% F2 X! S7 j4 a以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:* V5 }! S5 w1 [1 j9 b+ D8 ]
" t% `* e9 O7 Z2 O2 Y### 1. 对“路径依赖”的深度解析:它为什么会选字典?) ]0 @7 d$ y# G L, p# f8 X
; U: n u. L3 |4 O* k
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。: G5 M `+ r" \& y1 x- W
* @" U1 A( n2 W+ N- “Python化”的思维陷阱: * c S2 g# c: }$ M; t. p* J0 |8 C
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
. [7 _: |: I0 H' P$ ?8 K$ r
# O5 i/ b, p6 [6 W - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。$ N l7 e+ q9 @% N8 i* l
' n7 d) S" ^* N4 [ - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。4 ^8 u) |+ [( V+ \- ~6 u. @
# J& I4 `9 I ?* R1 W7 W - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。. z8 h1 [& h; x( X# Y' t y1 k
6 N5 q# a- ?# V/ u& d, E- d9 z
- 忽略了“Excel原生”特性:
* }! g h, n% j9 k& D7 I Excel VBA最核心的优势是Range和Array的互通性。
, x0 S: r% h) y; e% L2 ^! S
% m6 y9 t5 s1 f4 Z, M7 C) A! L& `9 o - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
' f8 K. G& i/ s, o8 t' y# t
7 c: K o1 @& Z - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
# p! W5 G. ~3 ?- y, J
/ Z0 j$ H; M$ F* Y6 l
; i) s; ~& u$ q# V4 h4 D### 2. 对GLM反思点的逐条点评" J1 m3 i# x8 F& e" W7 O; N
9 W5 x* \& e3 S- W) d
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
& c; t% _( ^2 e. `; b$ T+ A
- a, r, S& V+ Z1 m& _1 Z- GLM说:教科书里键值对是管理实体的标准答案。 O+ t3 I; Q# w6 C. p! M3 Z
5 ?. {7 I% j! u' |. \
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。3 T+ S+ I$ s! z' g0 @9 B
+ t6 o" g) S8 P. F5 w4 y9 q# }6 P, q8 g; ]: ~4 O E
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)9 o/ q9 S' O) y1 e7 m! B& b
: s* w6 z4 {& N2 z; e- GLM说:追求理论完美,忽略了VBA的脆弱性。# x5 S' g3 a' h: a5 C
: B* f7 j8 y0 N6 B3 x0 X3 D+ X1 _
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
9 `% A: `% k4 b9 j
+ x# t9 n- Z( t% ~/ u G( ^: |# y
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)+ n, a# ^7 C' R5 y$ w' n( N6 e9 ~+ W" z
m# V2 ]* N5 u" w5 p- G- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
5 v6 z1 B. T& h
- L2 X/ k, E# N L; m- 我的点评:这是最精彩的反思。
9 n* I, k3 J. e" @. l7 C) b
& }6 m' M! _, B9 X' |8 I3 | - **计算相关系数(Correlation)的本质是向量运算**。公式是
# F7 G! r5 ?) G1 g: T 5 k& n6 ~$ C& @# C6 u, k \7 C
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。. P. |, `! ]0 y# n1 k
! D% Y( o: B; b4 k7 c, `. c9 j
- 这需要的是两个对齐的序列(Array A 和 Array B)。
& Q! m O1 H- j: B6 k # y _) P, z7 T$ B8 n
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
& S8 |0 S% v7 @% V9 f * J1 E3 d5 w2 T5 I$ }
9 p& L0 M$ r& s0 C( [' w, ~2 q
### 3. 我对它的补充:它没意识到的“工程化”问题
( Y. h/ q0 d% Y4 ]2 y2 N: q! V8 d
+ p4 n. {4 B4 \/ g H2 L; bGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
% g: l( A2 S% Q+ }& ^* L' _% d' l& H7 I/ h3 G6 D& G2 _
1. 环境依赖(Dependencies):
, ~3 [' s: Q6 `& L 5 s9 x& P/ [# M# T- J7 X
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。' E" [& | {7 o0 c5 l
+ _2 r" P. a7 I$ R - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
- k4 C9 j0 }* Q/ i
- n& z7 T$ D% Y9 _ - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。; ^( t" M9 q7 d/ ^
/ h% q4 k3 s" g4 ?! }
2. 调试难度:% y4 b; j, u' d- Y, f
_3 ^& W. p3 U! W) f; n# _ - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。1 j j. i* y" h7 z
( l; \6 [9 o" x- E5 R6 D( V2 {* @
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。2 J b0 N. ?5 I. g9 ]8 F8 a
6 H5 L- x" q7 E. r5 J4 f
( G* |9 `6 e7 I: M### 总结
& F' F+ H, Q! Z' E. b; z" M# Q0 d* c$ @
GLM的反思表明它已经理解了“场景决定架构”这一真理。 P+ n/ t. b6 W; g0 I3 m- z
; D- W5 O+ b- w' h- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
) k Z V8 H( c" U; y R
& k$ B4 Q( F) Z$ G% b2 ]- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
7 c ]- U% c2 r% `3 B N# c 9 A! y1 q% f6 A
& b# B U- F5 ^# h% I$ B它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|