永结无间Ⅳ--AI改变了我的编码风格

我发现与 AI 伙伴一起编码极大地改变了我的编码实践和风格——其中一些变化甚至是异端邪说。当我开始在 Google 工作时,你要做的第一件事就是学习 Google 严格的代码风格指南。这些指南旨在确保当人们在过去和现在的不同 Google 员工编写的文件之间切换时,代码易于阅读。微软也有类似的指南,但他们的风格指南对人类来说更棘手,因为有 szHungarianNotation。

现在,随着人工智能编码助手变得越来越普遍,风格指南可能会有所改变,以优化使用这些新工具。以下是我特意和自然做出的一些改变,以便在与人工智能协作编写代码时提高效率。


更扁平、更模块化的代码结构

我的编码风格中最重要的变化之一是转向更扁平、更模块化的代码结构。我现在将代码保持在扁平的 OO 层次结构中,放在更大的文件中,并且外部文件依赖性更少。最近,我甚至放弃了 OO,转而使用“函数式”方法。这种方法有两个主要目的:

1. 它使将代码片段复制并粘贴到 AI 工具中变得更加容易,而无需包含或解释其他上下文。2
. 它允许从命令行进行原子执行,从而能够快速验证 AI 建议的更改。

这种方法包括 CSS。是的,有点离经叛道,但我现在几乎总是使用内联 CSS。我们应该将 CSS 与内容分开,但这需要将大量上下文传递到 LLM 中,否则它会为你产生幻觉!所以,我现在经常使用内联 CSS — 既在 HTML 中,也在生成 DOM 的 JavaScript 中。它对人类来说看起来不太好看,但对机器来说更好。如果你仔细想想,CSS 的分离不仅仅是为了重用,它是为了人类可读性,而机器不需要它。

这种结构变化带来了更加模块化、更易于测试的代码。我发现自己创建了更多的入口点,并编写了可以在更小、更集中的单元中测试的代码。这不仅提高了代码的整体质量,还使与 AI 工具的协作变得更加容易。

超越简单的副驾驶

有趣的是,我已经不再使用基于 IDE 的 coPilot 和代码完成工具了。虽然这些工具对于简单的任务很有帮助,但在使用 AI 时,我发现了一种更有效的方法:

现在,我不再依赖逐行建议,而是将较大的代码块或整个文件复制/粘贴到 AI 中,并要求进行具体的更改或改进。这种方法允许 AI 了解代码的更广泛背景,并提供更有意义、更全面的建议。它还允许我从上下文中排除可能让 AI 感到困惑的代码,或者诱使它更改/清理遗留代码以及所有调用者和被调用者——这会带来很大的风险。

人工智能作为结对程序员

大型语言模型 (LLM) 已成为我的虚拟配对程序员。我经常使用它们来:

- 了解我刚编写的新功能的想法
- 要求对一段代码进行一般性改进
- 集思广益,寻找解决问题的替代方法

这种合作通常会带来比我自己想出的更优雅、更高效的解决方案。这就像有一个知识渊博的同事 24/7 随时待命,与我交流想法并获得即时反馈。与谷歌的代码审查不同,最好的部分是,我可以忽略人工智能输入,而不会留下持续数天的数字痕迹或争论。

个性化人工智能情境

为了保持项目间的一致性并最大程度地提高 AI 协作的效率,我制定了一套规则,并应用于我的所有 LLM 交互中。这些规则包括:

  • 在 Python 中首选双空格缩进
  • 使用最新的 Python 版本
  • 指定所有依赖项的(接近最新)版本
  • 优先使用 Font Awesome 图标,避免使用 SVG 和其他库
  • 始终请求完整的代码输出以避免截断问题

通过预先设置这些首选项,我可以确保 AI 生成的代码符合我的编码风格和项目要求,从而减少手动粘贴后对手动正则表达式的需要。

接口的全新开始

当谈到用户界面时,我发现了一个有趣的现象:从 HTML 或 SwiftUI 开始通常会比尝试在现有界面上与 AI 协作产生更好的结果。

