JavaScript is a popular programming language and introducing it to kids is a great idea and what could be better than 3D graphics?

JavaScript can be an idiosyncratic language and if you are going to teach it properly as a first language you have to either decide that the student is going to learn a non-typical language or you have to restrict what you teach to keep it both simple and general. It is a problem that might put off an academic wanting to teach a pure object-oriented or functional approach - but when you are teaching kids a first language there are other considerations.

Perhaps the most important of these is motivation.

While you can set abstract exercises in a language for students that have made the decision that learning a language is worthwhile - this is not something you can do with kids. You have to demonstrate fairly quickly that this stuff can do things - real things.

So why not put JavaScript into the equation along with Three.js and other libraries to make it easy to create not just 3D graphics but games? This is what this book does and it provides motivation very quickly.

The first chapter introduces the ICE online code editor which makes it possible to start writing code with nothing to install. Even in this initial chapter the reader is writing code that produces some simple shapes and then animates them. Of course there is a lot of boiler plate generated code present in the editor to set the 3D environment up and this might worry any young beginner with a need to understand everything. As long as this isn't a problem then drawing shapes introduces ideas like coordinates and other facts of geometry - but actually not a lot of code ideas.

Chapter 2 goes on to what happens if you make a mistake - basically it's about not panicking when you see a big red X. Chapter 3 gets on with developing the ideas started in Chapter 1 and you create a simple avatar. Admittedly the avatar is just a few spheres arranged appropriately, but at this stage who cares! By the end of the chapter the idea of geometric objects moving together or relative to each other has been established.

The next chapter moves on to dealing with user input. Keyboard events are introduced and now we are starting to use lots of if statements. The if statement is introduced without any fuss and it is so low key that the average read could even miss the fact that they have just learned one of the foundations of programming.

Chapter 5 introduces functions and this is where things could get complicated. It doesn't because the function is just a way of grouping together code so you can reuse it without having to type it all over again. Again the reader could well miss the fact that this is a key idea in programming - does this matter? Probably not.

We quickly move onto a chapter that is all about doing something - moving hands and feet, swinging hands and feet and walking. Chapter 7 gets back to JavaScript fundamentals. This is a bit technical and could be off-putting, even though it is introduced in a friendly chatty way. If you aren't hooked by now enough to get through this chapter then you probably aren't going to get programming.

If you make it to Chapter 8 then you are probably going to, if not necessarily make it to the end of the book, master programming. The majority of the remainder of the book is about 3D graphics techniques - geometry, animation, collisions and so on - but of course in going through all of this you are learning how to code.

it is not until Chapter 17 does the book return to a clearly JavaScript related topic - objects. A sort introduction to the mechanics of creating and object in JavaScript, which of course is not much like how you create objects in any other language.

After Chapter 17 the book cruises to its finale at Chapter 21 through all sorts of games and game facilities. Along the way it covers a lot of programming ideas and a lot of 3D graphics techniques.

This is a book that doesn't teach you to program, instead it provides things that you want to do that need you to know how to program and it explains those things as it goes. Sometimes it gets the level wrong and you think - "why explain this here" or it doesn't go deep enough at a point where you think that this would be a good place to get some theory across. You have to put up with this as this isn't a theory-oriented book that goes through the standard motions of learning a language.

It is also as much a book about 3D programming as it is about JavaScript. A lot of the code is just object creation and customization. As a result the reader doesn't get to program many basic algorithms and when they move on they might get a bit lost. But armed with the confidence that they had programmed complete and complicated games they probably would persevere and master the difficulty.

You could also use the book as an introduction to 3D programming with Three.js even if you know JavaScript. What it doesn't do is teach you JavaScript to a level where you could go out and build a web app or a dynamic web site. Its purpose is to get the reader interested, motivated and confident that they can do almost anything with JavaScript.

Recommended as long as you are not looking for an academically correct introduction to a programming language.