COP 2001
Programming Methodology
Orientation, Purpose, and Structure
About this course
You will learn intermediate-to-advanced programming concepts, structures, and application development, using C++. Emphasis will be placed on software development methods and programming environments.
Catalog Course Description
Advanced computer programming concepts and problem solving are explored using a procedural programming language and software tools. Topics include pointers, dynamic memory allocation, string handling, structures, file I/O, and recursion. Includes two hours of lecture and one hour of lab per week.
College Student Learning Outcomes (SLOs)
At the completion of the course, you will be able to:
perform fundamental procedural programming including control and data, typing, and recursion. (CMP.cf.1) (SWEBOK 13.4.4)
program using data structures including stacks, queues, and heaps. (CMP.cf.2) (SWEBOK 13.6)
identify, formulate, and solve problems using programs by identification of a problem, formulation of a problem statement, development of algorithms from the problem statement, application of algorithms to the problem, and transformation of algorithms to program code. (CMP.cf.3) (SWEBOK 13.1) (ABET 1)
perform abstraction when problem solving, generalize by reducing the information of a concept, a problem, or an observable phenomenon so that one can focus on the “big picture.”(CMP.cf.4) (SWEBOK 13.2)
define the programming process: design, writing, testing, debugging, and maintenance. (SWEBOK 13.3.1)
compare and contrast the major types of programming paradigms: Unstructured, Structured / Procedural / Imperative, and Object-Oriented. (SWEBOK 13.3.2)
differentiate between declarative and imperative programming languages (SWEBOK 13.4.5)
General Schedule
You should be spending 2-3 hours on the course outside of class for every hour in class.
Before Monday class: do readings and answer reading questions (2-3 hours), watch videos and answer video questions (2-3 hours)
Monday class: problem solving, programming language basics, IDEs, data structures, questions, exercises (2 hours)
After Monday class: complete exercises (if necessary) .5-1 hour, work on procedural project (1.5-2 hours)
Wednesdays: programming fundamentals (the programming process, programming paradigms), procedural project (2 hours)
After Wednesday class: work on procedural project and / or personal project (3.5-5 hours)
Before Friday class: review notes from readings and videos, study for quiz (.5-1 hour)
Friday: practical practices, tools, Git, debugging, teamwork, personal project, quiz (2 hours)
After Friday class: work on personal project (2-3 hours)
Design Influence
ACM CS Curriculum Guidelines
SDF/Development Methods
Topics:
Program comprehension
Program correctness
Types of errors (syntax, logic, run-time)
The concept of a specification
Defensive programming (e.g. secure coding, exception handling)
Code reviews
Testing fundamentals and test-case generation
The role and the use of contracts, including pre- and post-conditions
Unit testing
Simple refactoring
Modern programming environments
Code search
Programming using library components and their APIs
Debugging strategies
Documentation and program style
Learning Outcomes:
Trace the execution of a variety of code segments and write summaries of their computations. [Assessment]
Explain why the creation of correct program components is important in the production of high-quality software. [Familiarity]
Identify common coding errors that lead to insecure programs (e.g., buffer overflows, memory leaks, malicious code) and apply strategies for avoiding such errors. [Usage]
Conduct a personal code review (focused on common coding errors) on a program component using a provided checklist. [Usage]
Contribute to a small-team code review focused on component correctness. [Usage]
Describe how a contract can be used to specify the behavior of a program component. [Familiarity]
Refactor a program by identifying opportunities to apply procedural abstraction. [Usage]
Apply a variety of strategies to the testing and debugging of simple programs. [Usage]
Construct, execute and debug programs using a modern IDE and associated tools such as unit testing tools and visual debuggers. [Usage]
Construct and debug programs using the standard libraries available with a chosen programming language. [Usage]
Analyze the extent to which another programmer’s code meets documentation and programming style standards. [Assessment}
Apply consistent documentation and program style standards that contribute to the readability and maintainability of software. [Usage]
SWEBOK Chapter 13 Computing Foundations
Section 1 Problem Solving Techniques (All of this is a review / solidification of Introduction to Programming course)
Section 2 Abstraction (Some of this is a review / solidification of Introduction to Programming course)
Section 3 Programming Fundamentals
Section 4 Programming Language Basics (Some of this is a review / solidification of Introduction to Programming course)
Section 5 Debugging Tools and Techniques (Some of this is a review / solidification of Introduction to Programming course)
Section 6 Data Structure and Representation (New, at an introductory level as a preview of Data Structures course)
SEEK Computing essentials
Computer science foundations
Programming fundamentals (control and data, typing, recursion)
Algorithms, data structures, and complexity
Problem solving techniques
Programming language basics
Preparation for:
CEN 3031 Software Engineering Fundamentals
COP 3003 Object Oriented Programming
COP 3530 Data Structures and Algorithms
EGN 3641C Engineering Entrepreneurship