Codex AI编程尝试
最近,在自己实现了一个小型NPU的硬件架构上,尝试自己做一个小型的AI编译器,实现从ONNX格式的模型文件往能跑在NPU上的C工程文件转。尝试了一下 Codex ,效果震惊到我了,之前我对AI编译器一点了解都不没有,单纯修过一点编译器的基础知识。我提供给Codex的workplace包含pytorch导出ONNX的代码、以及对应的手写的有硬件加速的C工程文件。然后我就只需要给 Codex 下指令,提大概需求,只用了大概十来分钟吧,就调出来了一般能跑通的AI编译器,后面由于自己设计的硬件加速器的某些限制,并且不想把我的硬件加速器代码让Codex看到并有权访问,就自己花了点时间去理解它写的编译器代码,有针对性的修改了一下细节。
通过这件事情,对我有了很大的震惊。如果按照古法编程,做一个AI编译器得了解前置知识、写代码、调试代码一系列工作,基本花个几周甚至上月都有可能。但是用 Codex 编程只用了一会时间。想当初之前自己花了几个月手搓硬件加速器然后用网页AI对话的方式辅助编程,花了很多时间去看波形、调bug。
个人思考
所以在AI时代下,我们应该如何利用好AI工具来实现自身价值的最大化呢?下面是我的一点思考:
快速理解上手小型系统
AI时代,一些低需求的工作,即使不是这个领域人通过运用AI也可以完成。但是对于一个较为复杂的工作以及如果要做一些不能上传给云端大模型保密性的工作,怎么样解决这些问题,才是内行人跟外行人之间的最大区别。
当时我在做硬件加速器设计的时候,对verilog、硬件编程也不是很了解,当时对什么流水线、阻塞什么的也不了解,很多时候就是会陷入设计testbench去测试功能,然后不断的面向AI对话改代码,调试,ok测试不通过继续调试,反复的尝试,有点急功近利,也没有过多精力去关注为什么,因为我对硬件编程没有一个大体的认识,只能是AI说啥就是啥,我只管最后testbench测试功能正确就完事,这种极大的盲目依赖AI导致个人的不确定性一方面产出效率极低,另一方面也没学到任何东西很影响个人心情。这就是外行人用AI的最大困境:想用AI快速完成任务,但是又不想投入时间去搞懂原理与该领域的基础,反而导致自己的工作效率随工作复杂程度的增加呈指数型下降。
但是如何打破这个困局,让你从外行人成为内行人呢,这里AI又能起一个很大的作用,你可以借助AI帮你做一个小型系统,越简单越好,做那种麻雀虽小但五脏俱全的小工程,具体工程可以是高校里的作业/实验,也可以自己想的一些好玩的项目。针对这种小型系统,AI的能力还是可以的,然后你就去理解学习AI做的这个系统,学习过程中更多的是学里面的原理而不是关注一些细枝末叶,至少让你讲这个项目,你能大致讲出具体流程。
这样在你理解了这个领域的大致构造之后,你再用AI做一些复杂性的任务,才能更加游刃有余,成为内行人。
多看,选择>努力
人们都说干中学,学中干,我先干起来再说,其实现在很多时候干貌似不是当前时代的最优解,特别对于研究生阶段的学生来说,因为特别关注于把一件事情干出来让你把过多的时间精力陷入细节里。
而目前来说,在AI时代,一方面,我可以用通过AI实现小系统更短时间的学到我干一个事情所能学到的东西,另一方面,不会干的人也可以通过AI来干出来。所以目前重要的不是你会不会干活,而是你有没有一个好的视野与方向,知道你需要干什么,即选择>>努力。
所以怎么样才能知道你需要干什么,怎么做选择?
一个方法:学会看,观察其他人在干什么,以第三人称的视角总结和学习其他人干的方向与选择,去学进而自己决定自己做什么方向,什么事情最值得你去做。
针对做research来说,也就是多读论文,打开个人视野,学会做选择,做最值得你做的事情。
减弱对技术的过度关注,提升表达,增强与人与人之间的交流合作
之前我对技术有一种盲目的追求,觉得有一项技能,我能做别人不能做,就能实现自己的价值。然后自己有时候中小学时候自己摸索到了一个小技巧有时候也不愿意分享,现在看来是井底之蛙了。
在AI时代,技能是最不值钱的,AI可以帮你学任何技能。关键在于自己的思维以及你的表达,一方面你跟别人的交流能否帮你打开思路,找到自己最应该学什么,应该做什么。另一方面你的表达能否让你做的事情给其他人带来价值与思路。
我做公众号文章其实也是想提升表达自身观点能力。
总结
我认为AI的出现不是砸了程序员的饭碗,而是为程序员提供了学习、产出的工具,让程序员不将精力耗费在细节代码与调试上,将更多的时间花在扩展新技能、尝试多技能多领域之间的综合产出与创造上。
总而言之,人的精力是有限的,我认为AI时代,作为研究生,要想快速成长,应该把时间投入到:1、小型系统学习2、论文阅读3、交流合作上,这样个人的价值才能最大化。
注:仅个人对AI的一些看法,欢迎一起讨论。
夜雨聆风