- ES Español

- EN English

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).
| Knowledge Area (KA) | CS Core | KA Core |
2.12.1 Basic Programming Concepts and Constructs | 10 | |
2.12.2 Programming Practices: Testing, Debugging, and Documentation | 10 | |
2.12.3 Fundamental Data Structures | 12 | |
2.12.4 Algorithms | 6 | |
2.12.5 Software Development Practices | 5 | |
2.12.6 Society, Ethics, and the Profession | Elective | |
2.12.1. SDF/Basic Programming Concepts and Constructs (CS Core: 10 hrs) ↑ Back to top
Topics:
Core
- Basic concepts such as variables, primitive data types, expressions, and their evaluation
- How imperative programs work: state and state transitions on execution of statements, flow of control
- Basic constructs such as assignment statements, conditional and iterative statements, basic I/O
- Key modularity constructs such as functions (and methods and classes, if supported in the language) and related concepts like parameter passing, scope, abstraction, data encapsulation Object-Oriented Programming Fundamentals , Object-Oriented Programming: Encapsulation, Subtyping, and Reflection
- Input and output using files and APIs
- Structured data types available in the chosen programming language like sequences (e.g., arrays, lists), associative containers (e.g., dictionaries, maps), others (e.g., sets, tuples) and when and how to use them Foundational Data Structures , Foundational Algorithms , Advanced Algorithms
Learning Outcomes:
Core:
- Develop programs that use the fundamental programming constructs: assignment and expressions, basic I/O, conditional and iterative statements [Create]
- Develop programs using functions with parameter passing [Create]
- Develop programs that effectively use the different structured data types provided in the language like arrays/lists, dictionaries, and sets [Create]
- Develop programs that use file I/O to provide data persistence across multiple executions [Create]
- Develop programs that use APIs to access or update data (e.g., from the web) [Create]
- Develop programs that create simple classes and instantiate objects of those classes (if supported by the language) [Create]
- Trace the flow of control during the execution of a program [Trace]
- 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
- Libraries and frameworks provided by the language (when/where applicable)
- Recursion
- Dealing with runtime errors in programs (e.g., exception handling).
- Basic concepts of programming errors, testing, and debugging Coding Practices , Large-Scale Construction and Process , Information Flow and Non-Interference , Injection and Input Validation , Memory Safety and Types , Malware Analysis and Advanced Security
- Documenting/commenting code at the program and module level. Coding Practices , Large-Scale Construction and Process
- Develop a security mindset. AI and Hardware Security , Access Control and Applications , Security Mindset and Principles
Learning Outcomes:
Core:
- Develop programs that use language-provided libraries and frameworks (where applicable) [Create]
- Explain the concept of recursion and identify when and how to use it effectively [Explain]
- Develop recursive functions [Create]
- Develop programs that can handle runtime errors [Create]
- Read a given program and explain what it does [Explain]
- 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:
- 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]
- Select the appropriate data structure for a given problem [Evaluate]
- Explain how the performance of a program may change when using different data structures or operations [Explain]
- 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:
- Explain the role of algorithms for writing programs [Explain]
- Demonstrate how a problem may be solved by different algorithms, each with different properties [Demonstrate]
- Explain some common algorithms (e.g., sorting, searching, tree traversal, graph traversal) [Explain]
- 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:
- Develop tests for modules and apply a variety of strategies to design test cases [Create]
- Explain some limitations of testing programs [Explain]
- Build, execute, and debug programs using a modern IDE and associated tools such as visual debuggers [Analyze]
- Apply basic programming style guidelines to aid readability of programs such as comments, indentation, proper naming of variables, etc [Apply]
- 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
- Intellectual property rights of programmers for programs they develop.
- Plagiarism and academic integrity.
- Responsibility and liability of programmers regarding code they develop for solutions. AI and Hardware Security , Access Control and Applications , Security Mindset and Principles
- Basic professional work ethics of programmers.
Learning Outcomes:
Core:
- Explain/understand some of the intellectual property issues relating to programs [Explain]
- Explain/understand when code developed by others can be used and proper ways of disclosing their use [Explain]
- Explain/understand the responsibility of programmers when developing code for an overall solution (which may be developed by a team) [Explain]
- Explain/understand one or more codes of conduct applicable to programmers [Explain]