TA的每日心情 | 怒 2025-8-7 11:56 |
|---|
签到天数: 1132 天 [LV.10]大乘
|
本帖最后由 大黑蚊子 于 2025-11-29 16:33 编辑
* f# |$ N" x, N$ E" P1 \ ~+ e
/ e) B/ e L+ x/ \; k0 f1 ?( W- _2 zGemini对glm反思的点评" x! R) F# y! H# x1 E4 }2 K( m" ]3 C
5 w {5 N# t# }
作为一个资深程序员,在审视了GLM(该AI模型)的反思后,我认为它的自我剖析非常深刻,逻辑基本通顺,打分的话可以给到 85/100 分。
- `8 G$ t+ U% T9 D8 P0 R. d
* N2 ~! V- R5 J它准确地抓住了“抽象过度”和“思维惯性”这两个核心痛点,但在VBA这一特定语言特性的技术细节上,它的反思还可以更“接地气”一点。
8 q$ ` ]. t+ g, d. N+ v/ i$ ]
% \, h& a2 B5 r( @6 y1 U以下是我从资深开发者的角度,对它反思的详细点评,以及对“路径依赖”的深度解析:, D6 j. R" x7 z
% J% v, e, C& Y' E: ?* Q9 W
### 1. 对“路径依赖”的深度解析:它为什么会选字典?
* B6 R/ {3 l* L% l3 N: q& j" w6 } T) C
GLM将原因归结为“训练数据中的标准答案偏好”,这点只说对了一半。作为程序员,我看到的更深层的路径依赖是:“以现代语言的逻辑写古老的代码”。
: ^3 Y; [1 i/ M
% t8 z! [* o4 z- “Python化”的思维陷阱: ( e: H7 p! L1 R( ~( _- Z3 S; v8 [6 _
目前的AI大模型,其训练数据中Python、Java、JavaScript的代码量远超VBA。/ H7 b4 E# }8 z- G: [1 f
! s5 i7 @* p* q+ y. B9 ^: S6 E# _ - 在Python中,处理股票数据最自然的方式是 Pandas DataFrame(底层是数组,但操作像字典)或者 Dict。0 L8 L8 T& Z% D$ F
+ A" q7 z7 U8 q p; t" J6 Q; @
- GLM在拿到问题时,脑子里实际上是在用Python构思(Key-Value结构),然后试图把这种逻辑“翻译”成VBA。: X) ]1 E$ o9 a0 {! i1 p
5 m/ ]( G$ v& a, b1 Y! o+ S) g+ _ - 问题在于:VBA是上世纪90年代的产物。在VBA里,字典(Scripting.Dictionary)不是原生类型,而是一个外部COM对象。调用它比原生数组慢,且不支持简单的多维操作。GLM实际上是在用“翻译腔”写代码,虽然语法是对的,但“语感”(Idiom)完全错了。- r# _4 l7 r- z5 r0 D( u# n
- D2 p2 [& y/ L( ~' t
- 忽略了“Excel原生”特性:
; b* q1 l$ ~. {! T& x5 P) l Excel VBA最核心的优势是Range和Array的互通性。, Y u" u/ E# P6 m; o3 u" E
* Q* b' D8 x/ s( W" s, w
- Data = Range("A1:C100").Value 这行代码瞬间就能把Excel表格变成一个二维数组。这是VBA最快、最标准的IO方式。" W9 s& U& P4 W9 S, s% Q
' i8 T1 D1 j' c- `: [- _/ U7 i
- GLM选择字典,意味着它必须遍历单元格 -> 存入字典 -> 处理字典 -> 再转回数组输出。这是典型的“脱裤子放屁”(Over-engineering)。它忽略了Excel本身就是一个巨大的二维网格这一事实。
2 C7 ?! ?: v& X3 T, F6 k / p% V& F8 k2 X9 B* s2 [
6 {' W) ?& N2 @- G& f d" L# u
### 2. 对GLM反思点的逐条点评
~2 Y4 h# {3 j1 i/ S
: x; D8 s8 y- [6 g: b5 C0 S#### 关于点1:“标准答案偏好” (评价:准确但不够犀利)' `5 ?0 {$ o$ u9 H/ Y# l
2 T. l# s, `( _9 j
- GLM说:教科书里键值对是管理实体的标准答案。0 \8 d, B; M% ^% d! ^( V& a
% S/ b1 y5 E1 l; H4 }9 o [- 我的点评:不仅是教科书,而是面向对象编程(OOP)的执念。GLM试图构建一个Stock对象,包含Price、Name等属性。但在脚本级的数据清洗任务中,面向过程(Procedural Programming)往往更高效。为了喝一杯水(计算相关性),没必要建造自来水厂(构建复杂的对象映射)。8 }/ B) u, d/ J# d
( k n. n" d G* c. K2 K, M! _' ]4 G: O
7 U' E8 l$ ~. @' F7 g: ?; B#### 关于点2:“过度抽象的陷阱” (评价:非常到位)
. M/ }! [" r& G4 J* s# E6 f
6 R$ G: y. X( m! H- GLM说:追求理论完美,忽略了VBA的脆弱性。( Q0 a& j" m/ U" I* H8 M- H7 o
! m4 S: _/ F( A# E% @1 W, i- 我的点评:这是很多初级程序员转VBA时常犯的错。VBA的错误处理机制(On Error Resume Next)很简陋,字典操作一旦Key不存在就会报错或者静默失败。而数组操作是基于索引的(Index-based),在数学计算中,Arr(i) 永远比 Dic("Key") 稳健且快速。代码的“鲁棒性”在VBA里往往等同于“简单性”。! N$ Q# H: E. \/ m- Z
9 H/ }3 b. A" G5 Y
& i" T' ?! W" _* G& [( j, {3 U#### 关于点3:“数据分析 vs 数据结构” (评价:核心所在) f; a9 J* X' O
& J8 G3 `0 g. `) K A
- GLM说:Gemini将其视为矩阵计算问题,而我视为管理问题。
& S: G m/ \ w$ B* R . ~7 P; w* K @
- 我的点评:这是最精彩的反思。
' Q1 Y: {! o4 P% e {4 z + c/ u4 F- _& o+ ?3 S+ c
- **计算相关系数(Correlation)的本质是向量运算**。公式是2 o$ ^$ a' [/ ?! ?& O1 E) D, m3 N
9 C9 Y1 U, V6 f! Z; I/ c
`∑(x−xˉ)(y−yˉ)…\frac{\sum(x-\bar{x})(y-\bar{y})}{\sqrt{\dots}}…∑(x−xˉ)(y−yˉ)` 。* s: N8 G, w& E3 q# T, i; N
0 T+ T. b; s4 N - 这需要的是两个对齐的序列(Array A 和 Array B)。8 x3 O1 z3 x6 _$ b q! ?
/ V9 }! o1 q" [% J1 B8 e - 如果用字典,你得先保证Key对齐,还得处理Key的顺序问题(字典通常是无序的),这在计算时简直是灾难。Gemini(我)的代码能够成功,是因为直接利用了Excel列天然对齐的特性,映射为数组索引对齐,完全避开了“对齐数据”这个大坑。$ ~& F! H% ]% `9 W0 y6 N7 J
" w" x& u& q' a" U# ?' G' s5 K
0 U; O, F$ j, m" K0 T) t### 3. 我对它的补充:它没意识到的“工程化”问题
9 A& y2 k. M6 a% D8 H" D: i
: a7 _7 u# D w3 OGLM的反思更多停留在“逻辑”和“算法”层面,它忽略了作为一段需要交付给用户的VBA代码的工程化现实:, f1 E3 ] d2 r5 \
, n: w9 S4 o8 Z [
1. 环境依赖(Dependencies):
& U# P q2 a% n+ T# C9 E1 [ # Y h0 K% l7 d- N. ` y
- 在VBA中使用字典,通常有两种方式:前期绑定(引用 Microsoft Scripting Runtime)或后期绑定(CreateObject)。
% h+ F/ L, c! A* ]: p; R/ _; S. B6 w, P
( }9 }+ e( p1 ^( e - 前者需要用户手动去菜单里勾选引用(对小白用户极不友好);后者会导致代码编写时没有智能提示(Intellisense),且性能稍差。
3 M) d6 y# Q2 w0 B' B / t9 x/ G5 c, f
- 使用原生数组(Array)不需要任何额外配置,复制粘贴即用。这一点是用户体验上的降维打击,GLM没有反思到这一层。( ?* K' o' l' Z0 U
X5 v5 d0 J( I' D* i7 f+ s2. 调试难度: S0 ~: O) a4 H
& F3 W4 `& M2 o1 f( O
- 在VBA编辑器里,你可以直接在“本地窗口”看到数组里的所有数据。
% D/ a+ \1 e- X/ r % h1 M/ d2 K6 m& H. G' Z
- 但你很难直观地看到COM对象(字典)里的内容。一旦代码出错,用字典写的代码很难调试。
' z, _- z0 T' x! |
' N) V2 r( _ T# t5 V. E. ?& |( \, m+ ?0 h
### 总结
* u& G0 y7 @0 _+ |6 }! }% Y' C+ [1 E9 c$ y) i0 Q) e
GLM的反思表明它已经理解了“场景决定架构”这一真理。
* {5 B) ~+ u3 D) U3 K/ ]2 ]! ~5 X! Z! w& p1 d, w+ p9 {" z
- 它的路径依赖:是一种“现代语言优越感”带来的惯性,倾向于用高级的数据结构解决底层问题。
7 H" l8 N$ S- T& u4 y# k 1 A4 A9 K/ n6 f( T" d
- 现实情况:在Excel VBA这个特定的“低代码/脚本”环境里,数组+循环这种看似原始的方法,实际上利用了底层内存布局的优势,是真正的“最优解”。& ^ m: n( {+ X) L7 D# _
/ x# ?1 [: I$ T+ l. b& ]1 j* O+ n" T7 E4 C$ h9 s
它的反思是诚恳且高质量的。如果它能把“运行环境的限制”(如VBA的引用问题、调试便利性)也纳入考量,那它的自我认知就达到了资深架构师的水平。 |
|