AI辅助编程8编码
8编码
在本章中,我们将深入学习一些简便的编码技巧。我们将从编码的基本要素开始--玩转函数和类。然后,我们将动手进行重构,整理杂乱的代码,使其运行得更加流畅。我们还将展示如何处理和创建数据。然后,我们将查看一些人工智能工具,这些工具可以帮助我们在不出汗的情况下创建花哨的前端。
8.1检查
人工智能辅助编程工具非常有用,但它们并不能取代真正的工程师的智慧和专业技能。
当你使用这些系统时,请记住:这是一种合作,而不是交接。保持敏锐,保持好奇,不要忘记仔细检查这些人工智能工具提供的所有信息。它们是帮手,不是英雄。
8.2判断
有时,自己动手编码比使用人工智能辅助编程工具更简单。毕竟,要让人工智能理解你的需求,可能需要多次尝试。不过,当你不断使用这些人工智能工具时,你就会掌握诀窍,知道什么时候它们有用,什么时候你最好单干。
例如,提示语是 "用 Python 编写一个方法,为日期时间对象添加默认时区"。但是,您应该有心理准备,因为很多方面都会被省略,您要么必须自己最终完成角情况的处理,要么与 ChatGPT 进行长时间的通信,指出它的错误。在这里,最主要的是初步估量解释一项任务所需的时间与您自己实现它所需的时间。
8.3学习
使用ChatGPT这样的工具来学习一门新的语言、框架或库会有很大帮助。它可能比学习课程、无休止地上网搜索或观看大量 YouTube 视频等老式方法更快。
你可以使用 ChatGPT 了解代码的所有基础知识和语法。此外,如果你更喜欢边做边学,还可以要求提供代码示例,看看所有代码是如何组合在一起的。如果你已经掌握了一种编程语言,ChatGPT 可以通过比较两种语言,让你学习新语言变得更容易。假设你精通 Python,但刚刚接触 JavaScript,它可以用 Python 术语解释两者的主要区别。如果你需要更多资源,ChatGPT 可以在互联网上搜索并为你推荐一些可靠的学习资料。
以下是一些可供参考的提示:
- 提示: 对于一个不懂 Python 的人,我应该先学什么?
- 提示: 我可以尝试哪些适合初学者的项目来提高我的 React 技能?
- 提示 你能推荐学习高级 SQL 查询的资源吗?
- 提示 您将如何用 Python 和 JavaScript 实现一个基本的 "待办事项列表 "应用程序,以突出它们之间的差异?
- 提示 我知道如何在 C++ 中使用循环。能否向我演示一下循环在 Python 中是如何工作的,以便进行比较?
- 提示: 查找 5 个有用的 YouTube 视频,介绍如何学习 Rust。
现在让我们看看 Ivashchenko 是如何处理这个问题的:
如果您想快速掌握一种新的语言或框架,您可以立即开始在该技术上创建一个新项目。比方说,你想学习 Django。让我们选择一个在该技术上实现的项目--让它成为一个在线商店。首先,只需询问 ChatGPT 如何开始在 Django 上开发一个新项目。它会告诉你需要安装哪些依赖项,如何设置项目的初始配置,以及需要处理哪些相关技术。然后,我们将继续讨论更具体的请求,如 "在 Django 中如何组织模型?"如何在管理面板中添加新的部分?"以及 "如何迁移数据库?通过逐步掌握新知识和提出越来越详细的问题,您几乎可以在任何以前不熟悉的技术上实现任何项目。我就是这样通过一个周末卓有成效的工作掌握了 Django 的。
您也可以让 ChatGPT 创建有用的学习指南。下面是一个提示示例:
- 提示: 创建 JavaScript 学习指南。重点放在初级水平上。
然后,你可以接着写
- 提示: 请为我制定一个学习计划。我应该学习哪些主题?练习或测验如何?编码问题?资源链接?
ChatGPT 甚至可以帮助您记住新概念。一种方法是使用缩略语等记忆工具。例如,假设你想记住 DevOps 的关键要素,其中包括持续集成、持续交付、微服务和基础设施即代码。这就是 ChatGPT 的建议:
- ChatGPT: CI-CD-MI(读作 "Ci-Ci-D-Mi")。
最后,你可以使用 ChatGPT 获得 LeetCode 的帮助。想象一下:你坐在面试室里,面前可能放着一块白板或一台笔记本电脑,然后面试官就会问你一个令人脑洞大开的算法或数据结构问题。这不仅仅是编码问题。他们在衡量你的思维速度、解释思路的能力和解决问题的风格。
如果你想更上一层楼,可以考虑注册 LeetCode。每月 35 美元。当然,ChatGPT 也可以在你需要的时候伸出援手。下面是一个简单的提示:
- 提示: 提出 3 个常见的 LeetCode 面试问题。
然后,ChatGPT 提出了两两相加、不含重复字符的最长子串和有效括号等难题。然后,您可以进行更深入的探讨,例如获取更长的解释或示例。
8.4注释
在赶工期的时候,你很容易忽略代码注释,或者完全不加注释。但人工智能辅助工具可以帮你解决这个问题。你经常能找到已经包含注释的代码建议。
有趣的是,由于有了人工智能技术,编写注释可能会让人觉得有些复古。如果代码让你挠头,你可以直接让工具帮你分解,不是吗?事实的确如此。
还有一点:写提示语正在成为新的注释方式。毕竟,大多数工具都在评论行中包含了提示。
当然,如果你想在某些代码中添加注释,也可以使用类似的简单提示:
- 提示: 根据最佳编码实践添加清晰的注释。
是否添加注释由您决定。这里没有放之四海而皆准的规则。关键是要看你和你的团队怎么做。但有一点是肯定的,那就是使用人工智能辅助工具在代码上添加注释是一件轻而易举的事。
8.5模块化编程
模块化编程是高效软件开发的基石。有了模块化编程,编码会更有条理,更容易理解,也更容易跟上进度。它还让与其他程序员的合作不再令人头疼,因为每个人都不会互相绊倒。此外,模块是可重复使用的;可重复使用性大大节省了时间,保持了一致性,并降低了出错的可能性。
模块化编程的价值当然也适用于如何使用人工智能辅助工具。它们不会通过简单的提示就开发出高级应用程序。它们不是魔法师。但如果你能将任务分解成清晰、具体的片段,这些工具就会大放异彩。否则,你最终可能会发现代码杂乱无章,偏离正轨。
Private Market Labs 的联合创始人兼首席产品官 Titus Capilnean 说道:
开始使用人工智能工具后,我可以专注于问题和解决问题的方法,而不是需要编写的实际代码的细枝末节。当我遇到一个技术问题时,我会先把它分解成更小的片段,这样输入和输出就很清楚了。这样做的原因是,我所使用的人工智能工具的上下文窗口可能不足以让我一次性想出一个好的解决方案。我发现,如果我要求模型提供使用简单输入、完成单一工作并提供我可以验证的输出的代码,那么调试和构建工作就会变得更容易。如果我对中间输出不满意,我会向 ChatGPT 描述我的问题,并尝试运行它提供的更新代码。一旦我对解决方案感到满意,我就可以添加额外的处理步骤,要么在现有函数中添加,要么将前一步的输出进一步完善,使其更接近我想要的解决方案。
人工智能工具还提高了我的工作效率,让我可以在将代码发送给编译器或部署云函数并在出现错误时消耗资源之前,检查我创建的代码片段是否真正正确。我只需将这部分代码粘贴到 ChatGPT 窗口,然后询问它是否正确,前提是我为代码片段的运行初始化/提供了正确的上下文(如导入、变量、常量、调用的自定义函数等)。这样,我就能生成运行得更好、更快的解决方案。
8.6 启动项目
在编码项目开始时,你可能会遇到 "冷启动问题 "或 "空白页问题"。
这里的场景是:你盯着空荡荡的屏幕,没有代码,没有数据,甚至没有清晰的前进路径。毫无疑问,这和听起来一样让人不知所措。第一个头疼的问题是选择项目的架构、设计模式和使用的技术。这些决定非常重要,因为你将长期与它们共存,所以你要尽可能从一开始就把它们确定下来。
不要忘记人的因素。让你的团队达成共识、找出有效的沟通方式、从零开始建立工作流程--这些可能和技术一样具有挑战性。这不仅仅是敲下第一行代码的问题。而是要为接下来的一切打下坚实的基础。处理这一阶段的工作需要巧妙的规划、技术知识和坚实的团队合作。
人工智能辅助编程工具可以帮上大忙。您可以使用它们来搭建应用程序的基本脚手架。您可以根据自己的愿景确定一个定制的起点。这些工具能让你免去初始设置的繁琐,直接进入项目中更有趣的部分。
你可以提出一个特定的任务,然后提示 LLM 生成模板或启动代码。
下面是一个提示示例:
- 提示: 为一个网络应用程序生成启动代码,该程序将用户在多个平台上的社交媒体信息聚合到一个仪表板界面中。您建议我使用什么语言和框架?一般文件结构如何?
ChatGPT 首先建议使用 React 来创建流畅的单页面应用程序(SPA)。它还建议使用 Redux 来维护强风格和可重用的组件。然后,它建议使用 Node.js 运行应用程序,Express.js 用于 API 端点。它还推荐使用 Passport.js 进行登录,使用 MongoDB 和 Mongoose 构建数据库和模型。
8.7 自动填充
当你深入编码区,为时间单位设置常量时,你会发现只是一行又一行的重复。这时,GitHub Copilot 就能帮上忙了。你可以让它提供自动填充功能。
让我们举个例子。假设你正在创建一个应用程序,并想让它具有响应性。这意味着您需要为 CSS-in-JS 风格组件库的断点设置常量。
breakpoints = {
'xs': '320px', # Extra small devices
然后在内联聊天中使用以下提示:
- 提示: 为其他屏幕尺寸创建常量。
您还可以更进一步。Copilot 可以通过查看项目中打开的文件来帮助自动填充。
根据 Capilnean 的说法:
我发现,如果有部分代码的数据结构相似,Copilot 就会特别有用。如果你在另一个文件中定义了一个对象,而这个文件又是你正在使用的代码库的一部分,那么当你试图定义一个类似的对象时,它就能在你输入时为你可靠地预先填充代码。例如,Sendgrid 电子邮件等常见 API 调用的对象在这里就很好用。
不过,稍有不慎,自动完成功能就会产生幻觉。例如,在导入时,它并不总是能正确地找到文件夹结构,尤其是在你设计了自己的代码形状,或者你使用的框架相当新且还没有完善文档的情况下。在这种情况下,我必须手动检查组件的来源,以及 Copilot 建议的目录是否正确。
8.8 重构
重构就像是对代码的春季大扫除。重构的目的是整理、重组,有时甚至是修整。它不是为了添加新功能或修复漏洞。
重构能让代码库保持健康,不那么杂乱,更直观。这就意味着,当你或其他人稍后跳回代码库时,会更容易理解发生了什么,从而减少头痛和对着屏幕骂脏话的情况。此外,更简洁的代码通常效率更高,错误更少,因此对每个人来说都是双赢。
重构是人工智能辅助工具大显身手的领域之一。只需一两句提示,你就能破解代码的复杂性,删繁就简,将代码重组为不仅实用而且优雅的代码。有了人工智能的帮助,重构就不再是一件苦差事,而更像是保持领先的秘密武器。
在本章接下来的几节中,我们将介绍一些重构的例子。
8.8.1 Ninja代码
把Ninja代码想象成动作片中的特技。它华丽而复杂,让你不禁想:"哇,他们是怎么做到的?但问题是:一旦敬畏之心消失,要弄懂它就难如登天了。想象一下,代码如此鬼鬼祟祟、错综复杂,就连编写代码的人在Ninja阶段过去后也无法弄清其中的头绪。当然,完成忍者动作的那一刻感觉是史诗级的,但当你或其他人需要跳回去进行修改时,感觉就不是 "嗨呀!"而是 "啊哦 "了。事实上,虽然忍者代码可能会炫耀一些高超的编程技巧,但它往往与良好的编码实践背道而驰,而良好的编码实践就是要保持整洁、简单和易懂。
无论如何,Ninja代码是很常见的。但是,使用人工智能辅助工具进行重构可以帮助解决这些问题。下面是一个例子:
console.log((function(n, a = 0, b = 1) { while (--n) [a, b] = [b, a + b];
有意义吗?你可能需要花很多时间才能弄明白。倒不如让 ChatGPT 来做这件事:
- 提示: 你能逐步解释这段代码吗?另外,你能以更简单、更易于维护的方式编写这段代码吗?
ChatGPT 确定这是一个计算第 n 个斐波那契数字的函数。它继续分六个步骤进行描述,然后提供了一个简化版本,如图:
ChatGPT: 在这个版本中,calculateFibonacci 函数清楚地显示了斐波纳契数列的迭代过程。该版本更加冗长,但更易于理解和维护,尤其是对于将来可能阅读此代码的其他开发人员而言。
8.8.2 提取方法
当你有一个较长的方法或函数时,就可以使用提取方法。你会从代码中挑出一大段专注于特定任务的代码,比如数据检查或特定计算,然后将其转化为一个新方法。
这种方法不仅仅是为了让事情看起来整洁。它也很实用。它可以帮助您保持代码易于阅读和理解。当你需要再次执行同样的任务时,你可以调用你的新方法,而不用重写代码。如果出现故障,如果代码被分割成一个个小块,就更容易解决了。这样既能让你的生活更轻松,又能保持代码的整洁和有序。
下面是提取方法的一些提示:
-
提示: 在函数式编程语言中提取方法时,有什么常见的陷阱需要避免吗?
-
提示: 我附上了一段 C# 代码。您能建议哪些部分适合重构提取方法吗?
-
提示: 您能比较一下我的原始函数和重构后的提取方法版本吗?哪个效率更高?
8.8.3分解条件
分解条件是指将冗长的 if-then-else 语句分解成更容易消化的内容。你知道那种冗长曲折的条件语句,会让你眯着眼睛盯着屏幕,试图搞清楚到底发生了什么。
比方说,你有一个 if 语句,其中包含一个复杂的条件,需要检查多个变量,还可能调用其他函数。与其每次都要解密,不如将该条件提取到一个方法中,并使用一个能清楚描述该条件检查内容的名称。例如,if (user.isActive() && user.hasSubscription() && !user.isBlocked()) 这样的条件可以重构为一个名为 canUserAccessContent() 的方法。这不仅使您的主方法更简洁,还能立即使代码变得不言自明。
同样,then 和 else 块中的代码也可以提取为不同的方法。这样,程序的主要流程就变得更加易读。读者不再需要阅读一行行详细的逻辑,而是可以从高层次上理解程序流程:如果该条件为真,则执行该操作;否则,执行该操作。逻辑的每个部分都有自己整齐命名的方法,使其更容易单独测试和修改。
下面是一些提示:
- 提示: 您能解释如何在 Java 代码中分解条件以提高可读性吗?
- 提示: 如何使用分解条件技术分解复杂的 if-then-else 语句?
8.8.4 重命名
重命名函数、变量和类看似是一个很小的改动,但对代码的可读性和可维护性有很大影响。当代码随着时间的推移而演变,原来的名称不再能准确描述代码的功能时,重命名就显得尤为有用。例如名为 processData 的方法可能会变得更加专业。将其重命名为更具描述性的名称(如 filterInvalidEntries),可以立即明确其功能。
编写重命名提示相当简单:
- 提示: 在我的 SQL 脚本中,保存数据库中用户总数的变量叫什么名字好?
- 提示: 下面是我的 JavaScript 代码片段。您能否查看变量和方法名称并提出改进建议?
- 提示: 我不确定我的 Java 类中的名称是否足够清晰。您能否提出更好的名称以提高清晰度?
但是您需要谨慎,比如在使用 Copilot 这样的工具时。如果更改名称,可能会破坏仍在使用旧名称的部分代码。
8.8.5 死代码
顾名思义,死代码就是没有任何用途的代码。这些被遗忘的代码行是由于功能被取消或更新导致某些部分变得多余而产生的。
清除项目中的这些死代码可以让一切变得更整洁、更易于管理。这也会减少新加入项目的人员的困惑。如果某些代码看起来没有任何作用,他们就不必再费尽心思去想为什么会有这些代码。
下面是一些有用的提示:
- 提示: 你能帮我找出这个 JavaScript 代码段中可能存在的死代码吗?
- 提示: 这是我的 Python 项目的一部分。您能指出任何看似未使用或多余的代码吗?
- 提示: 您能否查看一下这些 SQL 程序,并确认其中是否有可以安全删除的程序?
请注意,使用 LLM 可能会有风险。有时,看似陈旧、尘封的代码角落实际上可能对那些罕见的、以防万一的情况非常重要。还有多米诺骨牌效应:删除一段代码可能会破坏依赖于它的其他代码,尤其是当它是复杂逻辑或设置的一部分时。所以一定要谨慎。
另一个问题是,生成式人工智能可能无法真正理解其中的关系。因此,在人工智能系统变得更加复杂之前,最好不要使用它们来根除死代码。
在处理死代码时,替代工具可能是更好的选择。举例来说,linter 就是这样一种工具。可以将其视为代码的清理人员。如果您使用的是 JavaScript,还有 ESLint。Python爱好者可以使用Pylint,Ruby爱好者可以使用RuboCop。这些工具就像是编码中的语法检查器。它们能很好地找出那些讨厌的语法错误、潜在的 bug,当然,还有那些偷偷摸摸却什么也没做的代码。
此外还有重型检查工具:静态代码分析工具。顶级提供商有 SonarQube、Code Climate 和 Coverity。这些工具就像侦探。它们甚至不需要运行代码,就能挖掘出复杂的模式,这些模式可能会成为下一步的麻烦制造者,包括死代码。
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
8.9函数
函数是编码的面包和黄油,无论使用哪种编程语言,它在任何类型的软件程序中都扮演着重要角色。它们是代码的大块,能让你的程序保持整洁、易于阅读,因为它们能让你轻松地重复使用代码--这对任何开发人员来说都是救星。它们还能将一项大任务分解成更小、更易于管理的部分。这使得处理复杂的软件变得容易得多,尤其是当你需要修复错误、进行更新,或者只是想弄清楚代码在做什么的时候。
从一开始就确保函数的正确性是关键。让函数发挥作用是一回事,但还需要确保它们与代码的其他部分配合默契。您希望您的函数清晰、易用、高效。您需要考虑如何调用每个函数才有意义,如何设置函数,如何处理输入和输出的数据,以及如何处理任何故障。
以下是一些需要牢记的指导原则:
- 考虑单一责任原则
您的职能部门必须是一项工作的专家,仅此而已。这样就能更简单地弄清它在做什么,检查它是否正常工作,并在不正常时进行修复。
- 明确命名
给你的函数起一个名字,告诉你它到底在做什么。如果是计算总价,就叫 calculateTotalPrice。这样代码就更易读了。
- 短小精悍
一个好的经验法则是,在屏幕上无需滚动就能看到整个函数。简短的函数更容易处理,出现错误的可能性也更小。
- 参数是关键
输入使用参数,输出使用返回值。这将使您的函数具有可预测性和自足性。
- 保持一致
遵循您的语言或项目的编码规范和风格指南。这有助于保持代码的统一性,便于他人阅读。
只要牢记这些提示,您就可以为函数编写一些非常有效的提示,ChatGPT 可以提供帮助。看看这些提示示例:
-
提示: 编写一个名为 calculate_area 的 Python 函数,以长度和宽度两个整数作为参数,并返回矩形的面积。包含一个 docstring 解释该函数的目的,并确保该函数通过引发 TypeError 来处理非整数输入。
-
提示: 我需要一个名为 filterAndTransform 的 JavaScript 函数。它应将一个对象数组作为输入。每个对象都有名称(字符串)和年龄(数字)属性。函数应返回一个新数组,其中包含转换为大写的 18 岁或 18 岁以上的人的姓名。包括解释逻辑的注释。
-
提示: 创建一个名为 efficientSort 的 C++ 函数,对整数数组按升序排序。该函数应针对时间复杂性进行优化。在函数中提供注释,解释排序算法的选择及其时间复杂度。
-
提示: 您能否生成一个名为 safeDivide 的 Java 函数,接收两个双参数(分子和分母)并返回它们的除数?该函数应通过返回自定义错误信息来处理除数为零的问题。请在 Javadoc 注释中解释该函数及其错误处理。
8.10面向对象编程
面向对象编程,简称 OOP(Object-oriented programming),是一种使用 "对象 "概念来表示数据和方法的计算机程序编写方式。把它想象成创建一堆独立的小盒子,每个盒子都有自己的工具和信息。这些盒子被称为类,就像是创建不同对象的蓝图。类定义了对象的结构和行为,类似于模板。然后,你可以从这个类中创建单个对象,每个对象都有自己特定的细节,但遵循相同的基本结构。
进入 OOP 的世界,你可能会感觉像是踏入了一个由抽象、继承、封装和多态等复杂概念组成的迷宫。感觉就像用外星语言编写的一样。
这时,ChatGPT 就能成为你的翻译。它能将这些复杂的概念分解成一点一滴、易于消化的解释。对封装的真正含义感到困惑?只要问一问,你就会得到一个真正有意义的答案,而且不会再出现技术术语。
以下是一些提示:
- 提示: 你能用<你喜欢的编程语言>创建一个简单的类来演示封装吗?
- 提示: 编程中封装的实际例子有哪些?
- 提示 用日常生活中的一个类比解释 OOP 中的抽象。
- 提示: 能否举例说明编程中的继承?
- 提示:继承如何促进代码重用?继承如何促进 OOP 中的代码重用?
- 提示 多态性如何提高程序的灵活性?
- 提示 多态性在哪些情况下特别有用?
人工智能辅助编程工具也有助于提出类的初始结构。下面是一些提示示例:
- 提示: 设计一个具有 employeeName、employeeID 和部门等属性的 Employee 类。实现一个显示雇员详细信息的方法。此外,还要包含一个构造函数来设置这些属性。
- 提示: 我需要一个 Java 中的 BankAccount 类。该类应具有余额和账号等私有属性。您能否为 deposit()、withdraw() 和 checkBalance() 添加方法,以安全地修改或访问这些属性?
- 提示: 能否向我演示如何用 C# 创建一个 Vehicle 类,然后再创建一个继承自 Vehicle 类的 Truck 类?确保包含车轮和 fuelType 等属性,并演示不同访问修饰符的使用。
- 提示: 在 C++ 中,我该如何编写一个 FileHandler 类,在其构造函数中打开文件,并在其析构函数中关闭文件?此外,还要包含 writeToFile() 和 readFromFile() 方法。
8.11框架和库
在没有框架和库的情况下涉足软件开发,就好比在没有食谱或预拌配料的情况下从头开始烤制高级蛋糕。这是可能的,但难度很大,而且需要花费更多时间。框架和类库是让开发者生活更轻松的秘诀。每次你需要进行网络请求或操作 DOM 元素时,你只需利用已有的工具,而不必重新发明轮子。
人工智能辅助编程工具当然能帮上忙。首先,它们有助于学习基本功能和工作流程。它们还能告诉你何时最好使用框架或库。
但是,请谨慎对待它们的帮助。以下是 Capilnean 的观点:
鉴于 React 以及其他框架和库的大量更新,以及我们使用特定版本框架的事实,我不得不将这些更新作为系统提示提供给我的 ChatGPT 实例,以便优化结果。有时,GPT 提供的解决方案更像是学术性的,而不是生产级的,因此我倾向于与我们的资深开发人员合作来解决更复杂的问题。对于 React,我发现自己要求 GPT 检查我的语法和处理特定数据类型的方法多于实际为我构建一个完整的功能。
NodeJS 也是如此。我必须考虑到我们的内部 API 和处理数据的方法,然后才能向 ChatGPT 申请一个功能的代码片段。一旦我能够将我们某个函数的输出描述为我正在构建的功能的输入,它通常就能为我提供稳定的代码。如果输出结果不好或出错,我也会使用同样的方法。我会向它说明问题,并要求它朝着正确的方向更新代码。
8.12数据
数据是每个应用程序的生命线,真的。是它让应用程序生生不息。就像血液携带氧气和养分以维持我们身体的正常运转一样,数据也流经应用程序,为其提供施展魔法所需的信息和洞察力。
但是,创建样本数据可能会很困难。想象一下:你很想测试自己闪亮的新应用程序,但首先,你需要大量数据来了解它在现实世界中的实际运行情况。你开始输入一排又一排的数据--姓名、日期、数字,无论什么都行。但接下来,它就一直在运行。不停地输入。
更重要的是,你必须小心谨慎,让数据足够真实,这样你的测试才会有效,但又不能太详细,以至于每个条目都要写一本小说。如果你需要一个大型数据集呢?算了吧:你基本上就是在参加一场复制粘贴、调整和重复检查的马拉松比赛。
人工智能辅助编程工具可以很好地解决这个问题。但首先,你需要选择一个数据库,并创建模式和表格。还需要向工具提供表之间的关系。然后,您需要进行配置和设置。然后,人工智能就可以开始提供帮助了。
下面是一些帮助评估数据库的提示:
- 提示: 哪种类型的数据库最适合处理<特定数据类型或功能,如用户交互、产品库存等>?
- 提示: 对于预期流量<高/低>的应用程序和<数据类型,如图像、文本、实时数据>,我应该考虑哪种数据库?
- 提示: 我的预算很紧张。您能否为小型<应用程序类型,如本地快递服务应用程序>推荐一种经济高效的数据库解决方案?
- 提示: 我对数据库管理比较陌生。对于初学者来说,哪些数据库对用户友好且易于维护?
以下是一些请求数据库模式帮助的提示:
- 提示: 您能帮我为<应用程序类型,如网上商店、博客>设计一个基本数据库模式吗?我需要知道应该创建哪些表以及它们之间的主关系。
- 提示: 关系数据库中管理 < 特定类型数据(如客户订单、库存)> 的有效表格结构是什么?应该包括哪些字段和数据类型?
- 提示: 我应该如何定义关系数据库中处理 <描述应用程序功能(如活动管理、课程注册> 的应用程序的表之间的关系?具体来说,我需要帮助理解外键和连接表。
- 提示: 我正在为<描述项目>建立关系数据库模式。您能否指导我有效设置主键和外键,以确保数据完整性?
- 提示: 我正在为<描述项目>建立关系数据库模式。您能指导我有效地设置主键和外键以确保数据完整性吗?
- 提示: 对于处理<数据类型或应用功能>的数据库,您建议采用什么规范化策略?如何避免数据冗余并确保数据完整性?
- 提示:我正在使用 NoSQL 数据库: 我正在为<类型的项目(如社交媒体应用程序)>使用 NoSQL 数据库。我应该如何设计文档结构来存储 < 特定数据类型,如用户配置文件、帖子、评论>?
- 提示: 在设计数据库模式时,我应该考虑哪些索引策略来优化查询性能,尤其是 < 查询或操作类型,如全文搜索、频繁更新>?
- 提示: 我需要将现有数据库迁移到新模式。在不丢失数据完整性的情况下,重新设计数据库结构的主要考虑因素和步骤是什么?
下面是一些关于建立初始数据库环境的提示:
- 提示: 您能否提供在 <a 特定操作系统(如 Windows、Linux)> 上安装 <a 特定数据库服务器(如 MySQL、PostgreSQL)> 的分步说明?
- 提示: 安装 < 数据库名称> 后,为了获得最佳性能,我最初应该设置哪些基本配置?
- 提示: 确保<特定数据库>服务器安全的最佳做法是什么?我对用户身份验证和保护敏感数据特别感兴趣。
- 提示:如何优化 <特定数据库> 服务器的性能?在处理 <描述数据性质和预期负载,如大型数据集、高交易量> 的应用程序时,如何优化 <特定数据库> 的性能?
现在,让我们来看看如何使用人工智能创建样本数据。下面是一些提示示例:
- 提示: 创建 100 个 ID 和电子邮件数据的演示数据,并将其保存为 CSV 文件。
- 提示: 为 50 个产品创建演示数据,包括产品 ID、名称、价格和类别。
- 提示:创建 50 个产品的演示数据集,包括产品 ID、名称、价格和类别: 创建包含 150 条订单记录的演示数据集,每条记录都包含订单 ID、客户 ID、订单日期和总金额。
- 提示: 生成 100 名员工的样本数据,包括员工 ID、全名、部门和电子邮件地址。
- 提示: 为 80 个客户反馈条目创建样本数据,包括反馈 ID、客户 ID 和评论。
有了这些数据,就可以为其创建 SQL 语句。对于客户反馈条目,可以使用类似这样的语句:
提示: 生成一条 SQL 插入语句,用数据填充反馈表。
当涉及到数据转换的琐碎任务时,ChatGPT 可以说是你的救星。如果你是开发人员,就会知道在 XML、SQL、JSON、CSV 和 TOML 等不同格式之间转换数据是很常见的。但老实说,这可能是一个乏味的过程,有时还容易出错。这就是 ChatGPT 派上用场的地方。
下面是一些示例提示:
-
提示: 下面是 CSV 行:"无名氏,35 岁,纽约"。你能帮我把它转换成 XML 格式吗?
-
提示: 我有一个这样的 JSON 数组: {'姓名':'爱丽丝','工作':'工程师'},{'姓名':'鲍勃','工作':'设计师'}]。如何用 SQL 表格式表示?
-
提示: 我需要将以下 TOML 配置:'title = "My Project" owner = "Sara"'转换为等价的 YAML 格式。您将如何转换?
8.13前端开发
前端开发包括使网站看起来美观、浏览顺畅。其核心是使用 HTML 来建立网页的基本结构,使用 CSS 来美化外观和布局,使用 JavaScript 来实现交互。如今,前端开发人员经常使用 React 和 Vue 等框架。这些框架提供了可重复使用的组件和实时更新数据的方法等功能,从而可以构建动态和引人入胜的网站和应用程序。
即使对于经验丰富的开发人员来说,前端开发也是一项挑战。首先,网络浏览器和用户交互具有不可预测性。你需要应对不同的浏览器、设备、屏幕尺寸和用户偏好。这就好比试图制作一件适合所有人的T恤衫。其次,前端世界瞬息万变。框架更新频繁。
前端开发的另一个特点是,它不仅仅是编码。它还与良好的用户体验(UX)和用户界面(UI)设计息息相关。这是许多程序员所不具备的独特技能。用户体验和用户界面设计包括了解人们如何与技术互动、如何使设计具有视觉吸引力,以及如何在应用程序或网站中创建流畅的逻辑流程。这就好比既是艺术家,又是心理学家。对于许多传统的程序员来说,他们可能是算法和数据结构方面的奇才,而色彩、布局和用户体验则是他们不熟悉的领域。
无论如何,人工智能辅助编程工具可以提供一些帮助。我们将在接下来的几节中介绍其中的一些。
8.13.1 CSS
为网站编写 CSS 可能很棘手,尤其是在处理大型复杂网站时。确保所有内容在不同的浏览器和设备上看起来都很好是一项挑战。您必须了解所有奇怪的浏览器特有的怪癖。也很容易不小心弄乱一些东西,以至于您的样式的一部分会干扰另一部分,使事情看起来很奇怪。此外,传统的 CSS 不允许您使用变量或函数,这意味着您最终会在代码中重复很多次(尽管 SASS 和 LESS 等工具可以解决这个问题)。即使是像居中这样简单的事情
也可能是一件苦差事。
以下是一些常见 CSS 任务的提示:
- 提示:您能否为我提供一个 CSS 代码片段,用于响应式导航栏,该导航栏在移动设备上折叠成汉堡菜单?
- 提示:我在 CSS 中的弹性框布局方面遇到了麻烦,其中项目没有正确对齐。您能建议可能出了什么问题吗?
- 提示:我需要为我网站上的按钮添加悬停效果。您能给我展示一个 CSS 示例,让按钮在悬停时改变颜色吗?
- Prompt: 我想在网站主页上添加淡入动画。能否提供一个 CSS 代码片段?
8.13.1 创建图像
为网站或应用程序创建专业图形需要丰富的设计背景,以及对 Photoshop 等复杂工具的了解。但是,有许多强大的文本到图像生成人工智能系统可以帮助您创建出色的图像。其中一些系统包括
- Canva
- Stable Diffusion
- DALL-E 3(内置在 ChatGPT 中)
- Adobe FireFly
- Midjourney
使用这些系统,您可以创建多种类型的资产,包括英雄图像、按钮和徽标。
让我们来看一个例子。我们将让 ChatGPT 创建一个徽标:
- 提示: 我正在为我的家庭面包店 "Sweet Whisk "创建一个网站。我想要一个温馨的徽标。我们的主要产品是蛋糕和饼干,所以也许可以将它们融入设计中。我喜欢柔和的颜色,尤其是淡粉色和薄荷绿。徽标的风格应该简洁、现代,并带有一丝俏皮。
如果你想修改输出结果,可以继续提示 ChatGPT。其他 AI 图像工具,如 Firefly,在设计图像方面比 ChatGPT 拥有更多的功能,但 ChatGPT 仍能创建出引人注目的图像--不费吹灰之力。
8.13.2 人工智能工具
有一些出色的人工智能工具,只需根据提示或一张你希望前端看起来像什么的图片,就能创建网站。它们会为你处理所有的编码工作。这甚至包括转换到 React、Angular 和 Vue 等框架。此外,人工智能工具通常还能导入线框,比如从 Figma 导入。
代码创建完成后,您就可以跳入其中进行调整,使之恰到好处。使用人工智能是加快整个网站建设过程的有效捷径。
以下是一些可用的人工智能工具:
- TeleportHQ
- Anima
- Locofy
- Vercel 的 v0
让我们仔细看看 Vercel 的 v0,它使用起来非常简单。事实上,其界面与 ChatGPT 相似,如图。
您可以输入您希望系统创建的界面类型提示,也可以上传图片。在本例中,我将使用提示符:
- 提示: 带有侧边栏导航和最近订单表的电子商务仪表板。
这将把你带入一个设计工作室,其外观如图:
人工智能将创建三个版本的仪表盘。您也可以创建其他版本。然后,您可以根据提示进行更改,如文字大小、颜色等。
完成后,你可以点击右上角的代码。你会看到基于 shadcn/ui 和 Tailwind CSS 的简洁 React 代码列表。
还有一些开源系统使用 AI 生成前端。考虑一下 Screenshot to Code。该项目的创建者是 Pico 的首席执行官兼创始人 Abi Raja。他的前一家初创公司于 2013 年被雅虎收购。
拉贾花了六个月时间创建了 Screenshot to Code 的初始代码库。"拉贾说:"前端开发人员经常将设计和模型转化为代码。"这项工作大多是重复性的。但我的软件可以帮助实现这一过程的自动化,完成大约 90% 的任务。"
目前,Screenshot to Code 支持导出到 React、Bootstrap 和 HTML/Tailwind CSS。该项目在 GitHub 上有超过 31000 个星。
使用 ChatGPT,你还可以将图片转换为代码。假设您想创建一个计算器应用,并希望它看起来像 iPhone 上的版本。
首先,我们要求 ChatGPT 识别图片,它能正确识别。然后我们就可以使用这个提示了:
- 提示: 为该图片推荐代码
ChatGPT 为 Python 创建了代码。诚然,样式有些偏差,但这仍然相当不错。当然,如果你想让它看起来更像 iPhone 版本,你可以使用更具体的提示,比如告诉 ChatGPT 使用 React 之类的代码。
8.13 应用程序接口
掌握新的 API 可能是一项挑战。首先,你必须仔细阅读文档,因为文档可能内容繁杂,技术性很强。这些文档有好有坏,有的清晰易懂,有的则......不尽人意。还有登录和获取访问权限的问题,比如使用 API 密钥或 OAuth 标记。此外,要弄清 API 向你反馈的数据结构和响应格式也会让人不知所措。还有错误处理,以及必须跟上 API 的任何更新或变化。
幸运的是,使用 ChatGPT 可以让应对这些挑战变得更容易一些。
让我们举一个简单的例子来了解一下。假设您想使用 API 获取天气信息。您可以向 ChatGPT 寻求 API 建议:
- 提示: 有哪些好的天气 API?
ChatGPT 推荐的是 OpenWeather API。接下来,请提出以下问题:
- 提示:我如何开始使用 OpenWeather API?如何开始使用 OpenWeather API?
ChatGPT 会介绍主要步骤。
然后,你可以要求它演示如何进行请求:
-
提示: 如何使用 OpenWeather API 创建请求?如何使用 Python 执行此操作?
-
ChatGPT 将详细介绍这些步骤:
- 导入请求库。
- 定义 API 密钥。
- 创建 API 请求 URL 并使用当前天气数据端点。
- 执行请求并处理响应。
- 检查请求是否成功。
8.14 小结
在本章中,我们深入探讨了模块化编程、函数和面向对象编程。我们还探讨了如何使用人工智能快速学习新语言和框架,以及如何使用人工智能更高效地处理数据。然后,我们看到了如何创建引人注目的前端。
但必须重申的是:人工智能辅助编程工具远非完美。这就是为什么要睁大眼睛仔细检查一切的原因。