Curriculum

All MSWE students take the same courses, and share the same physical space (the lab), allowing students to develop strong ties across their cohorts and ensuring a high quality outcome.

During the first quarter of the program, students participate in an intensive 12-unit quarter-long experience designed to solidify and broaden the students’ knowledge of the computing landscape though hands-on programming exercises.

Under the guidance of instructors, each student chooses six out of these 2-unit courses, and makes an individual study plan for the quarter, which can be one module at a time, or interleaved. Each module comprises a series of milestones, each with programming exercises and a quiz. Tutors are available in the lab during the day, and each student meets with the assigned instructor at least once a week.

The following 2-unit courses are currently offered:

SWE 241P Applied Data Structures and Algorithms. 2 units.

Exploration of strategies to tackle computational problems whose solutions include well-known algorithms and data structures. Topics include: sorting, searching, indexing, algorithmic complexity and runtime performance analysis.

SWE 242P Network Programming. 2 units.

Exploration of networking principles and concepts for the development of distributed software. Topics include programming against well-known network protocols, ports and sockets, and network APIs.

SWE 243P Database Programming. 2 units.

 Exploration of software development with substantial reliance on a database for storage and retrieval of data. Topics include: relational databases, structured query language, NoSQL storage systems, APIs and libraries for database programming.

SWE 244P Concurrent Programming. 2 units.

Exploration of concepts and mechanisms for the development of concurrent software. Topics include: threads, processes, locks, race conditions, and deadlocks.

SWE 245P GUI Programming. 2 units.

Exploration of interactive software with substantial graphical user interface elements. Topics include: libraries and frameworks for GUI programming, layout design and alternatives, and event-driven programming.

SWE 246P Mobile Programming. 2 units.

Exploration of contemporary libraries and frameworks for construction of mobile applications. Topics include: emulators, mobile development standards and patterns, energy consumption issues, and screen layout.

SWE 247P Applied Information Retrieval. 2 units.

Exploration of state-of-the-art techniques for storing and retrieving non-structured textual information. Topics include: tokenization, inverted indexes, tf-idf, ranked retrieval, precision and recall.

SWE 248P Neural Network Programming. 2 units.

Exploration of state-of-the-art frameworks for programming artificial intelligent components. Topics include: neural networks and deep neural networks, gradient descent, backpropagation, training and test sets, and model validation.

SWE 261P Software Testing and Debugging. 4 units.

This course is designed to teach students how to ensure high quality software by means of testing, debugging, and other quality assurance activities. Students learn a combination of both theoretical and practical skills via get hands-on experience with modern software quality-assurance tools and approaches. Topics include: black-box and white-box testing, category-partitioning testing, unit testing, test-driven and behavior-driven development, combinatorial testing, code reviews, static code analysis tools, mocking, regression testing, capture-reply, mutation testing, and debugging.

SWE 264P Distributed Software Architecture. 4 units.

Study of software system architectures and architectural styles for large-scale distributed applications, and contemporary technologies and standards for their construction. Topics include: client-server, peer-to-peer, publish-subscribe, REST, cloud computing, content distribution networks, scalability, latency, caching, and security, among others.

SWE 271P Career and Entrepreneurship. 4 units.

Teaches practical skills for spoken, written, and electronic communication in a range of business and technical contexts, including promoting project ideas and portfolio development. Students will practice their skills in classroom presentations and written exercises.

SWE 262P Programming Styles. 4 units.

This course is designed to teach students the various ways software can be decomposed and then how to put the parts back together. Students will be exposed to a variety of different programming styles and composition mechanisms. Topics include: procedural styles, functional styles, object-oriented styles, data-centered styles, error handling styles, and styles for concurrent and parallel programming.

SWE 263P User Experience and Interaction. 4 units.

Provides an introduction to the basic principles of human-computer interaction (HCI) and the pragmatic aspects of usability engineering. Topics include the fundamentals of interaction, user experience, design for usability, and evaluation of products for their usability. Students will apply their knowledge in assignments and an ongoing class project.

SWE 265P Reverse Engineering and Modeling. 4 units.

Introduces theories, concepts, representations, techniques, and case studies in understanding large-scale, complex software systems. Topics include static and dynamic modeling notations, manual and (semi-)automated reverse engineering techniques, APIs, patterns and styles. A significant, hands-on project is included.

SWE 275P Curricular Practical Training. 1 unit.

Mandatory internship in which students individually work at an outside organization to gain experience with the challenges involved in the practice of software engineering.

SWE 266P Software Security and Dependability. 4 units.

Principles and concepts for the design and construction of secure software. Topics include: common types of software security vulnerabilities, methods for detecting vulnerabilities, design and process methodologies to improve the security of software, and techniques for assessing the security properties of software.

SWE 272P Project Management. 4 units.

Provides an introduction to project management in software engineering from several perspectives. Topics include team behavior; globally distributed work; resource estimation, scheduling and budgeting. Students will apply their knowledge in an ongoing class project.

SWE 276P Capstone Project in Software Engineering. 4 units.

Quarter-long software-intensive project focusing on the design and implementation of a novel software system. Students are expected to bring to bear the concepts acquired during the program.