In late 2015, the faculty and administration at the University of St. Thomas Graduate Programs in Software asked me to review their current IT graduate curriculum to determine how well it aligned with current IT practices. While much of the curriculum was still relevant, it was clear that the program didn't address some of the dramatic changes reshaping IT organizations. The idea for a new graduate IT course was born from that review process and subsequent discussions with other practitioners in the IT field.
DevOps is rapidly gaining adoption at IT organizations across the world. It represents an IT cultural transformation combining ideas from Lean, Agile, and software development. Cloud infrastructure is a key enabler of DevOps practices, and is a foundational component of modern Internet services.
Students that understand how to wield DevOps practices and create infrastructure as code are empowered to deliver IT services at nearly any scale. These students represent the future of our IT organizations.
The curriculum was designed for graduate students at a large private university located near a major metropolitan area. The students represent a mixture of age groups, cultural backgrounds, and technical experience levels. Most students tend to be working professionals with 5-15 years of corporate experience. Approximately 40% of the students are International students coming from a wide variety of educational systems.
Students taking this course may have 10+ years of IT experience or no experience at all. Some of the students are transitioning into IT as a new career. One of the challenges I faced while creating this curriculum was figuring out how to calibrate the technical depth of the content. In most instances, I opted to make the content more rigorous to challenge experienced students while at least giving less experienced students exposure to new ideas.
I've never developed educational curriculum before and I didn't follow any particular methodology when creating this course. I created the kind of class that I'd like to take.
The curriculum is based around a process of exploration and hands-on learning. Students are presented with a few theories and best practices, and then we dive straight into real-world implementation. We learn by doing. My hope is that an appreciation for DevOps practices will emerge as students progress through the course.
I'm treating this curriculum as a grand experiment and hope to receive fast feedback from students. I expect to make meaningful changes in future months based on student and peer critiques.
The course is focused on helping students develop skills related to DevOps and cloud infrastructure. Students learn how to walk before they run. Each lesson builds on the learnings from the previous lesson.
The 14-week course is partitioned into 12 lectures and 2 exams. Each lecture is designed cover 3 hours worth of content. Students are given assignments each week for a total of 10 assignments (or 11 if you count the first assignment which just involves account setup).
Students start out the course by learning fundamental version control and Linux system administration skills. The first two lessons are designed to bootstrap students into the core parts of the curriculum. Without these basic skills, it would be difficult for students to navigate many of the future assignments.
The next few courses introduce students to fundamental infrastructure deployment patterns, virtualization, and cloud infrastructure. The cloud infrastructure curriculum is loosely based on the AWS Solution Architect Certification blueprint. The idea is that after completing this course students can pursue an AWS certification with a small amount of incremental effort. Most of the lessons learned using AWS may be applied to other cloud providers such as Microsoft or Google.
Students build on their infrastructure experience by learning how distributed applications are designed to take advantage of this dynamic infrastructure. They will learn that this infrastructure isn't built using traditional ad hoc methods. Students learn how to create infrastructure using code and how to programmatically manage the configuration of that infrastructure over time.
Finally, during the last quarter of the course students are formally introduced to DevOps practices, including continuous integration and delivery. The course finishes with lectures on containerization, service discovery, and container orchestration platforms.
This course covers the engineering and design of IT infrastructure, focusing on cloud-scale distributed systems and modern DevOps practices. IT infrastructure deployment practices are rapidly changing as organizations build infrastructure as code and adopt cloud computing platforms. We will examine the theory behind these modern practices and the real-world implementation challenges faced by IT organizations.
-
Understand how IT organizations are deploying modern infrastructure and how to build infrastructure as code.
-
Understand how to architect cloud-scale distributed systems and the key design patterns used to enhance scalability and reliability within these systems.
-
Develop specific skills related to DevOps practices including source control management, package management, and configuration management.
Week | Topic |
---|---|
1 | Course Introduction, Source control, Git |
2 | Linux fundamentals, Package management, Shell scripting |
3 | Infrastructure fundamentals, Virtualization, Distributed infrastructure |
4 | Cloud computing, AWS, IAM, EC2, S3 |
5 | Cloud computing, AWS, VPC, RDS, ELB |
6 | Cloud computing, AWS, Autoscaling, Cloud Watch, Route53, SQS, SNS, SES |
7 | Midterm |
8 | Devops Practices, Continuous integration & delivery |
9 | Infrastructure as Code, CloudFormation |
10 | Configuration Management |
11 | Jenkins & CI/CD Pipelines |
12 | Containers, Docker |
13 | Service discovery, Container orchestration |
14 | Final exam |
This repository requires the Asciidoctor toolchain to convert AsciiDoc files into PDF files.
The generate-pdfs.sh
script in the /build
directory will create PDF
versions of all AsciiDoc files located in the root directory.
The script can utilize Docker if it's available on the build
platform.
The generate-syllabus.sh
script in the /build
directory will create an HTML
version of the course syllabus.
- I need to improve the skill connection between assignments. I originally designed each lecture as a separate module. Assignments should leverage skills attained in previous learnings.
- The hands-on portion of lectures isn't very interactive at this point. I need to improve that element of the course based on student feedback.
All material, except those images not owned by me and used for educational purposes, is licensed under a Creative Commons Attribution 4.0 International License.
Special thanks go out to Charlie Betz for his collaboration and encouragement. I also would like to thank Dr. Bhabani Misra and Dr. Brad Rubin for their support and mentorship. Finally, thank you to my wife for letting me attempt this.