Algorithms are at the epicentre of computer science—thinking computationally is forming the habit of algorithmic thinking. In order for a procedure to qualify as an algorithm, it must possess the following attributes: finiteness, definiteness, effectiveness, and having one or more inputs and one or more outputs. Algorithms are determinate, abstract artifacts, and procedural knowledge. ‘Algorithmic thinking’ explains the process of designing algorithms, the ‘goodness’ of algorithms as utilitarian artefacts, and why the aesthetics of algorithms matter. The performance of algorithms can be estimated in terms of time (or space) complexity. A computational problem is intractable if all known algorithms to solve the problem are of at least exponential time complexity.