零代码基础如何使用cursor写个自己要的app?以及如何一定程度避免他写出shi山代码呢?

由于我自己写完了看起来乱糟糟的,也没有很好的格式,我让AI使用丰富的markdown语法格式化了我的文本,但是里面的内容都是我的

佬友们好!我的“智学闪卡”AI编程奇遇记 :light_bulb:

各位佬友们好!

之前不是薅了 Cursor 的教育优惠嘛,我是数学系的,认证资料都是真的,所以侥幸使用edu.cn上车了。估计只要 Cursor 不出幺蛾子,我可以用完这一年。因为是本校教育邮箱,也没法转手,所以就“被迫”开始捣鼓 Cursor。

说实话,我这零代码基础,对编程的认知也就停留在“哦,好像有 Python、C++、Java 这些玩意儿”的水平。所以,刚开始接触 Cursor 的过程那叫一个痛!后来还是去 B 站找了些教程视频瞅瞅,才算好了一点。

折腾到现在,总算用 Cursor 写出了一个我觉得对自己学习还挺有帮助的小应用。其实几天前刚搞定的时候,心里很激动,很想跟佬友们分享分享。但转念一想,L 站的佬友们估计个个都是代码大神,我这纯靠 AI 生成的项目,在你们眼里可能就是一坨“shi山” :poop:,实在不好意思拿出来献丑。

不过呢,现在我又觉得,把这事儿分享出来,让佬友们帮我瞅瞅有啥不足,或许能让我进步得更快。同时,也能给那些跟我一样零代码基础,但又薅了个 Cursor 年费的同学们提供一个(可能不咋地的)应用参考。所以,最终还是决定把这段经历写下来。

零代码基础的我,为啥硬着头皮也要用 Cursor?

主要还是出于两方面原因:

1. “被迫”营业的 AIGC 课程作业 :tired_face:

以前为了学分,报了学校一门水得不行的课,叫“AIGC”。主要内容就是科普一下国内外的文本大语言模型、各种好用的 AI 应用,还有 AI 音乐、AI 视频啥的。但说实话,这课对我来说有点“然并卵”,因为里面绝大部分东西我之前都接触过了,所以上课基本都在神游玩手机。

后来老师布置了个课程作业,具体要求是这样的(这图应该不会暴露我的个人信息吧 qwq):

图:课程作业要求截图

image

当时我就琢磨着用 Claude 和 Gemini 的 Canvas 功能来整个 AI 作品。我的创意是这样的(如图):

image

图:我的“王国版人生模拟器”创意构思

灵感主要来源于初中那会儿特别火的“人生模拟器”小游戏。我当时超爱玩,但玩到后来发现选项翻来覆去就那么几个,就觉得有点腻了。于是,我就想用 AI 做一个“王国版”的“人生模拟器”来交作业。

中间过程那叫一个坎坷啊!因为是零代码基础,AI 写出来的东西一旦报错,你就只能反复跟它“理论”,让它修改。要是它一直改不好,你就只能干瞪眼。因为这部分跟咱们今天的主题关系不大,我就不细说了。

总之,那次经历让我深刻体会到,AI 创作代码目前还很不成熟。 我就想写个简单的 HTML 小游戏,结果硬是折腾了三四天,花了十几个小时。我自己也挺挫败的,本来觉得这课水得很,轻松拿捏,结果老师随手一个作业,我就搞了半天,最后出来的作品自己还不怎么满意。

2. 数学狗的执念:一个完美的“闪卡应用” :books:

作为数学系的学生,虽然是理科,但我学习的时候还是习惯先把概念定义记熟练了,再去理解推理过程、做题啥的。所以,我一直特别想要一个好用的“闪卡应用”。

我理想中的闪卡应用是这样的:

  • 可以直接把书本的 PDF 扔给它。
  • 它能自动根据pdf的知识点为我生成一大堆闪卡。
  • 然后我就可以开开心心地用闪卡来学习概念知识了。

但是我找了很久,可能是我的信息检索能力太差劲了吧,总之一直没找到一个能满足我所有要求,而且还是免费的闪卡应用(ai服务肯定不是免费的,只是我想自定义模型,填入自己的api)。

这次碰上了 Cursor,再加上前面那两个原因,我下定决心,一定要试试用 AI 写一个完全符合我自己需求的 App!

我的 AI 编程探索之路:从“shi山”到“智学闪卡”

由于 L 站我这样的一级用户好像不能上传文件,我就尽量用文字给大家描述一下我这几天的“进化史”。

整体花费时间: 大概 5 天,每天都至少投入好几个小时。

走了很多弯路,如果现在再来一次,估计只需要几个小时就能搞定。

阶段一:惨痛的教训——需求不明,代码“shi山” :construction:

在前三天,我犯了个致命的错误:没有一开始就明确产品的完整功能。

AI 编写代码,尤其是我用 Cursor 时的强烈感受: 对于我们这种小型的、满足个人需求的个性化 App,如果你能一次性把需求阐述清楚,AI 生成的 App 大概率是没什么 Bug 的,或者只有一些小 Bug,可以轻松修复。

但是!如果你一开始定位就不清楚,不知道你的产品到底需要多少功能、哪些功能,在让 Cursor 编写的过程中又不断地想给产品加新东西,那么你大概率会得到一堆“shi山代码”。(我不知道我对“shi山代码”的定义精准与否,但我自己的定义是:修复了一个 Bug,结果多出来三个 Bug;修复了三个,又多出来九个 :sob:),最终完全无法满足你自己的心理预期。

前三天我就是没领悟到这个道理,反复要求 Cursor 给我增添一些新功能,结果最后代码就变成了一座名副其实的“shi山”。我费尽心力想挽救它,但无奈这个东西我从一开始就没把问题表述清楚。

比如:

  • 我最开始没说要让闪卡的正面、反面支持 LaTeX 格式和 Markdown 语法。
  • 我没有引入合理的算法机制去融合闪卡的复习曲线。
  • 我没有说清楚闪卡的分类逻辑。
  • 太多太多东西了,里面的错漏之处多如牛毛。

后面就出现了无数的 Bug,我花了三天,至少 24 个小时以上,最后只能无奈放弃那个版本。

它的文件还静静地躺在我的电脑上,这是一些当时的图片预览:

image
image
image

还有好几个界面,感觉都贴上来的话可能太冗长了,就不一一展示了。总之,那也是我的一份心血,尽管没有一行代码是我自己写的(划掉)。

阶段二:顿悟与重生——清晰规划,高效产出 :sparkles:

所以,很多时候,我们到底该如何明确自己的产品功能呢?

我的一个想法是:

  1. 草稿初拟: 先把自己对产品的大致想法描述给 Gemini。
  2. Gemini 扩充: 让 Gemini 对这个草稿进行扩充和细化。
  3. 专家审批: 然后我会使用 o3作为一个“审批专家”,去审查这份草稿还有哪些不完善、没有说清楚的地方。
  4. 迭代优化: 把草稿迭代 N 次。
  5. 深度研究报告: 最后,我会把迭代后的完善版本交给 Gemini 进行深度研究,让它创作一份完整的产品构建报告。
  6. “点”式报告转化: 我会把这份详细的报告转化成“点”式报告,具体可以参考这个图片:
    image

    图:点式报告内容示例(部分)
    图片中只展示了一点点内容,具体大概有 11 个大点。为什么要采取“点”式呢?主要是因为深度研究出来的东西太长了,我怕发给 Cursor 之后它没有完全领悟文件的所有内容。转化成“点”式报告,更容易让我们(我和 AI)互相明确需求和指导。
    这个灵感来源于 manus 的 todo.md 文件,我严格要求 AI 在完成任务后,必须回顾这个表格,用对勾或错号来标记自己完成的任务。

  7. 启动与调试: 最后,完成之后让 Cursor 为你启动程序,或者让它为你创建一个快捷启动方式。(最好是让 Cursor 启动,这样它能看到后台日志,方便它改错。另外,如果你写的是一个 HTML 网页,其实如果报错了,最好的方式就是按 F12 把开发者工具里的日志发给它。这是我自己摸索出来的,可能是常识,但我还是想写给万一和我一样一点代码都不懂的佬友们看看。)

