Beginning Software Engineering course is intended for people with limited experience in software engineering. The course explains some techniques programmers can use to produce code that is flexible enough to handle the inevitable change requests, easy to debug, and easy to enhance and maintain in the future. The course is divided into two parts. The first part describes the basic tasks one needs to complete and deliver useful software. These tasks include designing, programming, and testing. The second part describes some common software development models that use different techniques to perform those tasks.