2.12. Software Development Fundamentals (SDF)

2.12. Software Development Fundamentals (SDF)

Fluency in the process of software development is fundamental to the study of computer science. To use computers to solve problems most effectively, students must be competent at reading and writing programs. Beyond programming skills, however, they must be able to select and use appropriate data structures and algorithms and use modern development and testing tools.

The SDF knowledge area brings together fundamental concepts and skills related to software development, focusing on concepts and skills that should be taught early in a computer science program, typically in the first year. This includes fundamental programming concepts and their effective use in writing programs, use of fundamental data structures which may be provided by the programming language, basics of programming practices for writing good quality programs, reading, and understanding programs, and some understanding of the impact of algorithms on the performance of the programs. The 43 hours of material in this knowledge area may be augmented with core material from other knowledge areas as students progress to mid- and upper-level courses.

This knowledge area assumes a contemporary programming language with built-in support for common data types including associative data types like dictionaries/maps as the vehicle for introducing students to programming (e.g., Python, Java). However, this is not to discourage the use of older or lower-level languages for SDF - the knowledge units below can be suitably adapted for the actual language used.

The emergence of generative AI and Large Language Models (LLMs), which can generate programs for many programming tasks, will undoubtedly affect the programming profession and consequently the teaching of many CS topics. However, to be able to effectively use generative AI in programming tasks, a programmer must have a good understanding of programs, and hence must still learn the foundations of programming and develop basic programming skills - which is the aim of SDF. Consequently, we feel that the desired outcomes for SDF should remain the same, though different instructors may now give more emphasis to program understanding, documenting, specifications, analysis, and testing. (This is like teaching students multiplication, addition, etc. even though calculators can be used to do them).

Table 2.12: List of KUs in the Software Development Fundamentals area.

2.12.1. SDF/Basic Programming Concepts and Constructs  (CS Core: 10 hrs) ↑ Back to top

Topics:
Core

Learning Outcomes:
Core:

  1. Develop programs that use the fundamental programming constructs: assignment and expressions, basic I/O, conditional and iterative statements [Create]
  2. Develop programs using functions with parameter passing [Create]
  3. Develop programs that effectively use the different structured data types provided in the language like arrays/lists, dictionaries, and sets [Create]
  4. Develop programs that use file I/O to provide data persistence across multiple executions [Create]
  5. Develop programs that use APIs to access or update data (e.g., from the web) [Create]
  6. Develop programs that create simple classes and instantiate objects of those classes (if supported by the language) [Create]
  7. Trace the flow of control during the execution of a program [Trace]
  8. Use appropriate terminology to identify elements of a program (e.g., identifier, operator, operand) [Use]

2.12.2. SDF/Programming Practices: Testing, Debugging, and Documentation  (CS Core: 10 hrs) ↑ Back to top

Topics:
Core

Learning Outcomes:
Core:

  1. Develop programs that use language-provided libraries and frameworks (where applicable) [Create]
  2. Explain the concept of recursion and identify when and how to use it effectively [Explain]
  3. Develop recursive functions [Create]
  4. Develop programs that can handle runtime errors [Create]
  5. Read a given program and explain what it does [Explain]
  6. Write comments for a program or a module specifying what it does [Write]

2.12.3. SDF/Fundamental Data Structures  (CS Core: 12 hrs) ↑ Back to top

Topics:
Core

  • Standard abstract data types such as lists, stacks, queues, sets, and maps/dictionaries, including operations on them.
  • Selecting and using appropriate data structures.
  • Performance implications of choice of data structure(s).
  • Strings and string processing.

Learning Outcomes:
Core:

  1. Write programs that use each of the key abstract data types provided in the language (e.g., arrays, tuples/records/structs, lists, stacks, queues, and associative data types like sets, dictionaries/maps) [Write]
  2. Select the appropriate data structure for a given problem [Evaluate]
  3. Explain how the performance of a program may change when using different data structures or operations [Explain]
  4. Write programs that work with text by using string processing capabilities provided by the language [Write]

2.12.4. SDF/Algorithms  (CS Core: 6 hrs) ↑ Back to top

Topics:
Core

  • Concept of algorithm and notion of algorithm efficiency
  • Some common algorithms (e.g., sorting, searching, tree traversal, graph traversal)
  • Impact of algorithms on time-space efficiency of programs

Learning Outcomes:
Core:

  1. Explain the role of algorithms for writing programs [Explain]
  2. Demonstrate how a problem may be solved by different algorithms, each with different properties [Demonstrate]
  3. Explain some common algorithms (e.g., sorting, searching, tree traversal, graph traversal) [Explain]
  4. Explain the impact on space/time performance of some algorithms [Explain]

2.12.5. SDF/Software Development Practices  (CS Core: 5 hrs) ↑ Back to top

Topics:
Core

  • Basic testing, including test case design
  • Use of a general-purpose IDE, including its debugger
  • Programming style that improves readability
  • Specifying functionality of a module in a natural language.

Learning Outcomes:
Core:

  1. Develop tests for modules and apply a variety of strategies to design test cases [Create]
  2. Explain some limitations of testing programs [Explain]
  3. Build, execute, and debug programs using a modern IDE and associated tools such as visual debuggers [Analyze]
  4. Apply basic programming style guidelines to aid readability of programs such as comments, indentation, proper naming of variables, etc [Apply]
  5. Write specifications of a module as module comment describing its functionality [Write]

2.12.6. SDF/Society, Ethics, and the Profession ↑ Back to top

Topics:
Core

Learning Outcomes:
Core:

  1. Explain/understand some of the intellectual property issues relating to programs [Explain]
  2. Explain/understand when code developed by others can be used and proper ways of disclosing their use [Explain]
  3. Explain/understand the responsibility of programmers when developing code for an overall solution (which may be developed by a team) [Explain]
  4. Explain/understand one or more codes of conduct applicable to programmers [Explain]

Spotted a typo, an outdated course, a broken link, or have a suggestion? Let us know.

Scan to open on your phone