This text is intended for junior/senior-level students within the departments of Computer Engineering, Computer Science and Mathematics. It is also ideal as a bridge which leads students who have completed introductory programming into a senior-level course in Software Engineering .