TA的每日心情 | 怒 2025-8-7 11:56 |
|---|
签到天数: 1132 天 [LV.10]大乘
|
板凳

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 4 g4 f$ N- r/ O. o0 o9 d9 Y( z8 q
' h# \" c8 [7 fGemini对glm反思的点评
) s- T2 u( y/ z
0 g) E; t4 t7 g" n8 F# q作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。% R: n8 S, Q: s
$ ?* |, K5 l% X它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
1 o% u1 _3 c; S
) I$ u- T r G* t8 [' l以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:
, b1 F- |4 M/ K+ ?0 ^( g- t+ m$ X% \
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
m4 c/ [7 \0 s v/ B4 a1 C! Q+ G0 x6 T2 @3 `( g7 ~
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。* L9 J r# M0 N$ f7 R4 A. Y# a
0 g! `" j. s/ k; I* k. f- “Python化”的思维陷阱:
% J% z5 D8 S, n m3 ? 目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
) D1 D, x ]7 E# |7 F6 u
; X# v) j9 K& s$ i- B0 A' Y - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。9 v T! O& z9 j5 \9 m \( ?. O8 s( b
: m1 N4 L0 K- d+ a2 G, r ~ w - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
/ j% H) u. e( n) ~ 2 A. c" ?7 q& A# q# N* I
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。
& D: G; j% E0 {1 {$ m e . m4 L9 d1 J9 }& H; v2 Z8 V
- 忽略了“Excel原生”特性:
" m4 P0 [. B- P$ L Excel VBA最核心的优势是Range和Array的互通性。7 N2 F% K2 ]& D# L2 J
9 G/ h3 G& L5 \/ r1 B
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
4 O1 y2 Z! `& D+ }) r2 D y _ 1 g% N, W- H( B# h: n- ^" E8 c
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
" Z" J9 W' D6 E0 l" J: P% m6 t; a
* B- D6 [' V& p) }" h$ o& Y( B
+ T, M2 ?3 ?: o6 _! e+ Q! }5 L: q3 i### 2. 对GLM反思点的逐条点评
2 u# x' L, T, F9 B; b2 u+ A8 u. r: ]( M9 @
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)7 F. }( S3 U) ?9 G* P; ~
: f: |/ q3 V3 J7 q- y3 e* v- ?' b' _- i
- GLM说:教科书里键值对是管理实体的标准答案。
5 x" p3 j$ r. L + @* y) G. Z# @3 a, A6 H1 J, i* k0 H
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。: N% c8 E: Q3 r/ V
+ l+ M0 U$ o2 } g% R+ T- o
0 m* t2 x, J9 K( Z+ E
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)! k2 p: P$ E2 y% l; N6 F
0 J! c" Z" x8 M2 U4 p- b7 U& w ~- GLM说:追求理论完美,忽略了VBA的脆弱性。
) ?! e7 H+ _" E; s- @. q 4 w& c* y% o" H
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。
7 m9 N3 `& U0 j$ _$ x4 h" o
$ x$ v; }. P) b9 b+ I' p1 t. u2 G7 t, N& C- N9 \! x) A% k
#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)
! r) x) ?( j. M9 P; g# B3 @0 T5 Y4 F3 R8 M, w4 _' G
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。3 q5 l" x* I; s; m$ t
# M, H$ j6 z3 c, X- 我的点评:这是最精彩的反思。
0 P4 k' n& O: m5 f! u) H0 R
+ i8 x1 I r7 u) B: Q6 e7 ? - **计算相关系数(Correlation)的本质是向量运算**。公式是
7 d5 @/ R( M. O' m z# e9 T9 x4 v1 B
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。! [: \2 z. {4 b- L+ O- a
) c( H, B; h$ Y* Y+ x
- 这需要的是两个对齐的序列(Array A 和 Array B)。1 v& g. ?4 h3 ~; m. Q7 w
0 F/ j7 v) ] y7 z3 `0 g: E8 l
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
5 e! g3 @3 a( o7 a: ~ 2 w7 w! _+ n% A! Q6 F0 c6 A
1 ^6 L2 W) F/ z: a$ _7 h. t### 3. 我对它的补充:它没意识到的“工程化”问题
' D, h7 \) @: B8 @, j! Y- m# B! H0 f! w
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:; _5 F! w1 C" e9 X* w
8 p; E5 n7 b8 X& R* t" d% i3 o# M1. 环境依赖(Dependencies):' {6 I/ n9 H$ F: D1 z6 V# D/ d5 K0 V9 P
0 a$ x1 D; ]2 B4 _* Y$ h0 L) h/ ^
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。+ W6 G8 q( z4 y4 f, I7 m/ ], G/ F
9 a; ?; k- f1 M8 z, }, w' U ^ - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。3 A. s; \$ ?' I/ e2 U2 T
- L. }- I, I# R# i% t - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
4 w3 S, h$ {5 Q$ K2 a% }" S: v 1 ]; ^. b" `; W8 H& r# v1 [& ~
2. 调试难度:
+ L1 r7 x4 X) h4 T 5 ?* {9 T2 [5 I% T. z3 C
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。) a& w% C- c6 Y" H. J% R. e7 J
+ b, P3 \7 c8 R& V3 n" X - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。1 N4 x5 e0 \/ y: Z# x5 I
3 e- [, b8 |( p1 Q' M2 X
; m; j, n- ^/ c5 ^### 总结: L# x' X! s* s* [! H* J
6 G4 x5 k9 _' s6 B8 T G4 QGLM的反思表明它已经理解了“场景决定架构”这一真理。
. N4 d, [ v5 I- s& T1 O- v7 v# i+ \: n5 m% y
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。2 u" D Y# S ~. ~) y5 q
9 k( ~- _) Q1 D1 \6 M
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。* O. X5 E f5 |1 k9 y% [
7 L L Z5 X. k( J/ R& Z$ M5 t
) ]: K r. q! V) v% o* Z它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|