跳转至

代码与工程之外·36代码与工程之外【3】技术人该积累什么,才能不被AI95

小程是一位刚刚毕业不久的程序员,凭借学生时代12年的寒窗苦读,他考入一所还算不错大学的计算机系。4年来,掌握了成为一名合格软件工程师所需要的知识基础。2021年毕业季,这个初出茅庐的软件工程师,把这个充满希望的职业理想,顺利入职某科技公司。然而命运的转折总是不期而至,22年年末,ChatGPT的横空出世,不仅掀起了全球范围内的AI浪潮,更在那些认为从事高端技术的程序员圈子内,投下了一颗惊雷。

小程第一次被AI真正冲击,到时是在一个充满黑色幽默的晚上。当工作两年多的小程正为离职同事交接下来的某山项目焦头烂额时,邻座刚来不久的实习生突然轻笑出声。这小伙正用克斯重构着那个恼人项目中最难啃的一个模块,小陈转头看到他屏幕上的光标,一行行跳动闪烁,生成了一行行整洁有序的代码。其速度之快,让小程想起老家收割麦子的联合收割机。"你看这不比自己手写快上十倍",实习生小伙的调侃在空气里凝固成冰。从那时开始,小程突然意识到自己投入许久的编码能力,似乎正在变成如同热武器时代的铁匠手艺活。他突然想起原来那些自己所看到的,人人都是全栈工程师,LM技术基点已至百倍,效率提升似乎并不是单纯讨人厌的标题党。

以上是我为本期视频使用AI准备的引言。一向不善于叙述描写风格,而更倾向于论证阐述的我,在AI的帮助下能够写出这样一段话,让我感到些许压抑。但这个引言却不是完全为言生成的,我对他做了较多的改动。事实上,AI最初给我的片段中,还是有某些荒谬可笑的内容,其中不乏有一些经不起推敲、幼稚可笑的句子。如逻辑矛盾、收割麦子的联合播种集、强行比喻代码是新时代的八股文、编译器是最公正的阅卷官、让他安心地带马星辰、如今却像被引力撕裂的星云、典型刻板印象、河南小镇做题家脱颖而出的青年。但也有很不错出彩带给我启发的例子和句子,于是我便进行修改,并形成了最终的文本。因为这期视频讲的是AI,所以我也会向大家保持真诚。后面的内容,凡是用AI生成略微修改过的内容,我均会标示出来。不经思考和判断,就把AI生成的内容搬上来,是对大家的不负责,我会希望做这样的事好。

我们回到本期内容的正题,现今AI的发展,毫无疑问已经值得引起我们的重视和注意。但其实他也并没有像大部分博眼球和贩卖焦虑的媒体所说的大样神奇,乃至未知可怕。我们需要从一个客观中立冷静的视角去看待它。嗨大家好,我是瓦远超,希望在本期的内容中能以这样的视角来谈谈,我作为一个软件工程师对AI的看法,以及他对我们程序员以及技术人产生的影响,希望能够帮助到你。当然当下对于AI的看法,整个社会的分歧是非常大的,我所说的也仅仅是我个人的看法,不保证一定正确,只希望能够提供一些启发和参考。大家有不同的意见是很好的事情,欢迎一起讨论。

在聊AI对我们造成的影响之前,我们必须要先搞清楚一件事,在人类历史上所有重大技术革命中,信任关系永远存在于人与人之间,责任归属永远在人身上,而不是机器或者工具。不论是从1830年蒸汽机车火箭号撞死国会议员哈斯基森,还是到2023年特斯拉auto pilot系统导致的车祸,这两件事最终追责的,都并非是直接代表技术的工具或机器,而是这些技术提供方背后的人。这两件事跨越两个世纪却具备相似的结果,并不是巧合。这说明一件事,只要工具还需要人类为其后果负责时,控制权就永远不会真正让读。如果有工具不需要人类为其后果负责,可以独立获取人的信任与担起责任,则工具不再是工具,而是一种新的个体形态。这就上升到了更加宏大叙事的主题中了,这种情况并不在本篇内容的讨论范围内。

当前阶段的AI本质上仍是统计概率模式的延伸,其生成的代码可能包含隐藏漏洞和错误,设计的架构或许也存在逻辑缺陷,而这些风险的最后承担者,仍然是提交代码的人类工程师。这和使用开源软件遇到的情况类似,任何开源软件都会在license里说明,不对软件的使用后果负责,这既是撇清责任,又是骑行使用者要充分谨慎。除此之外,AI大模型本身的提供方,给你提供各类投资建议的财经博主。

也会用类似的话语来强调这件事。也正如我在前面所说,如果我完全用AI来生成文案的内容,实际上还是挖点成背后那个人来负责,而不是AI对视频产生反馈的目标,也一定在我身上。大家可能会发出一眼AIAI味好重之类的评论,这实际上是在谴责我的代码由AI生成的内容,来应付大家。因为作文人还是希望看到真正的人,把关下所写的内容,而不是随便用机器和AI生成就放出来。因为这样的内容某种程度上是敷衍的,让我们天然无法信任,在直觉上充满抵触。所以请记住,AI永远无法替你或他人背锅,它只是工具,而决定权仍然在你。这仍然是当前人类社会的基本规则,也就是AI还处于工具定义时不会变的原则。有了以上原则,我们要做什么也就非常清晰了,就是在能够担起责任的情况下,充分掌握并使用这个工具。下面我会帮你详细理解AI对软件工程师带来的影响,以帮助你更好地认识和使用它。

