In addition to the following courses, students enrolled in the MSE programs can take electives from across Carnegie Mellon’s Pittsburgh campus.
17-603 Communications for Software Leaders I
Communications skills are fundamental to professionals in all fields, from architecture to software engineering to zoology, because they enable the exchange of ideas and the completion of organizational goals. The ability to identify an audience, to develop clear, persuasive presentations and written documents, and to handle the complex interactions that occur in the workplace make the difference between those who participate in an organization and those who lead it. This is the first course in a two-semester sequence designed to help you build and refine your skills so that you can communicate as a leader in your professional work. Through a combination of in-class exercises, case studies, projects, presentations, and written assignments, you will assess your current skill level and build upon it. There are no prerequisites to this course, other than a willingness to keep an open mind, to give and receive feedback, and to participate in interactive in-class discussions.
17-604 Communications for Software Leaders II
17-611 Statistics for Decision Making
Measurement and analysis play a critical role in effective and efficient software development, the construction of data driven applications, as well as providing the scientific basis for software engineering effort to be repeatable, reliable and predictable. This course combines a refresher in basic statistics with an introduction to measurement theory to enable students to define valid measurements in their domain of application.
17-612 Business & Marketing Strategy
Organizations must protect their profitability goals through prudent investment in well-supported engineering proposals, while avoiding misdirected initiatives. Such goals are further constrained by finance, policy, and market risk. This course covers key concepts to compete in a world where cost containment, cost leadership and market share play a critical role in keeping a company competitive, as does innovation and engineering prowess.
Scientific foundations for software engineering depend on the use of precise, abstract models for describing and reasoning about properties of software systems. This course considers a variety of standard models for representing sequential and concurrent systems, such as state machines, algebras, and traces. It shows how different logics can be used to specify properties of systems, such as functional correctness, deadlock freedom, and internal consistency.
17-615 Data Structures and Algorithms
Software engineers must be proficient in data abstraction, algorithm verification, and analysis. This course will teach students practical techniques for selecting appropriate data structures and algorithms, reasoning about algorithmic correctness and computational complexity, performance, and other properties, as well as how to analyze tradeoffs among algorithmic strategies.
17-617 Programing Quantum Computers
Students will gain familiarity with current universal gate quantum computing tools and technology. Students will also become comfortable with several QC algorithms and their implementation on state of the art quantum computer simulators and hardware.
17-622 Agile Methods
Agile software development methods emphasize self-organization, adaptive planning, evolutionary development, frequent delivery and working closely with and incorporating feedback from customers throughout the development process. This course introduces students to two well-known agile methods: Scrum and Kanban, connecting these practices to established group dynamics and knowledge management theories to explain why they work and under what circumstances.
17-623 Quality Assurance
Engineering quality software relies on the effective selection and application of quality assurance tools and techniques. In this course, students learn to define and measure software quality, learn when and how to apply software testing, static analysis, code review, and demonstration, and they will gain experience in using modern quality assurance frameworks.
17-624 Advanced Formal Methods
This course builds on the introductory Formal Methods class (17-614) to cover more advanced techniques for modeling and reasoning about software systems, including abstraction and refinement, declarative specifications, advanced temporal logics, and probabilistic modeling. The course will also explore applications of modeling and analysis techniques in various domains, such as security, enterprise systems, distributed computing, and cyber-physical systems.
17-625 API Design
Design patterns describe a reusable solution to a commonly recurring problem. This course will review object-oriented creational patterns for generating new objects, structural patterns for organizing and restricting access among objects, and behavioral patterns for managing inter-object communications. This course also reviews common frameworks where design patterns are used, including in the design of application programmer interfaces.
17-626 Requirements for Information Systems
Software engineering requires understanding the problem, before identifying solutions. In this course, students study ways to elicit and analyze problem statements using scenarios, use cases and mockups. They begin with poorly defined problem statements, which they refine through multiple iterations and modes of expression to yield more actionable software specifications.
17-627 Requirements for Embedded Systems
Software engineering requires understanding the problem, before identifying solutions. In this course, students study ways to elicit and analyze problem statements for real-time systems along multiple dimensions, including concurrency, dependability and safety. This includes developing and aligning mathematical and physical models for the effective application of control theory.
17-632 Software Project Management
Software projects operate like temporary organizations established to achieve a one-time objective in an agreed time frame. They require the execution of interrelated, normally non-repeating activities, by multidisciplinary groups. Therefore, projects require prescriptive planning, budgeting, staffing and risk management. This course introduces student to fundamental project management techniques and tools such as activity planning, milestone planning, estimation, work-breakdown structures, critical paths.
17-634 Applied Machine Learning
Autonomous and intelligent systems increasingly rely on automated decision making based on statistical models. Popular models are used for classification or prediction. This course introduces students to unsupervised and supervised machine learning in the context of software engineering, including the analysis of natural language in bug reports and mobile app reviews. Techniques covered include latent Dirichlet allocation, TF/IDF, naive Bayes, linear regression, decision trees, and random forests.
Successful design of complex software systems require the ability to describe, evaluate, and create systems at an architectural level of abstraction. This course covers commonly-used software system structures, techniques for designing and implementing these structures, models and formal notations for characterizing and reasoning about architectures, tools for generating specific instances of an architecture, and case studies of real-world system architectures. It teaches the skills and background that students need to evaluate the architectures of existing systems and to design new systems in principled ways using well-founded architectural paradigms.
17-636 Applied Distributed Systems
Modern software engineering depends heavily on distributed computation and storage. This requires a practical understanding of computer networking, computer and network security, and virtualization using containers. This course covers the fundamentals of distributed computing required to study modern deployment and continuous integration, and the design and analysis of data-intensive and scalable systems and sensor-based systems.
17-642 Software Management Theory
This course examines software development from an organizational perspective and is designed for students who aim to understand the relationship between business context, software development processes, knowledge creation, culture and organizational structure with the purpose of becoming change agents who manage the software development function at the business unit or department-level or above. The course highlights the need to follow good work principles in order to avoid ethical failures as evidenced by recent events.
17-643 Quality Management
Software engineers must consider quality during every phase of a project from inception to delivery and beyond. This class introduces the managerial challenges, including defining a quality management process, understanding the costs associated with achieving and missing quality goals, understanding tradeoffs and gaining experience using collected quality metrics to inform project-level decisions.
Neural networking has shown promise in multiple areas in artificial intelligence, including image classification, natural language processing and speech processing. Software engineers should understand the fundamentals differences in deep learning architecture and how to perform error analysis. This course introduces students to a variety of neural network architectures, including convolutional neural nets, recurrent neural nets, encoder-decoder with attention, and long-short term memory, as well as experience diagnosing and improving model performance.
DevOps practices serve to significantly reduce the time to production of committed code. This time involves deployment — the period between the completion of the code by the developers and the placing of the code into normal production — and dealing with operations issues. Deployment time can be days, weeks, or even months when using normal development practices. Operational issues such as dealing with incidents and errors introduce other delays. Modern Internet companies deploy a system multiple or even dozens of times every day. Achieving this velocity requires coordinated process and design activities together with supporting tooling. This course will cover the deployment process and the associated tooling, it will highlight reasons why release schedules can be slow, and it will introduce the practices that are used to enable high velocity deployments.
17-647 Engineering Data-intensive and Scalable Systems
Internet services companies such as Google, Yahoo!, Amazon, and Facebook have pioneered systems that have achieved unprecedented scale while still providing high level availability and a high cost-performance. These systems are data intensive, primarily performing data I/O and manipulation rather than computation. They often operate in the commercial space and thus the cost-performance must be profitable in real-time, around the clock. This course covers the design and construction of data intensive scalable systems, with a focus on consistency, time and synchronization. This course will teach students how deployment, monitoring, and upgrading these systems impact their design.
17-648 Sensor-based Systems
There is an increasing and visible trend in adoption of new approaches to automate business processes, replacing repeatable tasks and leveraging artificial intelligence as organizations prepare to renew themselves with a new competitive advantage through efficiencies and scale in operations. Product and service delivery operations, and industrial control systems are increasingly being connected by sensors and actuators that deliver event-based data that is critical to optimizing performance. This course teaches how to design intelligent systems that work effectively in a secure and reliable manner while producing data that can be analyzed using machine learning.
17-655 Advanced Architecture Design
When building large or long lived systems, design is a critical element. This course is premised on the idea that the best method for learning design is to create designs, and have these designed critiqued. A number of actual systems from a variety of domains (e.g., telephony, automotive) will be examined in this course. The students will learn, through doing, a design method based on the achievement of quality attribute requirements as well as functional requirements.
17-658 Engineering Intelligent Embedded Systems
The Intelligent Embedded Systems course will identify methods required to design and develop intelligent embedded system devices that use machine learning as of a control system. Many embedded systems have traditionally relied on meeting time based needs in order to provide a stimulus for system control. An intelligent embedded system builds upon traditional time based needs and adds a level of machine learning to interpret environment conditions. Collectively, these two unique needs must content for shared resources in constrained environments. The course will explore the resources for compute needs, deterministic performance and prioritization. A hardware component will provide students with practical, hands on opportunities to explore optimizations in both the deterministic control and machine learning.
17-671 Studio Project
The capstone experience for students in the MSE for Professionals program consists of three consecutive core studio courses.
- Spring: 17-671 MSE Studio I
- Summer: 17-672 Studio II
- Fall: 17-673 Studio III
The capstone experience requires students to work in teams of 3-5 on real-world projects that are mostly sponsored by external clients. The purpose of the project is to provide a realistic, experiential opportunity for the evaluation and application of Software Engineering principles, methods, and techniques learned in the MSE program. Teams are assigned faculty mentors with extensive experience to guide students towards their client’s goals and the educational goals. At the end, the teams will have delivered a valuable software system to their clients and enhanced their ability with developing software in a principled, disciplined manner. The final project becomes part of each student’s MSE program portfolio.
17-679 Thesis Writing for Software Leaders
Expository writing is used to present facts in a manner that supports a thesis. Successful thesis writing frequently requires identifying the audience, identifying and assessing facts for their relevancy and credibility to the thesis, and ensuring that conclusions are scoped and directly follow from facts. This course will introduce students to the software engineering thesis writing process with a specific focus on reflective practice. Students will work to identify a thesis topic based on their experience and interests, they will conduct a literature review to identify related work, will engage in reflective writing and learn to critique this writing. This course is for students enrolled in the Masters of Software Engineering program who are completing a supervised thesis option.
17-691 Machine Learning in Practice
As Machine Learning and Artificial Intelligence methods have become common place in both academic and industry environments many resources have focused on methods and techniques for applications. However, there are other considerations that must be addressed when deploying such techniques into practice (or production). The purpose of this course is to cover topics relevant to building a machine learning system deployed into operations. Such systems have technical requirements including data management, model development, and deployment. However, business/organizational impacts must also be considered. Machine learning systems can be expensive to produce and operate. Students will learn about trade-offs in design, implementation, and expected value.
In today’s technology-driven world, organizations want engineers to help shape great product innovations and customer experiences from the very beginning. Engineers offer a depth of knowledge of what’s possible now. When engineers clearly understand the opportunity and goals, they can stimulate differentiating innovation ideas, contribute to the bigger picture, and influence product decision-making. This course prepares technically minded students to understand and use the essential product management concepts and practices in product innovation.
Negotiation skills are fundamental to professionals in all fields. Indeed, a strong argument can be made that almost every interaction that humans engage in is a negotiation in one form or another. This can be particularly important in technology-related industries and positions, where individuals may find themselves negotiating a job offer, attempting to convince upper management to back a new product or project, or trying to agree on deal terms for a corporate merger or a venture capital investment. The ability to identify your goals and alternatives, to effectively engage with a negotiating partner, and to define and achieve a positive outcome is critical to success in these and numerous other endeavors — and those who
excel at handling these kinds of complex and often nuanced interactions will achieve greater success for themselves and their organizations.
Attributes of a good quality software, among others are ease of maintenance, modifiability, extensibility, and reusability. Design Patterns, that are mined from existing well-designed software, improve quality through documented and proven solutions to common problems. Reusing good designs appropriately not only improves the quality, but also reduces the development cost. Many existing code without much documentation also can benefit by refactoring to patterns. In this course students will learn techniques to identify design problems and apply design patterns effectively to improve the quality of software. Learning will be facilitated via lectures, flip-classrooms, and a group project. Learning will also be reinforced with many in-class and homework exercises.