原因很简单:当你从头开始时,代码的格式和结构都是按照人工智能期望和通常使用的方式进行的。这样,人工智能将来更改或添加界面代码时出现的错误和假设就会减少。

全球需求第一

我开始新项目的方法也发生了变化。我现在首先定义全局需求,例如:

- 响应性
- 整体外观和感觉(例如“现代/扁平”)
- 关键设计元素

通过在深入研究具体功能之前建立这些总体指导方针,我为项目创建了一个更具凝聚力的基础。这种方法还可以帮助 AI 从一开始就了解项目的方向。

维护完整上下文

在编码过程中使用人工智能最强大的方面之一是能够保持项目发展的完整背景。我通过以下方式实现这一点:

- 在 LLM 内启动项目
- 为项目的每个主要部分保留单独的聊天线程。对于上下文窗口来说不要太大。
- 通过 AI 进行更改,即使是手动输入可能更快的小编辑。

这种做法可确保 LLM 拥有按时间顺序排列的、完整的创作意图、错误和迭代历史记录。这对于以后的参考非常有价值,并允许 AI 在项目进展过程中提供更明智的帮助——并且不会重复之前的错误。

LLM 一致性是关键

通过反复试验,我了解到坚持每个项目或文件使用一个 LLM 的重要性。不同的 LLM 具有不同的编码风格和假设,如果在它们之间切换,可能会导致不一致。

最近,我大部分的编码任务都是使用 Claude.ai。选择它的原因包括:

  • 它的大型上下文窗口对于复杂项目来说几乎是无价的
    - 具有竞争力的 API 定价,尤其是在引入 Sonnet 模型之后
    - 能够使用相同的 LLM 来编写代码和执行提示

这种一致性在处理包含 LLM 提示/API 调用的代码时尤其有用。是的,如上所述,将这些提示字符串与调用代码保持内联,而不是单独的数据文件 <。同一个 LLM 可以理解代码和提示,从而优化它们的交互并带来更好的整体结果。

满怀信心地拥抱新技术

使用 AI 最令人振奋的方面之一是,在使用各种平台的最新小部件和 API 时,它能给人信心。在不断变化的 SDK 世界中,掌握最新的工具和功能可能具有挑战性。但是,有了 AI 作为编码伙伴,我发现自己更愿意尝试和实现最新的平台功能,因为我不必学习它的大部分用法和细微差别。

AI 的知识库,尤其是 Claude 3.5 Sonnet 的最新截止日期,通常包含有关最新 API 和小部件的最新信息。这意味着我可以快速获得有关如何有效使用新功能、了解最佳实践以及避免常见陷阱的指导。这种信心让我能够突破项目的界限并提供更有趣的解决方案。

增强代码质量和风格

我注意到的另一个重要好处是,AI 倾向于默认使我的代码更加“Python 化”。在使用 Python 时,AI 生成的代码通常遵循 Python 的可读性和简单性理念。这不仅使代码更优雅,而且从长远来看也更易于维护。

此外,当我明确要求时,AI 通常会生成更高效、更易读的代码实现。这就像有一位高级开发人员不断审查和重构你的工作,提出你可能没有考虑过的改进建议。这极大地提高了我的代码库的整体质量和性能,并且是提高我自己的编码技能的绝佳学习工具。

一个简单而强大的 AI 技巧,用于改进 UI/UX

我发现最有效的人工智能技术之一,虽然听起来简单得令人尴尬,就是向人工智能提供 UI/UX 代码,并简单地指示它“让它更漂亮”或“让它更好”。这种方法产生了令人惊讶的令人印象深刻的结果。

这就是为什么这种方法如此有效:

1.利用 AI 的广泛知识:像 LLM 这样的 AI 模型已经接受过大量代码的训练,包括大量设计精良的界面示例。通过要求它改进您的 UI/UX,您可以利用这个广泛的知识库。

2.克服设计师的障碍:有时,作为开发人员,我们可能会陷入自己的设计模式或难以设想改进。人工智能可以提供我们可能未曾考虑过的新观点和想法。

