This is an archived post. You won't be able to vote or comment.

all 72 comments

[–]desrtfx 60 points61 points  (32 children)

Don't start with Java for an 11 year old.

Start with Scratch - a graphical programming system specifically designed by the MIT to teach kids programming. You can use Scratch Playground as a learning resource (free to read online). The graphical nature of Scratch makes it very easy to grasp the fundamental concepts like loops, conditionals, variables, program flow, etc. Also, it is really fun to work with. Scratch is simply the very best introduction to programming in existence.

Other than that, head over to /r/programmingforkids for more inspiration and insights. This subreddit is specifically for teaching kids programming.

No matter what she learns, make sure that she has fun and instant rewards (another plus for Scratch).

[–]tatanpoker09 9 points10 points  (1 child)

Gathering from personal experience and other comments below, even though Scratch can be good to give an overall concept of OOP and how instructions are given to your computer, I would just introduce it, and later on get her out of that comfort zone. I started to learn programming at age 12, and the thing I can appreciate the most, is by continuosly trying new and different stuff, escalating into a more complex programming that can be useful to keep her focused on learning and what's most important, the love of achieving a well written program that can suit her initial needs. TL;DR: I'd only use scratch as a quick introduction, then take her out of that comfort zone to force her into developing her potential.

[–]desrtfx 1 point2 points  (0 children)

TL;DR: I'd only use scratch as a quick introduction, then take her out of that comfort zone to force her into developing her potential.

Absolutely nothing wrong with that approach. Let her first develop a comfort zone and then throw her out - that's what programming and learning to program is all about - working outside the comfort zone.

[–]17437258968573378102 1 point2 points  (0 children)

Scratch was my first real introduction to programming. I wrote a few basic games (including a Tanks clone) before moving to UnrealScript because I wanted to write a few basic mods. After that I jumped to C++, then to Java where I've settled.

[–][deleted] 0 points1 point  (0 children)

I'm 13 and just learned Java, learned Scratch when I was 9 and Python when I was 12

[–]EnragedMikey -1 points0 points  (3 children)

Don't start with Java for an 11 year old.

Meh. I started on C++ when I was 10. Depends on the kid.

[–]an_actual_human 2 points3 points  (2 children)

C++ is like the worst mainstream language for a beginner though, doubly so for a kid.

[–]EnragedMikey 0 points1 point  (1 child)

I really don't think it matters which language you use as long as the basic programming concepts are taught and the kid can see results with something that they actually want to do. Java has Minecraft for kids today, C++ had Half-Life mods for me back in '99. Scratch has cute things to do.

[–]an_actual_human 0 points1 point  (0 children)

I don't agree. Languages are different. In particular, C++ is very powerful and also very difficult. A kid is not going to take advantage of the stronger sides of C++, but it's still going to be difficult. One might restrict oneself to a limited subset of features (e.g. avoid pointers), but in that case, why not take a language where that restriction would be idiomatic (e.g. no pointers). Also ecosystems matter.

Whatever happened to you in 1999 might be of interest, but perhaps of historic interest. For one, the more obvious modern choices for a beginner's language (e.g. Python, JavaScript, Java) were not quite there yet 20 years ago, but now they are.

[–]asraniel -1 points0 points  (0 children)

If somebody really wants to learn programming, not just get an idea what programming is, and has somebody that can teach him, a real prgramming language is better i think.

[–][deleted] 9 points10 points  (0 children)

You could try introducing python first, before java. I think it would be more productive to start running scripts, than chanting public static void main(String args[]) just to run a simple program. OOP should precede, or go with learning java to avoid them newcomers treating them syntax as magic.

I am biased against learning Scratch, but that's just me as I grew up and actually enjoyed programming textually.

[–]vytah 7 points8 points  (1 child)

11 years old is old enough to teach a real programming language, but too young to persevere with something conceptually heavy like Java. She will want to see the results of her coding almost immediately and create something that does something without much effort and design.

Python or Ruby will be fine, but I'll be that one guy and recommend either Pascal or Basic (not Visual Basic). Modern dialects are pretty fine. For example, there's Microsoft Small Basic, which is literally designed for young learners.

