madroid
2022/12/11阅读:61主题:默认主题
程序员又双叒叕要失业了?使用火上天的 ChatGPT 实现一个登录功能是种什么体验
由于一些原因,大家可能无法体验最近火上天的 ChatGPT ,下面就用登录功能这个具体的案例带你一起体验 ChatGPT 的“智能”。
先说个人体验(不是结论)
-
能够很好的理解一些专业知识(如 Android Jetpack 组件等),并能根据上下文做一些简单的推理,并根据你的提示完善自己的答案; -
整体对话智力水平要远高于一些语音助手(小爱、Alexa 之类的); -
对于复杂的上下文理解仍有进步的空间,不断的补充上下文及要求之后他的表现就有点错乱; -
如果你在某些方面没有思维或者是小白,他可以很好的帮到你;如果你已经是很了解一个内容了,他对你的帮助就有限。反过来,你可以通过他给你的答案和你心中的答案做对比,来判断自己的专业技能是否“达标”。
需求描述:用 Android 新版架构开发一个登录页面
我心中的实际需求是用 Android 新版架构开发一个登录功能,期望如下:
-
使用 Kotlin 语言编写; -
使用 UI Layer、Domain Layer、Data Layer 分层架构; -
UI Layer 使用 Compose 来编写; -
使用协程及 Flow 来实现单向数据流; -
要有 Domain Layer 中 UseCase 的实现; -
数据层要有持久化数据和缓存两种形态; -
使用依赖注入框架 Koin;
如果你对上面的知识有点陌生的话,可以查看我之前梳理的一些文章:
-
Android 分层架构指南
-
Android 模块化介绍
-
Now in Android 项目实战案例
好的,下面开始正式的需求开发,对话开始。
Q1:用 Android 新版架构开发一个登录页面
这部分的回答也是比较出色的了,“张口”就来。

Q2:还需他添加数据层的实现
这部分超出我的预期,你不停让他继续说的话还会写出 Room 数据库升级的相关逻辑,可谓是相当细致了。

Q3:可以把上面的代码使用 Kotlin 来编写么
默认是使用 Java 编写的,你可以让他使用 Kotlin 来进行编写。


Q4:ViewModel 对数据库的访问需要通过 Repository 来实现
不仅能按照你的需求实现,还能“理解”你这么做的好处。

Q5:Repository 中需要添加一个内存缓存层,首先访问缓存,没有的数据的话再访问 Room 数据库
不仅能按照你的需求实现,还能“理解”你这么做的目的。


Q7:可以使用依赖注入框架优化上面的代码么
文本理解能力相当强。

Q7:可以把 Dagger 换成 hilt 么

Q8:可以把 Hilt 换成 Koin 来实现么

Q9:继续(会继续延伸出实现协程)

Q9:继续(使用 LiveData 来做数据与 UI 层的交互)
这里还是使用 Hilt 来编码的,没有记住上面的 Koin 上下文。

Q10:可以把上面的 LiveData 替换为 Kotlin Flow 来实现么
这里严格控制 Flow 的访问限制,也是超出了我预料。一般人可能都注意不到这些细节。

Q11:需要在 ViewModel 和 Repository 中添加一个 Domain 层
这里他并不能理解什么是 Domain 层。

Q12:需要在 ViewModel 和 Repository 中添加一个 UseCase 的实现
对 UseCase 的理解是错的,UseCase 应该是依赖 Repository 的,ChatGPT 的实现是反过来的。也可能是这是 Android 2022年新出的概念,对这部分的语料学习内容还太少。

Q13:UseCase 应该是依赖 Repository 的,而不是 Repository 依赖 UseCase
纠正他的错误之后,他能实现一版相对正确的答案,但是 UseCase 一般也不定义为接口。

Q14:用 Android 新版架构开发一个登录页面,要求如下:使用 Kotlin 语言编写,使用 UI Layer、Domain Layer、Data Layer 分层,使用协程及 Flow 来实现单向数据流,数据层要有持久化数据和缓存两种形态,使用依赖注入框架 Koin,UI 层使用 Compose 来编写
把需求说明的足够详细后,看他能不能一次搞定,发现并不行。

总结
整体上 ChatGPT 是超过我的预期的,如果满分5分,我会给他一个 3-4 的评分,这个评分是高于大部分程序员的。
回到标题中的问题,程序员要失业了?可能没办法简单的回答这个问题,但是我们可以把这个问题转换成:程序员的核心竞争力是什么?ChatGPT 的核心竞争力又是什么?
在真实的项目开发中,并不是从零开始构建一个功能而是在现有的项目基础上完成新功能的开发,而这就需要熟悉很多的上下文(项目规范、历史债务、踩坑点等等)才能保证项目的功能能够顺利完成,对技术细节的把控反而不是最重要的。而 ChatGPT 对上下文的理解缺是弱项,对通用技术规范及细节的掌控是强项。所以程序员和 ChatGPT 并不是对立的关系,也不会提到程序员。我反而觉得 ChatGPT 是程序员开发过程中的一种新工具,一种新的局部方法。
当然,工具不会替代人,但是工具可能会替代工具人。
作者介绍