1. Introduction > 
  2. Spring 2025 Syllabus > 
  3. Previous Versions

Previous Versions

Previous Versions of this page:

  • Fall 2021 Syllabus
  • Fall 2022 Syllabus
  • Fall 2023 Syllabus
  • Fall 2024 Syllabus
  • Spring 2022 Syllabus
  • Spring 2023 Syllabus
  • Spring 2024 Syllabus
  • Summer 2021 Syllabus

6.0.0

Last modified by: Russell Feldhausen Aug 17, 2021

Computational Core Logo

  • 0. Introduction
    • 1. Course Introduction
    • 2. Navigating Canvas & Codio
    • 3. Where to Find Help
    • 5. How to Learn Programming
    • 6. Spring 2025 Syllabus
      • Previous Versions
        • 6. Fall 2021 Syllabus
        • 6. Fall 2022 Syllabus
        • 6. Fall 2023 Syllabus
        • 6. Fall 2024 Syllabus
        • 6. Spring 2022 Syllabus
        • 6. Spring 2023 Syllabus
        • 6. Spring 2024 Syllabus
        • 6. Summer 2021 Syllabus
    • 7. Plagiarism Policy
    • 8. Codio Projects
  • I. OOP
    • 1. Hello Real World
      • 1. Welcome
      • 2. The Growth of Computing
      • 3. The Software Crisis
      • 4. Language Evolution
      • 5. Writing Professional Code
      • 6. Hello Real World
      • 7. Summary
    • 2. Object-Oriented Programming
      • 1. Introduction
      • 2. Encapsulation
      • 3. Packages
      • 4. Type Systems
      • 5. Structs
      • 6. Modules
      • 7. State and Behavior
      • 8. Classes and Objects
      • 9. Access Modifiers
      • 10. Objects in Memory
      • 11. Message Passing
      • 12. Summary
    • 3. Documentation
      • 1. Introduction
      • 2. Documentation Types
      • 3. Documentation Formats
      • 4. Code Comments
      • 5. Javadoc
      • 6. Python Docstrings
      • 7. Generated Documentation
      • 8. Summary
    • 4. Testing
      • 1. Introduction
      • 2. Manual Testing
      • 3. Automated Testing
      • 4. Writing JUnit Tests
      • 5. Java Assertions
      • 6. Java Hamcrest
      • 7. Writing pytest Tests
      • 8. Python Assertions
      • 9. Python Hamcrest
      • 10. Running Tests
      • 11. Testing Strategies
      • 12. Summary
    • 5. UML
      • 1. Introduction
      • 2. UML
      • 3. Boxes
      • 4. Typed Elements
      • 5. Classes
      • 6. Associations
      • 7. Creating UML Diagrams
      • 8. UML Example
      • 9. Summary
    • 6. Inheritance & Polymorphism
      • 1. Introduction
      • 2. Types
      • 3. Interfaces
      • 4. Java Interfaces
      • 5. Java Inheritance
      • 6. Python Interfaces
      • 7. Python Inheritance
      • 8. Type Checking & Conversion
      • 9. Message Dispatching
      • 10. Summary
    • 7. Debugging & Logging
      • 1. Introduction
      • 2. Art of Debugging
      • 3. Inspecting State
      • 4. Inspecting Behavior
      • 5. Debuggers
      • 6. Logging
      • 7. Summary
    • 8. Lambda Expressions
      • 1. Introduction
      • 2. Lambda Calculus
      • 3. Functions as Objects
      • 4. Java Lambdas
      • 5. Python Lambdas
      • 6. Best Practices
      • 7. Summary
    • 9. Design Patterns
      • 1. Introduction
      • 2. The Gang of Four
      • 3. Software Design Patterns
      • 4. Builder Pattern
      • 5. Factory Method Pattern
      • 6. Singleton Pattern
      • 7. Iterator Pattern
      • 8. Adapter Pattern
      • 9. Template Method Pattern
      • 10. Summary
    • 10. Test Doubles
      • 1. Introduction
      • 2. Need for Test Doubles
      • 3. Arrange, Act, Assert
      • 4. Stubs
      • 5. Fakes
      • 6. Mocks
      • 7. Test Doubles in JUnit
      • 8. Test Doubles in pytest
      • 9. Dependency Injection
      • 10. Summary
  • II. GUI
    • 11. GUI Basics
      • 1. Introduction
      • 2. Screens
      • 3. Frameworks
      • 4. Designing a GUI
      • 5. Containers
      • 6. Layout Managers
      • 7. Elements
      • 8. Accessing GUI in Codio
      • 9. Java Swing
      • 10. Python tkinter
      • 11. Summary
    • 12. Parallelism
      • 1. Introduction
      • 2. Processes
      • 3. Threads
      • 4. Creating Threads
      • 5. Race Conditions
      • 6. Thread Synchronization
      • 7. Java Threads
      • 8. Java Synchronization
      • 9. Python Threads
      • 10. Python Synchronization
      • 11. Summary
    • 13. Event-Driven Programming
      • 1. Introduction
      • 2. GUI Threads
      • 3. Binding Events
      • 4. Event Handlers
      • 5. Event Loop
      • 6. Swing Event Dispatch Thread
      • 7. tkinter Main Loop
      • 8. Summary
    • 14. External Libraries
      • 1. Introduction
      • 2. Software Libraries
      • 3. Library Types
      • 4. Frameworks
      • 5. Repositories
      • 6. Licenses
      • 7. Don't Reinvent the Wheel
      • 8. Java JARs
      • 9. Java Libraries
      • 10. Python Wheels
      • 11. Python Libraries
      • 12. Summary
    • 15. Creating a Release
      • 1. Introduction
      • 2. Preparing for Release
      • 3. Choosing a License
      • 4. Metadata
      • 5. GitHub Pages
      • 6. Building Java JAR File
      • 7. Building Python Wheel
      • 8. GitHub Releases
      • 9. Publication
      • 10. Summary
  • III. Web
    • 16. Data-Driven Websites
      • 1. Introduction
      • 2. HTML
      • 3. CSS
      • 4. JavaScript
      • 5. HTTP
      • 6. Static Web Servers
      • 7. Dynamic Web Pages
      • 8. Template Rendering
      • 9. Web Frameworks
      • 10. Request & Response
      • 11. Routing
      • 12. Template Inheritance
      • 13. Summary
    • 17. REST and Forms
      • 1. Introduction
      • 2. HTML Forms
      • 3. Form Data
      • 4. Spring and Form Data
      • 5. Flask and Form Data
      • 6. RESTful Routes
      • 7. Validation
      • 8. Summary
    • 18. Web APIs
      • 1. Introduction
      • 2. Web APIs
      • 3. REST
      • 4. Documenting Web APIs
      • 5. Handling Authentication
      • 6. Using a Web API
      • 7. Summary
    • 19. Serialization
      • 1. Introduction
      • 2. State Review
      • 3. Text Formats
      • 4. Binary Formats
      • 5. Java Serialization
      • 6. Python Serialization
      • 7. Items to Exclude
      • 8. Databases
      • 9. Summary
    • 20. Extras
      • 1. Introduction
      • 2. Generics in Java
      • 3. Generics in Python
      • 4. Software Development Life Cycles
      • 5. Requirements Elicitation
      • 6. Security
      • 7. Résumés & Certifications
      • 8. Integrated Development Environments
      • 9. Programming Resources
      • 10. Summary
  • IV. Extras
    • 1. Installing Git on Windows
    • 2. Installing Python
    • 3. Installing Java
    • 4. Python IDEs
    • 5. Java IDEs
  • Weekly Updates
    • 1. Spring '25 Week 1
    • 2. Spring '25 Week 2
    • 3. Spring '25 Week 3
    • 4. Spring '25 Week 4
    • 5. Spring '25 Week 5
    • 6. Spring '25 Week 6
    • 7. Spring '25 Week 7
    • 8. Spring '25 Week 8
    • 9. Spring '25 Week 9
    • 10. Spring '25 Week 10
    • 11. Spring '25 Week 11
    • 12. Spring '25 Week 12
    • 13. Spring '25 Week 13
    • 14. Spring '25 Week 14
    • 15. Spring '25 Week 15
  • Example Projects
    • 0. New Project Checklist
    • 1. Hello Real World
      • 1. Codio and Terminal
      • 2. GitHub Classroom Setup
      • 3. Clone Starter from GitHub
      • 4.J. Java
        • 4.J.1. Install Gradle
        • 4.J.2. Create New Project
        • 4.J.3. Write Hello World
        • 4.J.4. Git Commit & Push
        • 4.J.5. Unit Tests
        • 4.J.6. Code Coverage
        • 4.J.7. Documentation
        • 4.J.8. Checkstyle
        • 4.J.9. Hamcrest
      • 4.P. Python
        • 4.P.1. Create New Project
        • 4.P.2. Write Hello World
        • 4.P.3. Git Commit & Push
        • 4.P.4. Unit Tests
        • 4.P.5. Install Tox
        • 4.P.6. Code Coverage
        • 4.P.7. Documentation
        • 4.P.8. Flake8
        • 4.P.9. Type Checking
        • 4.P.10. Hamcrest
      • 5. Creating GitHub Release
      • 6. Assignment Requirements
      • 7. Next Steps
    • 2. Object-Oriented Programming
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 3. Unit Testing
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 4. Inheritance
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 5. Debugging & Logging
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
      • 2.P.1 Update to Example 5 Python
    • 6. Design Patterns
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 7A. Parallel Programming
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 7. Test Doubles
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 7B. Event-Driven Programming
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 8. GUI Basics
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 9. Combos & Libraries
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 10. Releases
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 11. Web Basics
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 12. Forms
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 13. REST
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
    • 14. Form Validation
      • 1. Assignment Requirements
      • 2.J. Java
      • 2.P. Python
  • Project Milestones
    • A. Final Project
    • 0. Hello Real World
    • 1. Restaurant Classes
    • 2. Documentation & Testing
    • 3. Inheritance
    • 4. Design Patterns
    • 5. Test Doubles
    • 6. GUI Basics
    • 7. Event-Driven Programming
    • 8. Orders & Combos
    • 9. Checkout
    • 10. Website Basics
    • 11. Form Data
    • 12. RESTful Architecture
    • 13. Validation & Serialization
  • Instructor Resources
    • 1. Module Outline & Notes
    • 2. New Semester
    • 3. Errata
    • 4. Python 3.9

  •  
  •  
  •  

Built using Hugo and Hugo Relearn Theme.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. See License & Attribution for details.