Program Overview
MS in Software Engineering
The Master of Science in Software Engineering (MS in SE) is a unique program offered exclusively at CMU's Silicon Valley campus. It emphasizes a rigorous foundation in the core disciplines of software engineering. The program offers students fundamental knowledge, skills, and first-hand experience in software engineering by balancing theory and practice, engaging students in active learning, and encouraging collaboration on projects drawn from real-world contexts.
What is Software Engineering?
Software engineering is not the same as computer science. Computer science focuses on the foundations of computing (e.g., algorithms, computer architecture, compilers, programming languages, operating systems, databases, machine learning, discrete mathematics). Software engineering focuses on the technical and organizational methods, practices, and tools necessary to develop complex software systems in teams.
Software engineering is about solving real-world problems through effective engineering practices spanning software requirements, interaction design, architecture, technical design, implementation, quality assurance, and delivery. Since the work is done in teams, software engineering is also deeply concerned with effective collaboration and work organization.
Core Software Engineering Courses
The MS in SE program offers the possibility of taking courses in a variety of computing fields, including computer science, cyberphysical systems, mobile computing, security and privacy, data science, machine learning, and artificial intelligence, but its main orientation is software engineering. The following are core software engineering courses:
- 18-652 Foundations of Software Engineering
- 18-653 Software Architecture and Design
- 18-654 Software Verification and Testing
- 18-656 Functional Programming in Practice
- 18-657 Decision Analysis and Engineering Economics for Software Engineers
- 18-658 Software Requirements and Interaction Design
- 18-659 Software Engineering Methods
- 18-664 Software Refactoring
- 18-668 Data Science for Software Engineering
- 18-671 Foundations of Database Design
Research Opportunities
ECE's MS in SE faculty conduct research in core software engineering topics as well as complementary areas where software's role is pivotal. MS in SE students contribute to a variety of projects pursued by the MS in SE faculty and other ECE faculty across both Pittsburgh and Silicon Valley campuses to hone and apply their skills and gain experience in a research context. MS in SE students are able to participate in research activities either for pay as graduate research assistants or for credit by enrolling in ECE's MS Graduate Project course.
Networking and Career Opportunities
CMU's Silicon Valley campus is located at the heart of a unique and rich ecosystem with the world's highest concentration of technology organizations. From startups to giants, software is a central component of these organizations' business models, delivery systems, and operations. Students have ample opportunities to participate in this ecosystem and Silicon Valley's entrepreneurial culture via internships, tech talks, meetups, hackathons, and other on- and off-campus career development experiences. These experiences help our graduates build a career path with lifelong networking skills. Our graduates are competitively recruited by small and large companies alike, including Google, Facebook, Microsoft, VMWare, Amazon, IBM, Salesforce, Yahoo, SAP, PayPal, LinkedIn, Coursera, Cisco, NVidia, Tesla, Docker, and many others in the San Francisco Bay Area and high-technology centers elsewhere. Some of our students choose to develop their own business acumen through elective courses, and become entrepreneurs themselves upon graduation.
Teaching Assistantships
Teaching assistantships are available to high-performing and interested MS-SE students on a paid basis, typically after their first semester. Being a Teaching Assistant is a great way for students to improve their mentoring, communication, and leadership skills. Students invariably characterize their experience as Teaching Assistants as rewarding and an invaluable addition to their resumes.
Program Expectations
Computing Background and Experience
We expect most applicants to have an undergraduate degree in computer science, computer engineering, or a related computing field with a sufficient number of foundational courses in computer science and focusing on software. These foundational topics are not taught in the program: we assume all incoming students have the required knowledge. While we occasionally accept exceptional applicants whose undergraduate is in a non-computing field, this is rare. If your undergraduate is from a non-computing field, we look for:
- evidence of having completed qualifying foundational courses at the college- or university-level in relevant topics
- evidence of significant work experience related to software development
- evidence of strong interest and self-learning to fill in any gaps
The list of relevant foundational courses for applicants with a degree in a computing field and relevant qualifying courses for applicants with a degree in a non-computing field are as follows:
- Algorithms and complexity
- Data structures
- Discrete mathematics
- Introductory probability or statistics
- Computer architecture
- Compilers
- Operating systems
- Databases
- Web programming
- Object-oriented programming
- Programming languages
- Courses that focus on or teach modern programming languages
Applicants with Job Experience in Software Development or in a Software-Intensive Field
The MS in SE program maintains a strong practical focus without neglecting theoretical foundations. While relevant job experience is not a requirement, applicants who possess a certain level of job experience in software development, either through internships or through post-graduation employment, maximally benefit from the program. Even students with several years of post-graduate job experience benefit greatly. We emphasize that the curriculum is rigorous, and accordingly, we expect all applicants to be willing to:
- learn new skills and concepts
- be interested in both theory and practice to acquire a deep level of understanding in the topics taught
- experiment with new ways of working that might potentially be different from what they have been exposed to during their careers
Application Guidelines
Please review the graduate applications guidelines page for recommendations on how best to prepare your application package. Following this additional guidance is central to increasing your chances of admission to the MS-SE program:
- When listing the courses you definitely want to take: During the application process, you will be asked to list the courses that you definitely want to take and that you are interested in taking. The MS-SE admissions committee specifically looks at this list to determine an applicant's fit to the program. If you are applying to the MS-SE program as your first choice, the courses that you definitely want to take must all be selected from the list of Core Software Engineering Courses given above to meet the MS-SE program requirements, and must include the mandatory course 18-652.
- In your statement of purpose (SoP): Make sure to demonstrate an understanding of what software engineering is, your familiarity with the specific goals of the program, and your interest in the program's content. If your main interest is in a specific application domain (e.g., machine learning, data science, cyber-physical systems, security, natural language processing, e-health, autonomous computing, computer vision) or in a computing field other than software engineering, discuss why the MS in SE is the right program for you. You should also explain how your main interests can benefit from a degree with core skills in software engineering.
- In your curriculum vitae or resume: List software development technologies with which you are familiar, together with level of familiarity (beginner, intermediate, advanced, expert), including programming languages, frameworks, tools, main libraries, methods, development practices, and standards. Provide evidence of skills from courses or certifications taken, from research or academic projects completed, or from previous internships or jobs.
