/computational-thinking

This repo presents code examples of applied computational thinking for developers.

Computational Thinking for Developers

It’s been outlined in multiple guides including a Communications of the ACM essay by Jeannette Wing and several other computer scientists that computational thinking is a way of solving problems where a solution (of which there may be many), can be executed by a computer.

Computational thinking for developers is the thought process that you run through even before you start writing code. At a high-level each of its principles will guide your software design and development from phase-to-phase until you’ve created a viable, real-world solution to a problem. And here it’s important to remember that the creativity that one can explore in software is only limited by creativity of human thought.

Now, whether you’re building a web-based solution, an iOS application, deploying containers or even managing libraries, it’s generally recommended that you apply these principles which some of you may already be familiar with, that is decomposition, pattern recognition, abstraction and algorithmic thinking.

Combined, these four principles will enable you to determine how good you are getting at writing and testing code. To illustrate how each principle is applicable, the repo contains code examples of each principle as it can be applied in your code writing and testing.

Decomposition

This is a continual process of breaking down the complexities of developing and delivering each software you build by creating smaller, more manageable problems using exercises like user-story decomposition, code decomposition and product release decomposition. You can find examples of code decomposition here.

Pattern Recognition

This is the mapping of similarities and differences among decomposed problems. It helps with finding commonalities of repetition which is beneficial for making predicitions and working efficiently and building a strong foundation for designing algorithms.

The best reflection of pattern recogntiion is in the use of a Nested For Loop to allow rapid data sorting and insertion. You can find examples of Nested for Loops here.

Abstraction

This is the splitting of one function into multiple interconnected functions. Apply abstraction skills when working in collaborative long-term projects to ensure expressiveness of the code you're writing. Abstraction is helpful when designing code:

  • to determine which processes happen when and where, or
  • to identify the processes that depend on each others.

You can find examples of code abstraction here.

Algorithmic Thinking

This is a combination of decomposition, pattern recognition and abstraction to design algorithms that can determine the appropriate steps to take and organizing them into a series of instructions for solving a problem correclty.

Each algorith, typically has a starting point, a finishing point and a set of well-defined instructions in between. You can find examples of beginner friendly algorithms here.