Additional Information
Book Details
Abstract
Computational thinking is a timeless, transferable skill that enables you to think more clearly and logically, as well as a way to solve specific problems.
Beginning with the core ideas of computational thinking, with this book you'll build up an understanding of the practical problem-solving approach and explore how computational thinking aids good practice in programming, complete with a full guided example.
Computational thinking (CT) is a timeless, transferable skill that enables you to think more clearly and logically, as well as a way to solve specific problems. With this book you'll learn to apply computational thinking in the context of software development to give you a head start on the road to becoming an experienced and effective programmer.
Beginning with the core ideas of computational thinking, with this book you'll build up an understanding of the practical problem-solving approach and explore how computational thinking aids good practice in programming, complete with a full guided example.
'A ‘must-read’ for students embarking on their first major projects, and any teacher stepping up to the challenge of teaching Computing at school. This is not just a book about programming, more a template for teaching. Karl Beecher speaks in plain English. Incisive insight and practical advice, standing independent of the Python exemplars used, predicated as it is on a holistic understanding of the subject terrain.'
Roger Davies
'This book will prove an excellent companion to more general texts on Computing, especially for teachers who are new to the subject. And with exercises at the end of each chapter, there is much to challenge students also. Highly recommended.'
Terry Freedman
Karl Beecher is an author and software developer. Before moving into academia, Karl worked as a software engineer and in 2009, he was awarded a PhD in Computer Science. He worked at the Free University of Berlin before returning to industry to co-found Endocode, an IT services firm. In 2014 Karl published his first book, Brown Dogs and Barbers.
'A scholarly book albeit written from a pragmatic perspective distilling the knowledge and expertise of an experienced software developer into a form that is accessible for beginners. It's engaging exercises and comprehensive references make it an invaluable learning resource. I would recommend it to anyone who wishes to gain an understanding of computational thinking and best practice in modern software development.'
Professor Cornelia Boldyreff
'I really enjoyed this book - it bridges the gap between the very practical, but perhaps narrow, field of computer programming with the real world problems that computer scientists might need to solve. The issue with encouraging young people to learn 'coding' is that they often struggle to understand how and when to use specific concepts and ideas. The underlying principles and real world applications are essential, and much harder to put across, than remembering the syntax for an IF statement. The discussions are presented in a readable format that would be suitable for bright GCSE students and should be essential reading for all A Level computer scientists.
With the shift in focus at GCSE and A Level alike, from 'programming' to 'computational thinking', explanations and examples of abstraction, decomposition and generalisation, along with modelling, logic and efficiency are both engaging and useful.'
Mark Clarkson
'Computational Thinking is a sprint through the theoretical underpinnings of computation through to their application and the creation of software. The thirteen chapters start with an explanation of what is computational thinking, move through logical and algorithmic thinking, abstraction and modelling, to then focus on how to apply these concepts. The middle set of chapters cover how to create software with a focus on object-oriented solutions with a relatively short discussion on testing. Python is used as the programming language to demonstrate the use of the various techniques introduced in the early chapters but it would be straight forward to convert the examples to other similar languages such as Java, C#, etc. The final chapter provides a guided example based on the creation of a computer-controlled home automation system. Each chapter has a set of exercises to work through and model answers for these are supplied in an appendix.
This is a very good overview of a very large field. While all of the topics are deserving of their own book the strength of this book is the explanation and demonstration of their close relationships. This book is an excellent complement to the many books on the Raspberry Pi and Python programming because it starts to explain some of the theoretical underpinnings. The seasoned software developer should not be discouraged by the beginner’s guide sub-title as this is also a good refresher on some of the basics.'
Colin Smythe
Table of Contents
Section Title | Page | Action | Price |
---|---|---|---|
Cover | Cover | ||
Coptright Page | vi | ||
CONTENTS | vii | ||
LIST OF FIGURES AND TABLES | xi | ||
AUTHOR | xiv | ||
ACKNOWLEDGEMENTS | xv | ||
GLOSSARY | xvi | ||
INTRODUCTION: WHY STUDY COMPUTATIONAL THINKING? | 1 | ||
PART I COMPUTATIONAL THINKING | 5 | ||
1 WHAT IS COMPUTATIONAL THINKING? | 7 | ||
OBJECTIVES | 7 | ||
WHAT IS COMPUTATIONAL THINKING? | 7 | ||
HOW IS COMPUTATIONAL THINKING USED? | 9 | ||
DISCLAIMERS | 11 | ||
SUMMARY | 13 | ||
EXERCISES | 13 | ||
2 LOGICAL AND ALGORITHMIC THINKING | 14 | ||
OBJECTIVES | 14 | ||
APPROACH | 14 | ||
LOGICAL THINKING | 15 | ||
ALGORITHMIC THINKING | 25 | ||
‘GOTCHAS’ | 30 | ||
SUMMARY | 36 | ||
EXERCISES | 37 | ||
3 PROBLEM-SOLVING AND DECOMPOSITION | 39 | ||
OBJECTIVES | 39 | ||
WHERE TO START | 39 | ||
DEFINING THE PROBLEM | 40 | ||
DEVISING A SOLUTION: SOMETHING TO KEEP IN MIND | 42 | ||
DECOMPOSITION | 43 | ||
OTHER EFFECTIVE STRATEGIES | 47 | ||
PATTERNS AND GENERALISATION | 50 | ||
SUMMARY | 54 | ||
EXERCISES | 55 | ||
4 ABSTRACTION AND MODELLING | 57 | ||
OBJECTIVES | 57 | ||
ABSTRACTION | 57 | ||
MODELLING | 64 | ||
SUMMARY | 74 | ||
EXERCISES | 74 | ||
5 ANTICIPATING AND DEALING WITH ERRORS | 76 | ||
OBJECTIVES | 76 | ||
COMING TO TERMS WITH BUGS | 76 | ||
DESIGNING OUT THE BUGS | 77 | ||
MITIGATING ERRORS | 80 | ||
TESTING | 82 | ||
DEBUGGING | 85 | ||
YOU CAN’T HAVE EVERYTHING: DECIDING WHICH ERRORS TO FIX | 88 | ||
SUMMARY | 90 | ||
EXERCISES | 90 | ||
6 EVALUATING A SOLUTION | 92 | ||
OBJECTIVES | 92 | ||
SOLUTION EVALUATION | 92 | ||
IS IT CORRECT? | 93 | ||
IS IT EFFICIENT? | 94 | ||
IS IT ELEGANT? | 97 | ||
IS IT USABLE? | 99 | ||
TRADE-OFFS | 101 | ||
SUMMARY | 104 | ||
EXERCISES | 105 | ||
PART II COMPUTATIONAL THINKING IN SOFTWARE DEVELOPMENT | 107 | ||
7 TUTORIAL FOR PYTHON BEGINNERS | 109 | ||
OBJECTIVES | 109 | ||
INTRODUCING PYTHON | 109 | ||
FIRST STEPS | 109 | ||
BASIC TYPES | 110 | ||
BASIC OPERATIONS | 111 | ||
FUNCTIONS | 112 | ||
COMMENTS | 113 | ||
SUMMARY | 113 | ||
EXERCISES | 113 | ||
8 EFFECTIVE BUILDING BLOCKS | 115 | ||
OBJECTIVES | 115 | ||
LOGIC | 115 | ||
BASIC ALGORITHMIC CONSTRUCTS | 116 | ||
PROGRAM STATE | 124 | ||
MORE ADVANCED CONSTRUCTS | 131 | ||
SUMMARY | 137 | ||
EXERCISES | 138 | ||
9 ORGANISING YOUR CODE | 139 | ||
OBJECTIVES | 139 | ||
RECAP | 139 | ||
INTRODUCING TKINTER | 140 | ||
SEPARATING CONCERNS | 141 | ||
DEFINING INFORMATION SCOPE | 145 | ||
USING MODULES | 150 | ||
PACKAGES | 157 | ||
SUMMARY | 159 | ||
EXERCISES | 160 | ||
10 USING ABSTRACTIONS AND PATTERNS | 162 | ||
OBJECTIVES | 162 | ||
FINDING PATTERNS IN PROGRAMS | 162 | ||
ABSTRACTIONS IN PROGRAMMING | 164 | ||
BUILT-IN TYPES | 165 | ||
CREATING YOUR OWN TYPES | 166 | ||
READY-MADE PATTERNS | 175 | ||
SUMMARY | 182 | ||
EXERCISES | 182 | ||
11 EFFECTIVE MODELLING | 184 | ||
OBJECTIVES | 184 | ||
RECAP | 184 | ||
ENTITIES | 186 | ||
RELATIONSHIPS | 189 | ||
PROCESSES | 194 | ||
USAGE | 196 | ||
GENERAL ADVICE | 199 | ||
SUMMARY | 201 | ||
EXERCISES | 201 | ||
12 TESTING AND EVALUATING PROGRAMS | 203 | ||
OBJECTIVES | 203 | ||
INTRODUCTION TO PROGRAM TESTING AND EVALUATION | 203 | ||
ANTICIPATING BUGS | 203 | ||
VERIFICATION AND VALIDATION | 209 | ||
TESTING THE PARTS | 210 | ||
TESTING THE WHOLE | 214 | ||
DEBUGGING | 219 | ||
SUMMARY | 225 | ||
EXERCISES | 225 | ||
13 A GUIDED EXAMPLE | 227 | ||
PROBLEM DEFINITION | 227 | ||
PROBLEM DECOMPOSITION | 228 | ||
FINDING PATTERNS | 229 | ||
FORM GENERALISATIONS AND ABSTRACTIONS | 232 | ||
MODELS | 233 | ||
ANNOTATED SOURCE CODE | 237 | ||
TESTING | 243 | ||
OPPORTUNITIES FOR IMPROVEMENT | 246 | ||
APPENDIX A REFERENCE LISTS AND TABLES | 247 | ||
ORDER OF OPERATOR PRECEDENCE | 247 | ||
USABILITY HEURISTICS | 248 | ||
MUTABLE AND IMMUTABLE TYPES IN PYTHON | 248 | ||
APPENDIX B ANSWERS TO EXERCISES | 249 | ||
NOTES | 276 | ||
REFERENCES | 280 | ||
INDEX | 284 | ||
Back Cover | 289 |