3.快速迭代:这种方法可以实现快速迭代。您可以快速生成多个变体或改进,然后挑选出最佳设计。

4.学习机会:通过分析 AI 建议的更改,您可以学习可能尚未意识到的新设计模式、CSS 技巧或现代 UI 实践。

5.定制:您可以通过指定您喜欢的设计原则或风格进一步细化您的请求,例如“使其更简约”或“添加现代、扁平的设计感”。

更普遍地说,也是对自我的一种威胁,当我寻求更一般的、不太具体的帮助时,往往就会出现更好的代码和设计。

这种让人工智能“变得更漂亮”或“变得更好”的简单技巧已成为我快速提升 UI/UX 代码视觉质量的首选策略之一。这证明了人工智能如何增强我们的设计技能,并帮助我们以最小的努力创建更具吸引力的界面。

无缝多语言开发

我体验到的最有趣和最实用的好处之一是可以轻松在多种编程语言之间切换。在工作中,我经常在 HTML、JavaScript、Python、Django 和 Bash 等语言之间切换。在将 AI 集成到我的工作流程之前,我偶尔会混淆特定于语言的语法,尝试在 Python 中使用 `.push()` 或在 JavaScript 中使用 `.append()`。

在人工智能的帮助下,这些跨语言错误变得少了很多。人工智能会跟踪语言上下文,并为每种语言提供适当的语法和方法。这不仅减少了错误,还提高了我的工作效率,让我能够在可能需要不同语言的项目的不同部分之间更加无缝地流动。

这几乎就像拥有一个通晓多种语言的结对程序员,他可以毫不费力地在语言之间切换,让您保持正轨,并避免那些可能中断您的编码流程的虽小但令人沮丧的语法错误。

可量化的生产力提升

也许将 AI 集成到编码过程中最令人信服的理由是生产力的明显提高。根据我的经验,我发现使用 LLM 时,我的工作效率大约是不使用 LLM 时的两倍。这种 2 倍的生产力提升不仅仅是更快地编写代码;它涵盖了开发过程的各个方面:

1.更快地解决问题:人工智能有助于快速探索解决问题的不同方法,通常会提出我可能没有立即考虑到的解决方案。

2.减少调试时间:通过 AI 辅助生成更清晰、更一致的代码,我花在调试和修复错误上的时间更少。

3.高效学习新技术:如前所述,AI 协助使用新 API 和新技术大大降低了学习曲线,让我能够更快地实现新功能。

4.简化文档:人工智能有助于生成和改进文档,这项任务通常需要大量时间,但对于可维护性至关重要。

5.代码重构和优化:能够快速获得 AI 的代码改进建议,意味着我可以更频繁、更高效地重构和优化代码。

生产力的翻倍不仅让我能够更快地完成项目,还让我有更多时间专注于开发的创造性和战略性方面。值得注意的是,这种生产力的提高来自于实践和学习如何有效地与人工智能工具协作。关键是在利用人工智能能力和运用自己的专业知识和创造力之间找到适当的平衡。

虽然总体生产率提升显著,但需要注意的是,使用 AI 生成的代码也存在一系列挑战。调试 AI 建议代码中的简单错误可能很烦人,但我发现这通常比调试我自己的错误和遗漏要快得多。这种权衡有助于提高整体生产率,因为生成代码和解决复杂问题所节省的时间超过了偶尔因 AI 引起的错误所花费的时间。

应对人工智能增强编码中的挑战

虽然人工智能增强编码的好处很多,但必须意识到潜在的陷阱以及如何有效地避开它们。以下是我遇到的一些挑战以及我为解决这些挑战而制定的策略:

1. 复制粘贴的陷阱

我最初遇到的最耗时的问题之一是在 AI 聊天窗口和我的开发环境之间传输代码。在此过程中经常会出现错误,要么是覆盖现有代码,要么是遗漏了 AI 建议的关键部分。

