Software Engineering Minor
Effectively building modern software systems at scale requires not just programming skills, but also engineering skills. These skills include the ability to interact effectively with customers to gather the requirements for a system in a precise way; to develop a design that resolves competing quality attributes; to make tradeoffs among schedule, cost, features, and quality to maximize value to stakeholders; to work effectively with other engineers; and to assure the quality of the delivered software system. We hear regularly from industry that these skills are crucial to them, and that they are interested in students with a strong software engineering background.
Overview
The software engineering minor is designed to teach the fundamental tools, techniques, and processes of software engineering. Through internships and a mentored project experience, students gain an understanding of the issues of scale and complexity that motivate software engineering tools and techniques. The core curriculum includes material both on engineering the software product and on the process, teamwork, and management skills that are essential to successful engineering. Graduates of the program should have the technical, process, and teamwork skills to be immediately productive in a mature engineering organization.
Admission
The Software Engineering Minor is open to undergraduate students in any major in the university. We encourage students to submit applications no later than 3 days before the beginning of Spring and Fall course registration, so that subsequent decisions can help students plan their subsequent course schedule effectively. However, students may petition the Director for admission outside this general schedule.
To apply, send the director an email. Include in your email:
- Full name
- Andrew ID
- Preferred email address (if different)
- Semester you intend to graduate
- QPA
- All (currently) declared majors and minors, or home college if no major declared
- Statement of purpose (maximum 1 page) - Describes why you want to take this minor and how it fits into your career goals
- Proposed schedule of required courses and internship (this is your plan, NOT a commitment)
Prerequisites
- 17-214 or 15-214: Principles of Software Construction: Objects, Design, and Concurrency
Core Course Requirements
- 17-313 or 15-313: Foundations of Software Engineering
- 17-413 or 15-413: Software Engineering Practicum
Electives
The minor requires 3 elective courses, one selected from each of the following categories:
- A domain-independent course focused on technical software engineering material
- 15-414 Bug Catching: Automated Program Verification and Testing
- 17-355 Program Analysis
- 17-356 Software Engineering for Startups
- 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
- 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
- 17-731 Foundations of Privacy
Ask before you take the course!
- 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
Ask before you take the course!
- A course that explores computer science problems related to existing and emerging technologies and their associated social, political, legal, business, and organizational contexts
- 15-390 Entrepreneurship for Computer Science
- 17-200 Ethical Dilemmas and Policy Issues in Computing
- 70-311 Organizational Behavior
- 17-331 Information Security and Privacy
- 17-333 Privacy Policy, Law, and Technology
- 17-334 Usable Privacy and Security
- 19-403 Policies of Wireless Systems
- 70-471 Supply Chain Management
- 17-562 Law of Computer Technology
- 17-781 Mobile and IoT Computing Services
- 17-801 Dynamic Network Analysis
- 17-821 Computational Modeling of Complex Socio-Technical Systems
- 88-341 Organizational Communication
Required Internship and Reflection Course
- 17-415 Software Engineering Reflection (required 6 unit course, to be offered Fall semester): Each student will conduct an analysis of some personal software engineering experience, typically (but not always) based on the engineering internship above. The student will then write and edit a short paper presenting this analysis. Initial course meetings will cover the reflective, writing, and speaking process. In later meetings, each student will present his or her experience through a 30-45 minute talk, which will be evaluated for communication skills and critical reflective content. This course is limited to enrollment of 16, and students who are admitted to the minor program are given first priority.
Double Counting Rule. At most 2 of the courses used to fulfill the minor requirements may be counted towards any other major or minor program. This rule does not apply to 17-214 (a prerequisite for the minor) or courses counted for general education requirements.