优化人工智能的软件工程 | 原创,AI翻译
目录
- 优化AI时代的软件工程
- 面向AI的扁平架构
- AI驱动工作流中的Python优势
- 上下文工程与令牌优化
- 为AI辅助而构建代码
- 作为人工AI代理的生存之道
- 在企业环境中使用AI工具
- 工具选择与上下文管理
- 构建可重用的提示系统
- 利用Python进行Java开发
- 用于Java项目支持的Python脚本
- 跨语言开发策略
- AI辅助代码生成
- AI时代的编程语言
- Python、Rust和Java的未来
- 性能与简洁性的权衡
- 语言演进与AI集成
优化AI时代的软件工程
在这个博客中,我使用了数百个脚本来协助翻译、测试、前置内容维护和Telegram机器人。我认为这种开发方法可能代表了为AI优化的软件工程的未来。
我并不依赖Python模块的功能,也不想像大型Java Spring项目那样构建代码。
在我的职业生涯中,我参与了许多软件项目。我见过令人印象深刻的银行架构、微服务、有效的多国设计以最小化重复、基于Spring构建的强大基础框架,以及具有集中式配置的强大治理。
虽然这些银行架构令人印象深刻,但如果我们今天重新开始,我会考虑为LLMs和AI进行优化。这将涉及更好的上下文工程、改进的关注点分离,以及优先考虑AI优先思维而非以人为本的设计。尽管Spring提供了多层和良好的抽象,但对于LLMs和AI来说,导航起来可能具有挑战性。
我认为我们应该追求更扁平的结构,类似于扁平组织。这意味着使用两个层级:第一层调用第二层。在函数中,最好直接调用另50个函数,而不是有50个嵌套层级或堆栈。AI/LLM难以判断或推断过于复杂的嵌套结构,但它们擅长处理100到200行代码的小函数。Python非常适合调用和从其他文件导入。
Python代码比Java更容易的原因之一是其依赖管理简单。你只需要使用pip install
添加依赖。对于Maven,你需要在POM XML文件中编写依赖,然后使用mvn compile
让Maven下载依赖。
Python简单的另一个原因是其代码可以直接运行而无需麻烦。
尽管从Java 11开始,java
命令可以直接执行单文件源代码程序,而无需使用javac
单独编译它们。但是,对于Java项目,它们通常很大,因此需要使用mvn spring-boot:run
以及一些属性配置来运行它们。
第三个原因是Python的模块设计简单;你可以使用from
和import
轻松地从其他文件导入代码。
目前,许多AI聊天机器人可以在聊天机器人窗口中直接运行Python代码,例如Grok。
当比较100个Java文件,每个约有1000行代码,与一些简单的Python脚本时,这不是一个公平的比较。对于这种项目,我更喜欢有1000个Python文件,每个约有100行代码。
可以选择代码行或函数进行编辑。但是,你需要知道如何选择。为什么不让AI处理这个任务,让我们的生活更轻松?因此,我们只需要使用“全选”选择所有代码,并告诉AI/LLM如何编辑。
对于Python,使用if __name__ == "__main__":
运行和测试文件中的函数更容易。其他Python文件也可以更容易地调用该文件中的函数,而无需运行测试。
这是为AI优化的上下文工程。我们可以以其他方式实现吗?AI/LLM是自回归的。但是,当我们使用Copilot或Claude Code时,我们不知道AI软件代理如何帮助我们。他们应该替我们思考。
我们能否在用户端特别安排代码以减少令牌使用?在这一点上,拥有1000个Python文件,每个100行代码的方法对这个目的很有效。因为你可以在让其他Python代码调用它们之前轻松验证函数和代码文件。
但是有一个问题,如果你想同时更改几个代码文件,这样做并不容易。简单的方法是将代码复制到AI聊天机器人,并让它们告诉你如何编辑这些文件中的代码。
也许,我们不需要使用行数来分离函数或逻辑。但我们应该这样做以将逻辑分离为小函数。我们可以通过自然地按逻辑类型分离它们来实现这一点,使它们看起来更短。
为什么我们想要优化AI的软件工程?因为AI很强大,我们应该优化一切以适应AI,然后让AI尽可能多地帮助软件工程。
这不仅适用于代码,也适用于任何文本。假设我们是非常挑剔的编辑;我们不想让AI一次性编辑我们的大文本。我们想要逐段检查。对于代码,我们可以容忍轻微的错误或缺陷。对于文本,我们可以容忍它们,因为大多数读者并不那么挑剔。
但是代码不同,有时即使是轻微的错误也会导致大型项目完全失效。
对于XML或YAML文件,我们可能不需要过多分离,因为它们已经高度结构化。
对于HTML文件,我们应该进行一些分离。与其将数百个JavaScript文件与数百个HTML文件一起编写,使其容易超过1000行代码,不如使用import
来管理JavaScript。对于JavaScript代码,我们可以使用上述方法进行分离。
我们希望以让AI轻松添加、编辑、删除和运行代码的方式构建代码。这是开始。想象一下,当所有代码都能轻松由AI生成或修复的一天。世界将高度数字化。
想象一下,我自己写了100个大型软件项目,并提供API与他人连接。这包括我的日常议程;我自己现在就像一个拥有1000名员工的科技公司。它们是为我的需求定制的,以赚钱或花钱为我带来好处。这真的很令人惊叹。
作为人工AI代理的生存之道
AI代理应该自动运行代码。现在,这篇文章的标题是“人工AI代理”。你可能认为我在开玩笑,但我不是。
我之所以说“人工AI代理”,是因为对于大公司来说,技术采用速度缓慢,原因是安全数据问题和长期考虑。
市场上有很多新技术;谁知道什么会持久,什么会迅速消失。
它们也有安全数据问题。通常,他们希望与数据政策严格且受公众监督的大品牌合作。这解释了为什么微软成为财富500强公司中的顶级合作伙伴。其他公司使用它们的Teams、Microsoft Office 365、Azure和Copilot。
但是,如果大公司不向员工提供LLM API使用权限,我们需要考虑如何作为人工AI代理工作。
这意味着我们将使用许多工具来工作,类似于API中使用的工具使用或函数调用。我们将自己进行提示工程或上下文工程。
而不是使用Claude Code或Manus执行复杂任务,我们可能会用普通AI聊天机器人亲自执行任务。
AspectJ很好,因为它使用AOP编程拦截方法。Spring中的过滤器也很好,可以捕获HTTP请求的日志。Log4j中的日志记录器很好,可以将特定日志重定向到文件。IntelliJ IDEA很好,因为它有一个将对象导出为文本的功能。
SQL客户端很好,因为它们可以轻松导出行的CSV或Excel文件。Git diff很好,因为它可以给出比较文本。
它们都帮助你为AI聊天机器人提供更好的上下文。AI聊天机器人也可以帮助许多Python脚本执行任务。
要成为有效的AI代理,你需要使用许多有效的工具来帮助你完成任务,无论是简单还是复杂的。
没有LLM/AI聊天机器人的API,你需要将文本复制到聊天机器人中。这比直接调用AI稍微繁琐一些,但好消息是你可以更仔细地选择上下文或提示。
因此,你不需要像自动AI代理那样多次询问AI聊天机器人。你可以仔细选择你将使用的工具。
因此,以人工AI代理的方式工作有其好处。然而,AI代理技术发展迅速,并向世界展示其潜力。
如果它们非常有用,大公司将像AI聊天机器人一样采用它们。否则,它们无法与采用它们的公司竞争——不仅仅是其他大公司,还有小型初创公司。因为AI现在非常强大,拥有数十名员工的初创公司可能击败拥有1000名员工的公司。
作为人工AI代理的工作有时是不可避免的。这份工作除了缺乏先进的AI技术外,还有其他好处。找到好工作也不容易。因此,在这种情况下,它给了我们空间,利用传统智慧最大限度地利用AI聊天机器人。
这意味着我们可以组织和积累我们的提示,为AI聊天机器人创建系统提示,类似于Claude或Grok中已公开的提示。这样,我们就不需要反复编写提示。我们可以使用Python脚本帮助我们编写提示。我们可以获取HTTP请求的日志并编写提示以生成API测试用例。
编程的魔力在于其无限的抽象层级。这类似于函数,你可以有100个函数调用层级。例如,微信是基于iOS构建的,微信小程序是基于微信构建的。iOS本身是基于Objective-C或Swift构建的,而它们又是基于LLVM和苹果ARM芯片的指令集构建的。
利用Python进行Java开发
如何在AI时代利用Python帮助Java开发?我喜欢Python。在过去大约3年中,我最多使用了Python,自从2022年底ChatGPT发布以来。
一个帮助的方式是使用Python编写Java项目的SQL辅助脚本、测试脚本和日志搜索脚本。
使用Python分析Java的POM文件和包依赖。使用Python检查Java中的数据一致性。我们可以用Python做很多事情,而不是用Java。
但是Java没有PyTorch。Python可以帮助在200行代码中完成在Java中需要500行代码的任何事情。但是,通过使用AI工具,你也无法轻松获得自己的PyTorch版本。即使像TinyGrad这样的东西也需要时间来构建。
为什么要先写我们自己的脚本?一个原因是它非常可定制。没有公共软件或开源项目可以直接帮助我们在项目中,特别是在大公司中的项目。
大公司的大型项目已经开发了十年或更长时间。它们已经有很多定制化。
因此,未来将会有很多围绕大公司大型项目的周边项目。大公司内部编码代理工具中将会有更多类似Claude的代码路由器。大公司将会有更多定制化的Postman、SQL客户端和编译器。
使用Python代码也可以连接到Java代理。
这意味着我需要很好地学习Python和Java,以便知道如何用一种语言帮助另一种语言。
我可以用AI的帮助用Python为自己和企业项目创造很多东西。Java似乎不是障碍。Java、Spring、数据库,以及Angular、Vue或React作为前端,不应该成为Python大量帮助的障碍。
编程是如此灵活的事情。极限在于我们的想象力。
因此,AI发展迅速。我们可以通过AI在编码和学习中帮助我们用代码实现事情的多少和容易程度来衡量AI的进步。
我们是否有朝一日可以编写一些AI代理,然后这些代理帮助创建一个完整的TikTok,包括其大量微服务和大型iOS或Android项目?
如果AI如此强大,我们今天应该做什么?也许什么都不做,因为我们今天所做的事情在AI的帮助下很容易实现。在2025年,我们在AI帮助下一年的工作可能在2030年的AI能力下可以在一个月内完成。
这引出了我们的核心问题:我们的生命目的是什么?这一切都是关于什么?如何过上好生活?
AI像其他技术一样出现,为我们带来自由。但似乎在资本社会中,每个人都像机器一样忙碌。
回到主题。因此,Python也可以帮助编写Java代码。你可以使用Python获取编写代码的上下文,并让Copilot为你一步到位地完成。
AI是关于提示工程和上下文工程。提示和上下文帮助AI聊天机器人的响应。
Python可以帮助上下文;Python可以帮助生成提示。
因此,这不仅仅是关于Java,而是关于每一种其他编程语言。Python可以深入帮助它们。那么为什么我们仍然需要使用其他编程语言?
Python的内在设计使其性能不如其他编程语言,如C、C++或Rust。
AI时代的编程语言
AI现在如此强大,我们不得不从AI的角度重新思考一切。哪些编程语言在未来10年会流行?
Python肯定会。许多AI聊天机器人使用Python在浏览器中执行代码,例如Grok。Python以其简单性、易学性和良好的性能而闻名。它被许多软件项目采用。
Python比C++、Java和Rust慢。Java拥有庞大的社区。Rust基于C构建。
我怀疑许多项目会被Rust重写或替换。被重写意味着参考旧项目并使用Rust实现相同功能。被替换意味着用Rust编写的类似软件现在取代了用其他语言编写的软件。
Rust的语法相对复杂。但在AI时代,这不是一个大问题,因为AI会帮助编写代码。对于复杂的语法,人类实际上也没有太多困难。
我认为印地语或泰米尔语相当复杂。但对于北方的印度人来说,印地语不是问题,对于南方的人来说,泰米尔语也不是问题。
但对于像我这样的中国公民来说,我认为学习它是一个大问题。
一开始看起来,印地语的所有字符看起来对我都很相似。我认为印地语和阿拉伯语之间的差异就像中文和日语之间的差异,或者英语和西班牙语之间的差异。
编程语言之间的差异比自然语言之间的差异小。一个主要原因是编程语言仅在字符外观上有所不同,而自然语言还在发音上有所不同。自然语言在两个方面有所不同:字符集和发音。
编程语言只有大约一个世纪的历史,而自然语言有超过100个世纪。人们在某件事上花费的时间越多,差异就越多。意见略有不同的人会创造自己的版本。
这解释了英语口音。在一些TikTok视频中,人们说最差的英语口音是伯明翰。
因此,实际上,Rust并没有什么问题。它的性能相当好,因为它基于C/C++。
性能对许多应用程序至关重要。如今,许多应用程序被数十亿人使用。对于底层云计算基础设施,它们的服务被多次调用。因此,即使是微小的性能提升也能节省大量资金。
Rust有很多缺点吗?人们抱怨的是它难以学习。学习曲线陡峭。AI带来了好消息,因为它帮助学习很多。
我不需要了解很多关于Rust的知识。作为一名拥有10年经验的软件工程师,我可以用AI帮助编写许多简单的Rust应用程序。我只需要了解基本的Rust编译命令,如cargo
和cargo build
。我甚至不需要了解Rust语法本身。
对于Rust,可变性或借用模型不会给我带来麻烦。对于少于200行代码的简单应用程序,我可以通过提供错误消息直接让AI修复错误。
但是,如果Rust如此好,为什么人们仍然大量使用Python?因为Python在另一个方面很好。它非常容易使用和学习。它拥有庞大的社区和许多库。
Python仍然有足够好的性能,可以支持数百万,甚至数千万用户的产品。大多数产品没有那么多用户。如果你确实有那么多用户,你可以雇佣Rust或Java程序员来优化性能。
Python适合许多开发:机器学习、Web开发、数学、教学和脚本。虽然Python不擅长桌面应用程序,但MicroPython用于树莓派。
Java在AI时代会怎样?它也会很好,因为它拥有庞大的用户基础和社区。AI在这方面帮助很大。它被许多大公司使用。它们倾向于不改变主要编程语言。对于它们的一些大型遗留项目,使用新编程语言重写项目可能需要十年的努力。AI会帮助这一点,但过程仍然会很慢。
通常,大公司中的理性人不会考虑改变主要编程语言。他们的主要业务在其他领域。他们不太关心技术。如果他们关心,他们会成为软件或互联网公司,并在开源社区中领先。然而,并非许多财富500强公司关心这一点。
由于AI,将会有很多初创公司。初创公司喜欢做新事物,因此它们会尝试新编程语言。在AI时代,敏捷编程语言将在中小企业中获胜。
在算法竞赛中,最喜欢的编程语言会改变吗?C++已经主导了这个领域几十年。在实际算法竞赛中,你不能使用AI。但我认为在AI时代,将会有更少的人参与。
由于这些人编程非常好,并且由于AI有很多机会,为什么不更多的人为用户构建实际产品,而不是练习算法问题?即使算法竞赛之王Gennady Korotkevich也选择加入Devin。
但算法竞赛可以是聪明程序员的放松或退休爱好。这就像国际象棋或篮球。人们做这件事是因为他们喜欢它或需要它,而不是出于其他原因。许多人在30岁或40岁时打篮球。他们可能是出于健康原因或让生活更有趣。
对于iOS和Android,这是Java、Kotlin、Swift和Objective-C。由于AI,不会有重大变化,因为选择有限。在最终用户端,性能要求并不高。Google和Apple对其平台有很高的控制权。如果Google和Apple不改变,程序员也不会改变。
但是,对于服务器,有很多选择。更适合AI的语言将获胜。
过程化编程语言将比面向对象编程语言获胜。过程化语言直接且容易被AI生成,而OOP语言有许多嵌套层级或设计模式。
由于AI,会有更多的编程语言吗?我认为会。Zed和OCaml将有更多用户。LLMs/AI非常擅长学习模式,因此很容易将项目重写为其他语言。
编程语言在未来将面临更多竞争。那些在性能、语法和编译器质量方面表现良好的语言将固有地更受欢迎。竞争就像LLMs。那些固有优秀的,如Claude和DeepSeek,会受欢迎。
如果AI变得如此强大,以至于我们不再需要学习编程,那还需要很长时间。假设我们有一个非常大的项目,有1000个Java文件。AI可能需要10年才能轻松执行任务。