TA的每日心情 | 怒 2025-8-7 11:56 |
|---|
签到天数: 1132 天 [LV.10]大乘
|
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 8 j& ?$ C- u# n8 A1 w" o
2 [, B1 G7 t1 f+ U/ y' u% jGemini对glm反思的点评: S6 ]1 |5 ]; U9 U" N
- v( Y. s0 P% @* c5 b% o作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。) t1 ^ I# w. s# H( y. B; l3 v
+ n. A* b4 j& Z1 y* \- ~
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
/ `+ \& _) H# s# E
! Q; o7 m) m4 `0 e0 i3 w4 k* f) a以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:5 \( r' S" {5 ]
- y* B" k' k/ o/ X, f/ }$ X$ ~* z### 1. 对“路径依赖”的深度解析:它为什么会选字典?( u$ O3 y$ Y( C& I: r9 l9 |2 c
+ n+ ~/ \0 @$ ^+ d, P
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
/ j* q }$ T$ J, m$ l9 @. {: I! t4 r' [) U# z5 k3 T0 @7 c
- “Python化”的思维陷阱:
1 }& I. Z$ ~6 D& k/ e 目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。5 N) ~$ ~+ F* x. d- V* t
" V' P7 l! g; H: ?1 F - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
0 n) ^* n d) Z' o, }. m6 g
! B" h2 ?: c" z% Q T3 L' @ - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。9 G9 z0 ~ o2 A3 @+ _4 J/ N
3 K) c* m5 S& v b8 M - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。" H! C% N- u! O) x. o
7 V0 o- W& F6 k& c2 q7 C- 忽略了“Excel原生”特性: 8 b& t+ o+ {: u4 Y9 u- [- q
Excel VBA最核心的优势是Range和Array的互通性。
) E$ E! w0 R* G7 f / H0 \+ [; w# a5 m2 t6 Q
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。8 E. ~! H' V# {* J4 ]
% ]9 }0 E* n7 q% u5 ^! O - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
5 t1 ]5 X, o$ a) d" c% T O1 h: p" f 4 G/ v% j3 x! ?3 j: p: U, }+ r
* w, ~. B+ H/ `2 f
### 2. 对GLM反思点的逐条点评
* c$ f' ?3 d& b) ^: h( ^1 k7 P* h' K7 z4 S. |
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
6 ?6 a- W1 B5 ~5 P" ^1 w) u7 ^
8 p9 n8 ?, s( R$ G9 H- M. M! g- GLM说:教科书里键值对是管理实体的标准答案。! @* o- X' [% Z# J' o
/ @, T+ r! }, H) r* ~- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
5 Q* J! M, P6 y) S8 H / O) L. r1 H: R- {; Z) @6 M0 V: U
' ^* Q& A7 S! t
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
% }, s6 P7 L+ c) F9 f8 {9 I2 Z$ z6 C
0 D! p) z$ p) r) l- GLM说:追求理论完美,忽略了VBA的脆弱性。" b6 q1 K/ p: V: M* T# a+ [' e
' \' K5 a' w% W- S- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。* S0 F. d' I% q! G6 u, v/ r
9 ~* C4 i5 [. h. T( o, e! Z, v% w
) k7 f4 N! s' m2 ~( `0 d5 T' M
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)' c2 {. k: _4 | r# {1 ^
2 s! e- Q3 p3 U$ L2 F% p0 d
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
' U( _' L1 ^: w4 _! O& g: K
1 \5 W! Z& H }. A8 D- 我的点评:这是最精彩的反思。
9 W7 p1 }9 A ]5 g0 w L) Y8 p& P3 L5 a
- **计算相关系数(Correlation)的本质是向量运算**。公式是
- a. Z5 |) f" l0 }
' j$ Y0 T. ^6 J0 c `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
0 m" r9 {( X5 U- ]! q ! ~; l0 v- o+ g' M6 w; b
- 这需要的是两个对齐的序列(Array A 和 Array B)。
! P+ U/ b7 g2 ~2 X% ^ 7 p. O, b7 P- C6 p3 j
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
4 i) a; T: P# V( e1 z+ W' p) V + q R7 w+ r7 d7 o9 s
1 e1 k3 ?8 Y: U* _7 J4 b" V" u. ]
### 3. 我对它的补充:它没意识到的“工程化”问题3 K0 d. ^) J, o( i8 Q) G. S" Q
/ j% e. d4 R5 CGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:4 q2 i- f6 b0 _+ q! J/ c2 n
7 s8 c/ A1 F& l) |, r. }3 J1 t
1. 环境依赖(Dependencies):
$ t3 P/ {+ P9 ?! u. w _
* H6 \1 W. ?! T4 F - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
8 t* L8 U4 y! i- E o2 x
7 Q4 r2 A+ s6 P - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
3 m9 @+ K9 I5 i1 ?+ A3 r6 ^
( m1 X! S A$ p- q& l! k/ X R' c' W) P - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
|! h* ^' g3 `. P* E 4 F! \9 ^% s0 p! b
2. 调试难度:- f& h1 w" x! f% X" `
2 ~+ P2 ~7 O9 B% d/ F
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
! _7 I, ~4 G8 J `3 {0 E$ b. Y ; R! \0 u% H2 \3 b9 @! M3 e+ r
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
* b% i4 C4 ^$ h0 k 6 r/ N1 k" n: L* c
" R5 m! G) [8 z: V2 O
### 总结
8 y& [* o' r+ o; i( h: e# ~# B* I1 X$ N c" I" m/ l& b
GLM的反思表明它已经理解了“场景决定架构”这一真理。/ H4 s% E, Z* A# N. q9 F
% x% u& T H' e- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
+ e$ ~* `5 s3 }6 R, Y 7 i5 f. [0 L) U4 U4 ]: V9 g8 D
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。( Y) X2 m0 |3 K7 G! W; t+ P
+ G$ O; l' {! E' t5 K( G
3 ^1 k* `8 u, d+ ?6 V# p- P
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|