CMSI 281 is a 3-Unit intermediate-level programming class that teaches students how to craft efficient and space-conscientious applications by analyzing and then choosing the "right" data organization for a task. Although Java is the course's language of focus, students will learn core concepts that permeate all programming languages.
By the course's end, students will:
-
understand analytic programming concepts such as asymptotics, time-complexity, and space-complexity -- that not all programs are created equal; two programs that perform the same task may not do so with the same efficiency or cleanliness.
-
be introduced to a wide range of Abstract Data Types (ADTs) and learn which are best suited for which tasks, including: arrays, linked lists, stacks, queues, heaps, hash tables, sets, trees, and graphs.
-
gain a deeper understanding of class hierarchies, classes vs. objects, and implementing ADTs in concrete classes.
-
learn the interfaces for popular Java collections, and how to use them in a variety of non-trivial programming tasks.
-
identify beneficial and detrimental interactions between ADTs and algorithms that operate on them.