TA的每日心情 | 怒 2025-8-7 11:56 |
|---|
签到天数: 1132 天 [LV.10]大乘
|
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 3 N& T+ b! o1 o+ P6 }7 N- c2 ?
3 g: L7 c0 K! T! IGemini对glm反思的点评
; G& c( |+ C+ g. G) K7 c
* C& X h( Y' q作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
0 d6 X3 O9 V& _
" u, G( k2 h+ e/ K. C它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
( v* r, |* N& s V8 ?' |2 i" h6 h+ A
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
* ]) j8 G# B3 A/ g4 x8 b9 Z9 W9 |& C
### 1. 对“路径依赖”的深度解析:它为什么会选字典?5 V1 b w+ e4 a$ e4 t( ?- Y& z
1 d: l5 F6 y7 P% K4 v w7 Q0 u: NGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。% n# g; t4 [. o+ d
\4 `# z9 _/ q6 t7 {- “Python化”的思维陷阱: 4 r2 F2 @; a2 \1 Y$ q ?
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。8 I1 i* L6 \9 {6 n8 C) D) `
9 Y4 {: H/ p$ j5 R - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。3 W& Y! R o8 }2 W0 A+ O2 x$ d
3 ?/ T5 i4 Q: O$ ]
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。: G1 E1 q: Z, |8 z, k. o6 j" [2 B
" ~0 n, O& y6 p, u& f5 `
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
" \% J1 ~5 B' k$ w# T+ i8 q; Y: T
4 x0 Y) I: ~0 L. H- 忽略了“Excel原生”特性: * Q, p1 V. W$ m, S" l. B# q
Excel VBA最核心的优势是Range和Array的互通性。: Y. }1 f {5 D" J }% N# Q7 A: P
# T& n0 x# t& S7 k! }, y0 U5 i - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。- z, x* B5 E+ l
. \$ d! S6 o: u
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
; v/ r& a& S1 s3 b, k+ t
$ Q6 o4 y* F( {6 p. s9 }; q% @# Z/ Q6 i; `/ B
### 2. 对GLM反思点的逐条点评
j3 u% J& e7 s+ w) o2 [" e2 {& ~! s# ^+ v8 Z2 V1 D0 b& X O
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)
: x1 q# e8 Y8 W7 Q b& d* [# q0 x2 V& |/ c! l
- GLM说:教科书里键值对是管理实体的标准答案。
( E, j. Y0 z) s3 ^4 o$ V 2 q8 X) G& C5 X+ K H
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
' `; S4 F; h' D, l1 M ; L* c" u( w8 @+ r+ x
" Q3 V# T) X% d; n
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)9 B, }8 l/ {2 O H4 L4 B5 x
0 ~( \+ A; c' @3 O9 I1 M- GLM说:追求理论完美,忽略了VBA的脆弱性。
. v- |7 [: l8 U( k. K5 t u / |2 @4 J- l! E# p" m7 j
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。$ S3 r% S& k8 L4 ^/ ? [
$ a& S) a% r0 j6 O
1 V6 x5 J' ]' R: }; c
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
/ |9 e, p' j8 f2 L2 ]2 R$ A1 K: r- D- z& w3 C/ I
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
( [+ o& E, r7 k3 V0 B 1 v$ {9 v. o- q, e+ z' l" }
- 我的点评:这是最精彩的反思。
* K! N0 ?" v% B( _ 2 U2 I; j, G! d+ C
- **计算相关系数(Correlation)的本质是向量运算**。公式是
O1 f) M5 i o) o9 m9 w3 c3 ^; X! s 1 U4 u& U1 ]# }/ M& P9 ]
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。! s0 v% v+ ~7 p: {2 E
; X7 b7 h+ o, M0 G0 g p - 这需要的是两个对齐的序列(Array A 和 Array B)。, t8 ^5 l7 G7 l! `! o! o9 x
* z2 j6 f' q; _8 E& u( I: l - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
0 W0 R' C8 P z, J7 |7 Q 3 R0 d. O6 G7 H/ j: T
5 m9 J; l3 M) J# p& M### 3. 我对它的补充:它没意识到的“工程化”问题+ U |# p# X0 y r' b* Q
( X2 ?/ O1 g8 y5 y+ A6 L- U( c. U
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
4 e R& P: u# R4 v4 [1 @2 |2 N6 D
. @1 s3 I% H- w7 Y, G- f1. 环境依赖(Dependencies):
: q9 ^+ F( C5 }( W 1 f' I, Z* ]! Z& s
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
; R" {1 v B: f6 {% r ! F0 T+ z, W' x1 H% p
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。5 \7 a: L% z( t
. y6 N. x3 F- Z - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
0 |4 g' ^3 o) `
9 H9 B8 i/ `9 T0 l2. 调试难度:
3 e `" g" c l) ~5 c8 O* o
; T9 {( g2 O1 k# G* ^. F' ~! o - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
+ w# _' w' l. ?4 x$ m / C7 b& f6 p+ p# `7 ~
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
# f9 m2 B% y- D6 V( J 0 D# ~* a G* [! L3 ~ v& x
, e- y5 u- G' X
### 总结
% M! \, M) q* b# f
$ A9 N5 |! P' V* b6 R- j) ZGLM的反思表明它已经理解了“场景决定架构”这一真理。% J1 |* D0 C3 {% Y1 {6 t
" M9 N# l4 y5 u" m) L( G7 e) f- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。 h6 S" D# F& P- P) L* O
/ k8 J2 r0 j% ^- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。 E6 q/ E, O; I: G/ N7 x
$ g4 X1 |+ F' [3 v2 H& E; }
6 A/ H4 T3 C9 E+ V# Y( Z
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|