ENSC 251 Software Design and Analysis for Engineers |
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.