New book – concepts of programming languages for kids – by Ajit Jaokar and Aditya Jaokar

We now have a vibrant facebook page for this book. Please join the community by LIKING our page http://www.facebook.com/ConceptsOfProgrammingLanguagesForKids

 

As a company, our goal has always been to make a difference.  The vision of OpenGardens is a case in point. More recently, I have been thinking of expanding our vision beyond technology for business and I have been working on this concept for some time.

This blog is based on a presentation for a new book written by me and my eight year old son Aditya. (Concepts of programming languages for kids - By Ajit Jaokar and Aditya Jaokar) – It will be a book but much more ie a new teaching technique for the concepts of programming languages  

It is based on a technique I used to teach him computer programming which I elaborated in a paper I wrote for  a leading education technology journal(see below).  I love the ethos of teaching computer programming in a completely different way.  I presented these ideas to education technologists in Europe and America and to other programmers who I respect.

We welcome your comments at ajit.jaokar at futuretext.com

A portion of all earnings will go to autism charities.

 

Image source: Nasa

I once knew a Nasa scientist who said very poignantly that ‘In a world of division between humanity, Space is one of the few things which unites us all .. ‘  - I think so does technology – especially when taught to young people

However, the way computer programming is taught could be changed and improved in the Internet age. I am reminded of this excellent quote from  Richard Feynman

“You can know the name of a bird in all the languages of the world, but when you’re finished, you’ll know absolutely nothing whatever about the bird… So let’s look at the bird and see what its doing– that’s what counts. I learned very early the difference between knowing the name of something and knowing something.”Richard Feynman

 

The ideas here are presented in a leading educational publication as a paper.

Educational Technology Magazine is the world’s leading periodical publication covering the entire field of educational technology, an area pioneered by the magazine’s editors in the early 1960s. Read by leaders in more than one hundred countries, the magazine has been at the forefront of every important new trend in the development of the field throughout the past five decades.  Its list of published authors is a virtual “who’s who” of the  leading personalities and authorities from all over the world active in educational technology research, development, and application

Here in England, they say that Programming is the new Latin (to be potentially taught to all students as Latin was once). There is some merit to this because programming teaches you how to think (as Latin also taught you a structured way of thinking)

But we risk making the same mistakes ..

We risk teaching children merely ‘how to program’ instead of teaching kids how to think.  And the two are not the same. To paraphrase Richard Feynman: we risk knowing the ‘name of the bird’ in many languages but risk understanding the bird itself ..

 

Concepts of programming languages is a set of techniques that teaches kids how to focus on the thought process behind programming languages  ..  i.e. to think ..

Broadly, there are two contrasting approaches for learning – Constructivism which implies inquiry based teaching vs. direct instruction where the teacher explicitly guides the student – the  Logo programming language used constructivist ideas.


Aditya Jaokar

The problem we ended up addressing : Re applying some of the original ideas of constructivism (from the 1960s) to a different problem – namely how to use constructivism to teach concepts of any programming language to kids(as opposed to teaching kids a specific language).

Programming languages are not new and in fact they predate computers because programming was used in devices such as Jacquard looms  (Jacquard looms used punch cards –which is a form of programming).

A programming language provides a mechanism for defining two things: Structured pieces of data and also the ability to perform operations on that data. Thus, a programming language is simply a way to communicate a set of instructions to a machine. In most cases, but not all cases, the ‘machine’ is a computer.

Why constructivism suits programming ..

A constructivist led approach is suited for learning concepts of programming for the following reasons:

-  Programming is by nature constructivist i.e.it is designed to be an enabler – and in doing so, programming is designed to be ‘invisible’ because programming is mechanism to solve real-life problems. However, in teaching programming, we divorce it from real life problems. An exploratory approach suits learning since it can often be used to relate to real life problems

-  A programmer needs to adopt the mind-set of an engineer i.e. the engineer starts with a set of tools and materials but every problem she solves is different. No two bridges are exactly the same. Thus, the ‘minimal guidance’ approach of constructivism are suited to programming because it encourages multiple ways of solving a problem

-  Finally, the Web and the Internet lend themselves to a constructivist mode of teaching since networks lend themselves to exploration

These ideas(constructivism) could be be re-applied in the Internet age by relating them to more conventional applications.  For instance, many conventional programming languages are used in the programming of the MARS Rover and it is easy to relate ideas of programming to concrete examples like the MARS Rover

Similarly, kids understand Javascript .. simply because its ‘under the hood’ for any web page and is so easy to learn

 

JavaScript is ‘real’ to an eight year old who is familiar with the Web (and many eight year olds are!).

Here are some techniques we followed … Note that the information is freely available, but we differ from previous approaches by focusing on teaching the concepts of programming languages 

1)  Teach more than one real world languages:  Why confine to only one language? We expanded our study to more than one language and in the end we decided to focus on four languages – JavaScript, C, Scratch from MIT and Raspberry Pi . Each language has different characteristics but they are all real languages used to solve real problems.

2) Combine abstractions with non-abstractions: An abstraction is a concept or an idea not associated with a specific instance. Most people struggle with programming and mathematics because both these disciplines involve abstractions. In practise, some abstractions which traditionally are taught later on are easier to understand upfront – for example Arrays. Kids understand Arrays because they are visual and are easier to relate to (for example an array can be a list). Thus, by teaching some elements like arrays earlier, programming becomes easier.

3) Teach in two stages and don’t get bogged down in syntax :  Programming is taught in a liner way. Traditionally, you start with the ‘hello world’ program. Then you learn specific statements like the IF statement, the FOR loop etc.  This approach has the disadvantage that kids get bogged down with syntax but soon get bored because they are not solving real problems. We teach a lot faster. We teach programming in two stages. In the first stage, we focus on the basic syntax for the instruction and in the second stage, we focus on the variants of the syntax. For example, to teach the idea of a LOOP in the first stage, we explain the loop concept and in the second stage, we explain different types of loops (FOR loop, WHILE loop, FOR .. IN loop etc). This means, we approach real problems a lot faster

 

So, this will be an ongoing effort over this year. We are already working with partners and friends as we expand the idea . We welcome comments and feedback at ajit.jaokar at futuretext.com

Comments

  1. Andrew says:

    “we decided to focus on four languages – JavaScript, C, Scratch from MIT and Raspberry Pi” << The Raspberry Pi is a device not a language.

  2. ajit says:

    well spotted :) yes. agree .. but you get the picture ie its the ecosystem I wanted to teach him

  3. Andrew says:

    I see where you are coming from. I think specialised frameworks and environments for languages so you can use them as tools in education or for fun are a great way to move away from scratch. For example Sage a maths environment written in Python, Greenfoot for Java games and Kojo based on Scala which can do all sorts.

    All allow you to learn problem solving , solve problems and allow you to discover languages without having to have the full knowledge of the language to begin with. The only issue I have with these environments is that between them they all use different languages which isn’t ideal for a learner, however, people have started to port some of them.

    I agree with Scratch as a starting point, however, personally I would go down the Python route before moving on to other languages.

  4. ajit says:

    thanks! yes good feedback (Kojo etc). Our first starting point is Javascript (and it will be the main theme overall ) the reason is – thats what I started teaching my son – but more interestingly – it is available easily (ex on view source).
    I am happy to keep youposted. send me an email at ajit.jaokar at futuretext.com if you want to know more kind rgds Ajit

  5. Aditya says:

    If anyboy has been wondering who is Aditya jaokar well that is me

  6. dorotheo says:

    Yes finally I can help my kids to learn computer programming at early age. I never had the chance they are going to have like you can also use my webpage to send free text at http://www.textme4free.com/