程序员视角的 chatgpt 尝鲜
Chatgpt 注册
最近一则科技新闻引起了我对 chatgpt 极大的爱好
信任在很多人眼中,关于人工智能谈天机器人的形象停留在机械式地一问一答上,而 chatgpt 不仅打破了这样的刻板形象,还能拿到谷歌 offer ? 这是多少程序员梦寐以求的理想
抱着猎奇的心态我翻开了 openapi 的网址,在注册账号的过程中却卡在了手机号验证码的步骤: 我国用户无法经过手机用户注册
但办法总比困难多,我找到了一个接码渠道,简略地说就是能帮忙你在注册账号的过程中运用虚拟的手机号完成接纳短信验证码的渠道。在渠道里用支付宝冲了 1 美金大洋,申请一个国家限时的虚拟手机号(虽然这也没有说得那么顺利,但最少是能够重试的,我试了五个不同的国家才收到了虚拟的短信验证码)
完成注册登录后,就能够看到一个看似微软风格的交互界面:左边导航,右侧谈天面板(作业区)
我第一反响就是每天翻开 vscode 编辑器的欢迎界面,看似精约的表面蕴含着不可估量的能量
与谷歌巨佬的初度沟通
现在已知的信息是,和我谈天的是一个谷歌巨佬,刚好我最近也对 rust 感爱好,那就让他用 rust 写一个常见的简略程序吧: 给定 json 数据文件,将其转换为 Excel 文件。这一定是难为不了他的,所以他很快供给了一段看似可运转的程序给我
我假装是个编程小白,依照他的指示将代码拷贝到 main.rs 文件,得到了一系列 “unresolved import” 的编译过错
其实就是没装第三方依靠包嘛,但为了考察他是否能辨认这样的编译过错,我将编译器的提示消息发给 chatgpt ,不愧是谷歌大佬,他很快就给了回应,粗心就是提示我要在配置文件里增加依靠项的声明
即使如此,chatgpt 给的依靠包版本好像与实际状况有误差,我无法依照他供给给我的依靠项声明下载正确的依靠包
我将这样的状况反馈给他,他依然很耐心地给我答复,并主张我到官方文档做 double check 。虽然这次并没能解决问题,但也给出了很好的攻略
前面可能是我需求没说清楚,所以他给的源代码也是有问题的: 一般要生成表格的 json 文件应该是个数组,而他给的代码直接就把数组当对象读了,这个时候我让他从头写这个程序 (因为篇幅原因后面就不截代码了)
就算发来了新的代码,仍是有编译过错,但是写代码这些是不可避免的,尤其是写 rust 言语。这时我开始觉得十分高能的工作来了: 我不断地将编译报错的信息发给他,他每次都会重写这个程序,好像在和我结对编程
1. 编译过错: worksheet 是私有模块,不能直接调用
2. 编译过错: 结构体没有定义 write_bool 办法
3. 编译过错: add_worksheet() 短少实参
4. 编译过错: ? 运用过错
5. 编译过错: 类型不匹配
但是后面他如同卡在了什么地方,已经无法给出能够让程序持续往下正常运作的提示了。所以我这时候只能自己去定位,当然在他前面细心地调教下,我很快就把这个程序成功 run 起来了,也成功生成了 excel 文件
这可太逆天了,作为一个 rust 初学者,在这个过程中我简直仅仅帮忙定位的角色,但却能依照 chatgpt 的指示写出能够 run 的程序
考察 chatgpt 的编程才能
既然是经过谷歌面试的巨佬,那么他的编程才能一定是在线的,我随意地问了一些算法问题: 完成一切常见的时间复杂度为 O(nlog(n)) 排序算法
这哥们确实不是简略的料,直接 show me the code ,从变量命名、函数命名、缩进、注释甚至连换行都有些考究(假如你翻过 clean code 这本书的话),并且没记错的话堆排序和快速排序基本按算法导论(CLRS)的伪代码去完成的
他知道不同的编程言语有各自不同杰出代码编写的常规,才是让我觉得最恐惧的…比方 python/rust 习惯蛇形命名, golang/typescript/java 等习惯驼峰命名
# Merge Sort
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr)//2
left_half = arr[:mid]
right_half = arr[mid:]
merge_sort(left_half)
merge_sort(right_half)
i = j = k = 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
arr[k] = left_half[i]
i += 1
else:
arr[k] = right_half[j]
j += 1
k += 1
while i < len(left_half):
arr[k] = left_half[i]
i += 1
k += 1
while j < len(right_half):
arr[k] = right_half[j]
j += 1
k += 1
return arr
# Quick Sort
def quick_sort(arr, low, high):
if low < high:
pivot = partition(arr, low, high)
quick_sort(arr, low, pivot-1)
quick_sort(arr, pivot+1, high)
def partition(arr, low, high):
pivot = arr[high]
i = low-1
for j in range(low, high):
if arr[j] <= pivot:
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return i+1
# Heap Sort
def heap_sort(arr):
n = len(arr)
for i in range(n, -1, -1):
heapify(arr, n, i)
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
def heapify(arr, n, i):
largest = i
l = 2 * i + 1
r = 2 * i + 2
if l < n and arr[i] < arr[l]:
largest = l
if r < n and arr[largest] < arr[r]:
largest = r
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
但只完成算法还不行,还得解决问题嘛,我在想 LeetCode 上有一些内容相似但完成不同的算法题,比方生意股票系列。所以我又发问了: LeetCode 以生意股票为主题的题目有哪些?能不能用 typescript 逐个完成 ?(是的,我换了编程言语,就是为了看代码风格)
哥们的答复也是毫不费力,并且基本给出的都是时空复杂度的最优解
列出一切相关的问题并给出答复
我整到这儿忽然感觉 chatgpt 太恐惧了: 代码写得快、准、狠,还写得漂亮,咱职业生涯还怎样玩?
我只能说 chatgpt 给了我很棒的面试官体会
运用体会
我其实意识到,也许是程序员职业病的原因,刚才提的问题都是”命令式“、带有较为明确的输入和输出的,假如我问他对 xxx 是否感爱好之类的问题呢,他其实挺清醒的,会反复强调自己仅仅一个 AI 言语模型,不存在任何私有的个人情感
跳出编程这个领域,关于日常作业中一些琐碎的文案内容,其实也能交给他处理,比方周报,你好像只需求供给一些关键字,他就能帮你生成很多实际也就那样但有些正式场合却很有必要的废话
假如你在写一些作业文档,需求有人帮忙列提纲,无所谓 chatgpt 也能出手,并且供给的信息能够说是非常详尽的
但无论是编程仍是其他的工作,他供给的信息最好仅仅作为一个值得借鉴的参阅项,但不可作为可信度很高的信息源来看待
虽然现在他生成的内容大部分看来确实合理得很夸张,但也有像上述初体会那样陈述编译过错却一直没有给出真实正确的解决方案,有时候仍是得需求自己干涉,才能更好地发挥他的才能并为己所用
另外我咨询了一些怎么能让他的答复变得愈加合理的办法,仍是得运用英文
这就是我作为程序员对 chatgpt 的运用体会了,总得来说是一个很新也很好用的工具或玩具,与其说是尝鲜,不如说是怎么更好地利用 chatgpt 来帮忙日常日子,期望后续能挖掘出更多好玩且有价值的工作