Appendix C: Coursework
Continued: Our Outdated / Flawed Curriculum
Useful CSS Courses
CSS 390 Special Topics - Scripting Languages (Bernstein)
Topics Covered: Bash, Sed, Awk, Perl, Python
Related Career Paths: SWE, SRE/DevOps
Difficulty: Moderate
Scripting Languages is a course offered under CSS 390 Special Topics by Professor Morris Bernstein (typically once a year in Autumn quarter). In this course, you will learn about the concept of scripting, its application to software development, and the syntax / features of several scripting languages. The first half of the course is dedicated to learning scripting through Bash, Awk, Sed, and Perl; and the second half is solely taught in Python. You will work on five programming projects throughout the course that utilize these languages and have you work with commonly-used topics such as regular expressions, dictionaries, and some functional programming. This course emphasizes on providing you tools to “optimize for your time” by shifting perspectives from common software engineering principles (i.e. extensibility, efficiency, maintainability) to “scripting principles” (i.e. faster development time, “90% solutions”, conciseness).
CSS 436 Cloud Computing
Topics Covered: HTTP, Networking (Intro), Service-Oriented Architecture (SOA) / Microservices, SOAP, REST, APIs, AWS, Azure, Cloud Web Apps, Cloud Storage (Object, Block, File), NoSQL, Virtualization & Containers, Cloud Architecture, Cloud Security (Intro)
Related Career Paths: SWE, SRE/DevOps
Difficulty: Moderate - Hard
Cloud Computing is a course currently taught by Professor Robert Dimpsey (offered once or twice a year). In this course you will learn a variety of topics related to cloud computing, including its supporting technologies (Networks, HTTP, SOAP, REST, APIs), cloud providers (AWS, Azure), common cloud services (Storage, Databases, Virtualization/Containers, Web Apps), and modern cloud architectures (CAP Theorem, CDNs, Data Replication, Load Balancing). You will get to use many of these technologies within the five programming projects throughout the course, with the final project being an open-ended group project allowing you to explore working with various cloud providers, services, and supporting programming languages / frameworks. Most topics are highly applicable to modern software development and all projects allow you to make usable applications / tools to possibly include on your resume.
CSS 490 Distributed/Scalable Systems Design
Topics Covered: Service-Oriented Architecture (SOA) / Microservices, APIs, NoSQL, Kafka, Publish-Subscribe Model, Horizontal Partitioning, Vertical Partitioning
Related Career Paths: SWE, SRE/DevOps
Difficulty: Hard
The Distributed/Scalable Systems Design offering of CSS490 is taught by Professor John Chenault (usually offered once or twice a year, more likely once a year). In this course you will mainly be focusing on learning concepts centered around designing and improving large-scale systems. As of the last offering of this class, the first half of the quarter is focused on eBay as a case study and learning the differences between Monolithic and Microservices architectures, studying basic messaging between different services, as well as modifying systems from monolithic to microservices architecture. The second half of the class is focused on Amazon as a case study and learning further techniques for scaling systems such as the Publish-Subscribe model and using NoSQL for certain features. Although there is no coding done in this class, a strong background in databases, SQL, and data modelling is a must in order to understand the topics and do well in the 6-7 assignments that require purely original redesigns and refactoring of systems based on case studies covered in class.
CSS 475 Database Systems
Topics Covered: SQL, Relational Algebra, Data Modelling
Related Career Paths: SWE
Difficulty: Easy-Moderate
Database Systems is a course taught by various professors year-round and focuses on learning and understanding how relational database systems work. Most professors spend the first half of the class going over conceptual RDBMS concepts such as primary keys, foreign keys, surrogate keys, attributes, relations, etc. and data modelling using ER diagrams and understanding various types of relations such as 1:N, M:N, and 1:1. The second half of the quarter is focused on applying these concepts using SQL and learning different types of queries such as SELECT queries, different types of joins, complex queries, views, and different types of ways to modify databases such as INSERT, UPDATE, and DELETE statements. The final project focuses on applying your knowledge of database systems to make an open-ended project of your choice. Many professors require a user interface to interact with your database for the final project, which is a very good opportunity to apply tools and concepts like HTML, CSS, MVC architecture, and even full-stack web development to your final project and have a good in-depth project to put on your resume.