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.
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.
Lab 1 + What is Software Engineering?
- Lab 1: Code Editors
- (Take after completing Lab 1)
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.
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.
- Intro to Version Control
- Chapter 16. Version Control and Branch Management Link
Lab 2: Version Control Part 1
- Introduction to Lab 2
- Lab 2: Configuring git and GitHub
Version Control and Collaborative Workflows
- Git Collaboration Activity
- Version Control and Collaborative Workflows
- <a href="https://en.wikipedia.org/wiki/git" target="_blank">Git Wikipedia article </a><br>Read the "History" and "Characteristics" sections.
- <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.
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.
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.
- Coding Practice
- Targeted Programming Readiness Remediation
- Version Control Wrap
Lab 4. Docker
- Everything as Code
- Docker cheat sheet reference Link
- 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.
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.
- Package & Dependency Management
Lab 5. Package Managers
- Python Practice
- Python Practice (after Java readiness practice)
- 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.
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.
- Intro to Testing
- Readiness Testing and Debugging Practice
Programming Readiness Final Verification + Testing Practice
- Programming Readiness Modules
- Unit Test Activity
- Lab 6: Testing & Static Analysis
Testing, Static Analysis, & Continuous Integration (CI)
- Project 1 Set-Up
- Project 1: UNCA Course Lookup
Topic 6: Midterm Exam Review & Midterm
Fall Break
Mid-Semester Review
- Mid Semester Review Cheat Sheet
- Mid-Semester Review
- Please review all of the readings and study questions assigned thus far, in preparation for the mid-term review.
Midterm Exam
- Midterm Exam
Topic 7: Back-End: the MVC Design Pattern + AsyncIO
AsyncIO + MVC
- AsyncIO + MVC
- AsyncIO Activity
- <a href="https://medium.com/@moraneus/mastering-pythons-asyncio-a-practical-guide-0a673265cf04" target="_blank">Mastering Python’s Asyncio: A Practical Guide</a>
- <a href="https://www.youtube.com/watch?v=RIVcqT2OGPA" target="_blank">AsyncIO and the Event Loop Explained</a>
MVC Lab Slides
- MVC Lab Slides
- Lab 7: AsyncIO + MVC
Topic 8: Back-End: Databases & ORMs
Back-End: Databases & ORMs
Intro to Databases & Object-Relational Mappings
- Intro to Databases & Object-Relational Mappings
- <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>
- <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>
- Lab 7: AsyncIO + MVC
Lab
- 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
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
- Client-Side Engineering (Part I)
- 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
Communicating over HTTP
- Communicating over HTTP
Lab
- Lab 10: Design Systems & External Data
Topic 10: Back-End: Scaling Up
Introduction to Project 2
- Introduction to Project 2
- Project 2: Full Stack Application
- Lab 10: Design Systems & External Data
Project 2 work: Ideally, you'll begin customizing your vertical feature today
- Project 2 work: Ideally, you'll begin customizing your vertical feature today
Topic 11: Thanksgiving Break
Thanksgiving Break
Topic 12: Back-End: Scaling Up & Course Wrap
Scaling an App
- Scaling an App
- Kubernetes Basics (Tutorial) Link
Topic 13: Final Exam
Final Exam
- Final Exam (8:00AM)