专栏名称: 前端早读课
我们关注前端,产品体验设计,更关注前端同行的成长。 每天清晨五点早读,四万+同行相伴成长。
目录
相关文章推荐
前端早读课  ·  【第3464期】从初级开发者到高级开发者:借 ... ·  11 小时前  
前端之巅  ·  npm 够用吗?初创企业为何追捧这个 ... ·  2 天前  
前端早读课  ·  【第3462期】7 分钟深度理解柯里化 ·  2 天前  
51好读  ›  专栏  ›  前端早读课

【第3464期】从初级开发者到高级开发者:借助 ChatGPT 的成长之路

前端早读课  · 公众号  · 前端  · 2025-02-28 08:00

正文

前言

探讨了如何利用 ChatGPT 等AI工具帮助初级开发者成长为资深开发者,强调了提升编码技能、理解和应用 AI 工具的重要性。今日前端早读课文章由 @Matteo Baccan 分享,@飘飘翻译。

译文从这开始~~

ChatGPT 和其他 AI 工具已成为开发人员不可或缺的工具,但它们的真正潜力远不止于回答提示。这些工具如何帮助初级开发人员成长为高级开发人员?答案在于提示工程、理解大型语言模型的能力以及有效地利用它们。

ChatGPT 是如何工作的

ChatGPT 是一种会话式 AI,它处理自然语言以生成回复。它应用训练好的规则,而不能独立推理。这意味着优质的输入会产生优质的输出,而质量差的输入则会导致糟糕的结果。此外,其训练数据限制了它的知识范围,使其仅限于特定的时间段,因此对于新出现或小众的话题,它并不可靠。

有效利用 ChatGPT

1、理解代码

大型语言模型能够分析不熟悉的代码,这使得开发人员 —— 尤其是初级开发人员 —— 更容易理解和修改代码。例如,让 ChatGPT 解释一个函数通常会得到清晰的分解说明。

2、代码的建议

像 GitHub Copilot 这样的工具在代码上下文理解方面表现出色,能够分析你的编辑器和代码库,从而提供相关的建议。这些工具在针对性方面超越了通用的大语言模型。

3、编写测试

测试创建是一项需要时间才能掌握的关键技能。大型语言模型(LLMs)能够生成初始测试用例,节省时间并确保更好的代码覆盖率。

4、提高安全

ChatGPT 能够识别潜在的漏洞并提出改进建议,例如添加参数验证或空值检查。

5、重构代码

来自大型语言模型的重构建议能够提高代码的可读性和可维护性。虽然这些重构建议并不总是针对性能进行优化,但它们通常能提供更清晰的结构。

6、生成模版代码

启动新项目或新功能时,通常会涉及一些重复性任务。ChatGPT 可以根据你的需求生成样模版代码,从而减少设置时间。

7、添加注释

大型语言模型(LLMs)能够自动为你的代码添加详细的注释,使其更易于理解和维护,特别是对于那些没有文档记录或遗留的系统而言。

8、代码评审

像 ChatGPT 代码审查者这样的 GitHub Actions 可以自动审查拉取请求,提供可操作的见解并提高贡献的质量。

9、文档编制与翻译

LLM 驱动的工具简化了文档编写,甚至能自动翻译,让团队间的协作变得无缝衔接。

大型语言模型并非为解决问题或猜谜语而设计

大型语言模型(LLMs)是为回答问题、撰写文章和生成代码而构建的,而不是为解决难题或谜题。如果你向 LLM 提出一个未解决的问题,它将无法解决。然而,如果你提供一个已解决的问题,该模型能够解释或重现解决方案。

看着有人给 ChatGPT 出一道谜语,然后对它没能解开感到惊讶,这就好比让一个 5 岁的孩子去解决量子物理学的问题 —— 这样的测试忽视了该工具的设计和能力。这并不能证明模型有缺陷,反而凸显了用户对其使用方法的误解。

知识局限性

大型语言模型的知识是有限的,仅限于其训练数据集中的内容。如果你询问的数据集未涵盖的主题,该模型无法给出准确的答案。

这种限制何时变得明显?

当询问有关在模型训练阶段尚不存在或新出现的产品、技术或事件时。

虽然诸如实时网络查询和持续训练之类的缓解措施正在出现,但这些只是部分解决方案。模型仍可能就近期发展生成质量低劣或捏造的回复。

对于新发布的产品、技术或近期发生的事件,不要指望从 ChatGPT 那里得到可靠的答案。

成果提升之处

一些模型,比如 GitHub Copilot,通过利用额外的上下文信息超越了仅依赖提示的大型语言模型,例如分析光标周围的代码、打开的文件以及关联的 GitHub 仓库。这种更广泛的上下文使得 Copilot 能够提供更准确和相关的建议。

上下文代码提示

给定以下代码:

 public static final int UNO = 1;
public static final int DUE = 2;
// Other static variables

public static void main(String[] args) {
// Find a match for the parameter in the static values
}

