Course Schedule

This schedule will definitely change over the course of the semester. Please continue to check back for updates.

Topic 1: Intro to Software Engineering

This unit introduces the idea of software engineering, including how it is similar and different from programming, and a host of considerations for building software that is scalable and maintainable over time.

Tu, Aug 18

Intro to the Course

This unit introduces the idea of software engineering, including how it is similar and different from programming, and a host of considerations for building software that is scalable and maintainable over time.

Slides / Activities
Th, Aug 20

Lab 1 + What is Software Engineering?

Required Readings
  1. Preface. Software Engineering at Google Link
  2. Chapter 1. What is Software Engineering? Link
Optional Readings
  1. Programming Readiness Modules Link
  2. Configuring WSL Link
  3. Command line cheat sheet Link
  4. Configuring zsh/bash Link
  5. VS Code Link
  6. vim Link
  7. emacs Link
Assigned:
Quizzes
  • (Take after completing Lab 1)
Su, Aug 23

Last day to add / drop

Topic 2: Version Control & Branch Management

Version control is perhaps one of the most important topics in software engineering. Version control systems allow teams to collaborate on projects, review one another's code, experiment with new features and ideas, and revert to previous versions when needed. In this unit, we will explore different approaches that teams might take to organize their code repositories. We will also do various hands-on activities so that you can familiarize yourself with bash and git commands.

Tu, Aug 25

Intro to Version Control

Version control is perhaps one of the most important topics in software engineering. Version control systems allow teams to collaborate on projects, review one another's code, experiment with new features and ideas, and revert to previous versions when needed. In this unit, we will explore different approaches that teams might take to organize their code repositories. We will also do various hands-on activities so that you can familiarize yourself with bash and git commands.

Slides / Activities
  • Intro to Version Control
Required Readings
  1. Chapter 16. Version Control and Branch Management Link
Th, Aug 27

Lab 2: Version Control Part 1

Slides / Activities
  • Introduction to Lab 2
Assigned:
  • Lab 2: Configuring git and GitHub
Tu, Sep 1

Version Control and Collaborative Workflows

Slides / Activities
  • Git Collaboration Activity
  • Version Control and Collaborative Workflows
Required Readings
  1. <a href="https://en.wikipedia.org/wiki/git" target="_blank">Git Wikipedia article </a><br>Read the "History" and "Characteristics" sections.
Optional Readings
  1. <a href="https://git-scm.com/book/en/v2" target="_blank">Pro Git book</a><br>The Pro Git book provides some useful context and conceptual models, particularly 2.1-2.5, 3.1-3.1, and 3.6.
Th, Sep 3

Lab 3: Version Control Part 2

Slides / Activities
  • Intro to Lab 3
Required Readings
  1. Collaborating with git and GitHub (video) Link
Optional Readings
  1. What is git rebase? (video) Link
  2. How to rebase + handle merge conflicts Link
Assigned:
  • Lab 3: A Tour of git Commands

Topic 3: Everything As Code (+ Docker)

In this unit, we will explore the idea of formalizing your entire software stack using code (e.g. operating system configurations, dependencies, documentation, and more). Even if your team is collaborating on the same codebase, if each team member is developing software with a different compiler, interpreter, language version, operating system, etc., you will likely run into conflicts and inconsistencies. Give this, you will learn about why "everything as code" is such an important idea, and some tools and strategies for managing your system stack over time.

Tu, Sep 8

Version Control Wrap

In this unit, we will explore the idea of formalizing your entire software stack using code (e.g. operating system configurations, dependencies, documentation, and more). Even if your team is collaborating on the same codebase, if each team member is developing software with a different compiler, interpreter, language version, operating system, etc., you will likely run into conflicts and inconsistencies. Give this, you will learn about why "everything as code" is such an important idea, and some tools and strategies for managing your system stack over time.

Slides / Activities
  • Coding Practice
  • Targeted Programming Readiness Remediation
  • Version Control Wrap
Required Readings
  1. Everything as Code Link
  2. Docker Wikipedia article Link
Th, Sep 10

Lab 4. Docker

Slides / Activities
  • Everything as Code
Optional Readings
  1. Docker cheat sheet reference Link
Assigned:
  • Lab 4: Intro to Docker