所以,经过我五天(主要是后两天的有效工作)的努力,我终于写出来了一个现在可以完全满足我自己需求的、运行在本地的软件!我给它命名为 “智学闪卡”。我还让 Cursor 帮我把它打包成了一个 App 放在我电脑上,大概八十多兆。(但是有bug,一直不能正常启动,我就放弃了,还是在文件里面启动)

这是一些预览图:

image

图:“智学闪卡”App 图标

image

图:“智学闪卡”App 界面截图

总结里面写了这个app完整的功能

总结

“智学闪卡”功能需求 V4 (完整详尽版)

“智学闪卡”应用重构需求文档 V4 (完整详尽版)

项目目标:

从零开始构建一个全新的“智学闪卡”应用程序。该应用需具备完善的核心功能(创建、学习、复习、统计、分类、收藏、导入/导出等),确保数据存储在本地且持久化,所有界面数据(特别是分类)保持实时准确和一致,提供稳定流畅的用户体验。应用整体需采用现代、简约、专业的设计风格,主色调为黑、白、灰。

核心原则:

  1. 全新构建: 此文档描述的是一个全新的应用,不基于任何现有代码的修改。所有功能和特性都将从头开始实现。
  2. 数据本地化与持久化: 所有用户数据,包括但不限于闪卡内容(正面、反面、详情)、分类信息、学习进度记录、统计数据、用户收藏状态及收藏时间、以及所有用户自定义设置,都必须安全地存储在用户本地计算机的特定、可由用户知晓(并在必要时访问)的位置。推荐使用嵌入式数据库(如SQLite)以保证数据结构的完整性和查询效率。数据存储必须独立于浏览器缓存,确保用户更换浏览器或清除浏览器数据后,应用数据不受影响。
  3. 数据准确性与一致性: 应用中任何显示数据的地方,例如首页的统计数字(总卡片数、分类数等)、学习界面中的分类选择列表、创建卡片时的分类下拉框、分类管理界面的列表、收藏夹中的卡片信息以及统计图表等,都必须实时、准确地反映数据库中的当前状态。特别是分类信息,在应用的任何界面(首页、学习选择、创建卡片、分类管理、收藏过滤等)都必须是完全一致且最新的。 任何对数据的增、删、改操作都应立即同步到所有相关视图。
  4. 渲染一致性: 在所有非编辑状态下展示卡片内容(正面、反面、详情)的界面(包括但不限于学习/复习时的卡片展示、创建卡片时的实时预览区、卡片列表项中的摘要显示、收藏列表中的卡片预览、以及任何形式的卡片详情弹窗或页面),Markdown语法和LaTeX数学公式(包括行内 和块级…
    )必须被正确且一致地渲染成最终的富文本格式,用户不应看到原始的Markdown或LaTeX源码。只有在用户明确处于编辑卡片内容的状态时(如在创建或修改卡片的输入框中),才显示和允许编辑源码。
  5. 用户体验优先: 界面设计和交互流程应以用户为中心,力求逻辑清晰、操作流畅、反馈明确。需要特别注意处理列表内容过多时的性能和可用性(如分页、虚拟滚动)、弹窗的定位应符合用户预期(如屏幕居中)、避免不必要的页面跳转或刷新,提供清晰的错误提示和引导。
  6. 配置中心化: 所有可由用户自定义的应用参数(例如学习相关的设置如每日学习量、复习算法参数调整;统计视图的默认偏好如图表时间范围;数据管理选项如备份恢复路径;以及可能的界面外观主题选择等)都应统一集中到应用程序的“设置”界面进行管理。避免将配置选项散落在各个功能页面,以保持其他界面的简洁和专注。
  7. 设计风格: 整体应用需采用现代、简约、专业的视觉设计风格。
  • 色调: 以黑色、白色、灰色系作为主导色调,营造一种干净、沉稳、低调且具有科技感和高端感的视觉氛围。避免使用过多鲜艳或饱和度高的色彩,以保证长时间使用的舒适性。
  • 强调色: 可审慎选用一种或两种饱和度较低、不刺眼的颜色(例如深蓝色、暗紫色、或一种中性的科技蓝/绿,甚至可以考虑让用户在设置中从预设的几种颜色中选择)作为强调色。强调色应用于关键操作按钮(如“创建”、“开始学习”)、选中状态指示、重要提示信息、图表中的关键数据系列等,目的是引导用户注意力和区分信息层级,使用上需克制且有明确目的。
  • 布局: 采用简洁、规范的布局原则,如网格系统,确保元素对齐,信息组织有序。注重留白(Negative Space)的运用,使界面看起来不拥挤,内容更易于阅读和区分。
  • 组件: UI元素如按钮、输入框、卡片容器、图标等,其设计风格应统一为扁平化(Flat Design)或轻拟物风格(Light Skeuomorphism),强调清晰的轮廓和功能性。避免使用过多的装饰性元素、复杂的阴影效果和不必要的渐变填充。
  • 字体: 选择一套或两套高质量、清晰易读的现代无衬线字体(例如开源的思源黑体/Noto Sans,或系统默认的苹方/PingFang SC、微软雅黑/Microsoft YaHei,或如Inter等专为UI设计的字体)。通过字号大小、字重(粗细)、颜色深浅以及行间距等排版手段来区分信息层级和提高可读性。