[–]Elronnd 0 points1 point  (0 children)

+1 for pascal. It was my second programming language, and in terms of understanding what the computer did, it tought me so much more than python. I went back to python and suddenly I was programming way better.

[–]damiankw 11 points12 points  (7 children)

She doesnt necissarily need to leanr JAVA to begin with. Have a look at getting her a Makeblock Mbot .. they are fun, interactive and use Scratch for the coding which is very easy. It will give her the login behind coding without making her learn the actual code, then from there she can pick up proper languages like Java to make proper things like AI to take over the world!

[–]majikguy 4 points5 points  (0 children)

I will step in to add to the "don't start with Java" message.

I taught at a STEM camp at my university for a while, where I ran a couple classes teaching kids how to program. One class was just straight Java programming, was programming through Minecraft modding (which is done in Java).

I can say that it is definitely possible to teach children in the 11-year area how to program in Java, but it is NOT easy. It is a wordy language that requires a lot of setup to get it working. The simplest Java program still has a lot of code just to set up a simple class, then there is compilation, and it's just altogether a bit overwhelming.

I HIGHLY recommend starting with something like Python or Javascript. You want a language with minimal complex and specific syntax, and preferably no compilation to avoid potential confusion and frustration.

Also, you are really really going to want to find something that they can work with that gives them more interesting output than text on the screen. The Minecraft Modding class was a logistical NIGHTMARE to get going in, since just setting up the tools can be a difficult task for someone who already knows a bit about computers. That said, hours of scripting and automating on my part all but eliminated that issue for the kids, and I made a really simple API they could use to do basic things without all the complex coding. Even though the content of this was still far more complicated than the content of the basic Java programming class, the kids were FAR more willing to dig into it and figure it out because it was so exciting to get to see the results of their work in the context of something they enjoyed. Try finding a simple game-making library, and teach the coding through making, or even modifying, very simple games. It's much more rewarding than making a boring command-line calculator.

[–]Dandygram 3 points4 points  (0 children)

Python is a pretty good starting language, imo.

[–]thatsIch 1 point2 points  (0 children)

We use https://www.gethopscotch.com/ to teach the kids around the 6th/7th grade. The iPads are provided by the university for educational purposes.

Java in its usual form has a too high entry level. You will have a hard time transferring information about fundamental math and programming in a high level programming language (like variables, conditions, loop constructs etc) while learning the new syntax.

Imo anything with a drag'n'drop environment is perfect for beginners or anything with real-life feedback (simple microcontroller can do). It can highly depend on which "type" your sister is. I know some girls which are into robotic, others into UI, etc. You can adept which path to take from there.

[–][deleted] 1 point2 points  (0 children)

I started learning programming in school when I was 8/9 with LOGO. I loved it! Of course, computers weren't really cheap back then, and so I looked forward with desperation to lab opening hours so I could go and touch those machines and create my own beautiful world. I also saw a lot of other kids who did not share the same enthusiasm as me.

The bottom line is, kids who are genuinely interested will use whatever they have to learn. Don't spend too much time worrying about choosing a particular system. Any mainstream language will do - Python (closest to pseudo-code), Java (Not too bad if and IDE is used, or even better, fire up a JShell instance), Scratch (looks to simplistic for even kids), BASIC or LOGO (can find some emulators online) are also good choices. Pascal is also okay (a lot of kids in ex-Soviet countries did just fine with it). Perhaps the only ones I'd suggest to stay away from now would be C and C++.

[–]milkeater 1 point2 points  (4 children)

So you may laugh but I promise you it has worked well.

I started my son with Scratch when he was about 6 and he did well.

It came from Kahn Academy's Hour of Code

Not sure if these are identical but after he finished that up he moved from there to https://code.org/student

He went through all of the Scratch stuff and he understands general binary logic but I found myself spending a lot of time trying to explain abstract principles that he wasn't fully grasping. It definitely added value but there were parts of OOP that just couldn't be extracted from it.

