Feynlabs – Using the Raspberry Pi to teach Computer Science












This will be a long three part blog about how we are using the Raspberry Pi in the Feynlabs program as a way to introduce Computer science to kids

The Raspberry Pi is a platform – and as it’s creators have always indicated – it is the community which will drive it’s direction and evolution. Feynlabs is using the Raspberry Pi to teach the concepts of programming languages to kids and in doing so, creating a new way in which deep principles of Computer Science can be introduced to kids.

Feynlabs is the first initiative to teach the concepts of programming languages to kids  (as opposed to a specific programming language). By abstracting the common elements of programming languages, our aim is to rapidly learn any programming language

To get a background of my thinking, you should have a look at these three articles on which I will build upon

1) Five Principles to Radically Transform How We Teach Computer Programming – part One

2) Five Principles to Radically Transform How We Teach Computer Programming – part Two

3) How will next generation computing labs in schools look like?

As you can imagine, to achieve our goals of teaching the Concepts of Programming Languages to kids – we have to explore deep into Computer Science.

So, in this set of three articles, I will cover

a)      An outline of Computer Science for kids

b)      Our approach to teach computer science by abstracting the concepts of programming languages

c)       How we are using the Raspberry Pi in our work to teach the Concepts of Programming Languages

Some more introductory notes:

a)      feynlabs is addressing a unique (not yet addressed) problem – which I can encapsulate as ‘How do we take learners from 0 to 60 fast?’ i.e. accelerate the computer science learning stage so that they don’t get bogged down and can quickly see the ‘vista’ so to speak i.e. the big picture vision’. From a learning standpoint this would be a success because once the participant can see the big picture, they can add their own unique contribution/imagination to learning

b)      From our early trials, we can say that teaching ‘concepts of programming languages’ to kids is a unique experience because you have to start with the abstract (which can be more complex in some ways) – and then move to the concrete and finally move back to the abstract again i.e. move back to concepts. Specifically, our current approach is to start with the concepts (including the question of what is a ‘concept’) – then address the concrete implementation using Raspberry Pi and Python. This allows us to explore many aspects of Computer Science through Pi-face, Pygames etc.

c)       Finally, we move back to the abstract domain by looking at a classification of programming languages and specific implementations in other languages such as Processing, C, Java Script and others.

d)      This approach allows us to do some unique things such as co-relate programming to concrete examples, take a systems led approach etc.

Thus, Feynlabs is creating a set of unique techniques to teach computer science to kids based on

a)      Teaching the concepts of Programming Languages to kids and

b)      Using the Raspberry Pi and other devices to introduce the ideas we are developing so that the participants understand Computer Science

c)       We will evolve these techniques through the trails we are working with in the community

In this sense, our work through Feynlabs is far more complex than merely teaching programming.

So, in this context, what is computer science?

Here, I am building upon some excellent work in a paper called Computer Science: A curriculum for schools by the Computing at School Working Group endorsed by BCS, Microsoft, Google and Intellect – March 2012. You can read the full paper – Computer Science: A curriculum for schools