详细功能需求:

  1. 数据存储
  • 技术选型: 强烈推荐使用 SQLite 数据库。数据库文件应存储在用户本地文件系统的一个专用、可配置(或有明确默认路径,如用户文档目录下的 智学闪卡数据/data.db)的文件夹内。应用启动时应检查数据库文件是否存在,并建立连接。

  • 数据模型(表结构示例,可根据实际SRS算法等需求调整):

  • Cards 表: id (主键, INTEGER, AUTOINCREMENT), front_content (TEXT, 存储正面Markdown/LaTeX源码), back_content (TEXT, 存储反面源码), details_content (TEXT, 可选, 存储详情源码), category_id (INTEGER, 外键关联Categories表), created_at (TIMESTAMP, 创建时间), updated_at (TIMESTAMP, 最后修改时间), is_collected (BOOLEAN, 是否收藏, 默认FALSE), collected_at (TIMESTAMP, 收藏时间, 收藏时记录), last_reviewed_at (TIMESTAMP, 上次复习时间), next_review_date (DATE, 下次应复习日期), ease_factor (REAL, 易度因子, SRS算法用), interval_days (INTEGER, 当前复习间隔天数, SRS算法用), lapses (INTEGER, 遗忘次数, SRS算法用), status (INTEGER, 卡片状态:0-新卡, 1-学习中, 2-已掌握等, SRS算法用)。

  • Categories 表: id (主键, INTEGER, AUTOINCREMENT), name (TEXT, UNIQUE, 分类名称), created_at (TIMESTAMP, 创建时间). (可以考虑增加一个 card_count 字段,通过触发器或应用逻辑维护,用于快速获取分类下的卡片数)。

  • Study_Logs 表: id (主键, INTEGER, AUTOINCREMENT), card_id (INTEGER, 外键关联Cards表), review_time (TIMESTAMP, 本次复习的具体时间), user_rating (INTEGER, 用户对卡片掌握程度的评价, 如 0-重来, 1-困难, 2-良好, 3-简单), previous_interval_days (INTEGER, 复习前的间隔), new_interval_days (INTEGER, 复习后的新间隔).

  • Tags 表 (可选增强功能): id (主键, INTEGER, AUTOINCREMENT), name (TEXT, UNIQUE, 标签名称).

  • Card_Tags 关联表 (可选增强功能, 多对多): card_id (INTEGER, 外键), tag_id (INTEGER, 外键), PRIMARY KEY (card_id, tag_id).

  • 独立性: 数据存储必须完全独立于任何特定的浏览器。用户在同一台计算机上使用不同的浏览器访问应用(如果是通过Web技术本地部署)或直接运行应用(如果是桌面应用程序),都应访问并操作同一份数据。

  • 备份与恢复: 在“设置”界面中,提供明确的“备份数据”和“恢复数据”功能。备份功能应允许用户将当前的SQLite数据库文件(或其压缩包)导出到用户指定的位置。恢复功能应允许用户选择一个之前备份的数据库文件来替换当前数据,操作前必须有清晰的警告提示,告知用户此操作将覆盖现有所有数据且不可逆。

  1. 通用 UI/UX & 风格
  • 全局导航栏: 应用顶部应有一个固定的全局导航栏。左侧可以放置应用的Logo或名称(点击可返回首页)。右侧或中间部分依次排列主要的功模块入口链接/图标,例如:“首页”、“创建”、“学习”、“收藏”、“统计”、“分类管理”、“CSV导入”、“AI工具箱”(如果保留此功能)。导航栏最右侧应放置“设置”图标(如齿轮图标)以及可能的其他全局操作(如同步状态指示器 – 如果未来有云同步功能,或用户菜单)。导航栏的整体设计(颜色、高度、元素间距等)需严格符合应用整体的黑白灰简约风格。
  • 操作反馈: 用户执行重要操作(如保存卡片、删除分类、开始学习会话等)后,应立即获得简短、清晰且非侵入式的视觉反馈。例如,使用屏幕底部或角落短暂出现的Toast提示(如“卡片已保存”、“分类已删除”),或者按钮状态的临时改变(如“保存中…”变为“已保存”)。
  • 加载状态指示: 当应用需要从数据库加载数据或执行耗时操作时(例如,打开一个包含大量卡片的列表,或生成复杂的统计图表),必须向用户显示明确的加载状态指示。可以使用全局的加载指示器、特定区域的骨架屏(Skeleton Screens)、或美观的加载动画(如旋转图标),以避免用户感觉应用卡顿或无响应。
  • 空状态提示: 在任何可能出现列表为空的情况下(例如,没有任何收藏卡片时打开收藏夹,没有任何错题时查看错题分析,刚开始使用应用时分类列表为空等),界面不应只是空白。应显示友好且具有引导性的空状态提示信息,例如“您还没有收藏任何闪卡,快去创建一个或开始学习吧!”并可能附带一个指向相关操作的按钮或链接。
  • 响应式设计(若为Web技术): 如果应用是基于Web技术栈(如Electron包裹的Web应用),应考虑基础的响应式布局。确保应用在不同尺寸的窗口或屏幕下(尤其是在常见的桌面显示器分辨率范围内)依然能够保持良好的可用性和视觉效果,元素不会重叠或超出可视范围。
  1. 首页/仪表盘 (Dashboard)
  • 布局设计: 首页作为应用的入口和信息概览中心,其布局应遵循简约风格,信息组织清晰,主次分明。可以考虑划分为几个主要区域:顶部的核心统计数据区、中部的功能快捷入口区、下部的学习统计图表区,以及可能的侧边或底部快速访问/学习建议区。

  • 核心统计区: 以醒目的卡片式或列表式设计,展示用户最关心的几个核心数据指标。这些数据必须实时从数据库查询或通过有效的缓存机制更新。包括:

  • 总闪卡数: 数据库中所有卡片的总数量。

  • 今日已学习/复习卡片数: 当天完成的学习/复习任务的卡片数量。

  • 分类总数: 数据库中实际存在的用户自定义分类的数量,必须准确无误。

  • 错题数量/待复习错题数: 根据错题定义(见复习设置),统计当前被标记为错误或需要优先复习的卡片数量。

  • 功能快捷入口: 提供一组设计简洁、易于识别的按钮或图文卡片,作为通往应用核心功能模块的快速通道。例如:“创建新闪卡”、“开始学习/复习”、“查看我的收藏”、“进入统计分析”、“管理我的分类”。

  • 学习统计图表:

  • 默认视图: 图表默认显示的时间范围(如“近7天”)和数据聚合粒度(如“按天显示”)应由用户在“设置”界面中配置。

  • 即时切换选项: 在图表区域附近,提供快速切换按钮,允许用户即时改变当前图表的时间范围(如“7天”/“30天”/“一年”)和聚合粒度(“按天”/“按周”/“按月”),这些切换不影响“设置”中的默认值。

  • 图表样式: 图表(如折线图、柱状图)的设计应简洁明了,线条清晰,颜色搭配符合整体黑白灰风格,可使用强调色突出关键数据。坐标轴标签、图例等应清晰易读。

  • 图表下方补充统计: 在图表下方,可以显示基于当前图表视图范围内的总结性数据,例如“总复习卡片数:X张”、“日均复习:Y张”、“单日最高:Z张”,这些数据需根据图表的 时间范围/粒度 动态计算。

  • 快速访问/学习建议区: 可以放置指向“设置”界面、帮助文档的链接,或者一条固定的或可配置的“学习建议”文本(如“每天复习比一次性大量学习更有效”)。样式应简洁,不喧宾夺主。

  1. 创建闪卡界面
  • 布局优化: 严格遵循对称或视觉平衡的布局原则,以提升美感和易用性。推荐采用经典的两栏布局:左栏为卡片内容编辑区,右栏为实时预览区及最近创建卡片列表区。

  • 编辑区 (左栏):

  • 分类选择: 使用下拉列表(Select/Dropdown组件)让用户选择卡片所属的分类。此下拉列表中的分类数据源必须与“分类管理”界面中的分类数据完全一致且实时同步。 下拉列表中应包含一个“+ 创建新分类”的选项或按钮,点击后允许用户快速创建新分类(可弹窗或在下拉列表中直接输入创建)。

  • 问题 (正面内容): 提供一个多行文本输入区域(Textarea)。

  • 答案 (反面内容): 提供一个多行文本输入区域。

  • 详细解释 (可选): 提供一个多行文本输入区域,用于补充更详细的解释或笔记,此内容默认在常规复习时不直接展示。

  • 输入框特性: 所有文本输入框应支持Markdown语法和LaTeX公式的输入。可以考虑在输入框内集成基础的Markdown语法高亮功能(例如使用CodeMirror或Monaco Editor的Markdown模式),以辅助用户编辑。

  • 操作按钮: 编辑区底部应有“创建闪卡”(或“保存更改”,在编辑模式下)和“取消/清空”按钮。

  • 预览/最近列表区 (右栏):

  • 实时预览: 该区域顶部应有标签页(Tabs)切换器,分别对应“正面预览”、“反面预览”、“详情预览”。当用户在左侧编辑区输入内容时,对应的预览标签页内应实时地将Markdown和LaTeX源码渲染成最终的富文本效果。预览区域应有固定的高度或最大高度限制,当渲染后的内容超出高度时,预览区内部应出现滚动条。渲染效果必须与卡片在其他地方(如学习界面、收藏列表)的显示效果完全一致。

  • 最近创建的闪卡列表:

  • 位置与样式: 可以放置在实时预览区域的下方,或者作为右栏中预览区旁边的一个独立的、可滚动的垂直列表区域。此列表区域必须有明确的高度限制,以防止因卡片过多而导致整个右栏无限拉长,破坏页面布局平衡。 内容溢出时,列表内部应可滚动。

  • 列表项显示: 每个列表项代表一张最近创建或编辑的卡片。应简洁地显示卡片的关键信息,例如渲染后的卡片正面内容(对于过长的正面内容,应进行合理截断并显示省略号“…”)、卡片所属的分类名称。

  • 列表项渲染: 列表项中显示的卡片正面内容摘要也需要正确渲染Markdown和LaTeX。

  • 列表项操作按钮: 每个列表项右侧或悬停时显示一组操作图标/按钮,风格应简洁清晰:

  • 编辑 (铅笔图标): 点击后,将该卡片的数据加载到左侧的编辑区表单中,编辑区底部的按钮变为“更新闪卡”。

  • 收藏/取消收藏 (心形图标): 点击切换该卡片的收藏状态。图标应有实心(已收藏)和空心(未收藏)两种状态,并实时反映卡片的is_collected状态。

  • 删除 (垃圾桶图标): 点击后,弹出确认对话框,用户确认后从数据库中永久删除该卡片,并将其从最近创建列表中移除。

  • 查看卡片详情按钮 (通常是一个 ‘i’ 图标或眼镜图标): 在每个列表项上或旁边提供。点击后,弹出一个模态窗口(Modal)。此模态窗口必须严格居中显示在当前浏览器视口(即屏幕中央),而不是相对于整个(可能很长的)最近创建列表的物理高度居中。模态窗口内清晰展示该卡片的完整正面、反面和详情内容,所有内容都必须正确渲染Markdown和LaTeX,不能显示源码。 模态窗口应提供关闭按钮。

  • CSV 批量导入:

  • 在创建页面的一个易于发现的位置(如顶部操作栏)提供“CSV 批量导入”按钮。

  • 点击按钮后,引导用户选择CSV文件。应提供清晰的CSV文件格式说明(例如,必需的列:Front, Back;可选列:Details, Category, Tags;编码:UTF-8;分隔符:逗号)和示例模板下载链接。

  • 应用在接收到文件后,进行健壮的解析。提供导入前预览(例如显示前几条待导入的数据,并指出可能的格式问题)。用户确认后执行导入。

  • 导入完成后,显示导入结果报告(成功导入N条,失败M条及具体原因)。

  • 对于CSV中指定的分类,如果数据库中不存在,应有明确的处理逻辑:或者自动创建新分类,或者将该卡片标记为导入失败并说明原因(建议在导入设置中让用户选择处理方式)。

  • 提示区: 页面底部或侧边可以保留一个区域,显示“提示:创造高质量闪卡的小技巧”等静态帮助文本。样式应简洁,不占用过多视觉空间。

  1. 学习/复习界面
  • 界面入口与模式选择:

  • 选择学习/复习的分类: 在界面顶部或主要内容区域的起始位置,提供一个下拉列表或类似的选择器,允许用户选择要进行学习或复习的卡片分类。此分类列表的数据源必须与“分类管理”界面中的分类完全一致且实时同步。 列表中应包含“所有分类”(学习/复习所有卡片)和“未分类”(学习/复习未归类的卡片)的选项。

  • 选择学习/复习模式: 在用户选定分类(或“所有分类”)之后,下方应出现明确的模式选择按钮,例如:

  • “学习新卡片”: 开始学习所选分类下尚未学习过(状态为“新卡”)或处于早期学习阶段的卡片。数量可由“设置”中的“每日新学卡片上限”控制。

  • “复习到期卡片”: 开始复习所选分类下根据SRS算法判定今天需要复习的卡片(next_review_date <= 今天)。数量可由“设置”中的“每日复习卡片上限”控制。

  • “复习错题/难点卡片”: 开始复习所选分类下被标记为“错误”(例如,上次复习时评级为“重来”)或根据特定规则(如多次评级为“困难”)被判定为难点的卡片。

  • 按钮的样式应简洁明确,易于区分。

  • 学习/复习流程交互:

  • 卡片正面显示: 点击任一学习/复习模式按钮后,进入卡片学习/复习视图。首先显示当前卡片的正面(问题)内容。正面内容必须正确渲染Markdown和LaTeX。

  • 自我评估: 在卡片正面下方,提供一组清晰的自我评估按钮,让用户评价对当前卡片内容的掌握程度。例如(基于常见的SRS评级):

  • 重来 (Again) / 忘记: 完全不记得或理解错误。

  • 困难 (Hard) / 勉强: 回忆/理解过程非常挣扎,不确定。

  • 良好 (Good) / 记得: 顺利回忆/理解,但并非毫不费力。

  • 简单 (Easy) / 熟练: 非常轻松、快速地回忆/理解。

  • 按钮的文字和具体数量可根据所选SRS算法调整,但必须直观易懂。按钮样式应统一、清晰。

  • 卡片反面显示: 用户点击“显示答案”链接/按钮(或者在某些设计中,点击任意一个自我评估按钮后自动显示答案)后,当前卡片的正面内容被隐藏或移位,同时显示卡片的反面(答案)内容。反面内容也必须正确渲染Markdown和LaTeX。

  • 查看详情: 在卡片反面内容区域,提供一个清晰的入口(例如,一个位于右上角的小图标,或一个“查看详细解释”的链接),用户点击后可以弹出一个模态窗口或在当前页面展开一个区域,显示该卡片的“详情”内容。详情内容同样必须正确渲染Markdown和LaTeX,且弹窗应居中于屏幕。

  • SRS算法驱动: 用户选择自我评估等级后,应用后台应根据用户的选择,结合卡片当前的SRS状态(如易度因子、当前间隔等)以及“设置”中配置的SRS算法参数,自动计算该卡片的下一次复习时间(next_review_date)和新的SRS状态,并更新数据库中对应卡片的记录。

  • 会话进度与完成: 在学习/复习过程中,应有清晰的进度指示(例如,“当前卡片 X / 总计 Y 张”)。当用户完成设定的学习/复习数量(或当前模式下无更多卡片)后,应给出明确的会话完成提示。

  • 界面整洁与导航:

  • 移除冗余导航: 应移除在页面底部可能存在的固定的“返回首页”按钮或右侧的紫色返回小箭头(如果之前存在)。页面的主要导航应统一依赖于应用顶部的全局导航栏。

  • 底部空间利用(可选): 如果移除了底部固定按钮后,原先的空白区域可以考虑用来显示当前学习会话的更详细进度信息(如已复习 X / Y 张卡片)、已用时长计时器,或者本次会话的简要统计(例如,答对/答错的比例,如果评级可以明确对应对错)。

  1. 收藏 (Collections) 界面
  • 目的与入口: 此界面用于集中展示和管理所有被用户标记为“收藏”(is_collected = TRUE)的闪卡。用户通过全局导航栏中的“收藏”入口进入。

  • 整体布局:

  • 页面顶部应有明确的标题,如“我的收藏”。

  • 排序与筛选控件: 在列表上方,提供用户友好的控件,允许用户对收藏的卡片进行排序和筛选:

  • 排序选项: 至少支持按“收藏时间”(collected_at,默认应为最新收藏的在前)、“卡片创建时间”(created_at)、“卡片正面内容”(按字母顺序)进行排序。使用下拉菜单或一组按钮实现。

  • 筛选选项: 至少支持按“卡片分类”进行筛选。使用下拉菜单,列表中的分类数据源必须与“分类管理”一致且实时。 可以考虑未来增加按标签(如果实现标签功能)筛选。

  • 时间分组/时间标签: 为了方便用户按收藏时间检索,卡片列表应在视觉上按收藏时间进行分组(例如,使用小标题区分“今天收藏”、“昨天收藏”、“本周收藏”、“2024年6月收藏”等),或者在每个卡片项上明确、清晰地显示其收藏日期和时间。

  • 卡片列表视图: 收藏的卡片可以以列表形式或网格形式展示(可以考虑提供切换视图的按钮)。每个卡片项的设计应简洁,并符合整体的黑白灰简约风格。

  • 单个收藏卡片的展示:

  • 每个卡片项应至少显示渲染后的卡片正面内容(对于过长的内容应做截断处理,并以省略号结尾)、该卡片所属的分类名称、以及该卡片的收藏时间。

  • 渲染要求: 卡片正面内容的显示必须正确渲染Markdown和LaTeX。

  • 单个收藏卡片的操作 (通常在每个卡片项上,或通过右键菜单/悬停显示):

  • 查看详情 (例如,使用眼镜图标):

  • 点击此操作后,弹出一个模态窗口(Modal)。

  • 定位要求: 该模态窗口必须严格居中显示在当前浏览器视口(即屏幕中央),绝对不能是相对于整个(可能由于卡片数量多而非常长的)收藏列表的物理高度居中。

  • 内容显示: 模态窗口内应清晰、完整地展示该卡片的正面、反面、以及详细解释内容。所有这些内容都必须正确渲染Markdown和LaTeX,用户不应看到任何源码。 如果渲染后的内容超出了模态窗口的预设高度,模态窗口内部应可以独立滚动。模态窗口必须提供一个明确的关闭按钮(如右上角的 ‘X’)。

  • 编辑 (例如,使用铅笔图标): 点击此操作后,应用应跳转到“创建闪卡”界面,并将当前收藏卡片的所有数据(正面、反面、详情、分类等)加载到编辑区的表单中,供用户修改。编辑区底部的按钮应变为“更新闪卡”。

  • 取消收藏 (例如,使用实心的:heart:图标): 点击此操作后(可以考虑增加一个简短的确认提示,如“确定要取消收藏此卡片吗?”),应用应将数据库中该卡片的 is_collected 状态更新为 FALSE,并将 collected_at 时间戳清空或设为NULL。该卡片应立即从当前的收藏列表中移除。图标本身应变为未收藏状态(如空心:heart:图标),以便用户在其他地方(如卡片列表)看到状态变化。注意,此操作仅取消收藏,卡片本身不应被删除。

  • 删除 (例如,使用垃圾桶图标): 点击此操作后,必须弹出一个明确的确认对话框(例如,“您确定要永久删除这张闪卡吗?此操作无法撤销。”)。用户确认后,应用应从数据库中彻底删除该卡片的所有相关记录(包括其在 Cards 表中的主记录以及可能的 Study_Logs 等关联记录)。该卡片也应立即从当前的收藏列表中移除。

  • 性能考量: 如果用户收藏的卡片数量非常大(例如成百上千张),为了保证界面的流畅性,应实现分页加载(Pagination)或虚拟滚动(Virtual Scrolling)技术来展示卡片列表。

  • 空状态显示: 当用户没有任何收藏的卡片时,收藏界面不应是空白一片,而应显示友好的提示信息,例如“您还没有收藏任何闪卡。在学习或浏览卡片时,可以点击:heart:图标收藏重要的内容。”

  1. 统计详情界面 (Statistics)
  • 目的与定位: 此界面旨在为用户提供一个比首页仪表盘更全面、更深入的学习数据分析和回顾平台。帮助用户清晰地了解自己的学习模式、进度、强项和薄弱环节。界面设计应力求数据可视化清晰、直观易懂,避免信息过载。所有关于图表默认显示周期、数据聚合方式等“默认设置”应由用户在主应用的“设置”界面中进行配置,本“统计详情界面”本身提供的是基于这些默认设置的即时切换和高级筛选查看功能。

  • 整体页面布局:

  • 页面顶部应有明确的标题,如“学习统计分析”。

  • 全局时间范围快速选择器: 在页面顶部的一个显著位置(例如,标题下方或右侧),提供一组常用时间范围的快速选择按钮(例如:“近7天”、“近30天”、“近90天”、“近一年”、“所有时间”)。用户点击这些按钮仅用于筛选当前统计详情页面显示的数据,不应修改用户在主“设置”界面中设定的全局默认值。

  • 主导航/标签页 (Tabs) 结构: 为了有效地组织和呈现不同维度的统计信息,建议使用标签页(Tabs)结构。每个标签页专注于一个特定的统计分析主题。例如,可以设计以下几个核心标签页:

  • “学习进度概览 (Overview / Progress)”

  • “卡片掌握度分析 (Card Mastery)”

  • “错题回顾与分析 (Mistake Analysis)”

  • “学习活跃度日历 (Activity Calendar)” (此为可选的高级功能,如热力图)

  • 标签页一:学习进度概览 (Overview / Progress)

  • 核心数据指标卡片: 在此标签页的顶部,以简洁的卡片形式展示一些关键的学习绩效指标的当前值(这些值应根据页面顶部的全局时间范围选择器动态计算得出):

  • 总学习天数: 在选定的时间范围内,用户实际有学习记录(复习或学习新卡)的天数。

  • 总复习卡片数: 在选定时间范围内,用户复习过的卡片总数量(注意,这里通常指非去重的卡片,即一张卡片复习多次算多次)。

  • 平均每日复习量: 计算公式为:总复习卡片数 / 总学习天数。

  • 平均正确率(可选): 如果应用的SRS评级能够明确映射为“正确”或“错误”的判断,则可以计算并展示此项。

  • 学习趋势图表:

  • 图表类型: 可以选择折线图或柱状图来展示趋势。

  • Y轴数据系列: 应允许用户选择在Y轴上显示的数据系列,例如:“每日复习卡片数”、“每日学习新卡数”、“每日学习总时长”(如果应用记录了学习时长)。可以通过下拉菜单或一组切换按钮实现。

  • X轴时间序列: X轴表示日期,其范围由页面顶部的全局时间范围选择器决定。

  • 数据聚合方式选择器: 在图表的旁边或下方,提供“按天显示”、“按周聚合”、“按月聚合”的切换按钮。此切换仅影响当前图表的展示方式,不修改用户在主“设置”中设定的默认聚合方式。

  • 图表下方总结性文字: 可以在图表下方显示一行文字,总结当前图表数据范围内的总计值、平均值、峰值等关键信息。

  • 按分类统计(可选): 可以提供一个简单的列表或饼图,展示在选定的全局时间范围内,各个卡片分类的学习量占比(例如,各分类复习卡片数占总复习卡片数的百分比)或绝对复习卡片数。

  • 标签页二:卡片掌握度分析 (Card Mastery)

  • 目的: 帮助用户深入了解自己对所有卡片的掌握情况,识别出哪些卡片已经熟练掌握,哪些是学习过程中的薄弱环节或“半生不熟”的知识点。

  • 高级筛选器区域(设计上可以考虑默认折叠部分高级选项,以保持界面简洁): 提供一组强大的筛选器,让用户可以精确地定位到特定状态的卡片:

  • 掌握程度范围滑块/选择器: (参考您提供的截图设计)例如,可以设计一个滑块,其区间标记为“未掌握”(如新卡、多次遗忘的卡片)、“部分掌握”(如学习初期、间隔较短的卡片)、“较好掌握”(如已进入较长复习间隔的卡片)、“完全掌握”(如已进入非常长复习间隔的成熟卡片)。这个掌握程度的划分应与应用内部SRS算法对卡片状态的定义(例如,新卡、学习中、年轻卡、成熟卡等,或基于易度因子、当前间隔的范围)相对应。

  • 最小复习次数筛选: 提供一个数字输入框,允许用户筛选出复习次数大于或等于N次的卡片。

  • 近期活动天数范围筛选(针对卡片创建或最后复习时间): 允许用户筛选出在最近N天内(例如,最近30天)创建的卡片,或者在最近N天内被复习过的卡片。

  • 自定义日期范围筛选: 提供开始日期和结束日期选择器,允许用户筛选出在特定起止日期范围内创建的卡片或被复习过的卡片。

  • 内容关键词搜索: 提供一个文本输入框,允许用户根据卡片正面、反面或详情内容中的关键词来搜索卡片。

  • 操作按钮: 筛选器区域应有“应用筛选条件”按钮和“重置所有筛选条件”按钮。

  • 筛选结果卡片列表:

  • 根据用户设定的筛选条件,下方动态显示符合条件的所有卡片的列表。

  • 列表中的每一项应清晰地显示:卡片正面内容(渲染后,对于过长内容应做截断处理)、卡片当前的掌握状态(可以用文字或颜色标记)、总复习次数、预计的下次复习时间等信息。

  • 列表项操作: 每个卡片项旁边应提供操作按钮:

  • 查看详情: 点击后,行为与“收藏”界面中的查看详情完全一致(即,弹出居中于屏幕的模态窗口,显示完整且渲染后的卡片正反面及详情内容)。

  • 跳转至编辑: 点击后,直接跳转到该卡片的编辑页面(即“创建闪卡”界面,并载入该卡片数据)。

  • (可选高级功能)标记为“优先复习”或“加入临时复习队列”: 允许用户将筛选出的某些难点卡片手动加入一个特殊的复习队列,以便在下次学习时优先处理。

  • 标签页三:错题回顾与分析 (Mistake Analysis)

  • 目的: 集中展示用户在学习过程中被标记为“错误”或需要特别关注的卡片,帮助用户针对性地进行补漏和强化。

  • 筛选器(可选,可提供简化版筛选):

  • 按错题产生的时间范围进行筛选。

  • 按卡片所属的分类进行筛选。

  • 错题列表展示:

  • 列表中显示所有被有效标记为“错误”的卡片。 “错误”的定义应基于复习时的用户评级(例如,用户选择了“重来/Again”等级)或特定的错题判定规则(例如,在“设置”中定义,连续N次被评为“困难/Hard”的卡片也被视为错题)。

  • 列表中的每一项应清晰地显示:卡片正面内容(渲染后,对于过长内容应做截断处理)、卡片所属的分类名称。

  • 错题详细信息(可设计为点击列表项后展开显示,或在右侧详情面板显示):

  • 该卡片总的错误次数统计。

  • 历次被标记为错误的时间点。

  • (如果应用记录了更详细的上下文)每次错误时用户选择的掌握程度评级是什么。

  • 列表项操作: 每个错题项旁边应提供操作按钮:

  • 查看详情: 点击后,行为与“收藏”界面中的查看详情完全一致。

  • 跳转至编辑: 点击后,直接跳转到该卡片的编辑页面。

  • 加入错题复习: 允许用户将选中的一个或多个错题快速加入到一个一次性的“错题专项复习会话”中。

  • 空状态提示: 当用户没有任何错题记录时,应显示鼓励性的提示信息,例如“太棒了!目前您的错题本是空的,继续保持!”

  • 标签页四:学习活跃度日历 (Activity Calendar) (此为可选的高级功能)

  • 图表类型: 采用类似 GitHub 贡献图那样的热力图(Heatmap)形式。

  • 数据显示: 展示过去一年(或数月)的日历视图。日历中的每一天根据当天的学习量(例如,复习的卡片数量,或总学习时长)使用不同深浅的颜色进行填充,颜色越深代表学习量越大。

  • 交互功能: 当用户鼠标悬停在日历中的某一天上时,应能弹出一个小提示框(Tooltip),显示当天的具体学习数据。

  • 整体设计风格备注: 此“统计详情界面”中的所有图表、列表、筛选器控件、按钮等UI元素,都必须严格遵循应用整体的黑白灰简约专业设计风格。数据的可视化展示应清晰易懂,避免不必要的装饰和信息过载,确保用户能够快速获取有价值的洞察。

  1. 分类管理界面 (Category Management)
  • 目的与入口: 此界面用于让用户创建、查看、重命名和删除卡片分类。用户通过全局导航栏中的“分类管理”入口进入。

  • 界面布局: 整体布局应简洁明了。

  • 页面顶部应有明确的标题,如“分类管理”。标题旁边或下方应有一个醒目的“+ 创建新分类”按钮。

  • 核心功能实现:

  • 分类列表展示:

  • 以列表形式清晰地展示所有用户已创建的分类的名称。

  • 在每个分类名称旁边,应实时准确地显示该分类下包含的卡片数量(例如,“数学 (35张)”)。此数量必须在卡片创建、删除、或更改分类时动态更新。

  • 列表的每一行(即每个分类项)右侧应提供一组操作按钮,通常包括:“重命名”和“删除”。

  • 创建新分类:

  • 用户点击“+ 创建新分类”按钮后,应弹出一个小型的模态对话框,内含一个文本输入框让用户输入新分类的名称,以及“确认创建”和“取消”按钮。

  • 或者,采用行内编辑的方式:点击按钮后,在列表顶部或底部出现一个新的可编辑行,让用户直接输入名称后按回车或点击保存图标创建。

  • 创建时需校验分类名称是否为空或已存在,并给出相应提示。成功创建后,新分类应立即出现在列表中。

  • 重命名分类:

  • 用户点击某个分类项的“重命名”按钮后,同样可以采用弹窗或行内编辑的方式,让用户修改该分类的名称。

  • 修改时也需校验新名称是否为空或与现有其他分类重名。成功保存后,列表中的分类名称应立即更新。

  • 删除分类:

  • 用户点击某个分类项的“删除”按钮后,必须弹出一个非常明确的确认对话框(例如,“您确定要删除分类 ‘[分类名称]’ 吗?”)。

  • 关键:确认对话框中必须清晰地告知用户,当一个分类被删除时,原属于该分类下的所有卡片将如何处理。 强烈推荐以下处理方式并告知用户:

  • “此分类下的所有 X 张卡片将被自动移动到‘未分类’中。您确定要删除吗?” 这是对用户数据最安全且操作最便捷的方式。

  • (备选但不太推荐的方式是:提示用户“此分类下尚有 X 张卡片。请先将这些卡片手动移动到其他分类,或将它们全部删除后,才能删除此分类。” 这种方式对用户操作要求较高,可能导致用户困惑或放弃删除。)

  • 用户确认删除后,应用应执行相应的数据库操作(删除分类记录,并将相关卡片的 category_id 更新为“未分类”对应的ID或NULL),然后从列表中移除该分类。

  • 数据一致性的绝对保证: 在“分类管理”界面对分类进行的任何操作(创建、重命名、删除),其结果都必须立即、准确无误地反映在应用程序的所有其他相关部分。这包括但不限于:首页仪表盘上的“分类总数”统计、创建闪卡界面中的分类选择下拉框、学习/复习界面中的分类选择器、统计详情界面中按分类筛选的选项、以及收藏界面中按分类筛选的选项等。这是确保应用逻辑正确和用户体验良好的核心要求之一。

  1. 设置界面
  • 整体布局与导航: 为了更好地组织众多的配置项,设置界面应采用清晰的布局,例如使用左侧垂直标签页导航(如“通用设置”、“复习参数”、“数据管理”、“外观主题”、“关于本机”)或顶部水平标签页,每个标签页对应一部分相关的设置。整体风格仍需保持简洁和专业。

  • 数据管理设置:

  • 数据显示路径: 清晰显示当前应用数据(SQLite数据库文件)存储在本地计算机的完整路径。

  • 备份数据按钮: 点击后,允许用户选择一个位置将当前的数据库文件备份保存。

  • 恢复数据按钮: 点击后,允许用户选择一个之前备份的数据库文件进行恢复。操作前必须有强烈的警告提示,告知此操作会覆盖所有现有数据且不可撤销。

  • 学习统计偏好设置 (这些设置将影响首页仪表盘和统计详情页面的默认显示行为):

  • 首页图表默认时间范围: 提供下拉选项(如“最近7天”、“最近30天”、“最近一年”),用户选择后作为首页学习统计图表默认加载时的时间跨度。

  • 首页图表默认数据粒度: 提供下拉选项(如“按天显示”、“按周聚合”、“按月聚合”),作为首页图表默认加载时的数据聚合方式。

  • 统计详情页各图表的默认时间范围和聚合方式(可选): 如果希望统计详情页的图表有独立于首页的默认视图设置,可以在此提供更细致的配置。

  • 复习参数设置:

  • 每日新学卡片上限: 允许用户设置每天通过“学习新卡片”模式最多学习的新卡片数量。

  • 每日复习卡片上限: 允许用户设置每天通过“复习到期卡片”模式最多复习的卡片数量。

  • Spaced Repetition System (SRS) 算法参数(高级):

  • 默认算法与参数: 应用应内置一套经过优化的、对大多数用户有效的默认SRS算法参数(例如基于SM-2、FSRS或其他成熟算法的推荐值)。

  • (可选,针对高级用户)允许调整关键参数: 对于非常了解SRS算法的用户,可以考虑提供调整部分核心参数的选项(例如初始易度因子、间隔增长系数等),但必须有清晰的说明和风险提示。对普通用户应默认隐藏或不提供这些高级调整。

  • 错题定义与复习策略:

  • 错题判定标准: 允许用户定义在复习过程中,哪些用户评级(例如,选择“重来/Again”)会被系统自动标记为“本次回答错误”,从而将卡片计入错题。

  • (可选)困难卡片自动转错题: 可以设置一个规则,例如“一张卡片连续N次被评为‘困难/Hard’时,自动将其视为错题处理”。

  • 错题复习模式默认范围: 当用户选择“复习错题/难点卡片”模式时,是默认复习所有历史错题,还是仅复习最近N天内产生的错题(N可由用户设置)。

  • 外观与主题设置(可选):

  • 主题切换: 如果应用支持多种视觉主题(例如,除了默认的黑白灰风格外,还提供一个纯亮色主题或纯暗色主题),在此处提供切换选项。

  • 强调色选择(可选): 如果应用支持多种强调色,允许用户在此从预设的几种颜色中选择自己喜欢的一种。

  • 关于本机/应用信息:

  • 显示当前应用的名称、版本号。

  • 提供开发者信息或版权声明。

  • 可能包含指向用户手册、官方网站、问题反馈渠道(如邮箱或链接)的链接。