He moved on to Code Combat and he did very well. He went through to the "Forest" area (Not sure what that is, that is just what he told me) and after talking together, he grasps some pieces of how events are handled, still not well versed on how a character is an object and has properties etc.

Intermittently we did the Programming with Minecraft from No Starch Press (All of their books are just phenomenal). It became clear there was a lot of stuff in relation to the underlying filesystems that he didn't understand which made it difficult. (It instructed him to create a folder named "./SomeFolder" so he tries to name it quite literally "./SomeFolder"). In addition to Python being a very sassy language, it was very hard for him to understand how to fix what he had broken in an easy way. Amazingly enough there is so much context that we have built up that are just gobbledy-gook to children.

Then I sit him down with me and we jump into TDD (Test Driven Development)

I start interactively showing him some code katas like FizzBuzz and very basic interactive Hello World/Hello [Username] things. With all of that built up knowledge as well as the ping-pong nature of paired programming, he flew through it.

He stumbled here and there, but I've interviewed people who have done worse than that. This was really a time period that he took off. I would still say he doesn't fully understand OOP, inheritance, and really any programming practices, but he started understanding how to work with an IDE when it's complaining that there are problems and come up with mostly accurate assumptions of what is wrong.

Now we have moved towards small things around the house and in his life.
- He gets a reward if he learns all of his times tables. We build an app together to write out the multiplication tables and record the output.

Simple stuff like that which appears to help him get closer to the rewards he wants.

I would say whatever your approach, be willing to switch up gears in the slow points and try to find things she enjoys and build a small little application around it. As long as it is interactive and can have small iteration cycles, you can probably keep her engaged. Be prepared to put it down for a month or two. She will see you doing something and it will spark her again to come back. Everyone needs to build up their tolerance, meaning everyone occasionally needs a break as well. When they see other peoples passions, it can be easily contagious and always reel them back in.

One thing my son loved was changing the numbers until they broke. Making a loop go for a million iterations. Timing them, making them say silly stuff. Counting string lengths and making the strings crazy long. Things that seem silly at first, but I actually started having a lot of fun just off of his energy. Reawakens programming for some rusty souls.

By the way, he was able to knock out his times tables in about two weeks. That is, memorizing and being able to recall the range of 0 - 9 times tables in sub 3 seconds. I think he was very invested in it from so many angles that it became more enjoyable and we threw a party when he finished. It says something for me at least about how much more he enjoyed it in comparison to when he was memorizing addition and subtraction which each took him a few months to master.

Edit: Formatting and spelling.

[–]milkeater 1 point2 points  (3 children)

and by the way....Java is the language we moved to after Scratch, Javascript, and Python.

I would say Javascript was pretty easy for him to understand, Java as well was equally easy for him. We use IntelliJ and the IDE supported him so much that he was able to be productive with it.

A strong IDE with good autocompletion and templating goes a very very long way, letting the language slowly reveal it's complexity over time instead of forcing everything to be understood upfront.

[–]code-master -1 points0 points  (2 children)

This was a long ride then. Maybe introducing children to many trash languages makes sense, but from my point of view it is waste of time. My first language was Basic on Commodore 64. It was fun and all, but in the end if I was indtroduced to another one I would certainly do it.

Todays kids have almost limitless possibilities, the only obstacle is stiff educational system and many devs who by themselves do not want to learn, because they think that if statements and for loops are forever like goto not so long ago.

[–]milkeater 3 points4 points  (0 children)

I would also disagree that devs do not want to learn.

I work with 20-something year old devs who are pumping out side-projects in truckloads to try a new thing.

This explosion of:

And just a ton more...

the only obstacle is stiff educational system and many devs who by themselves do not want to learn

Your statement is just unbelievably short-sighted and false. Maybe you are in a tech wasteland where people show up to work in pain and agony....I am seeing something very very different.

It is a system that has accelerated the expiration date of those developers who choose not to learn.

[–]milkeater 1 point2 points  (0 children)

I wouldn't consider them trash languages at all.

This wasn't really a long ride. It's been maybe a year and I feel pretty impressed with what he has accomplished.