Topic 4: Package & Dependency Management

When developing software, it is common to rely on dependencies -- code that has been developed by other people. However, <em>your code</em> isn't the only code that changes. Dependencies (and their dependencies, and their dependencies' dependencies) also evolve over time as new features are added and bugs are patched. Given this, in this unit we will examine some tools, approaches, and considerations for managing code dependencies. We will also experiment with a few different dependency management tools, such as npm, poetry, and apt.

Tu, Sep 15

Package & Dependency Management

When developing software, it is common to rely on dependencies -- code that has been developed by other people. However, <em>your code</em> isn't the only code that changes. Dependencies (and their dependencies, and their dependencies' dependencies) also evolve over time as new features are added and bugs are patched. Given this, in this unit we will examine some tools, approaches, and considerations for managing code dependencies. We will also experiment with a few different dependency management tools, such as npm, poetry, and apt.

Slides / Activities
  • Package & Dependency Management
Required Readings
  1. Chapter 21. Dependency Management Link
  2. How one programmer broke the internet by deleting a tiny piece of code. Link
  3. NPM’s "everything" debacle. Link
Optional Readings
  1. Havoc Pennington's 2017 blog post (Outlines the problems with non-exact dependency resolution) Link
  2. Facebook's blog post upon the release of yarn (How did Facebook solve some of the dependency resolution challenges noted in our other readings?) Link
Th, Sep 17

Lab 5. Package Managers

Slides / Activities
  • Python Practice
  • Python Practice (after Java readiness practice)
Assigned:
  • Lab 5: Understanding Package Managers

Topic 5: Testing, Static Analysis, & Continuous Integration (CI)

Continuous integration (CI), static analysis, and testing are complementary software development techniques that ensure that teams can deploy software continuously with a high degree of confidence in the quality of their code. In this unit, we will learn about ways you and your team can automate code testing and validation procedures before merging code updates into the main branch. By setting up a few tools up front, you will save time and energy and increase the reliability of your code base.

Tu, Sep 22

Intro to Testing

Continuous integration (CI), static analysis, and testing are complementary software development techniques that ensure that teams can deploy software continuously with a high degree of confidence in the quality of their code. In this unit, we will learn about ways you and your team can automate code testing and validation procedures before merging code updates into the main branch. By setting up a few tools up front, you will save time and energy and increase the reliability of your code base.

Slides / Activities
  • Intro to Testing
  • Readiness Testing and Debugging Practice
Required Readings
  1. High-level overview of unit v. integration testing Link
  2. Chapter 11. Testing Overview Link
Th, Sep 24

Programming Readiness Final Verification + Testing Practice

Slides / Activities
  • Programming Readiness Modules
  • Unit Test Activity
Assigned:
  • Lab 6: Testing & Static Analysis
Tu, Sep 29

Static Analysis & Continuous Integration

Slides / Activities
  • Static Analysis & Continuous Integration
  • Team Preferences
Required Readings
  1. Chapter 20. Static Analysis Link
  2. Chapter 23. Continuous Integration Link
Th, Oct 1

Testing, Static Analysis, & Continuous Integration (CI)

Slides / Activities
  • Project 1 Set-Up
Assigned:
  • Project 1: UNCA Course Lookup

Topic 6: Midterm Exam Review & Midterm

Tu, Oct 6

Fall Break

Th, Oct 8

Mid-Semester Review

Slides / Activities
  • Mid Semester Review Cheat Sheet
  • Mid-Semester Review
Required Readings
  1. Please review all of the readings and study questions assigned thus far, in preparation for the mid-term review.
Tu, Oct 13

Midterm Exam

Slides / Activities
  • Midterm Exam

Topic 7: Back-End: the MVC Design Pattern + AsyncIO

Th, Oct 15

AsyncIO + MVC

Slides / Activities
  • AsyncIO + MVC
  • AsyncIO Activity
Required Readings
  1. <a href="https://medium.com/@moraneus/mastering-pythons-asyncio-a-practical-guide-0a673265cf04" target="_blank">Mastering Python’s Asyncio: A Practical Guide</a>
Optional Readings
  1. <a href="https://www.youtube.com/watch?v=RIVcqT2OGPA" target="_blank">AsyncIO and the Event Loop Explained</a>