AI打上的一个重大影响就是它重构了技术价值。想必大家这段时间一定看到,越来越多非技术背景的人利用AI编程工具进行编程和产品构建的案例了。很多程序员看到这些内容,往往总是会有轻视、不服气的想法,认为这些外行人借助AI写出的东西只是玩具,和真正硬核的代码功能相比不值一提。这其实是作为程序员这个社会身份带给我们的自我保护意识,因为我们需要证明自己的不可替代性价值,所以必须要选择性的把可能的威胁合理化。长期来看,这种保护性思维对我们来说并不是好事。我们首先应该做到的就是谦虚观察,进行的判断,才能得到最有利于我们发展的结果。所以请丢弃这种保护性意识,静下心来仔细想想,AI是否降低了编程技术的门槛。我想这个问题的答案,毫无疑问,AI对编程技术的门槛降低是非常明显。不管是具体的代码编写还是环境搭建部署等,AI都有能力帮助完全不同的人达成实现这种现象,我称之为业务逻辑程序小白话。就像以前出现过的低代码技术一样,只要你足够熟悉需求和业务逻辑流程,具体的编程技术便不再重要,借助现有的工具就能实现。

但技术远远不止这些东西。这里目前AI无法跨越的一个鸿沟,还是人自身。注意这里的前提仍然是人是主体,AI是工具。如何理解人自身的价值,AI可以给你一个答案,但是他是否靠谱可行,需要你自身能够判断,才能为他负责,进而才能获取到他人的信任,这样价值的链条才能跑通。比如编写一个服务日常生活场景的工具类app,使用AI实现确实没有难度,你可以通过直接使用这个app来验证它的功能。但如果是一个在线app,要同时服务1万个用户呢,百万呢,一旦他面向的场景变得复杂,服务对象数量上了规模,产品就不仅仅是业务逻辑本身了,而是要考虑很多业务之外的东西,这也就是我们所谓的技术点。当我们去问AI如何支持上规模的业务程序时,很可能它也能给我们这些技术点对应的方案。

