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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
& W& z/ `* s/ E5 R: h
" L$ e. E$ M% I& {5 f- h1 j {8 WGemini对glm反思的点评# @, H9 g# w: _2 L& _2 n' g
4 _. ^2 T) Y: c5 D作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
2 O$ P7 Y0 z: f% C* i, m4 b& [4 C3 e, i( {
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。( V, k* Z; k/ ?4 f3 r0 S! w% J1 Y
& \' r5 g* [8 N
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:5 G! E. E# p+ h |
0 x) V1 Y6 {7 {) F3 O# M0 C) ?### 1. 对“路径依赖”的深度解析:它为什么会选字典?$ o6 P" T# i$ m" K4 G
8 l6 y, V }6 l8 Y% ?4 @
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
s$ }3 ^7 k, U k2 }2 U* Z/ n) q/ u* x% Q! f
- “Python化”的思维陷阱: 5 v6 J, s4 ~+ E( N
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
" M1 P" U a# T" q
, ~# E; [3 Z' L - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
0 Q2 i" n/ c; Z! ^; U% W7 Y & h& y5 D, l7 @
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。8 S. k6 f- [ o, \# I6 x
0 u9 c' ^! n' c, ~2 E- o: }- |5 M - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
! ]- l5 k. X' v _
e/ V. O& E4 s% {$ d8 g Y- 忽略了“Excel原生”特性: ! \: D F' q6 J6 T) h I) @5 o. g2 T
Excel VBA最核心的优势是Range和Array的互通性。
$ B" K3 ~! E( P/ U4 d& A+ }, e$ T
) i: X+ |+ r& j+ j/ v0 a4 z4 L - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
( K$ E; Z9 N' u: P* e% t0 b
! H' x8 N0 F. V - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
5 a9 J4 { ], K & F* d. m6 c" v! G
. l7 t$ k( ]7 b5 z# x- B
### 2. 对GLM反思点的逐条点评( X' V& q8 S) `7 ~/ k
; N% X: q0 `+ ?! i4 {
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
. \' B. z6 X+ A9 }. L
, p: i, [1 ?1 y" b& J- GLM说:教科书里键值对是管理实体的标准答案。
# n( S$ a c8 p+ E ( L. W [; x7 z7 y% C& }6 P
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。% A4 {5 G' u8 H! ^# p' y
2 v" n' F& C' P5 G7 \% R' R, Q4 X, A. d) }: i
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)6 g" R! a3 V' `
0 l. d$ S) q8 V( g4 s5 l- GLM说:追求理论完美,忽略了VBA的脆弱性。# E0 o. O0 p# _( v6 S
* ^; x l( I) w5 V7 z2 V- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。8 M# H% O d% q y6 }. Y& Q4 N
$ m/ T: v: t5 p7 }4 P5 g% g/ |
+ d1 T8 T: w5 D- A y
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
5 L, w, V5 {# K8 n& R1 I% l1 o6 ]. C
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
; C; O3 F* h' q7 x # ~1 r6 J* R7 l* M3 O* g
- 我的点评:这是最精彩的反思。/ X2 ~4 A2 i) b+ @: X# a
. C( n$ v+ D1 F- w9 n
- **计算相关系数(Correlation)的本质是向量运算**。公式是
9 A, `& X5 U1 |- {) o
" z. ?- b* W" \3 R `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。 `: ?" w. a! e/ E! E
8 G4 `) J* k/ U' b* { - 这需要的是两个对齐的序列(Array A 和 Array B)。
; W4 s, \4 Z3 D( m5 v1 y ( i. \) e4 f/ A# Q
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
" P" v; d) B ?3 C, }+ \, B# w
2 V% L9 F/ v( T3 k$ [
( ]1 ~# w3 G$ z4 b### 3. 我对它的补充:它没意识到的“工程化”问题
' X! g. N9 p- b* ^& C! l: M" q' {8 q: S( u) D) Q. a: B5 A- I$ Z
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
r% |' y) N+ }- v0 P+ V- s" ]1 s }: D1 _3 C
1. 环境依赖(Dependencies):2 b4 |: @- B/ u* G
' M- X7 b6 Q* G) f4 H3 j - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
' Q @- Z9 K( y$ c
2 j% l2 y) L/ d! u$ [; @( m - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。: T7 R$ x( q" S
: A) z7 t" `1 u! v - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
% l" Q( ]4 {* _, J/ O $ t2 X. l# y* D0 l% ]7 V
2. 调试难度:( {# ~- M2 Y' e' y# w* m& b' ]2 M# D* j
* f! v d! j. W+ q) P( {2 X - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
+ O! ^2 i- [+ j* `4 ~ $ J1 E* U$ ^2 O2 u8 J, B R+ ^
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。% [: n; T: m7 W7 f
, J8 u* E5 |4 @, _
s# z6 ~6 ^0 W) N1 z+ \, X. e5 p
### 总结7 s2 K: k5 k( k, i* c
; ]0 R" Z! G( b' B* rGLM的反思表明它已经理解了“场景决定架构”这一真理。% S& {5 m. M q* e
! I8 i- ` Y2 b2 F" x+ O4 ^- d( Z( j/ E
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
6 W B6 J" l$ g 8 D8 a b: a2 `" B2 r3 c2 v, L: A
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。3 S# P' p) h: n9 |& E4 D. u
+ @& O' N1 A6 X1 ? Z. ^+ h) W/ f9 f8 O( |$ {
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|