Skip to main content
UNC
Computer Science
3 credits

UNC COMP 301: Foundations of Programming

COMP 301 teaches UNC CS students to structure and organize larger programs — object-oriented design in Java, interfaces, inheritance, design patterns, and testing — the bridge from writing code that works to writing code that's built well. It follows COMP 210 in the core sequence.

Fennie is independent and not affiliated with UNC Chapel Hill. This is an unofficial study guide.

Build my COMP 301 study plan

What makes it hard

The grading standard shifts from 'does it run' to 'is it designed well,' which blindsides students who've equated working code with finished code. Java's verbosity and type system add friction after Python, and design-pattern questions on exams require judgment about which structure fits a scenario — a fuzzier skill than anything the earlier courses graded.

What you'll cover

  • Java and static typing
  • Object-oriented design
  • Interfaces and inheritance
  • Design patterns
  • Composition versus inheritance
  • Unit testing

The COMP 301 study guide

How to study for UNC COMP 301, step by step.

  1. 1

    Clear the Java friction fast

    Types, interfaces, and compiler discipline are overhead until they're not. Write small Java programs daily for the first two weeks so the language stops competing with the design ideas for your attention.

  2. 2

    Learn each pattern as a problem-solution pair

    For every design pattern, know the situation that motivates it, the structure that solves it, and what goes wrong without it. Exams test the judgment — which pattern fits this scenario — not the UML recitation.

  3. 3

    Refactor your own working code

    Take assignments that run and restructure them: extract interfaces, replace conditionals with polymorphism, separate concerns. Design skill is built in the rework, not the first draft.

  4. 4

    Read code with design questions in mind

    When studying provided examples, ask why it's structured this way and what change it's protecting against. That's the analysis exam questions reward and homework alone doesn't force.

  5. 5

    Write tests before you're told to

    Testing reveals design problems — hard-to-test code is usually badly structured code. Making tests habitual builds the design instincts the course is grading.

  6. 6

    Keep the concepts spaced with Fennie

    Upload your COMP 301 syllabus and Fennie's Daily Plan paces pattern study and design practice across the term, with flashcards for pattern intents and quizzes generated from your actual course materials. Free to start.

    Start my COMP 301 plan free

How Fennie helps with COMP 301

Fennie's Daily Plans pace COMP 301's shift from working code to well-designed code — pattern study and refactoring practice spaced across the term, synced to assignments and exams. Chat through which design fits a scenario and why, the judgment call exams actually grade, with flashcards keeping each pattern's intent precise.

FAQ

Is COMP 301 at UNC hard?

It's a standards shift more than a content cliff: code that merely runs stops being enough, and grading rewards design judgment — interfaces, patterns, structure. Students who refactor their own work and learn patterns as problem-solution pairs adapt fast; 'it passes the tests' thinkers struggle.

What language does COMP 301 use?

Java. After Python in COMP 110 and 210, the static typing and verbosity are real friction for a few weeks — but the type system is also the vehicle for the course's actual content: interfaces, inheritance, and disciplined object-oriented design.

Why does COMP 301 matter for the rest of the major?

It's where you learn to build software rather than scripts — the design vocabulary and habits that team-based and upper-level courses assume. Weak design fundamentals show up later as unmaintainable project code, usually at the least convenient moment.

Pass COMP 301 with a plan, not a cram

Upload your COMP 301 materials and Fennie generates a Daily Plan paced to your deadline — plus chat, flashcards, and quizzes built from the actual course content.

Get started free

More UNC courses