The UNC Logo

Welcome to COMP 301

Foundations of Programming

Course

You found the official overview page of COMP 301 Foundations of Programming, taught at the University of North Carolina at Chapel Hill. In this course, students who already know programming fundamentals learn how to structure and organize their code to build complex programs with multiple interacting components, while gaining experience using industry-standard developer tools. This is the final course in the software track of the introductory curriculum sequence, and is a prerequisite to many upper-level computer science courses.

The goal of this course is to teach students how to organize larger bodies of code. Unlike small coding projects, larger projects must be carefully structured to avoid becoming a mass of interrelated functionality that is difficult to continue developing. Students learn to reason about how their code is structured, identify whether a given structure is effective for a given context, and select strategies for organizing units of code to support larger programs.

Prerequisites

Enrolled students should already understand programming (COMP 110), data structures (COMP 210), and discrete mathematics (COMP 283 or MATH 381).

Instructor

Hi, my name is Aaron! I am a teaching assistant professor here at UNC. I received a Ph.D. in Computer Science in 2021 at UNC under KMP, and am now so excited to be teaching full time! I'm passionate about computer science education, web development, and software engineering. Over the last few years, I have been regularly involved in teaching COMP 401 Foundations of Programming (the precursor to this course), COMP 426 Modern Web Programming, COMP 523 Software Engineering, and COMP 110 Intro to Programming. Feel free to ask questions in class if you want to learn more about me! Or you can check out my website.

Lectures

For Fall 2021, COMP 301 will be an in-person, synchronous class. Attendance will be required, and will be tracked via PollEverywhere questions that I'll ask periodically during the lecture.

Assignments

Programming assignments are a big part of the COMP 301 experience. In total, there are 9 programming assignments that account for 50% of the overall course grade and must be completed individually. The assignments are designed to give you hands-on practice using industry-standard techniques, design patterns, and software architectures.

The final assignment will be a little longer than the first ones. You'll be designing a fully operational game in Java, complete with a GUI build in JavaFX!

Learning Assistants

COMP 301 benefits from a fantastic team of learning assistants (LAs) that will support you throughout this course through one-on-one office hours. They'll be happy to help you with any problem you're facing. Additionally, each COMP 301 student will be assigned a specific, personal learning assistant who will offer extra support and will be a great point of contact during the COMP 301 journey and beyond.

Libraries, Tools, and Languages

Here is a list of digital instructional tools we will use for support along the COMP 301 journey.

  • Sakai - Sakai is the main hub for information related to COMP 301. Use it to find links to the rest of the tools, read course announcements, watch pre-lecture videos, access and download lecture slides, view grades, monitor the calendar, see due dates, and take quizzes.
  • PollEverywhere - PollEverywhere will be used in class to assess attention and attendance, as well as to get instant feedback from students about lecture material.
  • GitHub - All starter code for programming assignments will be given to you in a private GitHub repository. As you work through each programming assignment, you will commit and push your code to GitHub so that you don't lose your work.
  • Gradescope - When you're ready to have your programming assignment graded, you will submit it to Gradescope. Gradescope will run your code through an autograder, and you will be able to see instant, limited feedback about your submission including a submission score.
  • My Digital Hand - My Digital Hand is a tool that we will use in conjunction with Zoom to manage and hold virtual office hours. When you need help at office hours, you will log in to My Digital Hand and add yourself to the virtual waiting list. When it's your turn, a Learning Assistant will notify you using My Digital Hand.

In addition, this is a programming-intensive course. Throughout the semester, you will become familiar with the following well-known programming tools that will (hopefully) prove useful to you throughout your time at Carolina and your potential future career as a software engineer.

  • IntelliJ - We will be using IntelliJ as our integrated development environment (IDE). IntelliJ is a professional-grade IDE that provides powerful tools for management of large software projects.
  • Java - All programming assignments, example code, and lecture material will focus on the Java programming language.
  • git - Git is the de-facto standard for version control in software development. In this class, you'll become more familiar with it and learn how to deal with advanced situations like merge conflict resolution.
  • Maven - Maven is a build automation tool that we will use every time we make a Java project. Maven will handle dependency management for our projects and ensure a consistent build environment across platforms.
  • JavaFX - JavaFX is an external Java library that provides graphical components for making professional graphical user interface (GUI) desktop applications.

Copyright © 2021 Aaron J Smith, Ph.D.