Programming Fundamentals (PF)

   PF1. Fundamental programming constructs [core]
   PF2. Algorithms and problem-solving [core]
   PF3. Fundamental data structures [core]
   PF4. Recursion [core]
   PF5. Event-driven programming [core]

Fluency in a programming language is prerequisite to the study of most of computer science. In the CC1991 report, knowledge of a programming language -- while identified as essential -- was given little emphasis in the curriculum. The "Introduction to a Programming Language" area in CC1991 represents only 12 hours of class time and is identified as optional, under the optimistic assumption that "increasing numbers of students . . . gain such experience in secondary school." We believe that undergraduate computer science programs must teach students how to use at least one programming language well; furthermore, we recommend that computer science programs should teach students to become competent in languages that make use of at least two programming paradigms. Accomplishing this goal requires considerably more than 12 hours.

This knowledge area consists of those skills and concepts that are essential to programming practice independent of the underlying paradigm. As a result, this area includes units on fundamental programming concepts, basic data structures, and algorithmic processes. These units, however, by no means cover the full range of programming knowledge that a computer science undergraduate must know. Many of the other areas -- most notably Programming Languages (PL) and Software Engineering (SE) -- also contain programming-related units that are part of the undergraduate core. In most cases, these units could equally well have been assigned to either Programming Fundamentals or the more advanced area.

PF1. Fundamental programming constructs [core]

Minimum core coverage time: 9 hours

Topics:

Learning objectives:

  1. Analyze and explain the behavior of simple programs involving the fundamental programming constructs covered by this unit.
  2. Modify and expand short programs that use standard conditional and iterative control structures and functions.
  3. Design, implement, test, and debug a program that uses each of the following fundamental programming constructs: basic computation, simple I/O, standard conditional and iterative structures, and the definition of functions.
  4. Choose appropriate conditional and iteration constructs for a given programming task.
  5. Apply the techniques of structured (functional) decomposition to break a program into smaller pieces.
  6. Describe the mechanics of parameter passing.
PF2. Algorithms and problem-solving [core]

Minimum core coverage time: 6 hours

Topics:

Learning objectives:

  1. Discuss the importance of algorithms in the problem-solving process.
  2. Identify the necessary properties of good algorithms.
  3. Create algorithms for solving simple problems.
  4. Use pseudocode or a programming language to implement, test, and debug algorithms for solving simple problems.
  5. Describe strategies that are useful in debugging.
PF3. Fundamental data structures [core]

Minimum core coverage time: 14 hours

Topics:

Learning objectives:

  1. Discuss the representation and use of primitive data types and built-in data structures.
  2. Describe how the data structures in the topic list are allocated and used in memory.
  3. Describe common applications for each data structure in the topic list.
  4. Implement the user-defined data structures in a high-level language.
  5. Compare alternative implementations of data structures with respect to performance.
  6. Write programs that use each of the following data structures: arrays, records, strings, linked lists, stacks, queues, and hash tables.
  7. Compare and contrast the costs and benefits of dynamic and static data structure implementations.
  8. Choose the appropriate data structure for modeling a given problem.
PF4. Recursion [core]

Minimum core coverage time: 5 hours

Topics:

Learning objectives:

  1. Describe the concept of recursion and give examples of its use.
  2. Identify the base case and the general case of a recursively defined problem.
  3. Compare iterative and recursive solutions for elementary problems such as factorial.
  4. Describe the divide-and-conquer approach.
  5. Implement, test, and debug simple recursive functions and procedures.
  6. Describe how recursion can be implemented using a stack.
  7. Discuss problems for which backtracking is an appropriate solution.
  8. Determine when a recursive solution is appropriate for a problem.
PF5. Event-driven programming [core]

Minimum core coverage time: 4 hours

Topics:

Learning objectives:

  1. Explain the difference between event-driven programming and command-line programming.
  2. Design, code, test, and debug simple event-driven programs that respond to user events.
  3. Develop code that responds to exception conditions raised during execution.

CC2001 Report
December 15, 2001