[Chinese title]

100🔥·13 min read·coding·2026-06-06
🏆
胜者
Claude Code
Claude Code
Claude Code
格罗克
格罗克
VS
[Chinese title]

📊 快速评分

易用性
Claude Code
97
Grok
功能
Claude Code
97
Grok
性能
Claude Code
97
Grok
性价比
Claude Code
98
Grok

Claude Code vs Grok:真正帮上忙的编程助手 vs 总是分心的那个

[Chinese translation]
过去两周,我把Claude Code和Grok当作主要编程助手来使用。不只是让它们写斐波那契数列或解释递归——我给了它们真正的工作。我有一个需要重构的半成品Django API、一个存在性能问题的React前端,以及一个处理大数据集时总是超时的Python脚本。我想看看哪个工具能真正交付代码,而不仅仅是纸上谈兵。

以下是我的实际体验。

第一印象:设置与上手

Claude Code

Claude Code是一个基于终端的工具。通过npm安装(npm install -g @anthropic-ai/claude-code),然后在项目目录中运行claude。它会扫描项目结构、读取git历史,然后开始一个会话。没有网页界面,没有聊天窗口——只有命令行。

我注意到的第一件事:它在读取文件前会请求权限。它会列出所有想要检查的文件,并等待确认。这让人感觉受到尊重,但也有些慢。我的项目有200多个文件,初始扫描花了大约40秒。

加载完成后,我输入:"将views.py文件重构为使用基于类的视图而非基于函数的视图。"它回应时显示了当前文件,内联提出了修改建议,并询问我是否要应用这些修改。我可以选择"是"、"否"或"修改"。它还在修改前自动创建了一个git分支。

Grok

Grok是一个基于网页的聊天界面,带有代码专用模式。我通过浏览器访问,粘贴代码片段并提问。它还有一个"代码分析"功能,可以上传项目的zip文件,但我发现这个功能不太稳定——有时能正确解析结构,有时只是列出文件名而不理解依赖关系。

我提出了同样的请求:"将views.py文件重构为使用基于类的视图。"Grok回应了一个完整的代码块,显示了重构后的文件。乍一看似乎正确。但当我尝试将其复制粘贴到项目中时,我发现它不一致地重命名了一些变量,并且删除了我在一个函数上的自定义装饰器。它没有询问装饰器的事——只是假设它是不必要的。

第一印象结论: Claude Code感觉像是一个尊重我现有代码的协作者。Grok感觉像一个聪明的朋友,回答问题太快,却不检查这些答案是否真的适用于你的具体场景。

实际测试:三个具体项目

项目1:重构Django REST API

我的API有12个端点,都是基于函数的视图,包含重复的分页逻辑、错误处理和权限检查。我想将所有内容整合到一组通用视图和mixin中。

Claude Code的处理方式:

我输入:"将所有视图中的分页和权限逻辑整合为可复用的mixin。"

Claude Code首先列出了它将修改的所有文件:

我将分析以下文件:
- api/views.py(所有12个视图)
- api/permissions.py(现有权限类)
- api/pagination.py(现有分页类)
- api/urls.py(需要更新URL)

然后它向我展示了一个计划:

  1. 创建api/mixins.py,包含OrganizationPaginationMixinTeamPermissionMixin
  2. 重构每个视图,使其继承这些mixin以及Django的通用视图
  3. 更新URL以匹配新的视图类
  4. 运行现有测试以验证没有破坏任何功能

我批准了这个计划。它编写了代码,创建了mixin文件,重构了所有12个视图,并运行了测试套件。有两个测试因URL命名更改而失败——在我说了"修复失败的测试"后,它自动修复了这些问题。

总耗时:7分钟。我审查了差异,批准了更改,然后继续。

Grok的处理方式:

我将整个views.py文件(约400行)粘贴到Grok的聊天中,并问道:"重构这个文件,使用mixin来处理分页和权限。"

Grok回应了一个包含重构后文件的代码块。看起来不错——它创建了mixin类并应用了它们。但存在一些问题:

  1. 它将我的自定义TeamPermission类重命名为TeamPermissionMixin,但没有更新其他文件中的导入。
  2. 它未经询问就将我的PageNumberPagination子类替换为通用的LimitOffsetPagination
  3. 它根本没有修改URLs文件,因此新的基于类的视图无法被正确调用。
  4. 它假设所有视图使用相同的权限模型,但事实并非如此——有三个视图有不同的权限要求。

我指出了第一个问题。Grok道歉并给了我一个修正版的mixin文件。但这个新版本引入了循环导入。我指出了这个问题。它又给了我另一个修复,但现在列表端点的分页出错了。经过四次来回修正,代码终于能用了——但这花了25分钟,而且我手动修复了三个Grok从未处理过的问题。