一点补充与小小的满足感 :blush:

关于本地化:

因为我自己不懂什么 Cloudflare 之类的网络技术,所以我做的这个东西完全是运行在本地的。我其实也想过搞一个大家都可以用的在线服务,但是因为我自己不懂代码,就比较害怕这种公开的东西万一哪里出了什么错漏。就像大家薅羊毛的时候经常说的哪个哪个是“草台班子”,我自己也害怕成为那样的“草台班子”,给大家或者我自己造成一些不必要的损失。所以,我大概只会用 AI 来写一些本地用的小 App,除非我以后真的系统学习了、或者真正懂得了代码。

写在最后:

当这个 App 真正完成,并且开始帮助我学习的时候,我心里其实还是挺满足的。这个 App 本身可能并不复杂,佬友们或许自己很快就能写一个出来。但是,它确确实实地满足了我所有的定制化需求,这就足够了!

希望我的这点经历能给其他零基础但想尝试用 AI 做点东西的佬友们一点启发!

只有项目文件,我不清楚这种demo是什么意思,佬可以说一下我看看有吗 :face_with_monocle:。但是应该不能上传。 :sob:而且大概率是shi山代码,我也分不清是不是shi山
补充:(我是他大号,因为被锁2级了,求助始皇,始皇没回我,我只好如实叙述情况开了个小号,他是小号,他一级,不能发表太多评论,被限制了)

