From the aspirational title of the 1968 NATO conference, software engineering has evolved to a well-defined engineering discipline with strong educational underpinnings. The supporting educational foundation has grown from a few courses in programming languages and data structures, evolving through structured programming, correctness formalisms, and state machine abstractions to full curricula and degree programs. With this context in mind, the authors discuss the evolution of software engineering education and pedagogy, software engineering principles, and future needs, drawing specifically on their experience at Carnegie Mellon University. Reflecting on the software development profession today, they believe that formal software engineering education is needed at least as much as it was in earlier decades. However, it must address the increasing diversity of the developer community, and it must be an education based on the enduring principles that will last a lifetime. This article is part of a theme issue on software engineering’s 50th anniversary.