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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
5 Y' i. `4 V( _: z( T, b( P* @
& Y7 Q, H- c: f8 X$ a8 n+ oGemini对glm反思的点评8 i. i) T5 y- ]" ?3 d# `
# p+ K, Q0 h; _' _( b作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。3 V; S( p2 @ z" F
/ U" j5 k6 }1 u' i7 u它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。 u+ e- ]; a7 B0 V, L, v7 Z& `
( [) p# ^, m$ P6 r
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:+ O+ F; F# f% h3 i9 p
7 i9 r7 a9 ], h### 1. 对“路径依赖”的深度解析:它为什么会选字典?- @' \7 R! k) A0 i+ t$ i
2 u6 U+ o) p% X. o1 }
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。, _& c5 I$ m$ q, C% @! H) R
: u' N; Y2 ?) H$ }' @2 \
- “Python化”的思维陷阱:
* q+ `# t6 `( U- D. f% y 目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。0 v. t+ H: k( K9 `
# v' s! Y; X% H B - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
. K7 L) q) H% {2 |5 ~5 [# L0 X ( Y. z' K9 s. O3 t- `, j R* j5 @/ A
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。( P2 f8 C8 s2 d m' \% s W
) w* A; k5 X$ U) _/ |+ W3 p - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
2 c$ ~1 [- X5 o( n. _* F( i: i + ?8 B; N( `) G [6 t
- 忽略了“Excel原生”特性:
. O; x# q5 ]0 P0 | Excel VBA最核心的优势是Range和Array的互通性。; f0 B9 h4 W9 A
4 _9 p5 D4 ^) | M
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。: N; B; r# @7 G( @: r6 U9 S7 y5 E4 S
$ F/ j1 A( d, a - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
2 M# ?" }, `8 h6 z
1 P7 T8 p( K8 c6 K) i$ q' r- Q$ _: e% @+ ?$ r/ {4 Y' }9 H m3 l
### 2. 对GLM反思点的逐条点评$ Z. S/ _# t: }- F6 n: k. x
2 I+ `2 ~' f9 a+ k# z#### 关于点1:“标准答案偏好” (评价:准确但不够犀利). _& x+ b/ q8 ?
; F0 j c: g; r: B5 a+ S; D9 f- GLM说:教科书里键值对是管理实体的标准答案。
9 V# r# ]- m/ u% E' U- a / f7 l, G+ Y$ c( F. ~
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
5 X+ {% A6 F- Z: _# }% Y& I/ G8 g
2 g1 e/ |/ w ^: ]( J- e1 `
9 Q( z9 a2 t, w#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
: `6 O( _" b" N3 Q R7 {3 o N( }% a' W' h ~1 U5 t* ?! A9 O
- GLM说:追求理论完美,忽略了VBA的脆弱性。
& |9 U# E1 s, j6 X6 X
* Z) `2 I# F: }- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。$ d4 {! U. N8 a+ f
# O' ?" g$ W* y" \0 [, \& ?
) i1 K" T7 E, G. v, I/ j#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
5 U( f: e B, ~
$ k' U8 S7 N0 L4 C, Y( |6 b- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
, i/ c; `3 G5 X9 H, z5 v
$ F8 p8 T5 S4 `5 @$ }3 P2 c4 l- 我的点评:这是最精彩的反思。
0 u; A( u9 A* ^; b$ J' a
8 k' c. P& X/ l. D8 Q& v4 G - **计算相关系数(Correlation)的本质是向量运算**。公式是6 s" \ h; f: e) ^+ P# F
# A+ P+ ?& K% g6 a `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
( ]/ K% K2 z' g# E% x- a L- R
j7 t( x& a6 y) L% i! |) Y - 这需要的是两个对齐的序列(Array A 和 Array B)。
4 B- Z% f# n" y" S# D u2 W3 ]
7 p- Z9 \9 F5 P5 o' M7 S7 c - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。0 Z" U5 f; H8 P: K/ V7 X8 M
! r% Y4 z% O8 R' n+ b& [! v/ D% Y% ?% f
### 3. 我对它的补充:它没意识到的“工程化”问题$ t: B. Y F4 W' w1 I
7 G e$ Y) h- _* l& }GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:: k4 x; c# {) n( v7 ~! B% O
' t0 r/ E) H D* @, M7 P1. 环境依赖(Dependencies):9 e v5 b7 A8 z0 Z, S; }" f
9 L! L# z2 t/ w& i - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。* [$ b) t$ {3 z; O! c
. R" Z3 z) G* V+ `: z, o4 Y5 a
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。- [2 R9 o7 \* z. N
8 o) j# q( c, |% E' t5 V+ K. f2 F
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
; C5 @& ~! |9 R/ d0 m$ J/ Z% M
, g9 _1 {( R% h" |9 n2. 调试难度:" _8 g" U7 k. \2 Q! ~$ @& |, L. {
3 g/ U$ o! L! c3 ?
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
" L* {" V4 p* V: \, W& A+ R
) e% O0 s% _ ~ - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。5 S" t6 M9 M5 M; t: |5 o, Y
9 W6 l- r0 t9 ^. ^
" K- [+ b# g7 d1 j# {, [### 总结
2 @& V3 E$ V& O2 m+ ?
8 s0 v+ a1 S) _- z$ ?; X2 RGLM的反思表明它已经理解了“场景决定架构”这一真理。+ m& o/ y$ Q2 s; B
6 H- e6 Z; k0 k% O$ x5 ]- {- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
5 \" d0 {; t; N7 H# w: B
- S& L9 V6 {: |& y0 C+ \) @- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。* F" x& A! O7 |& u
: t& Z1 [- k; ^, W i4 M0 G; N, s
) t w0 Q8 l3 M
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|