CPEN 221 is a course I completed at UBC. The course involved three group software development projects and included timed programming and problem-solving proficiency tests. The course focuses on the following topics :
Design, implementation, reasoning about software systems: abstraction and specification of software, testing, verification, abstract data types, object-oriented design, type hierarchies, concurrent software design.
The course was specifically divided into five modules. The first module explored the role of testing and specifications in code. It also looked into the need for types and defined immutability and mutability.
The second module explored the idea of abstraction. We learned about creating our own abstraction functions and representation invariants. We also similarly defined the idea of equality in software design.
The third module focused on the topic of recursion. This included creating and understanding recursive programs and data types. We also explored subtyping in this module.
In the fourth module, we took a step back and tried to understand what it meant for something to be a language. We explored Grammars and learned about regular expressions. Additionally, we learned about using lambdas and streams in our code.
The final module was about concurrency. We explored some of the issues with concurrency and why we might want to implement it. We also did some quantitative analysis of these programs with Amdahl’s Law.