ENSC 251 Software Design and Analysis for Engineers

Course Description



This course focuses on the practical skill required to engineer software with an awareness of the architecture of the platform on which it will be executed. This awareness should include the implications of data structures and algorithms on memory usage and execution time. We will also talk about techniques for software design, debugging, and testing.

Lectures will cover topics such as object oriented programming, recursion, complexity analysis, proofs, linked lists, custom data types, profiling, testing, debugging and abstraction. Some lectures will be devoted to reinforcing lab objectives, practical examples, and in-class tests. However, the focus of the lectures will be on the theory behind these concepts, with the labs provide students with their practical application. In this way, students should be able to translate these concepts and apply them to learning new programming languages and implementing larger and team-based software systems.

Labs will require students to program C/C++ in a Linux environment. Students will be able to download a compiler for their use outside of the class and lab. This will provide further opportunities to practice software design and additional time to work on their assignments and course project. Although much of the lab work will be done in teams, students will be evaluated individually on their knowledge and ability to design software.


[Course Home Page]