因为害怕自己不小心把自己的什么东西暴露了,或者把体验的佬友的什么东西暴露了,所以只有本地文件。我一会试试能不能弄个网盘链接,如果真有佬友想看多shi山可以打开看一下

很强了!感谢分享经验。我现在是刚刚从头学,感觉越学不懂的越多,太复杂了。佬觉得纯用AI写底层高并发的网络应用效果怎么样?或者分布式应用?

内个既然是数学系,你觉得目前那个大模型做数学题最厉害

就是,咱说,有没有可能我听不懂佬友你说的问题呢… :sob:

说实话,我很少拿来做题。因为对于常规的我“书本”上的”习题“,基本上目前的大部分题ai都可以解决。但是我认为ai的数学能力特别差,因为但凡脱离书本,稍微发散的问题,ai基本都解决不了。而我所探讨的大部分都是一些开放性的问题,大部分来自于我水stack math上的时候遇到的问题,而ai基本没有解决能力,哪怕我已经想了大半部分想让他提供一些思路指导,也很难给出具有建设性的指的深入思考的思路。固定的书本习题一般都是我的作业,需要自己做,也不会去问ai。所以我很难给出谁最强这个结论,因为我感觉都不是特别强。

高数这种基础的一般都能解决感觉…
高级主题还是解决不了。之前问过证明论的问题,就答不了