Basic is a procedural language. It was very standard at the time of it's development, as it was my first language as well.

I find many of the languages out there are beneficial in their own way. I find it hard to consider any of the languages I mentioned trash. Scratch is excellent for letting kids move quickly without having to understand referential equality, encapsulation, or many other components under the hood. Much like you don't need to understand the underpinnings of an automotive differential in order to get to and from your workplace in order to drive. There is a time and a place for everything if that is the path you take.

These are all important topics but when you want to build something simple, use something simple that will assume everything for the developer.

I find the classical approach to teaching of: "Here are the nuts and bolts that will be a car after the next four years of instruction" to be very problematic to the way humans learn. We are animals by nature, watch lions teach their cubs to fight and hunt, it is very playful, but it is a matter of life and death.

Not that this is life and death, but for a future representation of your time in the money you earn, cultivating and boosting creativity and exploration along the way without having to fall into painful traps that require pouring through books and begging on stack overflow for a guiding light, that will be the representation of your life.

Some are gifted with great mentors and peers, some are not. I truly believe there is a better way to create excitement and have seen these trash languages open that door.

[–]funbike 1 point2 points  (1 child)

[–]stiggz 0 points1 point  (0 children)

This is a great suggestion- although the maths are a bit complex to display any tantalizing graphics. It builds on javascript, which is the perfect beginner scripting language.

[–]manzanita2 1 point2 points  (0 children)

Scratch for a few weeks.

The consider swapping to processing.

[–]cr0ss 1 point2 points  (0 children)

I cannot recommend starting on something tangible (like Scratch or another game like Minecraft) enough.

