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:

  1. perform fundamental procedural programming including control and data, typing, and recursion. (CMP.cf.1) (SWEBOK 13.4.4)

  2. program using data structures including stacks, queues, and heaps. (CMP.cf.2) (SWEBOK 13.6)

  3. 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)

  4. 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)

  5. define the programming process: design, writing, testing, debugging, and maintenance. (SWEBOK 13.3.1)

  6. compare and contrast the major types of programming paradigms: Unstructured, Structured / Procedural / Imperative, and Object-Oriented. (SWEBOK 13.3.2)

  7. 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:

      1. Trace the execution of a variety of code segments and write summaries of their computations. [Assessment]

      2. Explain why the creation of correct program components is important in the production of high-quality software. [Familiarity]

      3. 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]

      4. Conduct a personal code review (focused on common coding errors) on a program component using a provided checklist. [Usage]

      5. Contribute to a small-team code review focused on component correctness. [Usage]

      6. Describe how a contract can be used to specify the behavior of a program component. [Familiarity]

      7. Refactor a program by identifying opportunities to apply procedural abstraction. [Usage]

      8. Apply a variety of strategies to the testing and debugging of simple programs. [Usage]

      9. Construct, execute and debug programs using a modern IDE and associated tools such as unit testing tools and visual debuggers. [Usage]

      10. Construct and debug programs using the standard libraries available with a chosen programming language. [Usage]

      11. Analyze the extent to which another programmer’s code meets documentation and programming style standards. [Assessment}

      12. 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

  • Course Design

Preparation for:

  • CEN 3031 Software Engineering Fundamentals

  • COP 3003 Object Oriented Programming

  • COP 3530 Data Structures and Algorithms

  • EGN 3641C Engineering Entrepreneurship