已经很好了,后续需要更进一步的话就是数据的写入、存储机制优化,功能模块化

谢谢佬的建议,但是我不太敢动他。因为我不懂任何代码,身边也没有懂的朋友,我怕删来删去的最后导致用不了了,我也不会改就尴尬了。目前处在一个能用就好的状态。 :melting_face:

我觉得主要是整理需求,一次性表达清楚所有需求cursor就可以写一个简单的app :smiley:,但是如果一次没表达清楚,之后不断进行大幅度删减增加,就会导致非常容易变成shi山,少一个bug多三个bug,我第一次尝试就是因此放弃的

虽然过程非常坎坷,但是迈出了第一步,老哥,我觉得这是一个非常好的过程,就算你学编程写这样的应用,也是要经历抓破头皮都想不出来怎么写,怎么解决bug。好代码都是一步步的调试出来了,经验也是不断经历(踩坑)获得了,非常好

是的,需求最好在写代码前用其他AI规划生成,前端页面、后端服务、数据库等等,按流程一块一块用cursor生成,但是需要大量时间调试修改更新

我其实没有按流程一块一块,是一次性把他整理成那种点式发过去让cursor一次写完的,因为分开写我怕他不了解前面写的部分导致互相之间勾连的时候出错。但是佬友的想法也很好,谢谢!

