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程序源码,打开项目就直接报错

9ab688faa0cf2c309ad9b0cdb702119

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

 

c1785d6385160b40f706dc065366ad0

 

那么我们来看看它设置任务栏位置的源码

它这里是通过设置注册表来实现这个功能,在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来实现,生成的代码到处都是报错,完全没办法用。

image

 

没办法,只能换成WPF,然后用WPF又重写了,功能基本上能实现,但是细节方面没法看,调整的时候,这个功能实现了,那个功能又没有了,我是没有耐心再去继续搞了,就直接放弃了。

但是整体来说,生成的代码还行。

我们先看一下代码架构:

image

 

功能实现(部分)

不过这里我也不得不吐槽一下,我提到了使用高性能的方式来进行绘制,我以为它至少能整个高级一点的方案,例如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的,其他人受伤的世界都达成了。

image

 


然后再总结一下:

现在到处都在宣传AI,说AI已经无所不能,哪家的大模型又发布新版本了,整个行业被搞得乌烟瘴气。

我这里也有个疑问,就是AI为什么不是首先应用于一些其它特殊场景,而是直接进入大众的视野。

我向AI提出了一些比较关键的问题(答案仅供参考):

image

 

image

 

那其实到这里我们就比较明确了。

所以,把AI当成你的好老师,学习搭子。

已经会的东西,交给AI,把省出来的时间拿来提升。不会的东西,让AI辅助去学习,事半功倍。

image

 

当然,AI可以用,但是别养成依赖思想,你想要体现自己的价值,你就得自己有东西。

我也不知道古法编程这个词是谁想出来的,现在都成贬义词了,古法编程编的不是代码,编的是你思考问题的思维能力。

目前整个程序员就业市场已经非常不乐观了,但是在时代的洪流面前,我们每个人都显得那么渺小,所以努力学习让自己不被洪流冲走,剩下的就交给时间了。

 

posted @ 2026-08-10 10:34  zhaotianff  阅读(8)  评论(0)    收藏  举报