Introduction to Software Engineering
Course Presentation
(202601)
Day 1 establish a clear distinction between programming and software engineering. While programming focuses on making code work, software engineering is concerned with building systems that can be understood, maintained, extended, and evolved by teams over time. The course emphasizes that software is created for people—not computers—and that engineering decisions must account for three central dimensions: people, quality, and cost. Students are encouraged to move beyond tool-centric thinking and instead adopt an engineering mindset grounded in structure, responsibility, and long-term sustainability.
A central metaphor introduced in these lectures contrasts crafting with manufacturing. Programming is framed as a creative, exploratory activity—valuable, but insufficient at scale. Software engineering, by contrast, resembles manufacturing: it requires repeatable processes, measurable quality, planning, and coordination. Engineers must make defensible decisions, justify trade-offs, and design systems that can change without being rebuilt from scratch. This perspective explains why the course prioritizes requirements analysis, architectural design, testing, integration, and deployment over isolated coding tasks.
Finally, the lectures clarify the role of Object-Oriented Programming and Java within the course. OOP is treated not as a language feature set, but as a tool for reasoning about system structure, responsibility, and teamwork. Java is used deliberately for its explicitness, helping students see design decisions rather than hide them behind compact abstractions. Throughout the course, students are expected to work collaboratively, communicate effectively, and produce software that others can read and build upon—marking the transition from writing code for grades to engineering software for real-world use.