Software Engineering Concentration
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.
The software engineering concentration 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.
Overall, the concentration requires five (5) courses and an internship. One of the five courses consists of a 6-credit course that serves as a writing workshop in which the student reflects upon and integrates the lessons of the internship.
17-214 Principles of Software Construction: Objects, Design, and Concurrency
This prerequisite exists to ensure software development experience, and can be waived by the director if the student can show significant development experience.
Core Course Requirements
- 17-313 Foundations of Software Engineering
- 17-413 Software Engineering Practicum
Finally, the concentration requires two (2) 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 prior approval from the Director.
- 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-615 Software Process Definition
- 17-651 Models of Software Systems
- 17-652 Methods: Deciding What to Design
- 17-653 Managing Software Development (prerequisite: 17-413 or an internship)
- 17-654 Analysis of Software Artifacts
- 17-655 Architectures for Software Systems (prerequisite: 17-413 or an internship)
- Other courses, with prior approval from the Director of the Software Engineering Program.
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
- 17-200 Ethical Dilemmas and Policy Issues in Computing
- 17-562 Law of Computer 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-402 Telecommunications Technology and Policy for the Internet Age
- 19-403 Policies of Wireless Systems
- 70-311 Organizational Behavior
- 70-414 Entrepreneurship for Engineers
- 70-421 Entrepreneurship for Computer Scientists
- 70-471 Supply Chain Management
- 88-260 Organizations
- 88-341 Organizational Communication
- 88-391 Technology and Economic Growth
Internship and internship reflection
The concentration 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 concentration requirements may be counted towards any other degree or concentration. This rule does not apply to 17-214 (a prerequisite for the concentration) or courses counted for general education requirements.