具体例子: 一个视图需要对GET请求使用IsAuthenticated,对POST请求使用IsAdminUser。Claude Code问道:"我注意到view_orders对不同HTTP方法有不同的权限要求。我应该创建一个自定义权限类,还是对特定方法使用Django内置的permission_classes装饰器?"Grok只是对所有内容使用了permission_classes = [IsAuthenticated],我不得不自己发现这个问题。

重构方面的胜者: Claude Code,遥遥领先。它理解了项目结构,提出了澄清性问题,并运行了测试。

项目2:调试React性能问题

我的React应用有一个仪表板页面,渲染了一个包含500多行的表格。每行有几个下拉菜单,整个页面很卡顿。我怀疑存在不必要的重新渲染。

Claude Code的处理方式:

我输入:"找出Dashboard组件的性能瓶颈。表格重新渲染太频繁。"

Claude Code首先读取了组件文件,然后是父组件,接着是状态管理。它发现了三个问题:

  1. 表格在每次父状态变化时都会重新创建行组件,因为映射的行上没有key属性。
  2. 下拉菜单组件在onChange处理程序中使用了内联箭头函数,每次渲染都会创建新的函数实例。
  3. 父组件中的Redux选择器每次都会返回一个新的数组引用,即使数据没有变化。

它向我展示了每个问题及其确切的行号,并提出了修复建议。对于Redux选择器,它使用createSelector编写了一个记忆化选择器。对于下拉菜单,它建议使用useCallback。它还为行组件添加了React.memo

我应用了所有三个修复。页面渲染时间从120毫秒降到了18毫秒。使用React DevTools Profiler测量。

Grok的处理方式:

我粘贴了Dashboard组件的代码并问道:"为什么这么慢?"

Grok的第一个回应:"你应该使用React.memo和useCallback。"泛泛的建议。我要求具体说明。它指出了缺少key属性——正确。但它还建议我"将表格数据移到单独的状态中",这毫无意义,因为数据已经在Redux中了。

我让它编写优化版本。它给了我一个重构后的组件,对表格行使用了React.memo,对处理程序使用了useCallback。但它还以我没有要求的方式重组了我的组件——它将两个独立的状态变量合并为一个对象,这破坏了一个依赖它们保持独立的功能。

我花了15分钟撤销它的更改。最后,我只保留了key属性修复和useCallback包装。Redux选择器的问题?Grok从未提及。我后来不得不自己解决。

具体例子: Claude Code注意到我的useSelector使用了state => state.orders,由于reducer使用了展开运算符,每次都会返回一个新数组。它建议使用createSelector([selectOrders], orders => orders)并解释了原因。Grok从未查看Redux存储——它只分析了我粘贴的组件。

调试方面的胜者: Claude Code。它通过完整的数据流追踪了问题,而不仅仅是可见的组件。

项目3:编写数据处理脚本

我需要一个Python脚本,能够处理2GB的CSV文件,根据复杂的业务规则过滤行,聚合结果,并输出摘要。难点在于:它必须在只有4GB RAM的服务器上运行,所以我不能将整个文件加载到内存中。

Claude Code的处理方式:

我描述了需求:"编写一个脚本,分块读取大型CSV,应用这些过滤规则[粘贴规则],并输出聚合统计信息。必须使用流式处理以避免内存问题。"

Claude Code问了澄清性问题:

  • "分隔符是什么?逗号还是制表符?"
  • "输出应该是CSV还是JSON?"
  • "过滤规则需要可配置还是硬编码?"
  • "不匹配任何规则的行应该怎么处理——跳过还是包含在单独的输出中?"

然后它使用带有chunksize参数的pandas.read_csv编写了一个脚本。它使用itertools.chain将结果流式输出到文件。它每处理100,000行添加了进度日志。它包含了针对格式错误行的错误处理。它还添加了一个--dry-run标志,用于在不处理整个文件的情况下测试前1000行。

我在一个500MB的测试文件上运行了脚本。一次成功。处理耗时34秒,峰值内存使用为180MB。

Grok的处理方式:

我向Grok提出了同样的需求。它编写了一个使用csv.DictReader并逐行处理的脚本。从内存角度看,这实际上比pandas更好。但它存在一些问题:

  1. 它使用了csv.DictReader,但假设所有行具有相同的字段。我的CSV行长度可变——有些行缺少某些列。Grok的脚本在遇到第一个缺少字段的行时就崩溃了。
  2. 过滤规则被硬编码为一系列检查字符串值的if语句。但我的一些规则涉及数值比较(例如,"amount > 1000")。Grok使用了字符串比较,所以
分享:𝕏fin

相关对比

相关教程