Computational Thinking
A problem-solving process that involves breaking down complex problems into manageable parts, using algorithms and abstraction to develop solutions. It emphasizes logical reasoning and the ability to think like a computer scientist.
Abstraction
The process of simplifying complex systems by focusing on the essential features while ignoring the irrelevant details.
Data Abstraction
A method of reducing complexity by providing a simplified view of data, allowing programmers to focus on high-level operations without needing to understand the intricate details of the data structures e.g. through the use of queues, stacks or trees.
Preconditions
Conditions that must be true before a function or algorithm is executed to ensure it operates correctly.
Dynamic Link Library
A collection of reusable code and resources that can be used by multiple programs simultaneously, allowing for efficient memory usage and modular programming.
Caching
A technique that stores copies of frequently accessed data in a temporary storage location, improving data retrieval speed and overall system performance.
Thinking Ahead
The process of anticipating future requirements or outcomes in problem-solving and designing algorithms, often to optimize performance and efficiency.
Thinking Abstractly
The ability to simplify complex problems by focusing on the main ideas and concepts, allowing for more effective problem-solving and algorithm design.
Thinking procedurally
The approach of breaking down tasks into a series of sequential steps or instructions, which can be followed to produce a desired outcome or solve a problem.
Thinking logically
The ability to reason through problems in a structured way, ensuring that conclusions follow from given premises and leading to sound problem-solving and algorithm development.
Thinking concurrently
The ability to understand and manage multiple tasks or processes happening at the same time, often used in programming and systems design to improve efficiency and performance.
Procedural abstraction
The practice of simplifying complex processes by defining a series of steps or functions that can be reused without needing to understand the underlying details, focusing on the 'what' rather than the 'how'.
Procedure interface
Problem decomposition
The process of breaking down a complex problem into smaller, more manageable sub-problems, making it easier to develop solutions and understand the overall structure.
Hierarchy chart
Clarity
The quality of being clear and understandable, which is essential in programming to ensure that code is easy to read, maintain, and debug.
Maintainability
The ease with which a software system can be updated, modified, or enhanced after its initial development, ensuring it remains functional and relevant over time.
block-structured language
A programming language that uses blocks to define the structure and flow of code, allowing for better organization and readability.
Parallel computing
A type of computation in which many calculations or processes are carried out simultaneously, leveraging multiple processors or computers to solve complex problems more efficiently.
Concurrent processing
A method of computing where multiple tasks are executed during overlapping time periods, allowing for efficient use of resources and improved system performance.
Benefits of concurrent processing
Includes improved resource utilization, increased system throughput, and enhanced responsiveness in applications but programs may take longer to complete if not managed properly due to potential contention for resources.
Benefits of parallel processing
Includes faster computation, improved performance for large tasks, and better resource allocation across multiple processors but may require complex programming and synchronization.
Computable problem
A problem for which an algorithm can be constructed to provide a solution in a finite amount of time.
Enumeration
A systematic listing of all possible values or configurations of a problem (exhaustive search), often used in algorithms to ensure completeness. Can be inefficient.
Top down design
A problem-solving approach that breaks down a system into smaller, manageable components, starting from the highest level of abstraction and progressively refining details.
Problem abstraction
The process of simplifying complex systems by focusing on the essential features while ignoring irrelevant details to reduce to a problem that has already been solved.
Graph unfolding
A technique used in computational thinking to represent complex graphs in a simplified manner, making it easier to analyze and understand their structure and properties.
Automation
Creating and putting into action models to solve problems.
Visualisation
The process of representing data or information in a visual context, such as charts or graphs, to make it easier to understand and analyze.
Backtracking
A problem-solving algorithm that incrementally builds candidates for solutions and abandons candidates as soon as it determines that they cannot lead to a valid solution.
Data mining
The practice of examining large datasets to uncover patterns, correlations, or trends that can inform decision-making and predictions.
Big data
Extremely large datasets that require advanced tools and techniques to store, process, and analyze, often to reveal insights and trends.
Intractable problems
Problems for which no efficient solution algorithm exists, making them impractical to solve in a reasonable time frame.
Travelling Salesman problem
A classic optimization problem that seeks the shortest possible route for a salesman to visit each city exactly once and return to the origin city. An example of an intractable problem
Brute-force method
A straightforward approach to solving problems by systematically enumerating all possible solutions and selecting the best one, often used for small datasets.
Time complexity
A computational measure that describes the amount of time an algorithm takes to complete as a function of the length of the input.
Heuristic method
A problem-solving approach that uses practical techniques or shortcuts to produce solutions that may not be optimal but are sufficient for reaching immediate goals. Heuristics are often used in complex problems where finding an exact solution is impractical.
Performance modelling
The process of creating abstract representations of a system's performance metrics to analyze and predict its behavior under various conditions. This technique helps in understanding resource usage and system efficiency.
Pipelining
A technique of splitting tasks into smaller parts and overlapping the processing of each part of the task. Commonly used in the fetch-decode-execute cycle of computer processors to improve instruction throughput and overall performance.