0.1. 理解本课程¶
欢迎参加 CS 1114 课程!学习编程将是你所经历过的最具赋能性、最具创造性且最令人心满意足的旅程之一。计算机科学的核心不在于死记硬背机械规则或凝视无尽的晦涩代码行;而在于创造的激情。凭借逻辑与想象力,你将学会如何让抽象概念焕发生机,构建复杂的数字世界,并构建能够解决有意义问题的软件。无论你是从未写过一行代码,还是此前曾尝试过编程,本课程都旨在向你发出开放的邀请,让你亲身体验将自身想法变为现实的纯粹喜悦。
当你踏入这门课程时,请记住,软件设计是一种迭代发现的艺术。兴奋感不仅来自于最终运行的程序,更来自于整个过程:探索可能性、解决引人入胜的谜题,以及体验代码首次运行时那种无与伦比的“啊哈!”时刻。为了帮助你充分利用这段创意旅程,让我们探讨一下本课程的结构、你将如何学习,以及旨在支持你每一步成长的政策。
0.1.1. 阅读课程大纲¶
要开始学习,让我们先浏览 Canvas 上课程大纲中描述的课程政策,以确保您了解课程将如何运行、您的职责是什么、您将被如何评分以及您应该在课堂上如何行事。
在继续之前,请阅读 Canvas 上发布的课程大纲。 阅读课程大纲 本章重点介绍了核心工作流程、评分机制以及您从第一天起就需要遵循的期望,以确保成功。
0.1.2. 这门课程适合谁?¶
本课程教授 Java 入门编程,并显著强调面向对象软件设计和软件测试。在许多方面,它与一些高中提供的 AP Computer Science A 课程相当。计算机科学专业的学生、辅修计算机科学的学生以及大学其他专业的学生都会选修本课程。
如果你已经接触过编程,这将非常有帮助。对变量和顺序逻辑的基本了解将让你更容易上手。然而,本课程旨在让没有任何编程背景的新手也能轻松入门。
0.1.3. 不同经验水平的学生¶
虽然本课程是为初学者设计和准备的,但请留意,来自各种背景的学生都会修读本课程,其中包括一些具有大量先前编程经验的学生。如果您是一位具有大量先前编程经验的学生,并且已经修读了 AP Computer Science A 课程且获得了 4 或 5 分,我们强烈建议您使用 AP 学分来修读 CS 2114 课程,而不是本课程。
对于其他学生,只需记住,虽然有很多原因导致已经懂得编程的学生会选修这门课程,但这门课程并非为他们设计——他们资历过剩。您可能在实验室或 Piazza 上看到这样的学生,他们提问或回答看似需要高级编程知识的问题。课程工作人员很乐意回答这类问题,但请记住,我们不期望本课程初学者具备该水平的知识,或表现得仿佛他们在选修本课程之前已经学会了如何编程。
有额外经验的学生不应设定关于本课程中大多数首次学习编程的学生认为什么是正常的或课程工作人员期望什么的预期。
0.1.4. 每周时间表¶
本课程按每周节奏运行,学习课程安排将帮助你养成习惯、预知截止日期,并保持在正轨上。严格遵守课程安排,每周按时提交作业,这至关重要。在这门课程中落后于进度的最大原因不是提前开始作业,错过截止日期,让工作堆积。
特别是,虽然学期开始时介绍的是基础主题,请不要让自己陷入可以省略阅读或实验室准备的错觉。定期每周参与课程内容并主动练习编程技能,是掌握这些概念所必需的。
整周期间,请留意以下重复出现的活动:
周日(晚上 11:59):每周阅读活动截止日期在 Canvas 上(需在实验前完成)。
实验前:在 Canvas 上完成所需的在线实验前评估。
周一 / 周三 (或 周二 / 周四):讲座会议,包含课堂活跃的问题解决和 iClicker 活动。
在您安排的实验期间 (周四/周五/周一/周二/周三):参加您注册的实验小组,与指定的伙伴合作,并在该时段结束前提交完成的实验。
周三(晚上 11:59):程序作业截止日期(每两周一次)。
每两周一次:在您安排的测试窗口期间,在安全的计算机化测试设施中完成您的 20 分钟监考测验。
在程序截止日期后 2 周内:完成您所需的 5 分钟面对面评分面试,对象为助教。
0.1.5. 出勤与课堂参与¶
您应参加所有讲座和实验会议,并努力准时到达。
讲座时间:虽然不实行传统的门口点名签到,但讲座中会频繁借助 iClicker Student Mobile or Web App 进行互动式问题解决和同伴讨论。课堂参与评分占最终课程成绩的 90 分,且无法远程补交。你必须带笔记本电脑和带有 iClicker 功能的移动设备参加每一节课程。参与评分模型中已经考虑了意外缺勤(如轻微疾病)的小额缓冲。
实验室会议:参加你正式注册的实验室小组是 强制 的。你必须亲自出现在实验室房间以提交实验作业。如果不可避免的疾病或紧急情况阻止你参加,你必须使用实验室宽限期通行证,以便在业余时间自行完成并提交实验作业。
期末考试:期末考试日期和时间由大学设定。只有教务办公室可以批准调整期末考试日期(例如,在直接考试冲突或 24 小时内有 3 场及以上考试的情况下)。
注意: 如果您有一个 晚间实验室课程 晚于下午 5 点,并且您还修读数学或自然科学课程,您应立即与您数学或自然科学课程的老师联系,以确认他们是否会在您课程安排的实验室时间段内安排必须参加、有监考要求的考试或其他义务。其他课程的课外考试 不能作为您错过强制性实验室会议时间的理由 。为了避免这种情况,您可以在第一周的课程期间切换到本课程的另一个部分,以更改您的实验室会议时间。或者,如果您在学期中后期发现此类冲突,您必须与您的数学或自然科学老师合作,安排一个替代时间参加他们的考试。
0.1.6. 阅读活动¶
本课程没有可供购买的纸质教材。相反,所有阅读材料和互动模块均通过 Canvas 上的每周在线阅读活动呈现,这些活动需在 周日晚上 11:59 前 完成。
实验与测验准备:除了周日截止日期外,您应在预定实验会议前完成本周阅读内容,以便为所需的实验前准备和实验工作本身做好准备。阅读活动中介绍的概念也会直接在此后的测验和编程作业中得到评估。
无限练习以获得满分:阅读活动包含互动编程问题,帮助您练习。它们还包括针对编程新手的补充语法练习资源,以及额外的自我学习和考试准备练习。您可以在截止日期前重复这些练习任意多次,直到获得满分。
严格的截止日期:阅读活动必须在公布的截止日期前完成。不接受阅读活动的迟交作业。 您可以在截止日期后继续复习或完成所有练习(包括评分和补充练习),但仅用于自我学习目的(不用于成绩学分)。
0.1.7. 实验室作业¶
每周包含一个动手实验室作业,旨在强化您正在学习的内容。实验室作业在 Canvas 上于每周初发布,您的工作在线提交并由自动评分器进行评估。
关键实验室政策和工作流程包括:
强制课前评估:每个实验室都包含 Canvas 上的课前评估,涵盖所需背景知识和说明。你 必须在实验室开始前以 100% 准确率(无错误)完成课前评估。你可以根据需要重复进行课前评估,但在你获得满分之前,不允许你开始实验室作业。
现场出勤与结对协作:你必须亲自参加你注册的实验室课程。每周,你将与一名实验室伙伴配对,共同协作、讨论方法并调试代码。
准时性:你必须准时到达,以便你和你的伙伴可以立即开始。如果学生 迟到超过 15 分钟,其伙伴将被重新分配,该学生将被禁止在实验室期间提交作业,并且需要使用 实验室宽限期通行证 独立完成实验室作业。
即时反馈与重新提交:你可以在实验室期间向自动评分器提交你的实验室代码任意多次,以获取反馈、修复错误并提高分数。仅评估你最近一次的提交。
助教作为教练而非代劳者:实验室助教可用于回答概念性问题并引导你越过障碍。然而,他们期望你已阅读作业并事先完成课前评估。如果你准备不足,你将难以在规定时间内完成工作。
规格化评分(EMRN):实验室作业根据 EMRN 量表进行评估。获得 符合期望(M) 的评级可获满分(每个实验室 9 分,14 个实验室 总计 126 分),而 优秀(E) 可获得 110% 的额外学分。
取件要求:你和你的伙伴作为一个团队工作。在你们两人和你们的伙伴都完成所有编程任务、提交作业并与实验室助教正式取件之前,你 不得提前离开实验室。
个人责任与实验室口头面试:虽然在实验室会议期间你们以两人一组工作,但 所有实验室提交作业均为严格个人工作,必须提交在你的个人账号下。每位学生都必须对其提交的每一行代码的理解负责。课程工作人员可能会随机拨打任何学生的电话,进行简短的 口头评分面试,以评估其代码理解能力、追踪执行的能力以及设计依据。展示你对已提交解决方案的满意理解是确认你的掌握学分所必需的。
实验室迟交政策与宽限期通行证:实验室作业提交截止于你计划的实验室课程结束。不使用 实验室宽限期通行证 不接受迟交作业。你本学期的 3 个实验室宽限期通行证,每个均可提供 48 小时 的截止日期延长,延至你计划的实验室会议结束之后。每个实验室作业只能延长一次。
0.1.8. 程序作业¶
本学期的 6 个主要编程作业 会在 Canvas 上每两周发布一次,截止日期为 每周三晚上 11:59 分。编程作业要求你综合课程概念,设计面向对象的软件解决方案,并编写全面的自动化测试套件。
独立作业:编程作业是严格在课堂之外完成的个人工作。你必须设计、编写、测试和调试你自己的代码。你不得与其他学生合作,也不得从任何来源复制代码。
提交与自动反馈:你将代码电子提交到 Web-CAT,系统会根据自动化测试套件对代码的正确性、代码风格和测试覆盖率进行评估。你可以在截止日期前多次提交以查看反馈并改进代码。只有你的最后一次提交会被评分。
规范评分(每项 40 分) :每个编程作业满分 40 分 (6 个项目总计 240 分 ),并按 EMRN 量表进行评估。获得 M(符合期望) 可得 100%(40 分),而获得 E(优秀) 可得 110%(44 分)。
0.1.8.1. 强制面对面评分面试¶
对于每一次编程作业,你必须与课程助教安排并完成一次 面对面的评分面试:
格式与时限:面试大约需要 5 分钟,并必须在作业截止日期后的 2 周 内完成。
目的:面试旨在评估你对所提交代码的真实理解程度。你将被要求解释代码的工作原理、遍历特定算法、论证你的设计与数据结构决策,并说明你的测试策略。
评分先决条件:在你完成评分面试之前,无法获得编程作业的评分。 如果你在面试中无法解释或捍卫你的代码,这表明你并未进行基础学习。
0.1.8.2. 程序通过:通过和精通¶
为了在坚持严格掌握标准的同时赋予您灵活性,编程作业使用两种特定类型的遍历:
程序宽限期通过(截止日期延长): - 你本学期的开始拥有 3 个程序宽限期。 - 宽限期可以将程序作业的提交截止日期延长 48 小时,在原定星期三截止日期之后。 - 每个程序作业的截止日期最多只能延长一次。 - 没有宽限期,不接受迟交作业。
课程精通通行证(用于获得“修订”等级): - 学期开始时,你拥有 3 个课程精通通行证。 - 如果在你的评分面试后获得 需要修订(R) 的等级,你可以使用一个课程精通通行证重新开启作业,以便在 48 小时 内进行修订、修正并重新提交你的作品。 - 通过精通通行证重新提交需要安排一次 新的评分面试 来评估你的修订版本。 - 课程精通通行证必须在原始作业截止日期后的 2 周内 使用。尽早完成你的初始评分面试可以确保你有足够的时间在需要时使用精通通行证。
0.1.9. 测验¶
本课程采用 7 次更短的、有监考人监督的测验 代替传统的高风险期中考试成绩,这些测验大约每两周进行一次。每次测验满分 35 分 (共计 245 分 计入课程成绩)。
安全计算机化测试设施:为了确保测试的完整性和灵活性,测验将在大学提供的专用台式计算机上,于专门的、安全的计算机化测试设施中,在课外进行。
安排测验时间:您将在每个测验指定的多日窗口期内,在设施内自行安排测验预约时间。
测试环境:测验必须是严格 闭卷且禁止携带笔记 的。不允许任何个人笔记本电脑、手机、智能手表或外部材料进入测试设施。(如果特定测验的测试设施不可用,该测验将使用 LockDown Browser 在课堂内举行,并会提前通知。)
测验精通通行证(重考机会): - 学生学期开始时拥有 3 次测验精通通行证。 - 如果您错过测验或得分低于预期,您可以使用测验精通通行证,在测验结果发布后的那一周,在测试设施内安排 一次重考 该测验。 - 每个单独的测验最多只能重考一次。
0.1.10. 编程语言与运行环境¶
本课程使用 Java 教授面向对象的编程。
BlueJ 开发环境:我们将使用 BlueJ IDE 进行代码开发、交互式对象可视化以及课程示例演示。
直接从 Canvas 下载:请使用课程 Canvas 主页上提供的安装链接安装 BlueJ,而不是从通用的 BlueJ 网站下载。Canvas 安装程序包含了为 CS 1114 课程预先配置好的专用支持库和测试工具。
Web-CAT 与 CodeWorkout:Web-CAT(用于实验和程序作业)和 CodeWorkout(用于交互式练习)提供自动评分和代码反馈。
0.1.10.1. 理解规格评分(EMRN 评分表)¶
对于实验室和编程作业,我们使用 规格化评分。对于细微错误,我们不进行随意的扣分,而是根据明确且二元的标准对你的提交进行评估,这些标准定义了熟练工作的样子。
作业会获得四种分类评级之一:
评分 |
标准与含义 |
积分奖励 |
|---|---|---|
(E) 优秀 |
完全超出预期,无实质性错误且设计/测试出色。 |
110% 的积分 (额外加分!) |
(M) 达到预期 |
清晰展示了所有学习目标掌握情况,无明显缺失。 |
100% 的积分 (满分) |
(R) 需要修改 |
显示出部分理解,但包含需要修改的缺失或错误。 |
10% 的积分 (修改前) |
(N) 无法评估 |
内容零碎、无法编译,或缺乏概念理解的证据。 |
0% 的积分 |
在规格化评分中,M 是掌握的标准。获得 M 证明你已掌握材料并授予 100% 学分。获得 E 认可卓越工作并给予额外分数。R 表示你正在正确的轨道上,但需要使用掌握通过来修订你的工作以达到全额学分。
0.1.10.2. 课程通过系统概述¶
为了支持学生的身心健康并允许从错误中学习,每位学生在学期开始时都会获得个人分配的 12 张专用通行证,分为四个不同的类别:
3 次实验室宽限期通行证:为任意单个实验室截止日期提供 48 小时的延期。
3 次程序宽限期通行证:为任意单个程序作业截止日期提供 48 小时的延期。
3 次程序精通通行证:重新开启评分为'R'的程序作业,持续 48 小时以供修改、重新提交并完成新的评分面试(需在截止日期后 2 周内使用)。
3 次测验精通通行证:为测试设施中任何遗漏或得分较低的测验提供一次重考机会(需在结果发布后 1 周内使用)。
练习通过画布进行管理,并专为您在生活状况或学习障碍出现时使用而设计。请战略性地使用它们!
0.1.11. 作弊与弗吉尼亚理工大学荣誉准则¶
弗吉尼亚理工大学对学术诚信高度重视。CS 1114 课程中提交的所有作业均被视为受荣誉准则约束的计分作业。所有程序作业、阅读练习、预实验和测验必须独立完成。
0.1.11.1. 学术诚信模块¶
所有学生必须在课程第一周完成以下 Canvas 模块:
在以下课程注册并获得徽章: Academic Integrity Success Module
0.1.11.2. 协作边界:什么是允许的,什么是不允许的¶
为了在保持诚信的同时促进学习,关于合作存在明确的界限:
允许的合作:
您可以与同伴自由讨论通用的 Java 语法、语言特性和库方法。
您可以从一般性术语讨论编译器或运行时错误消息的含义。
您可以讨论赋值指令的概念含义。
仅在 安排的面对面实验室会议期间,您可以与指定的搭档直接合作,并在您的小组中协助同伴进行调试。
禁止行为(荣誉准则违规):
您 不得在课表之外的程序代码或作业中向他人寻求或接受协助。
在编写代码时,您 必须在敲击键盘和查看屏幕时独自工作。向他人展示您的代码或查看其他学生的代码是直接违规的。
您不得寻求或接受来自未经授权的外部来源的帮助,包括在线辅导网站(例如,Chegg, CourseHero, GroupMe)或用于代码生成/调试的生成式人工智能工具。
您不得从任何来源复制代码。
不得提交先前的学期作业:如果您重复修读 CS 1114,您 不得提交先前学期的作业。所有作业必须从头开始编写,以培养当前技能。
0.1.11.3. 自动化分析与制裁¶
所有电子提交的内容均被归档,并使用自动化的抄袭检测与生成式人工智能检测工具进行分析。
如果发生学术诚信违规,课程政策建议给予 F* 处分 作为最终课程成绩。 F* 标记会出现在成绩单上,显示为 "FAILURE DUE TO ACADEMIC HONOR CODE VIOLATION"。在 CS 1114 课程中获得 F 分会阻止您修读后续课程,直到成功重修,并可能严重影响转专业申请和毕业时间表。
0.1.12. 人工智能与长期学习¶
生成式人工智能工具,如 ChatGPT、Microsoft Copilot、Gemini、Claude、Github Copilot 以及任何其他类似的工具,极为常见,许多人的使用已变得司空见惯。在本课程中,我们希望确保您了解何时以及如何被期望使用生成式人工智能。
您在 CS 1114 课程中的目标不仅仅是编写可运行的代码,而是要培养独立分析问题、设计解决方案以及调试软件的能力。生成式人工智能工具(如 ChatGPT、Claude、Gemini、Copilot 和 Hokie AI)使得在不进行底层推理的情况下生成看似正确的代码变得容易。这被称为 认知卸载--即交出构建您自身问题解决能力、直觉和技术技能的脑力工作。
如果您无法在 面对面 TA 评分面试 中独立解释、复现并捍卫您的代码,那么您就没有完成学习。未来的计算机科学课程、技术面试以及您的职业前景完全取决于您独立推理代码的基础能力。
同时,有两件你可以利用生成式人工智能的强大工具,你应当认真考虑:学习和成为一名更优秀的学生。在学习方面,与其他学生一起小组学习有很多好处,通过参考你的笔记或阅读作业互相提问,并互相帮助理解材料。将学习,特别是如果你在复习测验或考试前,变成一种社交活动,是一种强大的技巧。但是,利用生成式人工智能提示词来为你(和你的学习小组)创建自我学习测验,以检查我们对概念的理解,也有很大的潜力。偶尔在本课程中,我们会建议你可以这样使用的可能提示词,无论是创建你可以用来学习的自我测试问题,还是创建闪卡,或是尝试识别你可能存在的误解,或是其他任何内容。
第二,生成式人工智能工具可以在学习如何成为更好的学生方面提供很大帮助。无论你是想要一个由人工智能生成的工作日程表来规划如何定期完成所有作业,或是想要关于更好记笔记技巧的人工智能辅导,或是想要关于如何在不同课程中优先处理工作的人工智能建议,以便你知道应该关注什么,同时也能知道如何在不让自己崩溃的情况下按时完成多项作业,都有许多实用的方法可以利用生成式人工智能。再次,我们将偶尔在本课程中探讨其中一些方法。
0.1.12.1. 视频:关于人工智能与学习,所有人误解的地方¶
0.1.13. AI 使用政策:仅用于学习支持¶
学生仅可将大学批准的生成式人工智能工具作为 概念学习辅助手段 使用。就本课程而言,你应该将 生成式人工智能工具 视为课堂外“其他人”,甚至是“同学”。正如课程大纲所述,你可以自由地向同学口头寻求帮助,涵盖许多主题,包括:如何使用编程语言、库类或方法的功能是什么、错误含义是什么,或如何解释作业说明。这些规则同样适用于生成式人工智能工具--你可以像对待同伴一样,就这些目的提出问题或查阅生成式人工智能资源。
然而,将生成式人工智能工具与其他人在荣誉准则方面同等对待意味着,就像对待其他同学一样,你在编写程序代码或任何已评分作业时,不得利用它们寻求帮助。你 不得将你的代码展示给他人,也 不得查看他人编写的代码 (包括生成式人工智能工具),当你完成本课程需要提交的作业时。同样,你 不得从它们(或他人)那里复制代码 用于任何已评分的工作。
允许(学习支持) |
禁止(荣誉准则违规) |
|---|---|
询问高层次的概念性问题("解释类与对象之间的区别。") |
要求人工智能生成任何作业的代码、方法、类或解决方案。 |
请求关于编程主题或库类的一般性解释。 |
将你的作业代码提交给人工智能工具进行审查、修正或调试。 |
请求通用的调试提示("Java 中哪些常见条件会导致空指针异常?") |
将人工智能生成的代码或文本复制到你的作业提交中。 |
构思学习问题或生成练习自我测验以测试你的知识。 |
使用人工智能回答阅读测验、课前实验或实验交付物。 |
学生责任:您负责您咨询的任何 AI 辅助解释的事实和逻辑准确性。如果您不确定某种 AI 使用是否符合课程政策,请在继续之前咨询您的讲师。
0.1.13.1. 为何过度依赖人工智能会削弱您的未来¶
依赖生成式人工智能来解决编程问题会严重削弱您关键技能的发展,并对实习面试中的表现产生负面影响——尤其是对于仍在构建基础知识的大学学生而言。
批判性思维与解决问题能力的丧失
研究表明,过度依赖人工智能工具进行编程任务会导致“认知卸载”,即让人工智能替你思考。这会减少你在分析任务中的参与度,并削弱你独立思考和解决问题的能力。
经常使用人工智能进行代码生成和调试的初学者难以掌握独立解决类似问题所需的基础技能。这意味着你可能借助人工智能的帮助完成作业,但当面对新的或略有不同的挑战时,你可能不知道从何入手或如何解决新问题。
浅层学习与技能保持能力差
当你让 AI 完成工作时,你就错过了犯错、调试并从中学习的迭代过程。这一过程对于深入理解编程概念以及长期记忆至关重要。
研究表明,若将 AI 用于直接提供解决方案,而非作为解释或反馈的工具,会导致问题解决能力较弱,且在独立任务上的表现较差。
初学者挫败感增加
对于编程新手来说,依赖人工智能实际上会增加挫败感。如果你还没有通过动手练习建立起自信和了解,当人工智能的输出不符合预期,或者被要求解释你的代码时,你可能会感到迷茫。
0.1.13.2. 实习面试经历的负面影响¶
简而言之,雇佣实习生(或全职员工)的公司已经拥有他们所需的所有人工智能资源。他们不需要只能将问题输入人工智能系统的新员工。在能够有效地使用人工智能工具进行编程任务之前,你必须建立你的基础技能,以便能够流利地阅读和编写代码。
无法在不使用人工智能的情况下解决问题:许多技术面试,尤其是针对实习的面试,仍然要求你在白板或实时编码环境中解决问题——而无法访问人工智能工具。如果你一直依赖人工智能,你可能会感到僵住或难以独立解决甚至基础问题。
解释思考过程的难度:面试官经常要求你解释推理过程、讨论权衡,并逐步演示你的解决方案。如果你没有练习自己解决问题,你将很难在压力下阐述你的方法或进行调试。
来自招聘者的怀疑:随着人工智能生成的解决方案变得日益普遍,招聘者越来越警惕那些提交“过于完美”代码或无法详细解释其解决方案的候选人。一些公司正在实施人工智能检测工具,或转向需要实时解决问题和解释的面试格式。
改变面试期望:虽然行业正在演变——一些公司正转向基于项目的评估、带解释的现场编码或系统设计面试——但期望仍然是你能通过推理解决问题并传达你的方法,而不仅仅是生成代码。
底线是生成式人工智能是一个强大的工具,但如果你依赖它为你完成艰苦的工作,你就可能错失雇主重视的关键思维、问题解决和沟通技能——而这些技能你必须掌握,才能在面试和工作中取得成功。这种影响远远超出了本课程的范围,这也是本课程关于生成式人工智能使用政策的原因。
