Software Engineering covers a wide range of areas within the study of computer systems. It deals with hardware and software architecture, programming language theory, algorithms, software engineering methodologies, and software development life cycle.