但如果是外行人,他大概率是无法理解什么是缓存优化、分库分表、异步解耦这些东西的,更别说去判断时间的正确性和效果了。一个不知道缓存系统复杂性的外行人,即使拿到AI生成的REDIS缓存代码,也可能意识不到缓存雪崩的风险;即使获得了分库分表的SQL建议,也很难预判跨库JOIN带来的性能黑洞。那么他又怎么为结果去负责呢?换而言之,AI或许总能告诉你你知道你不知道的(You know what you don't know),但无法完全告诉你不知道你不知道的(You don't know what you don't know)。脑中没有体系化的知识经验和方法论,即使AI逐个解释给你,你也无法快速和准确地理解,并判断出AI产出内容的合理性。除非你重新学习一遍这些内容,那么这个时候你可能也就变成了一个程序员。

我们再从另外一个方面说一下AI在技术领域的局限性。如果把AI放到内核开发技术、软件芯片设计这种高技术浓度的领域内,一个不懂技术的人就很难用AI发挥作用了,因为很可能AI生成的东西他完全就看不懂。比如内核态用户态系统、调用ARM和X86指令集的差异、FPGA等这些术语,缺乏深厚技术背景的人根本无法理解,更别提在此基础上进行判断和决策了。

概念本身就像是一个独立的语言体系。当你不懂英语时,老外对你微笑着说了一句UCK,你可能还以为他在向你表示友好。当你没有经过系统化学习和实践,你便无法进入到专业领域的context内,就如同蒙上眼睛跑步。即使依靠AI产出的内容跑了起来,你也无法确定自己在往哪里跑,下一步会不会被石头绊倒。而当一个人能够搞懂这些术语和概念时,事实上他也就成为了半个合格的技术软件方面的工程师了。剩下的就是实践。

所以到这里,我们能够得到一个技术价值被重新定义但却没有被完全颠覆的结论。大部分没有较高复杂概念体系的业务流程化编程实现将被逐渐平民化,当下各大媒体平台上涌现的各类内容就可以证明,之前一个demo乃至简单产品的门槛被无限降低。技术实现的难度和门槛降低以后,编程写程序这件事本身的价值开始逐步下降,而体系化的知识经验和洞见则变得前所未有的重要。

比如说做商业化to c产品的初期,发现和理解合适的需求就非常重要,此时的产品经理完全可以不依靠程序员做出可用的产品原型。因此在这一方面,技术人员的重要性得到降低。而在高度技术性的领域,如技术软件、芯片开发等,要洞察需求、设计合理的方案本身就要有充足的技术知识储备、理解和实践经验。在这个领域的技术人还是有巨大优势的,无法被不懂技术的人替代,因为这个领域内的需求本身就是面向技术的,具备一套独立的语言体系,外行人无法轻易进来。

比如要理解各种场景下应用程序对操作系统资源调度的各类要求,设计出更加合理的内核调度机制。要理解这个问题本身并给出具体的方案,可能大部分工作都不在代码实现上,而是理解和定义场景设计方案,以及评估方案的合理性等等。所以写代码本身这件事可能会变得不重要,而对技术的理解力、设计方案、解决问题的能力变得格外重要。这种趋势意味着当今广泛意义上的成员岗位会越来越少,而最终可能只有具备深度的基础技术和大型规模化的软件架构两个领域有所留存。

两极分化的情况可能会非常严重,也就是说低层次具体事件的重要性会越来越低,宏观架构的把握、专业化的知识体系、对抽象问题的理解应对才是更重要的。所以技术人在AI时代应该做什么?首先应该摆正心态,利用和拥抱AI,成为掌握新工具的人,而不是固守老技术。使用已有经验更高效的使用AI,值得你的产出高于没有经验的人使用AI得到的阐述,也就是说懂得在什么场景下使用什么工具、怎么使用工具更重要,而不是用原来的方法低效去做。

这实际上不仅要求你会用工具,还在要求更多的理解工具所需要解决问题的本身,这也反映出工程师的本质性能力——解决问题的能力。举个例子,作为一名软件工程师,熟悉脚本在以前是非常常见的事情,但现在AI基本都能帮你快速完成,你不需要再纠结语法和调试问题。这本质上是让你有更多的时间去聚焦在更宏观的方面里,比如写脚本解决问题的本身,甚至是让你意识到所写出脚本代表的思路方向并不能解决问题,而是应该换一个思路解决问题。这也和前面所说的专业领域的语言体系产生对应,你必须熟悉和擅长这个领域内的术语、概念及其体系关系,你才能更好的达成对工具的理解和运用。

然而现在AI时代虽然带来了效率的提升,但同时也充满着令人停滞的诱惑。越来越多的人开始变得懒惰,就像很多学生用AI完成作业一样,跳过了学习专业领域语言体系的阶段,直接跳到结论。这和我在八股文那记忆内容所说的逻辑一样,短期内快速拿到了结果,但在长期吃到了更大的亏,反而让你更容易被AI淘汰。如果你过于依赖AI,没有建立足够牢固的基础,且长期脱离技术实践,那么当你遇到AI没法解决的细节问题时,你自己可能也就没辙了。所以还是要巩固基础,保持一定的把握和实现细节的能力,至少当AI无法解决时,自己不至于束手无策。

AI无法打包票我帮你解决所有问题。这似乎和现在能用AI的一切就都用AI的主流论调相悖,但我认为这仍然是一个非常必要的过程。就如同开源项目的出现,虽然提升了实现工程的效率,但却让有些年轻的程序员认为

任何时候都能找到数学三方库。社会工业化虽然提高了我们的舒适度,但却让有些城市居民认为粮食都是从商品货架中长出来的。如果你仅仅是消费和使用者,不去了解这些东西,确实可以。但如果你是这个行业的专业人士,就是这些最基础和必要性的理解,过于依赖AI造成的认知断层可能会让你变成隐形文盲。当某一天你尝试了几十个PRP后仍然没有得到想要的答案时,这时你可能会由衷地感到无奈与后悔。

除此之外,要深耕作为专业领域的人更有优势的方面,比如具备独特性的行业知识经验和创意,多个领域的交叉融合和物理世界的交互等等,这些都是AI短期内无法轻易取代和复制的。另外如果你不乐意继续做技术,还可以转型去做和业务、人际关系、文化艺术等等更贴近人的领域,这些领域更加涉及到人与人之间的信任关系,作为工具的AI中短期内还无法进入,但这并不在我这篇内容的讨论范围内。

作为一名创作者,我希望能够产出更多的内容,帮助大家提升这些作为技术人真正立足所需要的价值,同时也能更好地帮助大家利用AI作为软件工程师提交的强大工具。如果你认同我的想法,请持续保持关注。

最后我想分享一个从某本书中读到的观点,我一直觉得这个观点很有意思。判断AI能够突破工具属性的一个标准是它是否能够脱离人类独立在经济社会中赚钱,拥有财富甚至是权力。如果有这个能力,他就有了自主参与经济和社会的可能,也就有了一定程度上负责任获取信任的资格,比如他可以把犯错后的损失以金钱的形式赔付你,或是和你对簿公堂。

本期内容的前提基本都是建立在上面所说的这一情况在中短期内不会发生的基础上的。如果真的在短期内出现了这一现象,那么我想AI给人类社会带来的变化必然是极度剧烈的,这就超出了我的认知范围,无法再加以妄断揣测了。

本期内容的文字版本可以到详情获取。如果我的内容能够对你有所帮助,我会感到非常高兴。我是瓦连城,致力于帮助你成为一个更出色的工程师,感谢收看。

颜色主题调整

评论区~