AI时代,程序员应该何去何从?
最近在网上看到一个视频,大概的意思就是AI时代,大学的计算机课程如何开展教学的问题。
然后就有专家出来发言了,说要抛弃以前那种理论教学,结合AI,讲案例,谈架构,学会怎么去使用AI。
在我看来(个人观点,不喜勿喷):AI时代,理论知识显得更为重要,大学的课程可以结合AI去教学,但是最核心的基础理论不能丢。
我先说我最近碰到的几个场景吧:
1、网上流行的一个段子,某人让AI写代码,AI提到了json这个概念,这个人就问AI,"who is json?",那么问题来了,到底谁才是json呢?
2、公司最近招了一个本科计算机实习生,今年下半年就要读研了。我让他通过控制台传参,把处理好的数据输出,他竟然听不懂,觉得我在为难他。不懂我觉得关系不大,但是觉得饭应该喂到嘴里这想法就有问题。
再返回到前面的问题,如果不学习这些基础理论,你就会被AI所主导,你无法判断它给出的答案是否正确,你也无法修改它生成的东西。最为重要的点还是,你无法体现自身的价值。
AI大模型会持续发展,也许后面它可以做到不出错,它也可以设计架构,生成代码,实现算法、自动单元测试,自动打包部署等等。
等真正到那时候,可能大家都会失业,但是今天如果还想进入计算机行业,恰恰这些基础才是最重要的。
因为AI的出现,大学生的成长空间已经被压缩了很多,所以对于现阶段的大学生来说,大学几年内需要学习的东西就更加多。
这里给出我的一些建议(个人建议仅供参考):
1、扎实理论,学好《线性代数》、《离散数学》、《概率论与数理统计》、《计算机组成原理》、《数字电路》、《数据结构与算法》、《操作系统》、《计算机网络》、《数据库原理》等基础课程。
对于学习过程中遇到的任何疑问,都可以直接去问AI,我们要帮AI当成一个经验丰富的老师。AI在这些基础理论方面出错的几率很小,因为都是纯理论知识,它的数据库里都是比较准确的数据。
2、了解前沿知识,这个可以往自己感兴趣的方向去了解。例如对网络安全比较感兴趣,可以往网络、安全与隐私这块去学习。
这个时候AI也是一个很好的老师,让AI给你列出学习路线,制定计划,然后学就完事了
3、项目实战,让AI给出自己感兴趣领域的经典项目,让AI给你需求,然后自己去实现功能。在做的过程中遇到的任何问题,都可以向AI提问
实战过程中,一定要自己动手去实现,尽管AI可以帮你完成,但是不要这么去做。在你熟悉了以后,可以让AI来完成这部分工作,但是在你不熟练之前,老老实实自己上手做。
4、创建一些开源项目,把自己比较感兴趣的想法落地,变成真实存在的项目。
5、记录每一个学习阶段遇到的问题,收获的内容。
AI可以帮助我们少走很多学习的弯路,这对今天的大学生来说,无疑是一个神器。
再回到标题,就是:AI时代,程序员应该何去何从?
最近AI编程是越来越火爆了,像我这种手写了这么多年代码的“老人”来说,有点像上辈子的产物了。
好在我也是能接受新鲜事务的,我尝试了一些比较顶级的大模型,去实现了一些我想要的功能,只能说差强人意吧。
我用Claude Opus 4.8生成一个可以设置任务栏位置的win32程序源码,打开项目就直接报错

缺少一个头文件,包含头文件后,编译运行,直接无法运行

那么我们来看看它设置任务栏位置的源码
它这里是通过设置注册表来实现这个功能,在Windows 10及前面的系统确实可以,但是到Windows 11就不行了。
这时候我就觉得有点人工智障了,写的代码根本不管有没有用。
1 // --------------------------------------------------------------------------- 2 // SetTaskbarPosition 3 // 4 // Writes the docking edge into the StuckRects "Settings" binary blob. 5 // 6 // Layout of the blob (all little-endian DWORDs): 7 // offset 0 : cbSize (0x28) 8 // offset 4 : reserved (0xFFFFFFFF) 9 // offset 8 : flags / state (auto-hide, always-on-top, ...) -- NOT the edge 10 // offset 12 : uEdge (ABE_LEFT=0, ABE_TOP=1, ABE_RIGHT=2, ABE_BOTTOM=3) 11 // offset 16 : RECT of the docked taskbar 12 // 13 // BUG FIX: earlier revisions wrote the edge to offset 8, which is a flags 14 // field, not the docking edge. The taskbar therefore never moved (only an 15 // unrelated state bit was toggled). The uEdge DWORD lives at offset 12 -- the 16 // same byte the well-known "$Settings[12] = <edge>" registry trick edits. 17 // The edge is now written at offset 12 so all four edges take effect. 18 // 19 // Works for all four edges; Explorer must be restarted for the new position to 20 // take effect. 21 // --------------------------------------------------------------------------- 22 bool TaskbarHelper::SetTaskbarPosition(TaskbarEdge edge) 23 { 24 const wchar_t* valueName = nullptr; 25 HKEY hKey = OpenStuckRectsKey(KEY_READ | KEY_WRITE, &valueName); 26 if (!hKey) return false; 27 28 BYTE data[256] = {}; 29 DWORD cbData = sizeof(data); 30 DWORD dwType = REG_BINARY; 31 LSTATUS st = ::RegQueryValueExW(hKey, valueName, nullptr, &dwType, 32 data, &cbData); 33 34 // The uEdge DWORD occupies bytes 12..15, so we need at least 16 bytes. 35 bool ok = false; 36 if (st == ERROR_SUCCESS && dwType == REG_BINARY && cbData >= 16) 37 { 38 const DWORD val = static_cast<DWORD>(edge); 39 data[12] = static_cast<BYTE>( val & 0xFF); 40 data[13] = static_cast<BYTE>((val >> 8) & 0xFF); 41 data[14] = static_cast<BYTE>((val >> 16) & 0xFF); 42 data[15] = static_cast<BYTE>((val >> 24) & 0xFF); 43 44 ok = (::RegSetValueExW(hKey, valueName, 0, REG_BINARY, data, cbData) 45 == ERROR_SUCCESS); 46 } 47 48 ::RegCloseKey(hKey); 49 return ok; 50 }
好 ,我们来看第二个需求,像我这种摄影佬,想写一个可以生成照片水印的工具。
一开始我是让AI用WTL来实现,生成的代码到处都是报错,完全没办法用。

