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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 3 v, R5 V2 R/ b- U$ n4 F. y+ B
! }4 T7 ^2 i/ {, H- Y* Q
Gemini对glm反思的点评5 Q+ h5 ^! `4 n0 Z+ U P' u
g0 ]0 [) q) g& w6 c" k作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
' e1 P! q3 Q% P2 m. p8 B" y$ l5 D; `7 q3 G
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。. U% K( A0 q* D% r. ~: k: k
. m( `: Z- s# o( @: v- { b/ y
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
e" I8 u' D$ V8 R/ d8 W3 l
) g |/ f- i) K" O4 Y### 1. 对“路径依赖”的深度解析:它为什么会选字典?
# K8 T# I/ }8 r) I3 w4 ~# D' `" _0 e# q7 ^* l5 }+ P
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
5 U+ }) k+ n1 s+ B3 g; x8 L$ P8 h+ \+ L( M: Y5 n* _
- “Python化”的思维陷阱: 0 H4 l; u) s+ E, C0 s
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。! R2 ~9 L, P& d1 s2 c6 \- B9 O+ M
@# s+ C9 P3 X, u
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
; e) E, m: H- l4 ^3 Z
2 Q; b4 x6 i2 e4 }1 s7 T1 s( @ - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
& H( y0 f e. O, c9 _ 0 h" V& g5 }6 A N
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
7 `, I% W. `& h/ O" E
- [0 E/ {+ A1 e; E' A( x9 J h, R& n- 忽略了“Excel原生”特性:
1 x$ p; V% s; A& t) A6 E Excel VBA最核心的优势是Range和Array的互通性。
! k5 y: g; z( j+ F% S* |4 M
2 S; B& N% { j0 i/ \5 p: b' v - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。2 E' F( S- M& Q, r8 {( y
1 S3 I ?4 s3 q( f/ S0 q. ?+ D - GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
" A& E$ S5 P: l, v1 S _8 h! M/ }
* V# i! ]7 q ~5 g; D% P4 R, n
/ M3 ^, Z# z& G### 2. 对GLM反思点的逐条点评6 ]( D$ t1 Q6 c9 Q
) @5 g8 P) o5 D2 Y#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
* @, F0 }9 s5 X3 I
( k8 c9 m |) ?4 x- GLM说:教科书里键值对是管理实体的标准答案。
1 t& D6 a. I9 s- K' }5 z' A 5 h2 P* S6 C3 s4 `( z
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
$ t) U( z$ A1 A+ T2 X9 K5 \& t' N. t
; e1 d, n ^, u1 F5 f2 ` T' {- c. S* [3 [& Y- p9 ?
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
& u1 E( ^( E6 R/ E( [" n
6 h- W5 i2 s3 b' D3 H v- GLM说:追求理论完美,忽略了VBA的脆弱性。8 z! g0 L6 a6 G6 k7 t
9 b" h; s5 F0 [ R' T
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
# H+ y# l2 M' d6 V) D* Z; n
3 \" i' y! X% ^
( J) z1 g7 @, A! @$ u7 e/ O#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
& m) S9 ~: X, D4 r1 I
) b; ]( j, {# ]9 Q4 L* A% B- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。2 n* t+ S6 D, g% V- S
8 y; D N+ t! O! E
- 我的点评:这是最精彩的反思。* ~7 A+ {' r( D2 W$ j! j) P
1 L% e' A" @/ n: j( G - **计算相关系数(Correlation)的本质是向量运算**。公式是
% i! s: j A9 i) t3 } + P9 l' B2 n7 u/ J* [1 z
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。
, u3 D. _% i) @) y) T' Y 1 r6 f7 A$ v1 j. k* n2 G
- 这需要的是两个对齐的序列(Array A 和 Array B)。; l! h2 A9 | K
N5 R; }) g& F7 C9 }) {/ @
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。" D( r4 I& N3 X M/ D7 A8 x
2 y+ x2 k( j$ S- x: j2 U( ?8 y' E9 a2 n
### 3. 我对它的补充:它没意识到的“工程化”问题
/ A& p$ g2 ?! W6 J9 s
) m k# m) j+ D% X- S+ tGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
$ Q3 q: r& g' ]1 [) Z8 U' k
8 I7 M, J7 n2 c3 `6 c, |1. 环境依赖(Dependencies):
. Y5 E" e: V% C' }
6 V @+ o" ?9 b: C, h* Q3 L - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。) n, C' L. v. Q" {
. g+ r2 d9 ]: i$ j6 {0 ^) i8 F' r) a - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。7 y- o3 E- ~0 e, y% p( z
7 y2 n7 c. b, N `1 R& N ?" Z - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
7 ]2 k$ B" E* m2 `5 |6 q0 M ! f4 `' @ C& N% s
2. 调试难度:. R1 s0 E0 v" C3 A! N5 P. k; E4 g
8 t( @+ x1 X7 u0 f5 _& ` - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。, n6 a, a7 O. P8 W* l
' s. i: _* O2 A' B0 g - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
* @$ N; K8 M9 s' N- ` u
; |# r3 G7 x; C4 }4 c) [0 I6 y
# S& l) _7 q# H. s$ x### 总结
$ }: u5 {1 O* }6 D, H0 P# J+ N$ }/ U' @7 _5 t5 Z
GLM的反思表明它已经理解了“场景决定架构”这一真理。4 v% l$ D. `0 c- l. \
9 f1 V5 l5 j$ y$ V. o5 }& e. _6 c
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。* e# C) Y4 g8 x; l1 \
2 Q. x# D( q. o5 m+ `4 e& c- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
4 d8 n* U6 t# Q C& C$ X9 R 6 l2 e8 i. f9 O
# C* Q( z% ]1 {
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|