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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
, l; s7 L7 |, C7 u7 L$ G e- h- m _2 v! o% Z" i2 W& g/ T
Gemini对glm反思的点评/ m( H4 l5 Y Y, F3 M" s
7 B+ g; g& G( a* b! L# g作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。2 M/ r' o9 d% p
( L0 J0 Q$ ~: k1 t# H4 N
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。' p9 S; A2 _& _, y& S) B* g
8 m/ A6 h/ v; u( d! H) \
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:$ V9 v- j" K) x( y& D) Y' ^" {
' \3 x- a. Y( ]5 A
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
5 [" g, g R$ v5 k7 o% t% O2 A
4 F l- U& Q4 A2 E& JGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。: i4 [; Q1 R) [: d0 j1 Z( q o
: b* O9 z* A$ g; I% l- “Python化”的思维陷阱: ( `2 V2 R: c' c, y Z4 x
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。% n* W+ E- D, y+ o, I1 u
) u. [" V5 J. Z+ W* P0 E8 n
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。7 V- C$ R' h( ~, R6 ]2 A
Y! |, C% j6 I L, g K/ Y8 G - GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。- @- j3 f! |% ^1 h, o8 u8 f; L
; Y& x4 r- R: C8 s
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。4 X" }* r* Q: R& ^. p; o! G
& [- U" w' o9 T0 |( I$ s
- 忽略了“Excel原生”特性: 3 R7 R) d7 h, Q
Excel VBA最核心的优势是Range和Array的互通性。: B) E6 G" B. {7 r1 J- O1 G
4 _5 Z; u! z# {5 S! N+ | - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。2 w" h; T6 A: }$ `9 |+ q' u$ `
5 Z* o' a( \; W# W9 T+ f
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。" x& i) X, g! c) P
- H8 a: S/ h8 c/ j; L
( C! [8 i8 ~6 I3 L### 2. 对GLM反思点的逐条点评6 S# ?* W# J/ K, H8 U- }0 p
( T9 N. i# H2 G" h' j9 X
#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)7 h9 W8 r! n/ i
* V* I' b1 j4 C1 _' @- GLM说:教科书里键值对是管理实体的标准答案。
3 }# |$ Y. w3 }: T * L9 D7 ~1 u* D$ |
- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。& v, e1 x( x, Y" x& ]
% I/ g" ?: J: h& u
7 W0 Z. g4 l) X# s* i! {
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)+ U+ G' W8 r! i( d: H0 g
" y q- C3 K7 D1 q; K6 U5 f+ W- GLM说:追求理论完美,忽略了VBA的脆弱性。6 t4 Y2 D2 l0 n1 O! k5 q/ X
4 P5 f$ [$ b( t/ `, z- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。& _8 ^% X; Y- {2 q; Y* \
5 \! \; H& j% f/ F3 V# t- `' W. d
4 Q% S" u& L4 G8 {- r8 \0 ^8 l#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在)5 z- V: y8 I# D+ x
0 T/ f0 m# M; y" e5 ~- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
. h3 e% }* O3 V+ ^4 c9 ~3 F ( L* d& z2 f) A
- 我的点评:这是最精彩的反思。. Z# _9 U5 O; T2 K! t+ s0 K, m
0 ~1 X( T7 A3 J, K- I: L% A
- **计算相关系数(Correlation)的本质是向量运算**。公式是7 k9 p% K D/ ]4 @
" ]1 [& k- g2 ?- L/ ?3 M+ \3 @8 w `∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。0 s. e, g' S' O/ F$ G. n" Z
6 _, Q3 j. m9 H+ [4 T
- 这需要的是两个对齐的序列(Array A 和 Array B)。1 K, ]' m8 P. b' q" O3 ~* z& a
0 v5 `7 L4 \7 V6 y+ J
- 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。& X4 n! B; m- F4 M2 U0 {, c+ ^
* l; A i9 J R3 m2 @& H* ^% x
! k6 i; m% A( K8 g### 3. 我对它的补充:它没意识到的“工程化”问题
q% C( y/ ^! C! G% ~: l4 U% W; g& I9 V3 _: x: }: T3 U7 T9 ]
GLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:7 ^# n, t6 {. p
6 b" y3 j* d( K5 t9 @$ h2 K/ R1. 环境依赖(Dependencies):
) w5 V: O! E+ e9 ^
6 d# j/ ~" e( Q% B" S9 j, v - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
$ r! E* b( ` T+ W7 x
7 H0 o7 C% z ], L, P0 _* V4 t - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
7 A8 q! J. H; C; ]7 Q5 G0 N1 Y; l# H1 G ; X. M& n1 J0 p- u l8 F6 n
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。
2 c# ]/ S8 x, o. O/ H: i* P. m. [# l
$ Z) v3 L) [! b2. 调试难度:
" }# h: _: P N' m9 u; k
5 i4 L" v, M+ E8 B5 o" f* ?3 F+ } |1 E - 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
' a4 y) H! H$ f6 y
. ^5 A/ e/ ?8 S- A: ^3 l - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
* z! b7 F! n2 R }. S V & I5 v6 q# W' }2 N) F. `8 j2 W
; @' K$ O1 P* D
### 总结
. P- p& J& I4 o) \- ~: F% ~) \. H$ c2 |. c: X- `4 g6 e* {' @& }
GLM的反思表明它已经理解了“场景决定架构”这一真理。) j0 q8 X; V* t
8 k3 }# x- F5 C& c% R
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
! F' C, C+ [& \ 9 l" w( q- U H% y
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。' D; E+ _7 Q5 U( t
6 d" E/ k) v8 B) B# h3 W8 w Q" U$ i; P) r; R+ {
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|