用GPT帮你完成50%代码开发!重塑代码开发方式!

1. 背景

以GPT为首的技术,让代码生成成为可能。
如何更好使用它,帮助我们进行编码,是本期文章的主题。

2. 介绍

2.1. 一个简单示例

当我们有一些简单的需求时,我们可以直接告诉GPT,让它帮我们生成一些代码,例如:

用户:帮我写一个快速排序的Java代码

ChatGPT:
当然,下面是快速排序的Java实现代码:

public class QuickSort {

    public static void main(String[] args) {
        int[] arr = {9, 5, 7, 2, 3, 6, 8, 4, 1};
        quickSort(arr, 0, arr.length - 1);
        System.out.print("Sorted Array: ");
        printArray(arr);
    }
......省略后面内容......

2.2. 在实际项目中应用

但是,在实际项目中,我们可能发现,不知道什么时候该用它,怎么用。 这里我提供一种我的编程方式的思路,你可以看看。

通过这种编程方式,我可以更容易写出比较清晰的代码,代码也更少出错。

思想是:“先定大局逻辑,再把细节各个击破”,读了下面的例子,你应该就能理解了

以下是我杜撰的一个示例。

客户需求:

对一个学生成绩的文件做处理,例如:student_grade.txt.【包括:姓名、成绩】

产出:
1. 平均分文件
2. 得分前10名同学 + 成绩的文件

好的,我的做法如下:

  1. 思考整体流程是怎样的?【以下是一种可能的思考方式,你可以有不同的思考】

    1. 读取文件
    2. 计算平均分
    3. 排序之后取前10名
  2. 写出整个大的调用流程,把复杂的部分用函数表示,写下函数的简单注释,像伪代码那样:

originalFileName="/tmp/student_grade.txt"
// 第一步:读文件
List<String> studentStrList = readLinesFromFile(originalFileName)

// 第二步:将列表转换为对象,方便后续处理
List<Student> studentList = strListToStudentList(studentStrList)

// 第三步:计算平均分,保存到一个txt文件里
avgFileName="/tmp/avg.txt"
calculateAvgGrade(studentList, avgFileName);

// 第四步:排序后取前10名,保存到一个文件里
top10GradeFileName="/tmp/top10Grade.txt"
top10AvgGrade(studentList, avgFileName);
  1. 定义每个函数,例如:
/**
 * 把指定文件的内容,按行读取出来。
 * @throws java.io.FileNotFoundException 当不存在该文件时,抛出该异常
*/
public static List<String> readLinesFromFile(String fileName) {
}

/** 
 * 计算studentList的平均分,保存到文件中,文件命名为avgFileName。
*/
public static void calculateAvgGrade(List<Student> studentList, String avgFileName) {

}
  1. 每个函数,简单思考,觉得逻辑简单,可以交给GPT来生成,如下
    1. 问问GPT是否有现成的工具类可以使用
    2. 直接让GPT生成

以下是我在开发过程中,可能的询问GPT的一种方式:

用户: 
我有个Java函数,请帮我实现该函数:
/**
 * 把指定文件的内容,按行读取出来。
 * @throws java.io.FileNotFoundException 当不存在该文件时,抛出该异常
*/
public static List<String> readLinesFromFile(String fileName) {
}

GPT的回复:
当然可以!以下是实现给定函数的代码示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FileUtil {

   /**
    * 把指定文件的内容,按行读取出来。
    * @param fileName 文件名
    * @return 包含文件每行内容的列表
    * @throws java.io.FileNotFoundException 当不存在该文件时,抛出该异常
    */
   public static List<String> readLinesFromFile(String fileName) throws IOException {
      List<String> lines = new ArrayList<>();

      try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
         String line;
         while ((line = reader.readLine()) != null) {
            lines.add(line);
         }
      }

      return lines;
   }
}
  1. 如果你觉得逻辑很复杂,直接生成很难给GPT描述,那么有如下解决方式:

    1. 按照你的想法实现代码,毕竟不是所有逻辑都能交给GPT来生成的。
    2. 继续把某个函数拆分为多个小函数,你定义主逻辑,让GPT实现小函数。例如:在开发上面的 calculateAvgGradetop10AvgGrade 时,你发现,这个函数可以拆分为如下:
    /** 
     * 计算studentList的平均分,保存到文件中,文件命名为avgFileName。
    */
    public static void calculateAvgGrade(List<Student> studentList, String avgFileName) {
        // 计算平均分
        List<String> avgGrade = getAvgGrade(studentList)
        // 保存到文件里
        saveToFile(avgGrade, avgFileName);
    }
    

    可以发现,saveToFile这部分功能比较简单独立,可以交给GPT来生成。方法同样是,给定函数定义,写下注释,让GPT生成。

    注:其实,这个已经有现成的工具类可以使用,不需要重新写一个了,修改提示词询问GPT即可。

