Programming Methodologies and Software Implementation
Program Overview
Introduction to CS302
CS302 is an exciting new class being offered at Portland State University, specifically designed to provide students with the necessary tools and foundational material to be successful in the Upper Division of Computer Science. The course is equivalent to PSU's Spring and Summer CS202 offerings and is being offered for the first time in the Fall of 2022.
Course Description
CS302 introduces the principles and techniques for producing high-quality software solutions using modern programming languages such as modern C++ and Python. The course has a heavy focus on learning different methodologies for solving problems using abstractions as a key component. Students will cover object-oriented, generic, and functional programming techniques with exposure to parallel programming. Contemporary software tools such as IDEs, debuggers, version control with git, and much more will also be explored.
Course Objectives
The key objective of this course is to provide students with what they need to be successful in the upper division. Prior to this point, the 1xx and 2xx level courses focused on building skills and knowledge in algorithms and data structures. Now, it is time to apply what has been learned to solving realistic problems. This means understanding how to test, debug, and perform error handling, which is crucial to success.
Comparison to CS202
CS302 is not the same class as CS202 (prior to Spring 2022). In CS302, students are taken through a path of learning different programming methodologies and exploring modern programming concepts in both C++ and Python. The course covers material on how to:
- Apply the Modern C++ Standard Template Library
- Read Specifications, test, debug, and provide error handling
- Use Abstractions and Build Relationships between Class objects
- Program using Generic techniques with Templates and Operator Overloading
- Build software using Object-Oriented Programming with Inheritance and Dynamic Binding
- Understand the essence of Functional Programming, with Lambdas and explore Parallel Programming
- Apply Techniques to Multiple Programming Languages
- Become Fluent using Linux Tools
Prerequisites
Coming into this course, students should be fluent in programming algorithms and data structures taught in the 1xx and 2xx level courses. Hands-on knowledge of linear, circular, and doubly linked lists, arrays of linked lists (e.g., hash tables with chaining), and binary search trees is important. For a refresher, consider taking CS299, a 1-credit data structure practice lab.
Assessment
CS302 will have traditional written exams as well as live programming proficiency demonstrations. These take place at the Midterm and Final times. A proficiency demonstration is where students will show problem-solving and programming skills. Practice sessions will be held to prepare for these demonstrations.
Course Structure
The course includes new labs with hands-on time exploring Generic, Object-Oriented, Functional, and Parallel Programming. Students will apply C++'s Standard Template Library, Python, and Exception Handling to real-world problems. Tools are integrated with all aspects of the course, including gdb, git, and the use of IDEs.