I will summarise the key ideas in this paper which we will build upon in the next two parts of this set of articles (emphasis mine)

  • Computer Science is the study of principles and practices that underpin an understanding and modelling of computation, and of their application in the development of computer systems. At its heart lies the notion of computational thinking: a mode of thought that goes well beyond software and hardware, and that provides a framework within which to reason about systems and problems. This mode of thinking is supported and complemented by a substantial body of theoretical and practical knowledge, and by a set of powerful techniques for analysing, modelling and solving problems.
  • Computer Science is deeply concerned with how computers and computer systems work, and how they are designed and programmed.
  • Pupils studying computing gain insight into computational systems of all kinds, whether or not they include computers.
  • Computational thinking influences fields such as biology, chemistry, linguistics, psychology, economics and statistics.
  • It allows us to solve problems, design systems and understand the power and limits of human and machine intelligence.
  • Computer Science is a practical subject, where invention and resourcefulness are encouraged.
  • Computer Science is a discipline. To do this, education aspires primarily to teach disciplines with long-term value, rather than skills with short-term usefulness, although the latter are certainly useful. A “discipline” is characterised by: A body of knowledge, A set of techniques and methods, A way of thinking and working, Longevity:, Independence from specific technologies especially those that have a short shelf-life.
  • Computer Science is a quintessential STEM discipline, sharing attributes with Engineering, Mathematics, Science, and Technology:  It has its own theoretical foundations and mathematical underpinnings, and involves the application of logic and reasoning. It embraces a scientific approach to measurement and experiment. It involves the design, construction, and testing of purposeful artefacts. It requires understanding, appreciation, and application of a wide range of technologies.
  • Computer Science provides pupils with insights into other STEM disciplines, and with skills and knowledge that can be applied to the solution of problems in those disciplines. Although they are invisible and intangible, software systems are among the largest and most complex artefacts ever created by human beings. The marriage between software and hardware that is necessary to realize computer-based systems increases the level of complexity, and the complex web of inter-relationships between different systems increases it yet further. Understanding this complexity and bringing it under control is the central challenge of our discipline.
  • In a world where computer-based systems have become all pervasive, those individuals and societies that are best equipped to meet this challenge will have a competitive edge.
  • Computer Science and Information Technology are complementary, but they are not the same. Computer Science and Information Technology are complementary subjects. Computer Science teaches a pupil how to be an effective author of computational tools (i.e. software), while IT teaches how to be a thoughtful user of those tools. This neat juxtaposition is only part of the truth, because it focuses too narrowly on computers as a technology, and computing is much broader than that. As Dijkstra famously remarked, “Computer Science is no more about computers than astronomy is about telescopes
  • We want our children to understand and play an active role in the digital world that surrounds them, not to be passive consumers of an opaque and mysterious technology. A sound understanding of computing concepts will help them see how to get the best from the systems they use, and how to solve problems when things go wrong. Moreover, citizens able to think in computational terms would be able to understand and rationally argue about issues involving computation, such as software patents, identity theft, genetic engineering, electronic voting systems for elections, and so on. In a world suffused by computation, every school-leaver should have an understanding of computing.
  • A number of key concepts arise repeatedly in computing. They are grouped here under Languages, machines, and computation, Data and representation, Communication and coordination, Abstraction and design. It would not be sensible to teach these concepts as discrete topics in their own right. Rather, they constitute unifying themes that can be used as a way to understand and organise computing knowledge, and are more easily recognised by pupils after they have encountered several concrete examples of the concept in action.
  • Much of the power of computers comes from their ability to store and manipulate very large quantities of data. The way in which this data is stored and manipulated can make enormous differences to the speed, robustness, and security of a computer system. This area of computing includes: How data is represented using bit patterns: including numbers, text, music, pictures. How data is stored and transmitted, including: redundancy, error checking, error correction; data compression and information theory; and encryption. How data is organised, for example, in data structures or in databases. How digital data is used to represent analogue measures, such as temperature, light intensity and sound. How analogue measures are converted to digital values and vice versa and how digital computers may be used to control other devices.
  • Computers are communication devices. They enable human-to-human communication by way of machine-to-machine communication: a mobile phone computes in order to help us communicate. The design and implementation of these communications systems is a recurrent theme in computing:
  • Abstraction is the main mechanism used to deal with complexity and enabling computerisation. Abstraction is both presenting a simplified version through information hiding and making an analysis to identify the essence or essential features.  The process of categorisation or classification that breaks down a complex system into a systematic analysis or representation.
  • Computer systems have a profound impact on the society we live in, and computational thinking offers a new “lens” through which to look at ourselves and our world. The themes here are very open-ended, taking the form of questions that a thoughtful person might debate, rather than answers that a clever person might know. Intelligence and consciousness. The natural world. DNA encodes the sequence of amino acids that make up proteins. Creativity and intellectual property. Games, music, movies, gallery installations and performing arts are all transformed by computing and online experiences would not be possible without it. Should artistic ways of working be integrated with computational thinking?
  • A key challenge in computational thinking is the scale and complexity of the systems we study or build. The main technique used to manage this complexity is abstraction5. The process of abstraction takes many specific forms, such as modelling, decomposing, and generalising. In each case, complexity is dealt with by hiding complicated details behind a simple abstraction, or model, of the situation. Modelling, Decomposing Generalising and classifying
  • Computer Science is more than programming, but programming is an absolutely central process for Computer Science. In an educational context, programming encourages creativity, logical thought, precision and problem-solving, and helps foster the personal, learning and thinking skills required in the modern school curriculum. Every pupil should have repeated opportunities to design, write, run, and debug, executable programs. The ability to understand and explain a program is much more important than the ability to produce working but incomprehensible code.
  • Depending on level, pupils should be able to: Design and write programs that include Sequencing: doing one step after another, o Selection (if-then-else): doing either one thing or another, Repetition (Iterative loops or recursion), Language constructs that support abstraction: wrapping up a computation in a named abstraction, so that it can be re-used. (The most common form of abstraction is the notion of a “procedure” or “function” with parameters.), Some form of interaction with the program’s environment, such as input/output, or event-based programming.
In the next two parts of this article, I will discuss
  • Our approach to teach computer science by abstracting the concepts of programming languages
  •  How we are using the Raspberry Pi in our work to teach the Concepts of Programming Languages

comments and feedback welcome at ajit.jaokar at futuretext.com 

Image source: Raspberry Pi foundation