Algorithms in Programming (COS 161/Spring 2024)

Department of Computer Science at the University of Southern Maine

Instructor: James Quinlan
Teaching Assistant (TA): Ethan Gilles; Email: ethan.gillesATmaine.edu
Syllabus: .pdf

Course description

The course focuses on the development of algorithms and their implementation in a higher-level programming language, placing a strong emphasis on adhering to proper design principles and incorporating advanced programming concepts. A key aspect of the curriculum involves introducing students to the performance analysis of algorithms. To successfully complete the course, students will engage in a significant number of programming projects.

The primary objective is to deepen students' understanding of the Java programming language, fostering their ability to assess the trade-offs inherent in constructing solutions through computer programming. The course covers various Java programming techniques, including but not limited to information hiding, interfaces, inheritance, polymorphism, exception handling, and recursion. Additionally, students will explore standard Java Collections classes and delve into elementary run-time analysis of algorithms.

COS 161 represents the second installment in an introductory sequence within the field of computer science. Successful completion of this course is a prerequisite for the Computer Science major, and students are encouraged to review the full set of requirements for the Computer Science program.

Prerequisites

Grade of C or higher in:

Learning Outcomes

By the end of this course, students will be able to:

Textbook

Reges, S. & Stepp, M. (2020). Building Java Programs: A back to basics approach (5th ed.). Pearson. ISBN: 978-0135471944.
Reges Textbook

Additional Resources

Technology Requirements

Java Code Development: Students will write Java code using the Eclipse software, which will be pre-installed on lab computers. For students working from other locations, it is necessary to have sufficient storage and memory to independently install Eclipse and the associated Java software on their devices. Instructions for downloading and installing the software can be found at: Setting up Eclipse on Home Computer. (Eclipse software is distributed for free.)

External Storage: Students completing work in the lab, or in pairs on another student's device, should have access to an external storage mechanism. While a USB drive is recommended as a cost-effective and straightforward option, students opting for alternative long-term storage methods (e.g., cloud storage) are welcome to do so, provided they do not require technical support for the same. Even the smallest USB drives available today should offer more than sufficient storage for COS 161. Students exclusively working off USB drives are encouraged to have a second drive as a backup.

.jar Files: Students may be required to download .jar files for laboratory or assignment use occasionally. These files are small in size and freely distributed. A .jar (Java Archive) file is a package file format typically used to aggregate Java class files, resources, and metadata into a single file for distribution or deployment. A .jar file can contain compiled Java classes, resources (such as images or configuration files), and metadata necessary for the execution of a Java application. Similar to ZIP files, .jar files can be compressed to reduce their size, making them more efficient for distribution and download. Every .jar file has a manifest file (META-INF/MANIFEST.MF) that provides metadata about the contents of the .jar file. It includes information such as the main class to be executed when the .jar file is run. Some .jar files are executable and can be run directly from the command line or by double-clicking on them, provided they contain the necessary manifest information. .jar files are commonly used to package libraries or components that can be easily added to the classpath of a Java application. This simplifies the distribution and management of dependencies. The Java Development Kit (JDK) includes a utility called jar that can be used to create, view, and extract contents from .jar files. Developers commonly use this tool during the development and deployment of Java applications. The same Java infrastructure supporting Eclipse will also support these files.

CodingBat Registration: Students are expected to register for free accounts at the CodingBat website during the first laboratory exercise. CodingBat is accessible from almost any web browser, and both registration and use are free.

Course Format

The course is offered as an in-person course in a lecture/lab format. Laboratory exercises will generally be completed in a synchronous fashion during the lab period and may be completed in pairs. Four longer assignments will be completed asynchronously and individually.

Meetings

Communication

Please communicate through Brightspace.

Grading

Grades will be based on coding labs, programming assignments, 7 quizzes, attendance/participation, and a final exam with the following percentages:

Coding Labs

Laboratory assignments will consist of a series of smaller tasks. These tasks may involve coding or analyzing Java programs. A given lab exercise may be done individually or as part of a pair; pairs may be varied throughout the semester, but a given week’s assignment must be completed as part of a single pair (no swapping within a week) or individually. When work is completed by a pair, only one assignment (with both student’s names) needs to be turned in, both members of the pair are responsible for everything written in the assignment, and both will receive the same grade for that assignment. If schedules require a pair to "divorce" after beginning the assignment, but before turning it in, each must complete the assignment individually. Lab assignments will generally be due at 11:59 p.m. on the Friday following the lab meeting. Late submissions will not be accepted. Two points of the lab are awarded for lab attendance, with exceptions of three.

Programming Assignments

There are four programming assignments that must be completed individually. These will generally involve writing significant Java programs and may have "staged" due dates to ensure that students make progress throughout the duration of the assignment rather than waiting until the last minute to complete the entire task. Some of these assignments may involve writing analyses of the code and/or its behavior. Note: the last assignment does not involve writing any code; the only deliverable will be such an analysis. See late policy.

Quizzes

There will be seven quizzes given throughout the semester. The dates for these quizzes will be announced during lecture and through BrightSpace. A student's five best scores will be used to compute their quiz average. Quizzes will take place at the end of the lecture period on the scheduled days and will consist of a combination of short answer questions that may involve vocabulary testing, code tracing, or writing code snippets. Since two quizzes will be dropped for all students, makeup quizzes will not be given.

Final Exam

Final Examination The final examination will be an in-person, written, comprehensive examination. Per the registrar’s schedule, it will be given on Tuesday, April 30, from 2:00 p.m. to 4:00 p.m in Payson Smith 201.

Late policy

Unless otherwise noted, assignments will be due on Friday by 11:59pm. Late submissions will not be accepted. In recognition of the fact that there may unforeseen circumstances that prevent you from submitting some assignments, the lowest lab grades will be dropped.

ChatGPT, Copilot, and other artificial intelligence

In this course, you cannot use any AI-based tools to assist you in writing or debugging code. This includes (but is not limited to) Copilot and ChatGPT. Using these tools is considered cheating on the assignment and violates the academic integrity policy. Additionally, using any AI tool without adequately citing it is considered plagiarism. If you are using an IDE, you must turn automatic tools (such as GitHub Copilot) off before they start providing you with code.

Tips for Success

Classroom Policies

  1. No cellphones (put it away)
  2. Bring a laptop (but only use when coding)
  3. No AI (you are not learning if copilot codes for you)
Last modified Mon Apr 13 2024 08:23:35 AM EST Quinlan