是的,我希望以后可以学习代码懂一点程序,而不是完全靠ai,很容易ai半天改不好一个bug抓耳挠腮的(一般遇到我怎么命令都解决不了的bug,我会放弃,然后继续改app,我发现改着改着不知道为啥那个bug就消失了,笑.jpg)

非常感谢了…我之前也是零基础瞎捣鼓然后看得头晕乎乎 :joy:

是了,我觉得大项目必须还是得懂代码的人来操控ai,很难0基础拿cursor去写什么大项目

这是 提亚马特 首次发帖 – 让我们欢迎他/她加入社区吧!

edu.cn能成功是啥时候的事啊 :astonished_face:

嗯是的,而且需要有经验的程序员才能驾驭cursor。。。要不就像你说的,改完一个bug又出来n个,根本改不完

很有参考性,感觉让ai写脚本很容易,写app之类稍大点的项目还是需要懂点相关知识,更容易精确描述需求,选择技术路线

这个确实是的,现在AI写脚本程序比较容易,像应用程序这样的,别说AI,就是人类开发者也是要构思规划技术选型、逻辑架构这些的,都不可能凭空就做出来

佬友已经很棒了

首先佬友已经很厉害了!
其次我想分享一些我使用cursor的技巧

介绍自己

给自己的定位:码农(代码界的搬运工)
代码能力:初级全栈
常用语言:Java、Python、前端框架Vue+Typescript 语言
当AI赋能编码后,个人的能力是有所增强的,因为不会的或者不懂的,都已经很熟练的用各类模型来询问解决自己的问题。

