.. This file is part of the OpenDSA eTextbook project. See
.. http://opendsa.org for more details.
.. Copyright (c) 2012-2020 by the OpenDSA Project Contributors, and
.. distributed under an MIT open source license.

.. avmetadata::
   :author: Molly


Understanding this Course
=========================

Read the Course Syllabus
------------------------

Welcome to CS 1114!

To get started, let's go through the course policies described in the course
syllabus on Canvas to make sure you understand how the course will run, what
your responsibilities are, how you will be graded, and how you should conduct
yourself in class.

Before continuing, please **read the course syllabus** posted on Canvas.


Who Is This Class For?
----------------------

This course teaches introductory programming in Java, with a significant
emphasis on object-oriented software design and on software testing. In many
ways, it is comparable to the AP Computer Science A course offered at some
high schools. It is taken by students majoring in Computer Science, minoring
in Computer Science, and also by students in other majors thinking about
studying Computer Science.

It can be very helpful if you have already had some exposure to programming.
Basic familiarity with variables and sequential logic will give you a leg up.
However, the course is designed to be approachable by beginners who do not
have any significant programming background.


Students of Many Experience Levels
----------------------------------

While this course is designed and intended for beginners, please be aware
that students from a very wide range of backgrounds take this course, including
some students who may have significant amounts of prior programming
experience. If you are a student with significant prior programming experience
who has taken the AP Computer Science A course and received a score of 4 or 5,
we recommend you use your AP credit to enroll in CS 2114 instead. For other
students, just remember that while there are many reasons why students who
already know how to program might take this course, the course isn't intended
for that audience--they are overqualified. You may see such students in lab
or on the course discussions, asking and answering questions that appear to
require significantly more programming knowledge. The course staff are happy
to answer such questions, but please remember that we do not expect students
in this course to possess that level of knowledge or to perform as if they
have already learned how to program prior to taking this course.

Students with extra experience should not set your expectations about what
is normal or what course staff expect of the bulk of students in this course
who do not already know how to program.


Weekly Schedule
---------------

This course runs on a weekly schedule, and learning the schedule will help
you develop a routine, anticipate deadlines, and stay on track and in sync
with the whole class. It is extremely important to stay on schedule and
turn your assignments in. The single biggest reason for failing to receive
the grade you want in this course is falling behind on assignments, then
missing deadlines or turning in incomplete work. Use the course structure
to stay on track, so you are adequately prepared for each new topic
covered in the course.

In particular, while the semester starts out with easier topics, please
do not allow yourself to be lulled into believing you can be more lax
with reading or preparing for labs and that you will still be able to
get it done at the last minute. This course has a way of sneaking up
on the unsuspecting who cut corners during the first half of the semester
and expect the same level of difficulty throughout. Regular, weekly engagement
with the course content and regular, weekly practice on your programming
skills is necessary to develop mastery of the concepts and skills taught
in this course.

Throughout the week, pay attention to the following recurring weekly
activities:

* Sunday: Reading Activity due, to prepare for the week's lectures
* Monday: Lab Assignment for the week posted, get started early
* Monday or Tuesday: Lecture meeting
* Wednesday: Program Assignment due
* Wednesday or Thursday: Lecture meeting
* Thursday: New Program Assignment posted
* During one lecture meeting: In-Class Quiz approximately every other week
* Thursday/Friday/Monday/Tuesday/Wednesday: Lab assignment due in your scheduled lab meeting


Reading Activities
------------------

Each week begins with a Reading Activity due Sunday night. Despite the due
date, however, you should **complete the Reading Activity before your lab
meeting** so that you have covered the background needed for your lab assignment.

Each reading activity
includes embedded exercises to check your understanding and to allow
you to practice what you are learning. All exercises in a given activity
must be successfully answered to receive the maximum grade for that
activity. The course uses a "flipped classroom" model, so do not expect
the reading material to be duplicated in a traditional lecture style in
class--it is your responsibility to read the material and exercises so
you are ready for the problem solving activities conducted in class
sessions.


Labs
----