没办法,只能换成WPF,然后用WPF又重写了,功能基本上能实现,但是细节方面没法看,调整的时候,这个功能实现了,那个功能又没有了,我是没有耐心再去继续搞了,就直接放弃了。
但是整体来说,生成的代码还行。
我们先看一下代码架构:

功能实现(部分)
不过这里我也不得不吐槽一下,我提到了使用高性能的方式来进行绘制,我以为它至少能整个高级一点的方案,例如SharpDx/Vtk之类的,结果还是用的DrawingVisual来进行绘制。
AI可能它并不会思考,还需要我明确指出使用哪个技术才行。
不过就前面生成的代码来看,我也不指望使用SharpDx/Vtk的代码能跑起来。
1 private RenderTargetBitmap RenderBlurBackground(BitmapImage originalImage, ExifData exifData, WatermarkConfig config) 2 { 3 var fontSize = originalImage.PixelHeight * config.FontSizeRatio; 4 var padding = originalImage.PixelHeight * 0.015; 5 var blurRegionHeight = fontSize * 3.5; 6 7 double y = config.Position == WatermarkPosition.Bottom 8 ? originalImage.PixelHeight - blurRegionHeight 9 : 0; 10 11 var drawingVisual = new DrawingVisual(); 12 using (var drawingContext = drawingVisual.RenderOpen()) 13 { 14 // Draw original image 15 drawingContext.DrawImage(originalImage, new Rect(0, 0, originalImage.PixelWidth, originalImage.PixelHeight)); 16 17 // Simulate blur by drawing a heavily frosted semi-transparent overlay 18 var blurRect = new Rect(0, y, originalImage.PixelWidth, blurRegionHeight); 19 var blurBrush = new SolidColorBrush(Color.FromArgb(config.BackgroundOpacity, 30, 30, 30)); 20 drawingContext.DrawRectangle(blurBrush, null, blurRect); 21 22 // Draw a lighter frosted layer for blur effect simulation 23 var frostBrush = new SolidColorBrush(Color.FromArgb(60, 255, 255, 255)); 24 drawingContext.DrawRectangle(frostBrush, null, blurRect); 25 26 // Draw watermark text 27 DrawWatermarkAtPosition(drawingContext, exifData, config, originalImage.PixelWidth, y, blurRegionHeight); 28 } 29 30 var renderTargetBitmap = new RenderTargetBitmap( 31 originalImage.PixelWidth, 32 originalImage.PixelHeight, 33 96, 96, 34 PixelFormats.Pbgra32); 35 renderTargetBitmap.Render(drawingVisual); 36 return renderTargetBitmap; 37 }
所以综合来看,AI还是能帮我们完成一定量的编码工作,而且效果也还行。
但是这里其实我也有一个疑问:就是明明人可以写,却要花钱去买Token写。写完以后,还要无数次的调整,好不容易调整好了,控制AI去写代码的人却无法维护。
为了可以维护这个代码,就不得不继续让AI去操作,然后再持续投入资金。
又或者为了人可以维护这个代码,就不得不去阅读代码,去理解功能。
最后这么一顿操作下来,受益的就只有卖Token的,其他人受伤的世界都达成了。

然后再总结一下:
现在到处都在宣传AI,说AI已经无所不能,哪家的大模型又发布新版本了,整个行业被搞得乌烟瘴气。
我这里也有个疑问,就是AI为什么不是首先应用于一些其它特殊场景,而是直接进入大众的视野。
我向AI提出了一些比较关键的问题(答案仅供参考):


那其实到这里我们就比较明确了。
所以,把AI当成你的好老师,学习搭子。
已经会的东西,交给AI,把省出来的时间拿来提升。不会的东西,让AI辅助去学习,事半功倍。

当然,AI可以用,但是别养成依赖思想,你想要体现自己的价值,你就得自己有东西。
我也不知道古法编程这个词是谁想出来的,现在都成贬义词了,古法编程编的不是代码,编的是你思考问题的思维能力。
目前整个程序员就业市场已经非常不乐观了,但是在时代的洪流面前,我们每个人都显得那么渺小,所以努力学习让自己不被洪流冲走,剩下的就交给时间了。

浙公网安备 33010602011771号