Tu, Oct 20

MVC Lab Slides

Slides / Activities
  • MVC Lab Slides
Assigned:
  • Lab 7: AsyncIO + MVC

Topic 8: Back-End: Databases & ORMs

Th, Oct 22

Back-End: Databases & ORMs

Tu, Oct 27

Intro to Databases & Object-Relational Mappings

Slides / Activities
  • Intro to Databases & Object-Relational Mappings
Required Readings
  1. <strong>SQL Readings</strong>: Please review the reference materials on SQL: <ul> <li><a href="resources/databases">Database resources page</a></li> <li><a href="https://www.postgresql.org/docs/current/tutorial-select.html" target="_blank">Querying a Table</a></li> <li><a href="https://www.postgresql.org/docs/current/tutorial-join.html" target="_blank">Joins Between Tables</a></li> <li><a href="https://www.postgresql.org/docs/current/tutorial-agg.html" target="_blank">Aggregate Functions</a></li> <li><a href="https://www.postgresql.org/docs/current/tutorial-populate.html" target="_blank">Inserts</a></li> <li><a href="https://www.postgresql.org/docs/current/tutorial-update.html" target="_blank">Updates</a></li> <li><a href="https://www.postgresql.org/docs/current/tutorial-delete.html" target="_blank">Deletions</a></li> </ul>
  2. <strong>Object-Relational Mapping Readings</strong>: <ul> <li><a href="https://martinxpn.medium.com/working-with-databases-using-asyncio-in-python-sqlalchemy-example-79-100-days-of-python-1a5cef841803" target="_blank">High-level walkthrough / overview of SQLAlchemy</a></li> <li><a href="https://docs.sqlalchemy.org/en/20/orm/queryguide/index.html" target="_blank">SQLAlchemy Reference</a></li> </ul>
Due:
  • Lab 7: AsyncIO + MVC
Th, Oct 29

Lab

Assigned:
  • Lab 8: Database + ORM Lab

Topic 9: Challenges in Client-Side Engineering

In this unit, we will explore some software engineering ideas that are specific to client-side engineering. To do this, we're going to learn some HTML, CSS, JavaScript, and React concepts <em>as a means of learning</em> various client-side software engineering principles

Tu, Nov 3

Client-Side Engineering (Part I)

In this unit, we will explore some software engineering ideas that are specific to client-side engineering. To do this, we're going to learn some HTML, CSS, JavaScript, and React concepts <em>as a means of learning</em> various client-side software engineering principles

Slides / Activities
  • Client-Side Engineering (Part I)
Required Readings
  1. Ask ChatGPT to answer the study questions (Be ready to have a conversation about the discussion questions, including what you learned from ChatGPT (and whether you think ChatGPT got it right).) Link
Optional Readings
  1. Design Systems Link
  2. Intro to JavaScript Programming Link
Th, Nov 5

React

Slides / Activities
  • React
Optional Readings
  1. React Docs: Thinking in React Link
  2. React Docs: Describing the UI Link
  3. How A Small Team of Developers Created React at Facebook (video) Link
Assigned:
  • Lab 9: Intro to client-side programming with React
Tu, Nov 10

Communicating over HTTP

Slides / Activities
  • Communicating over HTTP
Th, Nov 12

Lab

Assigned:
  • Lab 10: Design Systems & External Data

Topic 10: Back-End: Scaling Up

Th, Nov 19

Introduction to Project 2

Slides / Activities
  • Introduction to Project 2
Assigned:
  • Project 2: Full Stack Application
Due:
  • Lab 10: Design Systems & External Data
Tu, Nov 24

Project 2 work: Ideally, you'll begin customizing your vertical feature today

Slides / Activities
  • Project 2 work: Ideally, you'll begin customizing your vertical feature today

Topic 11: Thanksgiving Break

Th, Nov 26

Thanksgiving Break

Topic 12: Back-End: Scaling Up & Course Wrap

Tu, Dec 1

Scaling an App

Slides / Activities
  • Scaling an App
Optional Readings
  1. Kubernetes Basics (Tutorial) Link

Topic 13: Final Exam

Tu, Dec 8

Final Exam

Slides / Activities
  • Final Exam (8:00AM)

UNC Asheville Department of Computer Science