Software Engineering Minor
The Software Engineering Minor addresses the critical industry need for professionals who possess not only programming proficiency but also the broader engineering skills required to effectively build modern software systems at scale. Recognizing that skills like precise requirements gathering; designing for competing quality attributes; making trade-offs between cost, schedule and features; ensuring quality; and effective teamwork are highly valued by employers, the minor focuses on teaching these fundamental tools, techniques and processes.
Through a curriculum that covers both engineering the software product and the essential process, management and teamwork aspects — complemented by internships and mentored projects — students gain practical understanding of the scale and complexity issues inherent in the field, ultimately graduating with the capabilities to be immediately productive in a mature engineering organization.
Admission to the Software Engineering Minor
Eligibility
The Software Engineering Minor is open to undergraduate students in any major at CMU.
How to Apply
To apply for the minor, please email the program director. Your email application must include the following information:
- Full Name
- Andrew ID
- Preferred Email Address (if different from your Andrew email)
- Expected Graduation Semester
- Current QPA
- Declared Majors and Minors
(List all, or state your home college if no major is declared yet) - Statement of Purpose (maximum one page)
Describe why you are interested in the Software Engineering Minor and how it fits into your future career goals. - Proposed Schedule
Outline your plan for taking the required courses and completing the internship. Please note, this is a preliminary plan and not a final commitment.
Learning Objectives
Requirements
Core Requirements
- 17-313 Foundations of Software Engineering
- 17-413 Software Engineering Practicum
Electives
The minor requires three (3) additional elective area courses, one selected from each of the following categories. Each category includes courses that are currently approved, but other courses that fulfill the same learning objectives may also be used for each area, subject to a prior approval from the Director.
Other courses require prior approval from the Director of the Software Engineering Program. Ask before you take the course!
A domain-independent course focused on technical software engineering material.
- 15-414 Bug Catching: Automated Program Verification and Testing
- 17-214: Agentic Software Development. (Formerly "Principles of Software Construction: Objects, Design and Concurrency." Students who took the older version of the course may not count it as an elective for this category.)
- 17-731: Foundations of Privacy
- 17-355 Program Analysis
- 17-356 Software Engineering for Startups
- 17-423/723: Designing Large-scale Software Systems
- 17-445: Machine Learning in Production
- 17-480: API Design and Implementation
- 17-653: Managing Software Development
(prerequisite: 17-413 or an internship) - Methods Elective (take both 6-unit mini courses)
1) 17-614: Formal Methods
2) 17-624: Advanced Formal Methods - Requirements Elective: Design & Marketing (take two 6-unit mini courses)
1) 17-612: Business Marketing and Strategy
2) Take either 17-626: Requirements for Information Systems OR
17-627: Requirements for Embedded Systems - Managing Development (take two 6-unit mini courses)
1) 17-622: Agile Methods
2) Another mini-course of your choice from within this larger list - Quality Engineering (take two 6-unit mini courses)
1) 17-623: Quality Assurance
2) 17-443/645: Quality Management
An engineering-focused course with a significant software component.
- 15-410: Operating System Design and Implementation
- 15-412: Operating System Practicum
- 17-437: Web Application Development
- 15-440: Distributed Systems
- 17-422: Building User-Focused Sensing Systems
- 15-441: Networking and the Internet
- 15-445: Database Systems
- 18-749: Building Reliable Distributed Systems
- 67-443: Mobile App Development
A course that explores computer science problems related to existing and emerging technologies and their associated social, political, legal, business and organizational contexts.
- 17-200: Ethical Dilemmas and Policy Issues in Computing
- 17-562: Law of Computer Technology
- 17-333: Privacy Policy, Law and Technology
- 17-334: Usable Privacy Security
- 17-781: Mobile and IoT Computing Services
- 17-801: Dynamic Network Analysis
- 17-821: Computational Modeling of Complex Socio-Technical Systems
- 15-390: Entrepreneurship for Computer Science
- 17-331: Information Security and Privacy
- 19-403: Policies of Wireless Systems
- 70-311: Organizational Behavior
- 70-471: Supply Chain Management
- 88-341: Team Dynamics and Leadership
Internship and internship reflection
The minor requires a software engineering internship of a minimum of 8 full-time weeks in an industrial setting (i.e., integrated into a team and exposed to industry pressures). The student may work in development, management, quality assurance or other relevant positions. Students should confirm with the director that an internship is appropriate, but internships that fulfill the criteria will be accepted after the fact. Students must further complete:
• 17-415 Software Engineering Reflection (6 units)
Double Counting Rule
No more than two of the courses used to fulfill the minor requirements may be counted toward any other degree or minor. This rule does not apply to 17-214 (a prerequisite for the minor only for students who took the older version of the course) or courses counted for general education requirements.