解决方案:我现在总是要求 LLM 生成完整的代码以进行更改。这种方法确保我拥有完整的上下文,并且在将 AI 的建议集成到我的代码库中时可以更轻松地发现任何不一致之处。

2. 平衡 AI 辅助和 IDE 功能

虽然许多开发人员使用直接集成到他们的 IDE 中的 AI 编码助手(如 GitHub Copilot),但我发现,当我能够更好地控制向 AI 寻求帮助的环境时,我会更有效率。

策略:我不再仅仅依赖 IDE 中的 AI 助手,而是与 LLM 保持单独的对话。这使我能够提供更全面的背景信息、提出后续问题并获得更有针对性的帮助。在窗口之间切换的代价被 AI 输入的质量和特异性所抵消。

3.过度依赖人工智能

人们很容易过度依赖人工智能的建议,这可能会阻碍你自己解决问题的能力,或者导致你对正在使用的代码缺乏理解。

缓解:在实施 AI 生成的每段代码之前,我会刻意去理解它们。我经常要求 AI 解释其建议或提供替代方法。这不仅确保我理解所使用的代码,而且也是一次宝贵的学习机会。

4. 保持代码一致性

当频繁合并 AI 生成的代码时,可能会产生缺乏风格或方法一致性的代码库的风险。

方法:我为 AI 交互制定了一套指导方针,包括编码风格偏好和项目特定要求。我会在每次会话开始时向 AI 传达这些内容,并定期提醒它这些指导方针。此外,我还会定期进行代码审查,以确保整体一致性。

5.不断重构的诱惑

使用人工智能生成的代码的一个意想不到的副作用是,它提高了你对现有代码库的质量和风格的认识。这种现象让我想起了我在谷歌工作时的一条老规则:清理你接触的任何文件/代码。然而,人工智能的情况将这一点提升到了一个新的水平。

在集成 LLM 编写的代码时,这些代码通常看起来更干净、更优雅,我有时会发现自己被清理遗留代码的冲动所困扰。AI 生成的代码和现有代码库之间的风格对比可能非常鲜明,这使得旧代码看起来不太理想或过时。

虽然更加关注代码质量是有好处的,但它也带来了挑战:

1.时间管理:重构现有代码的诱惑可能会浪费大量时间。一开始只是快速清理,但可能会演变成大规模重构,从而可能破坏您当前的任务。

2.范围蔓延:不断的重构可能会导致项目范围蔓延。如果不小心,一个简单的功能添加可能会演变成大规模的重写。

3.平衡法案:平衡统一干净的代码库愿望与项目时间表和稳定性的实际需求变得至关重要。

为了解决这个问题,我采取了一些策略:

-定期重构:我不会立即重构遗留代码,而是做笔记并安排专门的时间进行清理任务。这有助于在解决技术债务的同时专注于当前目标。

-渐进式改进:当我接触遗留代码时,我会进行小规模、渐进式改进,并将它们分解成带有注释的独立代码块,而不是全面重写。这种方法符合 Google 的原始原则,且不会影响当前工作。至少我是这样告诉自己的。

-重构冲刺:我会定期用整个冲刺来重构代码库,使旧代码库达到当前标准。这样可以集中精力进行改进,而不会不断中断功能开发。

虽然 AI 辅助编码带来的质量提升总体上是积极的,但管理它对现有代码处理方法的间接影响也很重要。通过意识到这种趋势并制定应对策略,您可以在改进代码库和保持当前任务效率之间保持平衡。

6. 野心增强的悖论

将人工智能融入我的编码过程最意想不到的结果之一是它对项目范围和抱负的影响。虽然人工智能无疑提高了我在代码生成和解决问题速度方面的效率,但我发现,有点矛盾的是,我往往需要更长的时间来交付项目。原因如下:

1.扩大项目范围:人工智能辅助带来的效率让我在定义项目范围时更加雄心勃勃。我之前认为过于耗时或复杂的功能突然变得触手可及。

2.追求完美:凭借人工智能快速生成和迭代代码的能力,我常常发现自己追求更完美或更全面的解决方案,而不是满足于“足够好”。

