1
1
+++
2
2
title = " 杂谈AI取代程序员"
3
3
date = 2025-02-14T21:15:00-08:00
4
- lastmod = 2025-02-15T01:28:56 -08:00
4
+ lastmod = 2025-03-01T13:56:35 -08:00
5
5
tags = [" ai" , " programmer" ]
6
6
draft = false
7
7
toc = true
@@ -54,7 +54,34 @@ toc = true
54
54
虽然我写的代码生成工具远不如大模型加持的AI强大,但看起来都只局限于解决编码问题,研发流程的其他问题并没有解决。
55
55
56
56
57
- ### <span class =" section-num " >2.2</span > 功能性与非功能性需求 {#功能性与非功能性需求}
57
+ ### <span class =" section-num " >2.2</span > 冰山之下 {#冰山之下}
58
+
59
+ > 冰山运动之所以雄伟壮观,是因为它只有八分之一在水面上
60
+ >
61
+ > 《午后之死》 海明威
62
+
63
+ {{< figure src="/ox-hugo/iceberg.jpg" >}}
64
+
65
+ 如同只有只有八分之一在水面上的冰山一样, 很多程序员都可能没有意识到,写代码只是工作的一小部分,甚至可能是其中最轻松的部分, 维护才是工作中最繁琐且具有挑战性的部分。
66
+
67
+ 维护工作包含测试,debug, 修bug, 性能优化, 更新以适应其它改变,代码重构,客户支持,写文档并随时间修改文档.
68
+
69
+ 以我自己的经历为例,之前组里面有不少近10年的历史服务,但是还在发光发热,作为核心组件给客户提供服务.
70
+
71
+ 这些服务基本都是用Java写的, Java 以「Write once, run everywhere」且优秀的向后兼容能力而闻名, 因此还有不少公司还在使用JDK8, 仿佛被封印在 Java8 一样了。
72
+
73
+ 不久前, 在公司内部推行了一个要求将JDK升级到JDK17的全公司范围的项目:
74
+
75
+ 而升级JDK的动机,一方面是因为可以使用最新的语言特性,此外JDK8也马上要被停止支持了,另外一方面是性能优化, 各种评测都显示,从JDK8升级到JDK17,升级后JVM的系统资源使用量平均下降约10%~ 15%, 对于公司而言,更少的系统资源,就可以使用更少的服务器,通过升级JDK 就可实现无痛「降本增效」。
76
+
77
+ 但即使兼容能力优秀如Java,我也花费了近3周才把组里使用 JDK8/JDK11 的老服务切换到 JDK17,
78
+
79
+ 期间还出现了各种奇怪的问题,比如JVM参数名或者选项在升级之后被废弃了, 新版本JVM 无法识别,又或者是出于安全的考虑,部分JDK内部的 class 无法通过反射访问,会导致运行时异常,服务需要回滚.
80
+
81
+ AI 也没法帮我们一键升级或维护, 而这些枯燥且繁琐的工作才是那未被人所见的「八分之七」.
82
+
83
+
84
+ ### <span class =" section-num " >2.3</span > 功能性与非功能性需求 {#功能性与非功能性需求}
58
85
59
86
在程序开发中,除了有功能性需求,还需要非功能性需求.
60
87
@@ -64,26 +91,36 @@ toc = true
64
91
65
92
而所谓的非功能性需求,比较常见的是可扩展性(scalability),可维护性(maintainability) 和性能(performance).
66
93
94
+
95
+ #### <span class =" section-num " >2.3.1</span > 非功能性需求 {#非功能性需求}
96
+
67
97
还是以加法为例, 我可能需要后面扩展到乘法和除法, 或者扩展到复数或者矩阵加法,要怎么易于扩展呢?
68
98
69
99
这些都是AI生成代码是没有考虑到的因素,AI比较擅长的可能是给它一个需求,它生成一段代码给我们。
70
100
71
- 但是在软件研发的生命周期中,有大概80%的时间,都是维护已有的系统,谁家没有个已经在跑的系统呢 。
101
+ 但是在软件研发的生命周期中,有大概80%的时间,都是维护已有的系统。
72
102
73
103
而给已有的系统上增加功能,就需要考虑各种奇怪的兼容性,相当于带着锁链来跳舞,并不能像从无到有,什么都不用考虑的那般洒脱。
74
104
75
- 而这样的限制,又是AI生成代码时未曾考虑的。所以从零开始的日抛型,不需要考虑维护成本的项目,很适合由AI来生成.
105
+ 而这样的限制,又是AI生成代码时未曾考虑的。
106
+
107
+ 所以从零开始的日抛型,不需要考虑维护成本的项目,很适合由AI来生成.
108
+
109
+
110
+ #### <span class =" section-num " >2.3.2</span > 已解问题 {#已解问题}
76
111
77
112
但即使功能性的需求,有时候AI也会做不好。
78
113
79
114
我之前在工作中需要根据已有的Schema, 使用Rust 写入Parquet数据,Rust本来就新,加之操作Parquet的库就更少了, 所以ChatGPT, Claude或者Gemini 都没有给出我满意能跑的结果,最后还是靠自己去读 Parquet库的源码找出的解决办法。
80
115
81
116
无论模型怎么变,AI现阶段还需要预训练数据的投喂,所以没有相关的预处理数据,AI也只能胡扯。
82
117
118
+ 换而言之,所限于当前的AI模型,AI是只 ** 善于处理已经被解决过的问题**
119
+
83
120
所以总结下来,在真实项目中,AI还没有办法取代程序员。
84
121
85
122
86
- ### <span class =" section-num " >2.3 </span > AI取代论背后的动机 {#ai取代论背后的动机}
123
+ ### <span class =" section-num " >2.4 </span > AI取代论背后的动机 {#ai取代论背后的动机}
87
124
88
125
既然你说AI现阶段还没有办法取代程序员,为什么我看到各种各样程序员要被AI取代的新闻,甚至有公司用AI来替代员工了?
89
126
@@ -97,6 +134,11 @@ toc = true
97
134
98
135
神智清明的你可能在心平气和下很难做出这样的决定嘛。
99
136
137
+ 制造焦虑才能更好地贩卖自己的产品,毕竟到现在为止,靠AI盈利主要有两种方式:
138
+
139
+ 1 . AI 公司靠产品融资,拉风投
140
+ 2 . 制造AI焦虑,借机卖课卖书卖文档
141
+
100
142
另外一种就是要用AI来取代程序的公司,说要通过AI来增效,裁撤工程师,比如国外的 [ Workday 裁员说要再招人做 AI 的新闻] ( https://apnews.com/article/workday-layoffs-job-cuts-ai-investments-437581ad79d6e1cef2de7b300015dfbb?utm_source=t.me/mtfront )   ; [ ^ fn:2 ] , 还有2023年 [ Google 因为AI裁员而30000 名员工的新闻 ] ( https://www.bwpeople.in/article/google-contemplates-30000-layoffs-due-to-ai-job-impact-503670 ) [ ^ fn:3 ]
101
143
102
144
怎么说呢,AI这块牌子太好用了, 什么都可以往里面套,裁撤工程师降本是真,AI增效大概是假。
@@ -133,7 +175,7 @@ toc = true
133
175
134
176
我觉得都可以把这个内容扩展写成 [ 测试技能进阶系列] ( https://ramsayleung.github.io/zh/post/2024/%E6%B5%8B%E8%AF%95%E6%8A%80%E8%83%BD%E8%BF%9B%E9%98%B6%E4%B8%80_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E8%AE%A4%E7%9F%A5/ ) 的第四篇了
135
177
136
- 假设我需要测试一个计算字符串中元音数量的函数 ` count_vowels(s: str) -> int ` , 我的指示是 :
178
+ 假设我需要测试一个计算字符串中元音数量的函数 ` count_vowels(s: str) -> int ` , 我的指令是 :
137
179
138
180
> 请为以下函数 \` count_vowels(s: str) -> ; int\` 生成pytest测试用例:
139
181
>
0 commit comments