个人一些Cursor的使用技巧

我想到什么就写什么,可能有点乱,我完全是靠感觉回想我使用Cursor的样子

项目初见

1、首先打开一个新项目时,我不会让Cursor立马工作,我会首先确认当前有没有降智,我会说“先来查看当前项目目录和代码,分析出核心的代码逻辑并列出来”,如果你发现它没有按照你说的去调用工具查看目录结构和查看代码文件,那么很有可能降智了,同样这一步,可以让它很好的了解你的整个项目结构。

做好版本控制

2、做好版本控制,新手没关系,可以去B站看看有关git视频,这一步其实很重要的,因为它经常会抽风把你的代码改错,或者没有按你的要求乱改,也很有可能把你已经完善好的功能给你改爆炸了,所以这一步还是很重要的,每当完成一个小功能时,我就建议你提交一次代码,方便出问题时及时回滚。

尝试切模型解决小问题

3、不要依赖特定的某个模型,不要一直揪着Claude3.7或者更多热门模型使用,例如一些小问题的修改,可以适当切换成Claude3.5或者4.1,细心的给予它提示,也能改到位。

不要一直依赖同一个上下文

4、不要只依赖一个上下文,有的时候,提问太多次操作太多次,上下文就巨长了,这样Cursor整个也会变卡,而且很有可能你提问后它很久就不回复你(过了很久都不会,切模型都不会,这样其实可以判定为上下文可能过长了),这种情况你可以新开一个会话,按照第一步说的,让它再先了解你现在做到哪一步了,让它查看哪一个目录文件的代码。

可以尝试延用代码设计

5、延用代码设计,例如,我之前让Cursor写过一套前端的样式,我觉得还不错,同时因为是Vue,在src/assets目录下有base.css、main.css全局样式的定义,这样你就可以让它先来看全局样式是怎么写的,给它垫一下,然后它就会延用我提供的样式继续按这个样式写出新的样式(这个逻辑不仅可以用于样式,你可以根据情况给它铺垫一些你觉得不错的代码)而且这样新写出来的样式都统一了~

做好功能模块化管理

6、做好代码模块化管理,无论你是用Python或者写前端,这点很重要,在和Cursor沟通的时候,它可能会写很多代码在一个文件里,当一个代码文件快到2000行的时候,你会发现Cursor效率变低了,而且可能老改错,这时候,不做别的,你可以先让它对你现有的代码做模块化的拆分,当然它也许会拆分然后功能全部爆炸,这也是非常有可能的,所以做好版本控制管理和拆分后的测试,拆分成多个代码文件后,代码行数就少了,这样其实它执行的效率会高一些(个人感觉),当然你也可以开局就让它对你的功能进行模块化,先建好代码文件,在每个代码文件上写上之后要做的功能,当然你也可以直接让它写,说到底就是新建文件然后注释上(TODO 待做…)

加点注释,让自己能看明白

7、注释,这点我觉得对我来说也挺重要,因为我不是什么代码都能看明白,我偶尔提问的时候,我就会说“给接下来新写的代码每行都打上注释”或者你还可以加入“初学者能看懂的那种”,当然啦,也不一定这样注释就看的明白,当然也会稍微友好一点,因为我这样基本我也都能看明白。

让它工作时,可以带一份小工作

例如你让它去改代码的时候,让它改完后,可以让它帮你去查看代码验证一些功能,我就会用到这种场景很多次,我会让它先修改某部分代码后,我说“改完后去帮我查看一下Redis lura脚本是否已经达到了XXX需求”

emmm…大脑好像一下子短路了,那就先写这些,之后想起来了我再做笔记吧,

欢迎佬友们提自己的技巧和沟通! :tieba_087:

谢谢佬友建议! :heart_eyes:

写crud这些确实没问题,但是咋说呢现在前端应用都饱和了,你听过有啥小白用ai开发的应用吗

楼主不就是小白嘛,不也是开发了一个小应用,不太懂你指的是纯小白不能使用AI开发吗?

0代码基础不要完全依赖AI,有的话也不建议依赖,不然炸了都不知道怎么修(

对,但是不依赖ai完全一行都写不出来。所以上面写了很多尽量避免反复修改代码的操作,很容易导致ai由于shi山代码不会修,ai不会修我就炸杠了

老哥解决问题的思路真的太清晰了,完全不像是零代码基础的样子。有的时候谨慎当然是好事,但也要自信一点,这个项目功能的设计和提示词的设计真的很棒了!

我的经历跟你类似,我是花了很久,走了很多弯路,然后不断看论坛大家的分享

发表评论