其他的函数也可以按照这种方式生成。

总结

总的来说,核心就是:“先从大局出发,搞清楚整个流程,再逐个击破。”

由外到内,搞明白整体流程是什么,从大局层面先定下来,细节的部分,可以交给GPT做或者你自己实现。

如果你写代码是:从上到下,也就是在写到readLinesFromFile(originalFileName)时,就急于去实现该方法,往往容易因小失大,忘记全局的情况

当然,本文给的例子的解决方法不是唯一的,实际思考伪代码时,你可以用各种不同的方式来实现,这都是可以的。并且如果你仔细查看,就会发现我的处理方法不一定高效,甚至有可能是错的。

不过,思想最重要,你要是有更好的想法,欢迎留言或者私信和我交流。

扩展说明

我个人平时会用到的 “生成代码/单元测试” 的 prompt提示词,我也搞了一个文档,各位有需要的可以查看我的这篇文章:

代码开发Prompt提示词合集

图形交互式自动编程软件GPT 2.1版简介 GPT 2.1版做了如下更新: 1 支持XP 2 支持开轮廓加引割线 3 修正了一些bug 4 传单片机支持了断点续传 GPT(Graphical Programming Tools)是作者积多年数控线切割编程经验,在原有的经过多年实用考验的系统基础上研制开发的新一代线切割机床自动编程软件,经过不断充实,目前该软件的1.0版已不仅能处理线切割的编程问题,而且能为数控铣床、数控车床、数控磨床输出数控程序。 与国内同类产品比较,GPT 1.0版有如下的显著特点: 1. 灵活方便的图形交互用户界面 GPT 采用了WINDOWS的图形窗口界面,所有菜单及提示信息均为汉字,对一些比较复杂的绘图功能还采用了简单明了的图形符号,易记易认,好学好用。 用户输入信息、响应系统提示时,可以既使用鼠标,又使用键盘,非常方便。 GPT系统的大部分 命令都可以用热键运行,这一点与同类系统相比具有独到的优势。 1. 丰富的图形定义功能 GPT广采众家之长,以使用方便为第一目标,对点、直线、圆弧等基本图素提供了数十种定义方法,并且均通过图形符号提示于菜单上,简单明了、容易访问,大大提高了作图效率。同时还能方便地对各种非圆曲线,如椭圆、阿基米德螺线、渐开线、摆线以及任意列表点曲线进行定义和编辑处理。 对齿轮标准件,给出参数系统即可自动生成其几何数据;还可以处理各种变位情况。 基本图素与各种非圆曲线的求交、求切也能很方便地完成。 2. 丰富的图形编辑功能 GPT 提供了对各种图素或图素组进行旋转、平移、对称、缩放、删除、打断、裁剪等的编辑功能,这些功能可以与拷贝功能做任意可能的组合,大大方便了图素的定义。 在求交点和封闭轮廓时,系统自动进行,为用户提供了快捷又直观的轮廓定义手段。 3. 独特方便的图素检取功能 本系统中,为方便对图素进行检取,对每一个图素都指定了一个唯一的编号,该编号与图素显示在一起;直接输入编号就可以指定某个图素;该功能在同类系统中还未见到,但对于提高作图效率却有很大作用;此外还有窗口检取功能,用于指定一组图素。 4. 先进的图素分析功能 GPT提供了对任意图素进行分析的功能只需用鼠标检取某图素,就可以得到该图素的有关几何信息,如直线的端点坐标,斜率,法线式方程的参数,其定义过程,以及与之相关联的其他图素等信息;用户可以利用该功能很容易地校对作图过程,检查是否定义正确。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值