Each week also includes a lab assignment that is posted at the beginning
of the week, typically on Monday. Lab assignments are posted early so that
you can read them ahead of time, ask questions if you are unclear on any
of the behaviors or tasks described in the lab, and review any concepts or
skills needed for the lab that you feel unsure about. Further, posting the
labs early allows you to try your hand at starting out the lab on your own.
We encourage you to start the lab and get a far a you can before you go to
lab.

Remember to be prompt to your lab meeting. Each week you will have a
different lab partner to work with. You must arrive on time so that you
and your partner can start together. If you are more than 15 minutes late
to lab, your partner will have been assigned to someone else and you will
no longer be eligible to work with them, or to receive credit for the lab
assignment during your lab period.  Instead, you will need to complete
the work on your own and use a Free Pass to submit it afterward. Also,
remember that you and your lab partner are working together, so you may
not leave the lab period until both you and your partner are finished
with all the work including the post-lab quiz, or the lab period ends.

Note that lab meetings will not start until **Thursday** the first week. The
first lab sections to work on a given lab assignment will be on Thursdays,
with the same lab assignment being completed by following lab sections on
Fridays, Mondays, Tuesdays, and Wednesdays. This allows all students to go
to both class lecture meetings during the week the lab is posted (and also
complete the week's Reading Activity), before
their lab period. This also means lab meetings will continue through the last
**Wednesday** of classes.

You will not be able to submit your lab for a grade or any feedback until
the start of your lab period. You can submit your lab as many times as you
want within the period and make corrections based on the feedback you
received.  You will also have TAs present for your lab period to answer
any questions you have or to help you resolve any errors you encounter.
However, please be aware that your TAs expect you to be prepared and
to do the work. If you have not read the instructions or figured out how to
get started before coming to your lab period, do not expect them to hold
your hand. They are a resource to help steer when you run into problems,
but they are a shared resource used by all the students in your section
rather than a personal trainer. If you are completely unprepared, expect
that you will be unable to finish lab on time and will have to work on your
own after lab to complete the assignment on your own time, using a Free Pass
to turn it in late.

You may also find that some students in the course who have prior programming
experience are able to complete lab assignments on their own before arriving
to their lab meeting, and from time to time, you may have one of them as
your lab partner. However, be aware that it **is not our expectation that
students can complete lab assignments ahead of time**. While some students
with prior programming experience may be able to do this, for those of you
who are new to programming, the expectation is that you will need to go to
your lab meeting, work with your partner, and ask the TAs any questions you
run into in order to complete the lab assignment. Remember that labs are
intended as practice activities to reinforce the concepts you are learning,
and it is natural and expected that you may regularly run into situations
where you wish to ask TAs for clarification or assistance on something you
have not seen before. That is what your lab period is for, and why every lab
period is staffed with TAs to answer your questions, so do make use of them
during that time as you learn.


Programming Assignments
-----------------------

Programming assignments will be given every other week, posted on Wednesdays
and due Wednesday night two weeks later. Each programming assignment includes
two stages, and the expectation is that you will complete and start turning
in your first stage by one week after the assignment is posted, and finish
the second stage by the due date a week after that.
The purpose of these stages
is to encourage students to start their work early enough that they will be
sure to understand the details of the assignment and have time to go to
office hours to ask any questions they have, particularly when they run
into unexpected difficulties. Stage 1 of the assignment will get you started
on setting up your solution, ensuring all of the names and features are
correctly arranged, and making sure you have a solid starting point.  Turning
in Stage 1 on time (a week before the due date) is worth 10% of the credit on
the assignment. The next week, Stage 2 will be to fill in the remainder of
that starting point to flesh it out into a full solution for the remaining
90% of the grade.

We recommend that students schedule in fixed periods of programming time to
work on programming assignments each week. The best time may be between the
end of your lab meeting and the following Monday. Or, even better, plan one
hour each night, every night, to work on your programming assignments.
Complete as much of your
assignment as you are able by each Monday so that you can ask any questions
you run into on the online discussion forum or during
TA office hours. It is not uncommon for students who start late and plan to
do each program assignment the night it is due to run into unexpected
situations, and then have no time to ask questions or get assistance before
the program assignment is due, so plan ahead so you build in regular time
periods to work on programming.

Also, remember that once the due date and time passes, work is no longer
accepted. Turning a program assignment in late will require waiting until
after grades are returned and the assignment becomes available for a Free Pass.


Programming Language and Environment
------------------------------------

This course teaches programming using Java. We will use the BlueJ IDE
for code development in class, including all examples shown in lecture.
See the "Install BlueJ" link on the course home page for installation
instructions--please be sure to **download and install directly from Canvas**
instead of going to the ``bluej.org`` website. The version on Canvas includes
the user libraries necessary for assignments in this course,
and lab or programming assignments will not compile without these.


Free Passes Instead of Traditional Late Policy
----------------------------------------------

In this course, assignments do not remain open past the due date for you
to submit "late". That also means there are no late penalties. Instead, we
are using a different approach to handle situations where you are unable to
complete specific assignments by the due date.

Learning from mistakes is an important part of mastering any skill, especially
for novices. To enable this, you are allowed (and encouraged!) to revise and
resubmit your work on all assignments to demonstrate improved mastery, even
after you receive a grade on the work. For all reading assignments, labs,
and program assignments, you will receive electronic feedback as you work so
that you can revise and resubmit your work as many times as needed before the
due date. In addition, each student will begin the semester with *6 free passes*
that can be used to resubmit revised work after the due date. You can also
use a free pass to submit work late if you are not finished by the due date.

Free passes are used according to the following constraints:

* All work is due on the date specified for the assignment here on Canvas, and
  no late work will be accepted without the use of a free pass.
* Free passes can be used on any reading assignment, lab assignment, program
  assignment, or quiz.
* Students may use a maximum of one free pass per week (one assignment per week).
* Assignments are not eligible to be resubmitted using a free pass until
  feedback has been released.
* Past assignments will be available for free pass redemption on weekly
  cycles. Assignments will by available for 3 weekly cycles after feedback
  has been released, and resubmission attempts for assignments can only be
  made during those 3 weeks (except for quizzes, which are available for
  one resubmission in 1 weekly cycle only). No resubmission is available after
  the last day of class meetings at the end of the semester.
* Employing a free pass allows you to "re-open" a reading, lab, or
  programming assignment to make repeated submissions and receive
  automated feedback for an additional 24 hours on the day you pick within
  the weekly resubmission cycle. For quizzes, a free pass allows a student
  to re-take the quiz at a designated time on the Friday in that weekly
  resubmission cycle.
* If you use all your free passes but find you need another one, you may
  use the free pass form to explain your situation and request an additional
  free pass.

Free passes work like this: Each week, specific assignments will be available
for that week's resubmission cycle, which will take place on Friday, Saturday,
and Sunday. Assignments are available for three cycles after feedback is
returned, while quizzes are available for only one cycle.

If you wish to use a free pass, an online form will be available on Canvas
each week starting on Monday where you can indicate which assignment you wish
to re-open, and which day (Friday or Saturday or Sunday) during that cycle
you wish to re-open the assignment on. Just fill out the form between
Monday-Thursday. You can use a free pass for any reason you want, and you
do not need to explain why you are using a free pass--they are yours to use
when you need to based on your own situation, so feel free to employ them
whenever you need them. Once you've filled out the form, just work on the
assignment and resubmit your work (as many times as needed) during the day you
selected.

Quizzes are slightly different than other assignments, since they are in-class
activities. For all three Monday/Wednesday lectures, students in those sections
will go to their regular classroom at their regular meeting time on Friday to
use their free pass on the quiz available that week. For students who go to
Tuesday/Thursday lectures, you will select one of the three Mon/Wed lecture
meeting times to attend on Friday. Remember that quizzes will only be open
for one resubmission cycle, so quizzes can only be re-taken (or taken late)
one time.

Since there are a limited number of weeks in the term, it is important that
you stay on top of your work as much as possible. Our resubmission policy
is designed such that you should only be using free passes rarely instead
of regularly. It is imperative for you to complete as much of each assignment,
preferably all of it, by its due date where possible. This will allow you to
receive feedback before resubmitting.

At the end of the semester, if you still have any unused free passes, they
will each count for 1 point of extra credit in calculating your grade.


Cheating and The Honor Code
---------------------------

.. topic:: Excerpt from Honor System Policy

    Academic misconduct is a corrosive force in the academic life of a university, jeopardizing the quality of education and depreciating the genuine achievements of others. Actively deterring academic misconduct is, without reservation, the responsibility of all members of the Virginia Tech community. Apathy or acquiescence in the presence of academic misconduct is not a neutral act – failure to confront and deter such behavior will reinforce, perpetuate, and enlarge the scope of such misconduct.

    [...]

    Virginia Tech students are expected to uphold and to encourage other students to abide by the Honor Code. A primary responsibility of Virginia Tech students is to refrain from any form of violation of the Honor Code. 

Honor code violations are unfortunately common in early computer science
courses, and the Office of Undergraduate Academic Integrity has seen a
significant rise in violations recently. It is important for all students
to understand how serious these issues are. You must complete the following
Canvas module:

* Enroll in and earn the badge for the: `Academic Integrity Success Module <https://canvas.vt.edu/enroll/3TYLTY>`_

Remember that there are some topics you can freely discuss with each
other in order to learn. In this course, you may freely offer and receive
verbal assistance with your classmates on the following topics:

* how to use the programming language
* what library classes or methods do
* what errors mean
* how to interpret assignment instructions

In addition, during face-to-face lab periods you are welcome to help your
partner(s) or other students debug or troubleshoot their own code, and are
free to seek assistance from your partner(s) or other students with your
own coding issues on the lab assignment. However, this only applies to working
on the lab assignment during your assigned lab period, not to other work.

However, at all other times and on all other assignments, you **may not give
or receive help from others** while working on
your program code or any graded assignments. When writing program code for
any class assignment, you **must work alone while typing at the keyboard**,
or while **viewing your source code on the screen**. Yes, that means showing
your assignment code or work to other students is an Honor Code violation,
as is reading or looking at code or work written by fellow students.

Further, note that if you have taken CS 1114 in a previous semester, you
**may not submit your work from a previous semester** and must redo work
from scratch. Resubmitting work from an earlier semester does not demonstrate
your current level of understanding or ability, and does not reflect whether
your skills have degraded. Instead, repeating the work is important for
increasing your skills so that you can successfully complete the course
this time. 

Also, please remember that when any students are reported for cheating on any
assignment in this course, we recommend they receive the **F* sanction**, a
grade that indicates on your transcript the F is the result of an Honor Code
violation. Further, students with an F in CS 1114 are required to repeat and
successfully complete the course before they can take subsequent CS courses,
which can negatively impact your planned timeline for graduation. For students
in General Engineering, it can also reduce your competitiveness when applying
to change your major. 

.. topic:: The Undergraduate Honor Code Pledge 

    "As a Hokie, I will conduct myself with honor and integrity at all times. I will not lie, cheat, or steal, nor will I accept the actions of those who do."

Using Generative AI Tools
-------------------------

Generative AI tools like ChatGPT, Microsoft Copilot, Gemini, Claude, Github
Copilot, and any many others, are extremely common and their use is becoming
a regular occurrence for many. In this class, we want to make sure you
understand when and how we expect you to use generative AI.

For the purposes of this course, you should consider **generative AI tools**
just as if they were "other people" outside the classroom, or even
"fellow students". As stated in the syllabus, you may freely offer and
receive verbal assistance with your classmates on many topics, including:
how to use the programming language, what library classes or methods do,
what errors mean, or how to interpret assignment instructions. These same rules
apply to generative AI tools--you can ask questions or consult generative
AI resources for any of these purposes, just like you can your peers.

In fact, there are two very powerful things you can use generative AI for
that you should really consider: studying and becoming a better student.
On the studying side, there is a lot of benefit to studying in a group with
other students, asking each other questions by referring to your notes or
the reading assignments, and helping each other understand the material. Turning
studying, particularly if you are reviewing before a quiz or a test, into a
social activity is a powerful technique. But there is also a lot of potential
to use generative AI prompts to create self-study quizzes for you (and your
study group) to check your own knowledge on concepts we are teaching.
Occasionally during this course, we will suggest possible prompts you can
use in this way, whether it is about creating self-test questions you can
use to study, or creating flash cards, or trying to identify possible
misconceptions you might have, or whatever.

Second, generative AI tools can big help in learning how to be a better student.
Whether you want an AI-generated work schedule for how to regularly spend
time on all your assignments, or AI coaching on better note taking skills, or
AI advice on how to prioritize work across different classes so you know
what to focus on while also knowing how you'll complete many assignments all
by their deadlines without crushing yourself, there are many practical ways
you can use generative AI. Again, we will occasionally look at some of these
ways throughout the course.

However, treating generative AI tools is the same way as other people
with respect to the Honor Code means that, as with fellow students,
you may not **use them to receive help** while working on your program code
or any graded assignments. You may not **show your code to others** or
**view code written by others**, including generative AI tools, when working
on assignments to turn in for this course. In the same
way, you cannot **copy code** from them (or another person) for any graded
work.


Over-Reliance on AI Undercuts Learning
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Relying on generative AI to solve programming problems can significantly
undermine your development of critical skills and negatively affect your
performance in internship interviews--especially as a college student still
building foundational knowledge.

**Loss of Critical Thinking and Problem-Solving Skills**

- Research shows that heavy dependence on AI tools for programming tasks leads to "cognitive offloading," where you let the AI do the thinking for you. This reduces your engagement in analytical tasks and weakens your ability to think critically and solve problems independently.
- Beginners who frequently use AI for code generation and debugging struggle to develop the foundational skills needed to solve similar problems on their own. This means you might be able to complete assignments with AI help, but when faced with a new or slightly different challenge, you may not know where to start or how to solve the new problem.

**Shallow Learning and Poor Skill Retention**

- When you let AI do the work, you miss out on the iterative process of making mistakes, debugging, and learning from them. This process is essential for deep understanding and long-term retention of programming concepts.
- Studies show that using AI for direct solutions, rather than as a tool for explanations or feedback, leads to weaker problem-solving skills and poorer performance on independent tasks.

**Increased Frustration for Beginners**

- For students new to programming, relying on AI can actually increase frustration. If you haven't built up confidence and understanding through hands-on practice, you may feel lost when the AI's output doesn't work as expected or when you're asked to explain your code.


Negative Impact on Internship Interview Experiences
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In short, companies hiring interns (or full-time employees) already have
access to all the AI resources they need. They don't need new employees
who can only feed problems into AI systems. It is imperative that you
build your foundational skills so that you can read and write code fluently
before you can use AI tools effectively on coding tasks.

**Inability to Solve Problems Without AI**:
Many technical interviews, especially for internships, still require you to solve problems on a whiteboard or in a live coding environment--without access to AI tools. If you've relied on AI up to this point, you may freeze or struggle to solve even basic problems independently.

**Difficulty Explaining Your Thought Process**:
Interviewers often ask you to explain your reasoning, discuss trade-offs, and walk through your solution step by step. If you haven't practiced solving problems yourself, you'll find it hard to articulate your approach or debug under pressure.

**Suspicion from Recruiters**:
As AI-generated solutions become more common, recruiters are increasingly wary of candidates who submit "too perfect" code or can't explain their solutions in detail. Some companies are implementing AI-detection tools or shifting to interview formats that require real-time problem-solving and explanation.

**Changing Interview Expectations**:
While the industry is evolving--some companies are moving toward project-based assessments, live coding with explanation, or system design interviews--the expectation remains that you can reason through problems and communicate your approach, not just produce code.

The bottom line is that generative AI is a powerful tool, but if you rely on
it to do the hard work for you, you risk missing out on the critical thinking,
problem-solving, and communication skills that employers value--and that you'll
need to master in order to succeed in interviews and on the job. The impact goes
far beyond this course, and that is the reason for the course policy regarding
generative AI use.


Self-Check: Confirm Your Understanding
--------------------------------------

To check your understanding of the Honor Code policy in this course,
return to Canvas and take the Honor System quiz provided there. You can
repeat the quiz as many times as needed, but need to achieve 100% before
you can begin other work in this course.

.. avembed:: Exercises/IntroToSoftwareDesign/HonorCodeSurvey.html ka
    :long_name: Understanding the Honor Code


