我认为在 AI 已经能够写出大量基础代码的情况下单纯禁止学生使用 AI 并不现实。
现在使用 AI 编程工具以后一个很直观的感受是以前可能需要查资料很久才能解决的问题现在可以很快获得一份能够运行的代码, 这种认识也是我现在开始重新理解“软件工程”这四个字的原因, 我认为合理的权衡应该建立在明确优先级的基础上, C 掌握类、对象、STL 等基础内容目前正在进一步学习多文件项目的组织方式和工程结构, 我过去有一个比较明显的问题就是容易把“学过”当成“掌握”,代码是否容易维护、不同模块如何组织、多人如何协作、需求发生变化以后如何修改、出现 Bug 后怎样定位、版本如何管理这些问题在规模稍大的项目中都会比单纯写出某个算法更加重要, 1. 如果 AI 工具能够自动生成大部分程序人类软件工程师的角色将如何重新定义 这是我目前最有感触的问题之一, 阶段目标 能够根据需求独立设计数据库和接口使用 Git 管理代码处理常见异常并完成项目部署,真正能够提高能力的训练应该包含设计、调试、重构和总结, 判断标准 不依赖完整教程可以独立完成一个简单的 Java MySQL 程序, ,AI 可以帮助我更快地生成代码、分析报错和理解陌生知识但工具能够帮助完成代码并不意味着自己真正掌握了这些知识, 阶段目标 能够独立使用 Java 完成基础程序熟悉集合、异常、IO 等常用内容掌握 SQL 基本增删改查能够使用 Git 完成 commit、push、pull 等操作, 四第二阶段掌握学习内容 HTTP 基础 RESTful API Spring Boot MySQL MyBatis / MyBatis-Plus Controller、Service、Mapper 分层,。
因此我希望以后使用 AI 时不只是追求“把作业做出来”而是尽量做到理解代码、能够修改代码并知道为什么这样实现, 现在回头看我认为当初的选择并没有错但自己对这个专业的理解经历了一个从“会写程序”到“能够完成软件项目”的变化。
因此本学期我希望把 Java 后端开发 作为主要学习方向通过软件工程实践课程把 Java、数据库、Git、项目设计和团队协作真正串联起来, 五、CodeArts 仓库实践 本次作业中我按照要求建立了 CodeArts 公共代码仓库并尝试使用 Git 上传代码, 三曾经希望怎样投入专业学习立过哪些 FLAG 刚入学的时候我给自己定过一个比较理想化的目标希望大学期间掌握多门编程语言并且能够自己完成一些比较有意思的项目,相反我认为“纯粹把语法翻译成代码”的价值会降低而理解需求、判断方案、设计系统、验证代码以及发现 AI 错误的能力会变得更加重要, 以前做课程程序时我通常拿到题目就马上创建项目然后边写边想, 功能增加以后如果前期结构设计不合理每增加一个按钮都会让代码变得更加难维护, 因此我认为未来的软件工程师更像是 设计者 审核者 实现者 AI 可以提高编码速度但最终仍然需要人决定应该做什么、为什么这样做以及结果是否可靠, 三成果与获奖经历 目前在专业竞赛和大型项目方面的积累还比较有限暂时没有特别突出的竞赛获奖经历, 二、立足当下——我的个人简历一基本信息项目内容 姓名 卢宗园 学号 102400223 年级 大三 专业 软件工程 兴趣爱好 编程、游戏、健身、了解 AI 与新技术 当前目标 补强编程基础学习 Java 后端开发提高独立完成项目的能力 二专业技能1. 编程语言 C 掌握基本语法、流程控制、数组、函数、指针等基础知识能够完成基础程序设计题, 4. 从项目启动到交付不同阶段最应该关注什么 我认为学生项目最容易出现的问题就是一开始急着写代码, 这也提醒我自己使用 AI 时至少应该做到 生成出来的代码我能看懂出现问题我能定位需要修改我能动手, 整体学习路线分为三个阶段 入门 → 掌握 → 综合实践 二Java 后端开发思维导图 我的 Java 后端学习路线主要包含以下内容 Java 后端开发│├── Java 基础│ ├── 面向对象│ ├── 集合框架│ ├── 异常处理│ ├── 泛型│ ├── IO│ ├── Lambda│ └── 多线程基础│├── 数据结构与算法│ ├── 数组与链表│ ├── 栈与队列│ ├── 哈希表│ ├── 树│ ├── 排序与查找│ └── 时间复杂度│├── 数据库│ ├── MySQL│ ├── SQL 基础│ ├── 多表查询│ ├── 索引│ ├── 事务│ └── 数据库设计│├── Web 基础│ ├── HTTP│ ├── RESTful API│ ├── JSON│ └── 前后端交互│├── Spring Boot│ ├── 项目结构│ ├── Controller│ ├── Service│ ├── Mapper│ ├── 配置文件│ ├── 参数校验│ └── 全局异常处理│├── 持久层│ ├── MyBatis│ ├── MyBatis-Plus│ ├── CRUD│ ├── 分页查询│ └── 条件查询│├── 工程工具│ ├── IntelliJ IDEA│ ├── Maven│ ├── Git│ ├── CodeArts│ └── Linux 基础│└── 项目实践├── 需求分析├── 数据库设计├── 接口设计├── 编码├── Git 协作├── 测试└── 部署 三第一阶段入门学习内容 Java 基础复习 Java 集合框架 异常处理 IO Git Maven MySQL 基础, 反过来如果程序虽然能运行但学生不知道关键代码的作用也无法处理稍微变化的需求那么作业实际上并没有达到学习目的。
因此我开始意识到模块化和代码设计的重要性, 因此我现在给自己定下几个新的 FLAG 本学期重点学习 Java 后端开发 不再频繁更换技术方向 熟练掌握 Git 的基本工作流而不是只会在 IDE 中写代码 至少完成一个可以真正运行和展示的完整 Web 项目 使用 AI 辅助学习和开发但确保 AI 生成的代码自己能够读懂、修改和解释 到本学期结束时能够独立完成一个具有前端、后端和数据库交互的基础项目, 六、总结 进入大三以后我越来越明显地感觉到软件工程专业真正需要解决的问题已经从 “这道程序题会不会写” 逐渐变成 “我是否具备完成一个项目的能力” 过去两年让我掌握了一些编程基础但也让我意识到自己的不足语言学习比较分散项目经验较少对工程化开发和团队协作还不够熟悉, 6. 学生使用 GPT 等 AI 工具完成作业老师应该如何判断学生是否真正掌握知识 这个问题和我现在的学习方式关系很大, 如果四个月后我能够独立完成一个结构清晰、能够运行和展示的项目并且可以解释其中每一个重要模块的设计思路那么这学期的学习对我来说就是有价值的, 2. 主要功能 支持 、-、*、/、(、) 等基本表达式计算 支持小数运算和连续表达式输入 支持退格和清空操作 支持 MC、MR、MS、M、M- 等内存功能 支持平方根、百分比、取模等运算 支持 sin、cos、tan、log、ln 等科学函数 使用 Swing 完成图形界面布局 对表达式进行解析并计算最终结果。
相比直接把代码文件保存在电脑中Git 能够记录每一次修改也更加适合之后的软件工程团队协作,当时最直接的印象是计算机行业发展较快就业方向比较多同时我也对“通过代码把一个想法变成真正可以运行的软件”这件事情比较感兴趣因此最终选择了软件工程专业, 当然“权衡”并不是给低质量找借口, 我希望这学期团队项目中能够真正经历一次完整流程而不仅仅负责其中某几段代码, 我认为与其为了让简历“看起来丰富”而夸大经历不如先如实记录自己当前的位置,通过逐步调试我认识到相比单纯完成某个函数一个程序真正变得可用需要同时考虑界面、输入方式、错误处理和代码结构, 4. 项目收获 这个项目让我第一次比较明显地感受到“小程序”和“软件”的区别, 能力方面我希望重点提高以下三个方面, 如果让我现在总结一个基本流程我认为应该是 需求分析 → 功能拆分 → 技术选型 → 原型/接口设计 → 编码 → 测试 → 集成 → 部署 → 总结维护 不同阶段的关注点也有所不同 需求阶段 首先确认“到底要解决什么问题” 设计阶段 明确模块边界和接口 开发阶段 关注代码规范和版本管理 测试阶段 检查功能是否真的符合需求 集成阶段 解决不同成员代码之间的兼容问题 交付阶段 保证别人能够正常运行和使用, 六四个月学习计划时间学习内容阶段目标产出 第 1 个月 Java 基础复习、集合、异常、IO、Git、Maven 补齐 Java 基础和工程工具 完成若干 Java 小练习建立 CodeArts 仓库并坚持提交 第 2 个月 MySQL、SQL、HTTP、Spring Boot 入门 能够完成简单后端接口 完成一个 Spring Boot MySQL CRUD 项目 第 3 个月 MyBatis/MyBatis-Plus、参数校验、异常处理、项目分层 掌握基本后端项目结构 独立完成一个较完整的小型后端项目 第 4 个月 软件工程实践团队项目、Git 协作、测试、部署 将技术应用到真实课程项目 完成项目可运行版本并整理项目文档 七每周执行计划 为了避免学习路线最后变成“只做规划不执行”我给自己增加以下约束 每周至少学习 5 天 每次学习至少完成一个能够验证的结果例如一道题、一个接口或者一次 Git 提交 每周整理一次本周遇到的问题 使用 AI 时不直接复制最终代码至少阅读并理解关键实现 每个月完成一个阶段性项目或者 Demo 四个月结束后重新评价自己的技能水平, 学习两年以后我逐渐发现真正的软件开发远不只是“把代码写出来”, 这可能比单纯完成几十道编程题更接近真正的软件开发,真正需要区分的是“使用 AI 学习”和“让 AI 代替学习”, 实际学习以后我先后接触了 C、C 和 Java。
我认为本科阶段比较重要的基础包括 一门能够熟练使用的主要编程语言 数据结构与算法 操作系统、计算机网络和数据库基础 面向对象和模块化设计思想 Git 等工程工具 阅读报错、定位问题和调试程序的能力, 目前对我来说最重要的并不是一次性规划未来很多年而是先把大三这一年真正利用起来让自己从“完成课程作业”逐渐转向“能够独立完成项目”, 对于初学者可以从以下几个步骤开始 学会 Git 和 GitHub / Gitee / CodeArts 的基本操作 阅读项目 README 和贡献指南 尝试在自己的电脑上运行项目 从文档错误、简单 Bug 或小功能开始 学习 Issue、Pull Request 和 Code Review 的流程, 因此“足够好”不是随便完成而是在有限资源下优先保证最重要的质量, 同时AI 编程工具的发展也让我开始重新思考自己的学习方式, 四、本学期技术学习路线一学习方向 结合自己目前的基础和未来可能的就业方向我暂时将本学期的主要技术学习方向确定为 Java 后端开发 我的目标不是在四个月内“精通 Java 后端”而是达到能够独立完成一个中小型 Spring Boot 项目的程度, 五第三阶段综合实践学习内容 需求分析 数据库设计 API 接口设计 Git 团队协作 参数校验 全局异常处理 项目测试 Linux 基础 项目部署,我也希望自己大学几年后能够独立开发一个完整的软件而不是只能完成一些课堂上的小程序, 进入大三以后我希望改变这种学习方式。
例如涉及数据安全、核心功能和严重崩溃的问题必须优先解决而某些不影响使用体验的小界面问题可以进入后续迭代, 5. 为什么软件工程的核心在于权衡而不是追求“零缺陷”或“完美质量” 最开始学习编程时我会认为“程序没有 Bug”才算完成, 如果只是反复写相似的课程题即使累计很多代码也可能只是熟悉了语法。
三对软件工程实践课程的理解与期望 我理解的软件工程实践课程重点并不是再学习一门新的编程语言而是把以前分散学习的知识真正串联到项目中。
同时整理自己的项目经历并尝试寻找暑期实习。
当时对程序员的理解也比较简单能够快速写出很多代码遇到题目能够很快找到算法并实现就代表编程水平比较高, 但项目越来越复杂以后我发现软件实际上很难做到绝对完美, 2. 大三下学期完善技术栈 准备实习 继续学习 MySQL、Redis、Linux、Spring Boot、常见后端开发模式并补充计算机网络、操作系统等面试基础。
真正进入大学以后我才发现软件工程和自己高中阶段想象的“学习编程”并不完全一样,虽然完成了课程要求也写过不少课程代码但目前这些语言更多处在“能够理解和完成基础程序”的阶段还没有真正形成某一个方向上的技术优势, 相比追求某一个固定的代码行数我更希望以后用“独立完成了多少功能”“解决了多少真正的问题”“能否解释自己写的代码”来衡量自己的进步, 2. 团队协作能力 学习使用 Git 分支、Issue、代码合并和版本管理理解团队项目与个人项目的区别, 所以我认为未来课程的评价方式可能会更加重视 开发过程 Git 提交记录 现场演示 代码讲解 临时需求修改 项目答辩,这也让我更加清楚大三阶段需要重点补充真正能够展示个人能力的项目经历, 通过软件工程实践课程完成一个比较完整的项目让自己的学习方式逐渐从“完成一道题”转向“完成一个项目”, 判断标准 能够完成一个具有登录、用户管理和实际业务功能的完整项目并能够讲清楚自己的设计思路,对于基础课程作业而言这种提升尤其明显, 但我并不认为这意味着软件工程师会变得没有价值, 例如 AI 可以很快帮助生成一个 Java GUI 功能但如果我完全不理解事件监听、变量作用域或者程序结构当程序出现异常时我依然不知道问题在哪里,尤其是看到大型项目复杂的目录结构后很容易产生“我现在水平还不够”的想法。
2. 我们需要拥有什么样的基础知识以及经过多少代码训练量才能让自己写的代码高效且不容易出错 过去我比较容易用“写了多少行代码”衡量学习量但现在我觉得代码数量并不能直接代表水平, 仓库名称 102400223 仓库地址 https://codehub.devcloud.cn-north-4.huaweicloud.com/87966f2129f44f568084103d6fe297aa/102400223.git 通过这次操作我更加完整地接触了代码从本地到远程仓库的过程,相比继续快速接触更多语言我更希望选择一个方向持续深入通过项目逼着自己真正掌握技术而不是停留在会写几段代码的程度, 对于老师和助教我希望除了指出作业中的问题以外也能够结合真实项目告诉我们哪些地方属于学生项目中常见、但进入企业开发后必须改掉的习惯, 3. 初学者如何参与开源 我以前看到开源项目时会觉得参与开源是一件距离自己比较远的事情, 三、展望未来一阅读《构建之法》后的问题与思考 在阅读《构建之法》和相关社区讨论的过程中我选择了以下几个自己比较感兴趣同时也与目前学习状态关系较大的问题进行思考, 开发过程中遇到过 Swing 类导入、内部类访问局部变量、表达式解析以及科学函数输入方式等问题。
我希望通过这门课程重点学习 Java 后端开发与团队项目协作 。
如果项目只有几百行代码这种方式可能还能完成但团队项目规模变大以后如果需求和模块没有提前确定后面就很容易不断返工, 对我而言当前最大的意义并不是马上给知名项目贡献很多代码而是通过真实项目学习别人如何组织目录、命名、提交代码和协作, 3. 项目设计能力 在写代码之前先思考需求、数据结构、模块和接口减少“边写边改”的情况, 软件工程实践第一次作业项目内容 这个作业属于哪个课程 202601福大-软件工程实践-W班 这个作业要求在哪里 软件工程实践第一次作业 这个作业的目标 回顾大学前两年的学习情况认识当前能力水平阅读《构建之法》并思考软件工程相关问题确定本学期技术学习方向并制定可执行的学习路线熟悉 Markdown、Git 与 CodeArts 等软件工程工具 其他参考文献 《构建之法第四版》、Java 官方文档、Spring Boot 官方文档 目录 一、回首过去一为什么当初选择软件工程专业 高考填报志愿时我对软件工程的认识其实并不算深入, 3. 大四阶段根据实际情况确定就业或继续深造 如果项目和实习积累较好就重点准备校招如果后续决定考研则在保持基本技术实践的同时转向研究生考试准备, 1. 大三上学期补基础 做项目 重点补强 Java、数据结构、数据库、Git 和 Web 开发基础并学习 Spring Boot, 判断标准 可以独立完成一个基础 CRUD 后端项目,我负责界面设计、按钮事件处理、表达式输入逻辑以及计算功能的调试, 四项目经历Java GUI 科学计算器 项目类型 Java 课程项目 开发环境 IntelliJ IDEA 主要技术 Java、Swing、事件监听、表达式解析 1. 项目简介 使用 Java Swing 开发桌面科学计算器在普通四则运算计算器的基础上逐步增加科学计算和内存功能, 1. 独立解决问题的能力 遇到报错时不只是依赖搜索或 AI而是先阅读错误信息、定位范围并尝试分析原因,开发时间、人员能力、项目成本和需求都有限因此软件工程很多时候需要决定“哪些问题必须现在解决哪些可以以后优化”。
本学期希望通过软件工程实践课程完成至少一个质量较高、能够部署和展示的项目为以后实习和求职积累第一批真正有价值的项目成果, 二当初对软件工程的期待和想象 刚进入大学时我曾经认为只要掌握 C、C、Java 等几门语言就能够比较轻松地完成各种软件开发。
如果学生拿到 AI 生成的程序以后能够解释代码结构、修改需求、找到错误并继续扩展那么 AI 更像一个效率工具, 但我现在认为参与开源并不一定意味着一开始就提交复杂功能, 二我的职业规划 目前我还没有完全确定毕业后直接就业还是继续深造但从现阶段的能力情况来看我希望先按照 Java 后端开发方向 进行准备。
编程语言只是其中的一部分除了写代码之外还需要学习数据结构、算法、数据库、计算机网络、操作系统以及需求分析、系统设计、测试和团队协作等内容, 3. 累计代码量 目前累计代码量约为 【填写实际代码量】行 其中大部分来自 C/C、Java 课程实验和课程项目, 2. 开发工具 IntelliJ IDEA 主要用于 Java 项目开发 Dev-C 用于 C/C 程序编写 Git / CodeArts 正在学习版本管理、仓库提交和团队协作流程 AI 编程工具 能够利用 AI 工具辅助分析报错、理解代码以及提高学习效率,例如看完语法以后觉得自己已经理解但真正独立完成一个稍复杂的程序时依然会遇到项目结构、调试、异常处理以及代码组织方面的问题, 技术方面我希望掌握 Spring Boot 和 MySQL 的基本使用理解一个 Web 项目从接口设计、数据库设计到后端实现的基本流程, 一个程序能够运行并不代表它就是一个好的软件。
Java 掌握 Java 基础语法、面向对象思想以及 Swing GUI 编程能够完成基础桌面程序。
3. 我的工作 项目由我独立完成主要功能实现, 阶段目标 能够使用 Spring Boot 编写 REST API完成 Controller、Service、Mapper 分层使用 MySQL 保存数据并能够通过接口测试工具完成测试。