这个含糊不清的评论用 ChatGPT 是无法得出有用的结果的。然而,Copilot 能够推断出其目的并给出完整的实现建议:

 int parametro = Integer.parseInt(args[0]);
switch (parametro) {
case UNO:
System.out.println("UNO");
break;
case DUE:
System.out.println("DUE");
break;
// Other cases
default:
System.out.println("No match");
}

尽管逻辑很简单,但关键在于 Copilot 能够在输入极少的情况下生成符合上下文的解决方案。

【图书】零基础开发AI Agent:手把手教你用扣子做智能体

代码理解与上下文关联

分析不熟悉的代码可能会让人望而却步,尤其是对于初级开发人员或者在自己不熟悉的领域探索时。大型语言模型通过解释代码的作用和工作原理来提供帮助。

例如,给定以下函数:

 public static boolean matchesURI(URI uri1, URI uri2) {
String scheme = uri1.getScheme();
if (scheme.equalsIgnoreCase(uri2.getScheme())) {
if (uri1.getHost().equalsIgnoreCase(uri2.getHost())) {
int thisPort = HttpClient.normalizePort(scheme, uri1.getPort());
int thatPort = HttpClient.normalizePort(scheme, uri2.getPort());
if (thisPort == thatPort) {
return uri2.getPath().startsWith(uri1.getPath());
}
}
}
return false;
}

当被要求描述其功能时,一个大型语言模型可能会这样回答:

  • 比较两个 URI 的方案(协议)。

  • 匹配主机和标准化端口。

  • 检查一个 URI 的路径是否以另一个 URI 的路径开头。

这段简洁的解释有助于开发人员理解复杂或文档不完善的代码。

测试的创建

编写测试可能颇具挑战性,尤其是对于初级开发人员而言。大型语言模型(LLM)能够为一个函数生成测试用例,为全面的测试提供基础。例如:

 @Test
public void testMatchingURIs() {
URI uri1 = new URI("http://example.com/path");
URI uri2 = new URI("http://example.com/path/subpath");
assertTrue(URIMatcher.matchesURI(uri1, uri2));
}

@Test
public void testNonMatchingScheme() {
URI uri1 = new URI("http://example.com/path");
URI uri2 = new URI("https://example.com/path");
assertFalse(URIMatcher.matchesURI(uri1, uri2));
}
为清晰而重构

大型语言模型还可以帮助重构代码,以提高其可读性和可维护性:

原始代码:

 if (uri1.getHost().equalsIgnoreCase(uri2.getHost())) {
if (port1 == port2) {
if (path2.startsWith(path1)) {
return true;
}
}
}
return false;

重构:

 if (!uri1.getHost().equalsIgnoreCase(uri2.getHost())) return false;
if (port1 != port2) return false;
return path2.startsWith(path1);

尽管逻辑保持不变,但重构后的版本更易于阅读和调试。

编写有效的提示语

有效使用大型语言模型的关键在于精心设计清晰准确的提示。但这到底意味着什么呢?编写一个好的提示需要明确告知模型你的期望以及你想要的结果。

以下是一些基本但至关重要的准则:

  • 表达要清晰简洁。

  • 要具体。

  • 包含上下文和必要的细节。

  • 明确输入和输出的预期。

当应用于编程时,这些原则看似简单明了,但为软件项目制定清晰、具体且简洁的指令颇具挑战性,这需要具备最佳实践的经验。项目越复杂,就越难将其提炼成一个定义明确的指令。

现实世界的挑战

你是否曾遇到过项目需求随时间变化、表述不清或缺少必要细节的情况?或者在没有完全理解客户期望的情况下编写代码?在这种情况下,让语言模型准确交付客户想要的东西几乎是不可能的。

什么样的提示才算好提示?

一个过于庞大且细节过多的提示是不切实际的,但太短或太模糊的提示也无法得到预期的结果。解决办法是精心设计这样的提示:

  • 尽可能具体。

  • 语境丰富却简洁。

一个清晰且明确的提示

编写一个 C# 函数来计算给定数字的阶乘。

此提示规定:

  • 编程语言。

  • 所需的功能。

  • 输入和输出预期。

这样的提示能让模型生成准确且有效的回复。

环境问题

大型语言模型依靠上下文来提高结果质量。例如,输入其他程序员常遇到的问题,能增加获得良好解决方案的几率。然而,对于高度特定或小众的问题,即便提供了足够的细节,模型也可能难以应对。

在这种情况下,像 GitHub Copilot 这样能够分析周围代码并提供量身定制建议的工具可能会更合适。

注释的代码

你有多少次编写代码时没有添加注释?或者不得不为别人的代码添加注释,但却难以理解?

大型语言模型可以通过从类似这样的通用提示开始来帮助生成评论:

在以下代码中添加注释:

例如,给定以下代码:

 private String readFile(String fileName) {
BufferedReader br;
try {
br = new BufferedReader(new FileReader(fileName));
final StringBuilder sb = new StringBuilder();
String line = br.readLine();

while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
br.close();
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}

一个大型语言模型(LLM)可能会生成以下详细注释:

 /**






请到「今天看啥」查看全文