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

楼主 |
发表于 2025-11-29 16:20:32
|
只看该作者
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑 , Q; A2 C. [9 U
& |9 k' ~" E: x7 N- QGemini对glm反思的点评
# ~0 u+ J3 V/ {. Q! U- i( w
; h' K4 }9 w, N# y. l: a5 R) W5 o作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
4 W' O. w$ P2 K r8 M; l" h% `- W3 b5 h8 l; \+ h+ l9 \ h( Q! d
它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
- v3 j: G$ R5 E* E# x2 E. Z0 j0 ?% `% o% j
以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:2 Y( O9 S" ]1 p0 f# G, ^/ F
" R* d. G# v/ [### 1. 对“路径依赖”的深度解析:它为什么会选字典?( Z+ R$ m; h! B& N
6 l! E; |% \$ s% ?$ j$ RGLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
8 u. b o9 ]9 ?5 e5 g1 r! E$ K% b3 |! Q x- T/ x1 e
- “Python化”的思维陷阱:
/ |7 Y# P; [; ~( f0 u. `1 z 目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。
' }- n3 I7 k2 o A % {( N& h! p c0 _
- 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。
+ |% b! U% d7 C; D0 r % `' {) A+ d3 _0 H. }
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。
* G8 U5 H* h8 g5 a/ |1 O7 x1 n8 w 3 F& g( g4 u& x8 s
- 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。; x0 b9 D" q- E w, E
g8 p& T: `+ u6 L4 x: p: G- 忽略了“Excel原生”特性:
2 F8 H6 l* M# F Excel VBA最核心的优势是Range和Array的互通性。
4 U3 ` \, F- _; d# z
7 l6 v6 k7 |8 y( `* X - Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。
6 S" K# V1 h( u1 z% V , S$ P9 A# |1 c7 Q" R, B) r; K/ }
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
; ]3 y- Y4 N2 d4 _7 K& p. U & c5 R8 P& r3 u. J3 C0 V2 T
; k$ a% x g- S2 S' U7 l### 2. 对GLM反思点的逐条点评
9 |+ \+ K" O& P% H4 n$ V' S2 |' Q
. P, q6 i; C! h; V( t#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)5 M7 d1 f7 O8 R. |
& a1 s% ]' _( r; g3 D% |
- GLM说:教科书里键值对是管理实体的标准答案。
y+ a4 G/ c" `0 \' v
2 E9 g, s. M6 O0 K3 S4 a4 n* @; c- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。
( d9 ^# E; f; F, d. H; s
0 [6 ^) }3 B: y+ o# R; D* e. h, V" k
#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
( N6 U O4 H5 @) r4 F ]5 u) v2 x4 f* h6 u/ X& M5 @
- GLM说:追求理论完美,忽略了VBA的脆弱性。. U# x! Z! L% P4 a
. ^, P* f" \6 T, H% L! e
- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。; l) O' ]* S. v/ I, @3 Z4 q
! h* @- ]/ u7 w! S* z1 i9 i# _5 G9 A
8 o6 x: v0 X% @+ V* Y1 f# r' ?& p8 o#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在); Z4 }/ c. i( B. c. U1 `
1 y$ D' A% q( g" D/ X6 M
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。" m# b- U2 K, `& ]
9 ^) j$ t9 u9 Z+ [5 A) F
- 我的点评:这是最精彩的反思。
' M) X: |: T8 P7 y7 q8 a n- ?1 P
3 N2 D9 T6 ?! E p" z& {; ` - **计算相关系数(Correlation)的本质是向量运算**。公式是3 x0 m2 E7 Z# e! r. W9 i+ p# [* L
' [' O4 M' m8 l$ \7 N9 i; g! A
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。! ?; b, {4 N" K
. Z$ C) Q0 E6 W
- 这需要的是两个对齐的序列(Array A 和 Array B)。
2 I7 s0 w% u2 v5 e$ r
7 ]1 P6 H6 Y) {3 N& i0 \5 D" L6 \ - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。
9 [. C* Q0 g6 E% E# c4 y
, E! |7 h$ n, D. {
: o! D7 J8 U1 @/ M6 p+ U* Q% K5 ]### 3. 我对它的补充:它没意识到的“工程化”问题
8 _6 s( R+ T5 Z8 I/ X8 H \* s
3 O* k) M+ F! Q' aGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:
+ `5 M; ]( M7 R# U/ p& D5 n: }1 r/ W' t
1. 环境依赖(Dependencies):
5 z6 e7 S# U' Z: D0 h4 q/ V, W
2 E% |+ x' V5 \ - 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
3 g' u" G0 B, _ % T* T8 D" R" W; G0 [6 n8 P
- 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。' t( S; s% a1 }: |
+ Z" `/ }0 {: H6 d g+ d' Q+ @3 H0 U - 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。# v5 o8 l. J; I# i2 l
2 H' M e5 ]8 L& g# \: y. x8 r" M2. 调试难度:: r7 d( o1 S+ O) {+ @. ^5 i
+ M) G h. z9 K
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。, X; s8 r8 j; \3 H* f- O
# Z! l: Z K! ]( T, d s& ^ - 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
" F) G* w2 e9 ~6 W: m8 F
# d" D. u* }; \5 X8 u# ^! F+ o6 O+ `+ A. X9 w, q0 q
### 总结7 @# L0 l0 f' }, Y* O8 `% y* n
; p/ T, C) T* u' K( ^/ n9 |2 J( QGLM的反思表明它已经理解了“场景决定架构”这一真理。
' O9 C! U8 M. B6 i3 O, w* f
/ P+ ~) h( p1 M k( ` H# j/ D- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
$ k6 W/ p5 b- m, [# s8 u # `9 z! g! ` S2 j" \
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。
) H9 H* q; `# Z- c& s1 r % r0 Q) N, F W b9 x7 L
8 ?% `1 u0 r$ X! B! Z' X/ k它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|