Computational thinking is a problem-solving process that includes, but is not limited to, the following characteristics: formulating problems in a way that enables us to use a computer and other tools to help solve them; logically organizing and analyzing data; representing data through abstractions such as models and simulations; automating solutions through algorithmic thinking (a series of ordered steps); identifying, analyzing and implementing possible solutions with the goal of achieving the most efficient and effective combination of steps and resources; and generalizing and transferring this problem-solving process to a wide variety of problems.
Decomposition
Breaking down a problem into smaller parts such that it can be solved easily. This step provides better insights to the problem by pinpointing its components in detail.
Pattern recognition
Identifying similarities and trends within a problem helps in formulating efficient and effective solutions to given problems.
Abstraction
Establishing main elements of a solution by filtering out redundant elements of a problem in order to focus on the vital components.
Algorithm Design
Creating a detailed step-by-step set of instructions helps to explain how to solve a problem. The comprehensiveness of an algorithm requires minimal explanation to go about it.
The learning objectives are referenced from SEAB H2 A-Level Computing (Syllabus 9569).
Write algorithms in pseudo-code and flowchart for given problems.
1.1.1 Use appropriate techniques or tools such as pseudo-code and flowchart to show program flow.
1.1.2 Use standard flowchart symbols.
1.1.3 Use a combination of various control structures.
1.1.4 Use decision tables to explore the actions for combinations of different input conditions. Note: up to three conditions.
1.1.5 Use modular design to decompose a problem into smaller problems.
Understand algorithms for sorting and searching methods such as insertion sort, bubble sort, quicksort, merge sort, linear search, binary search and hash table search, and use examples to explain these methods.
1.2.1 Implement sort algorithms.
Insertion sort
Bubble sort
Quicksort
Merge sort
1.2.2 Use examples to explain sort algorithms.
1.2.3 Implement search algorithms.
Linear search
Binary search
Hash table search
1.2.4 Use examples to explain search algorithms.
1.2.5 Compare and describe the efficiencies of the sort and search algorithms using Big-O notation for time complexity. Exclude : space complexity
Understand concept and write algorithms for stack, queue (linear and circular), linear linked list and binary search tree.
1.3.1 Understand the concept of static allocation of memory.
1.3.2 Understand the concept of dynamic allocation of memory.
1.3.3 Create, insert, and delete operations for stack and queue (linear and circular).
1.3.4 Understand the concept of free space list (which could be another linked list or an array).
1.3.5 Create, update (edit, insert, delete) and search operations for a linear linked list.
1.3.6 Create, update (edit, insert, delete*) and search operations for a binary search tree. *Exclude : deletion of nodes from binary search tree
1.3.7 Understand pre-order, in-order and post-order tree traversals; and application of in-order tree traversal for binary search tree.
Use common coding standards for programming style (which is dependent on programming language used).
2.1.1 Use indentation and white space.
2.1.2 Use naming conventions (e.g. meaningful identifier names).
2.1.3 Write comments (name of programmer, date written, program description and version bookkeeping/control).
Use programming language elements and constructs to write recursive and non-recursive programs to solve a variety of problems.
2.2.1 Understand the different types: integer, real, char, string and Boolean and initialise arrays (1- dimensional and 2-dimensional).
2.2.2 Use common library functions for input/output, strings and mathematical operations.
2.2.3 Apply the fundamental programming constructs to control the flow of program execution:
Sequence
Selection
Iteration
2.2.4 Use functions and procedures to modularise problem into chunks of code.
2.2.5 Understand the concept of recursion.
2.2.6 Trace the steps and list the results of recursive and non-recursive programs.
2.2.7 Understand the use of stacks in recursive programming.
Use programming language elements and constructs to implement sort and search algorithms such as insertion sort, bubble sort, quicksort, merge sort, linear search, binary search and hash table search, as well as data structures such as stacks, queues, linear linked lists and binary search trees.
2.3.1 Implement sort programs.
Insertion sort
Bubble sort
Quicksort
Merge sort
2.3.2 Implement search programs.
Linear search
Binary search
Hash table search
2.3.3 Write programs to implement operations for stacks, queues (linear and circular), linear linked lists and binary search trees. Exclude: doubly-linked list and circular linked list
2.3.4 Store data in and retrieve data from serial and sequential text files.
Use data validation techniques and design test cases.
2.4.1 Explain the difference between data validation and data verification.
2.4.2 Understand data validation techniques such as:
Range check
Format check
Length check
Presence check
Check digit
2.4.3 Identify, explain and correct syntax, logic and runtime errors
2.4.4 Design appropriate test cases using normal, abnormal and extreme data for testing and debugging programs.
Understand concepts of encapsulation, inheritance and polymorphism.
2.5.1 Define and understand classes and objects.
2.5.2 Understand encapsulation and how classes support information hiding and implementation independence.
2.5.3 Understand inheritance and how it promotes software reuse.
2.5.4 Understand polymorphism and how it enables code generalisation. Exclude: method overloading and multiple inheritance
Understand that values can be represented in different number bases: denary, binary and hexadecimal.
3.1.1 Represent data in binary and hexadecimal forms.
3.1.2 Write programs to perform the conversion of positive integers between different number bases: denary, binary and hexadecimal forms; and display results.
Understand the use of ASCII code and Unicode to represent characters.
3.2.1 Give examples of where or how Unicode is used.
3.2.2 Use ASCII code in programs.
Understand, create and use SQL and NoSQL databases, as well as understand techniques to protect the privacy and integrity of data.
3.3.1 Determine the attributes of a database: table, record and field.
3.3.2 Explain the purpose of and use primary, secondary, composite and foreign keys in tables.
3.3.3 Explain with examples, the concept of data redundancy and data dependency.
3.3.4 Reduce data redundancy to third normal form (3NF).
3.3.5 Draw entity-relationship (ER) diagrams to show the relationship between tables.
3.3.6 Understand how NoSQL database management system addresses the shortcomings of relational database management system (SQL).
3.3.7 Explain the applications of SQL and NoSQL
3.3.8 Use a programming language to work with both SQL and NoSQL databases.
3.3.9 Understand the need for privacy and integrity of data.
3.3.10 Describe methods to protect data.
3.3.11 Explain the difference between backup and archive.
3.3.12 Describe the need for version control and naming convention.
3.3.13 Explain how data in Singapore is protected under the Personal Data Protection Act to govern the collection, use and disclosure of personal data.
Understand the importance of ethics in the conduct of Computing professionals and the impact of Computing in different real-life situations.
3.4.1 Understand the code of ethics (conduct) of a Computing professional
3.4.2 Describe the impact of computing on lifestyle and workplace for social and economic developments.
3.4.3 Discuss the social, ethical, legal and economic issues of computing and technology.