This course studies the principles of software engineering and various programming methodologies. Top-down, structured programming will be emphasized and applied to the design and analysis of efficient algorithms. There is also an introduction to computational complexity. For graduate credit, a student will be required to write a term paper or execute a project that reflects deeper investigation of the topics covered in the course.