3.探索替代方案:人工智能能够为一个问题提出多种解决方法,这鼓励人们更多地探索替代解决方案,这虽然有利于提高质量,但可能会延长开发时间。

4.功能蔓延:在人工智能的帮助下轻松添加新功能或进行改进可能会导致功能蔓延,即项目不断超出其原始范围。

5.学习新技术:人工智能的渊博知识经常会向我介绍新技术或新技巧,我很想将其融入到项目中,从而带来额外的学习曲线和实施时间。

这种情况带来了新的挑战:如何在人工智能提供的更多可能性与实际的项目管理和交付时间表之间取得平衡。为了解决这个问题,我必须制定新的策略:

-更严格的范围定义:我现在花更多的时间提前明确定义和限制项目范围,即使范围变化似乎可以通过人工智能轻松实现,我也更不愿意改变它们。
-时间限制探索:我为探索替代解决方案或新技术设定了严格的时间限制,迫使自己做出决定并继续前进。
-最小可行产品 (MVP) 焦点:我重新致力于 MVP 概念,在考虑扩展或改进之前,使用人工智能快速达到可靠的 MVP。
-定期进度审查:我会更频繁地进行进度审查,评估当前方向是否与项目目标和时间表一致。

虽然人工智能功能激发的雄心壮志可以带来更多功能丰富、创新性强的解决方案,但必须意识到其对整个项目时间表的影响。关键是要利用人工智能带来的生产力提升,同时保持项目范围和时间管理的纪律性。

7. 技术故障和挫折

虽然人工智能极大地改善了我的编码过程,但它也存在一些技术挑战。特别是两个问题在我的工作流程中浪费了大量的时间:

不完整的代码生成

我遇到的最令人沮丧的问题之一是代码生成不完整,尤其是在使用 GPT 和 Claude 等模型时。在处理较长的上下文窗口或生成较大的代码块时,这个问题似乎更频繁地发生。人工智能可能会生成乍一看完整的代码,但仔细检查后,会发现关键部分缺失。没有省略号,没有注释,只是缺失,甚至没有换行对齐。

尤其具有挑战性的是,当你要求人工智能修复或完成代码时,它通常会表现得好像缺失的部分已经存在一样。这几乎就像人工智能内部表示中有一个不可见的标记或其他怪癖会破坏输出。

为了缓解这种情况:
- 我学会了仔细检查所有生成的代码,尤其是较长的片段。
- 当我发现缺失的部分时,我常常发现要求人工智能重新生成整个函数或模块比要求人工智能“修复”代码更有效。
- 对于关键或复杂的代码片段,我有时会要求人工智能以更小、更易于管理的块来生成代码。

聊天线程错误

我遇到的另一个重大问题(特别是使用 Claude 时)是偶尔会出现一般错误消息,导致整个聊天线程无法访问。这可能会令人非常沮丧,尤其是当您正在处理一个复杂的问题或在该线程中积累了大量上下文时。

为了解决这个问题:
- 我开始更频繁地将重要的代码片段或聊天中的见解保存到外部文件中。
- 对于复杂的项目,我尝试将讨论分成更小、更有针对性的聊天线程,而不是依赖于单一的长时间对话。
- 我希望有一个功能可以保存草稿线程,快速克隆它们,或者实现某种形式的版本控制,以防止完全丢失工作。

这些技术故障提醒我们,虽然人工智能编码助手是强大的工具,但它们仍是不断发展的技术。制定备份策略至关重要,不能完全依赖聊天线程的持久性或代码生成的完美性。

结论

人工智能增强编码代表着软件开发的未来——我们的惯例也需要随之改变。成功的关键不在于抵制这种变化,而在于学会有效地与人工智能工具协作,同时保持我们的批判性思维和决策能力。人类应该专注于自己擅长的领域——而将人工智能更擅长的事情委托给人工智能。


​​欢迎前往我们的公众号,阅读更多时事资讯​​​​​

创作不易,觉得不错的话,点个赞吧!!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值