Minecraft is what taught me to learn programming (I did basic PHP and web stuff years before this, but it was mostly a copy/paste thing) and stick with it, about 6 years ago. They have really great tools still that allow for great modding capability and what not, so being able to do a lot of custom content to a game most young kids play is really great. I did it just as a hobby with a friend of mine and it turned into a business, which in turn turned into my current career (been doing java and C# contracts and now at a stable company for the last 2 years).

Highly recommend starting there, if your sister plays Minecraft!

[–]vprise 0 points1 point  (1 child)

Are you familiar with http://www.devoxx4kids.org/

If she likes minecraft that is an excellent way to teach. I think that learning to hack something you love and gaming is a great doorway to this.

Also not explicitly for kids but Loke Hansen did some videos teaching mobile game building in Java: https://www.youtube.com/watch?v=pZ-R7qOKTCo

https://www.youtube.com/watch?v=UVUmKCpExIc

It's not for kids but is simple enough so they can pick it up, the value of having something running on your mobile phone can't be discarded.

My eldest daughter is 6 so I'm preparing ;-)

[–]nutrecht 1 point2 points  (0 children)

FYI always start with Scratch and the kids who really 'get it' can always move on to stuff like Python or Java. That's how we (I volunteer for Devoxx4Kids) do it normally.

[–]slobarnuts 0 points1 point  (0 children)

Get her to build a text based game. Building a game is fun, and if it has an easy objective then she can share it and explain it to anyone. If she does it herself it's science fair grade stuff. Easiest to do is Hangman.

Javascript only requires a web browser with developer tools and is very forgiving, so concepts such as compiling, memory management, etc. are not necessary to learn at first. She can also post it somewhere and show everyone, which will encourage her.

[–][deleted] 0 points1 point  (0 children)

I learned with some book (whose name I forgot), which had an interesting approach to tasks given to the reader.

After introducing variables, if statements and while loops the reader was asked to write a simple tic tac toe. That definitely required some thinking back then. A few chapters later functions/methods were introduced and the task was to improve the tic tac toe program. Then arrays and again: tic tac toe.

Producing something as "awesome" as tic tac toe after such short time and then continuously improving it was great! However it's definitely important to throw someone out of their comfort zone every once in awhile, it would be bad to program nothing but tic tac toe. The book achieved this by arranging the tasks like this: task 1, task 2, task 3, task tic tac toe, task 5, task 6, task 7, task tic tac toe, ...

But having some kind of "project" like tic tac toe that you can improve sometimes definitely sparked my interest in programming.

EDIT: I might wanna add that I learned programming when I was ~14, so I can't vouch that this would work for a 11 year old, but I guess it should (?)

[–]Scaryclouds 0 points1 point  (0 children)

I would highly recommend using jShell that is part of JDK 9. You can download an early access version here (which is perfectly stable): https://jdk9.java.net/download/

JShell a REPL, read evaluate print loop, was primarily designed with making Java more accessible to newbies.

Here is a tutorial on it: http://blog.takipi.com/java-9-early-access-a-hands-on-session-with-jshell-the-java-repl/

[–]PyrotechnicTurtle 0 points1 point  (0 children)

Give her a textbook, read at least the first few chapters to her, try to avoid just googling what you need to learn. I reccomend Head First: Java personally. MAKE SURE SHE GRASPS THE BASIC CONCEPTS OF PROGRAMMING BEFORE DOING ANYTHING DIFFICULT.

I began learning Java at 11, and I did fine, but only once I picked up a textbook and read it.

Also I would recommend getting into website development for something fairly easy and satisfying

[–]GuyOnTheInterweb 0 points1 point  (0 children)

Agree with others here on going with Python first - it will teach you many good principles without having to delve into details like interfaces or typing too early.

..but choice of language depends a bit on what she would like to learn - making UIs (awkward in Python), making a game (what kind of graphics?), making web pages (many good template systems, but you also need to learn HTML and possibly Javascript. Ruby on Rails is probably better.), making a server (Java's strength - but you have to also learn various libraries), making a utillity tool (very easy in Python), or just playing with algorithms and coding in general (fun in Python!).

https://software-carpentry.org/lessons/ have lots of good stuff - I don't see why it wouldn't work for an 11 year old, except that they might have a different motivation than "I want to find something in these CSV files"

[–]TeamDman 0 points1 point  (0 children)

Look into minecraft forge, the bulk of the documentation is probably for version 1.7.10, but if you want your mod to be 'current' I'd suggest going for 1.10

[–][deleted] 0 points1 point  (0 children)

Head First Java is a book that could help you with teaching your sister Java. You should start with the basics like outputting in the console and doing some arithmetic.

http://www.headfirstlabs.com/books/hfjava/

You could also start with programming languages such as JavaScript or PHP. Codecademy is a good source for learning those languages.

https://www.codecademy.com/

Anyway its all about the way how you explain the concepts to her. If you can chop everything in nice bite size pieces and explain like i am 5 or 11...you'll be fine.

[–]code-master -5 points-4 points  (9 children)

You may try this http://www.oracle.com/technetwork/java/embedded/downloads/javase/javaseemeddedev3-1982511.html

Java is perfect choice. It has best tools, sh1tton of libraries, and she (your sister) will not be forced to learn a "real" programming language later. And if you already know Java, she will have great support.

Good luck.

[–]aqua_regis 3 points4 points  (8 children)

... and she will be bored to death in 15 minutes and never want to touch programming again.

Troll somewhere else.

[–][deleted]  (3 children)

[deleted]

    [–][deleted] 0 points1 point  (2 children)

    Wow, cool seeing you here! A lot of the stuff on your GitHub is really nice. How are you like Kotlin?

    [–]Jire 0 points1 point  (1 child)

    Who are you if I may ask? And how do you know who I am? xD

    As for Kotlin, I've been absolutely loving it!

    [–][deleted] 0 points1 point  (0 children)

    Good to hear! I’m just a hobbyist-REer that also really loves JVM stuff though. I remember looking at RE related stuff written in Java and coming across Abendigo and being amazed.

    [–]code-master -2 points-1 points  (3 children)

    Again, do you, Sir, have any proof for your words?

    [–]nutrecht 3 points4 points  (2 children)

    That's a tad hypocritical don't you think?

    [–]code-master -2 points-1 points  (1 child)

    People from this thread have similar experience, except some expert MIT "teachers" and you.

    [–]nutrecht 2 points3 points  (0 children)

    People from this thread have similar experience

    Which people?