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.
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
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
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