views:

1857

answers:

36

My 15 year old daughter is showing an interested in learning how to program, and I'd like to encourage her (she has mentioned CS as something she might be interested in doing at uni and she has definite geek-like tendencies - including a love of techie stuff and an tendency to dig around to find how things work).

I'd be interested in any suggestions for online resources and projects that might be useful or appeal to a young person. I'd also be really interested in hearing from any women on Stackoverflow (are there any women on Stackoverflow?) as to what sort of thing got them coding.

She's been introduced to some VB at school, has dabbled in LSL scripting in Second Life, and done some simple web pages. She's good with math and visual design work. 30 years ago when I started coding it was relatively simple to get the 'wow I can make it do that' feeling with just a few lines of code that kept one coming back for more, but I feel that getting the coding bug might be more difficulty now as expectations are so much higher. What's the best way to help her over the initial barriers and up and running?

+9  A: 

how about the alice project.

Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a teaching tool for introductory computing. It uses 3D graphics and a drag-and-drop interface to facilitate a more engaging, less frustrating first programming experience.

lego mindstorms is always a good choice too.

Brian R. Bondy
+1  A: 

Perhaps Microsoft's game dev stuff like XNA could be a fun/interesting intro? I've never actually done anything w/ XNA however the code is C# like (=> relatively easy to pick up) and it looks like simple rpg games etc are easy to make.

Another idea is iPhone apps. I've made a number of these. Once you pass the initial learning curve pretty much anything is possible. The good thing about iPhone apps is they're easy to sell (=> get some business experience) and they're easy to show to friends which should increase interest/engagement in the programming.

MrDatabase
+4  A: 

I have been using Greenfoot with my son (who is younger) and I think it's a good way to get started with Java when the student has zero programming experience.

My similar question has some answers which may be of interest.

Software Monkey
+2  A: 

Perhaps get her some inexpensive web hosting so she can play around with one of the blogging platforms like Wordpress or some CMS. There is a nice progression from getting it set up, to installing and customizing plugins, then perhaps creating your her own plugins or themes.

Angela
A: 

I guess it would depend on what part of technology she is interested in, but if Computer Science is indeed her interest there tons of great stuff. A great book that might help her get her feet wet with some actual code is Learn to Program by Chris Pine. It uses Ruby as the language. I love Ruby and think it's a great language to use, but even if that language isn't what she ends up liking or wanting it's a great book that can get right into some code and concepts in a non-intimidating kind of way.

railsninja
+1  A: 

13 years ago when I typed in my first computer program, I was curious how they build those games. Today's stuff are much more interesting. Doesn't she like to build a social network or something? Doesn't she want to learn the internals of an application she loves and spends a lot of time with? Get her dig through the program she loves. She'll find her way. If she weren't passionate enough, maybe programming is not her way to go!

Mehrdad Afshari
+5  A: 

Definitely Scratch - she will be able to produce amazing things very quickly and show them off to all her friends.

anon
+3  A: 
John Burley
I agree, Ruby is relatively simple and very easy to read/understand.
Garrett
I like Learn to Program also - gave it to a friend who wanted to move from visual designer to programmer, and it went over well.
Sarah Mei
+19  A: 

I help teach a one-day class for high school girls in JavaScript, and they love it. One of the most popular exercises is creating a blank page that is overlaid with flower images (local files) placed randomly at 1-second intervals. It provides some introduction to looping, images, timing, the web browser as canvas, etc. It also doesn't require that you install anything to get going, which is very, very helpful for newbies of all genders.

My own story: I started "coding" with HTML in college, at an internship my sophomore year. My boss said, "we've heard about this new thing called the web and we think we need a webpage."

I liked the immediate visual feedback (this was just after Mosaic came out) but mostly, it seemed very useful to me personally. (Sometimes it's hard to see the utility of writing yet another linked list in C.) I changed my major to CS and didn't look back. In this economy, I am more grateful than ever that I can support my entire family, if necessary.

EDIT: I should add that HTML was the gateway drug, for me, to the more interesting parts of CS. These days, though most of my work is Rails, I deal mostly with the models, databases, and integration of the app with 3rd party services. I know a lot of women who came to programming through the visual side. Perhaps there's a takeaway there.

EDIT #2: I just (Aug '09) taught a half-day seminar on Ruby, using Shoes, for high schoolers. I posted the entire plan with code and notes. The materials are available on Github.

Sarah Mei
Can someone please tell me why it's any different encouraging girls to program?
Mitch Wheat
Well, many boys seem to do fine with the "throw K one size does not fit all.
Sarah Mei
The other major difference is that online avenues of help such as newsgroups and mailing lists are much less helpful to girls. That makes it quite a bit harder to self-teach; thus encouragement is more important.
Sarah Mei
+1  A: 

I am not sure I agree that female programmers need a different or gentler introduction to programming. While age may play an important role (e.g., my first hacks at Assembly at 9 were fairly bad) and require special cutesy toy languages, that is not the case for gender IMHO. Programming is what it is, and no amount of gloss or cutesy programs or languages are going to change it.

If your daughter is a self-learner and truly interested in this, she'd be able to go through any introductory programming book just like one of the boys. She should also be able to find the toy projects that interest her. For example, writing some facebook application. At that age, she should be easily capable of coping with a college level intro text to programming.

Uri
It's not because of the gentler or cuter thing I specified her gender (hehe, far from it - she can hold her own corner easily), but coders are overwhelmingly male so there is something of a role model and perception issue.
Cruachan
Just making sure :) That being said, I would say that for the path 6 years the number of women in CS programs has increased dramatically, I am not sure that programming would be male-dominated in a few years.
Uri
+12  A: 

Python is becoming the standard answer to this type of question, and it's not a bad one. Ruby and Scheme are also good.

There are lots of libraries (PyGame and Rails come to mind) that let you do a lot with a little in these languages. They're also real languages used for serious projects: there's not a huge "BASIC/Pascal for learning, C/C++ for the pros" dichotomy like there seemed to be 15 years ago.

Also, don't underestimate a 15-year-old. My generation learned to hack on a C=64. I wouldn't assume that it needs to look like Second Life to hold a young person's interest.

Ken
Ah, the C=64. My first intro to programming, when I was 10. Definitely don't underestimate the 15-year-old.
lacqui
Ahh the C64. The modern generation expects more though; only because they've been accustomed to more since they were born. either way it'll take small steps, as long as she's aware she won't be writing huge 3D action adventures within 5 minutes.
Adam Hawes
A: 

If she is at all interested in web stuff (most younger people seem to be), I'd take her to RailsConf. She should get a kick out of it, be able to find younger people and other females who are really passionate about a language, and possibly even find some projects that she might like to get involved with.

You could also try a smaller conference, but not one of those overly techy ones where it's just a room full of guys talking about something completely uninteresting to a young girl!

The only problem is that I think it's in Vegas this year--if you consider that a problem.

Bill K
It might be a minor problem for him, since he's in Scotland. :P
Chris Lutz
Damn, good point. I'd still look for something local, and preferably with Ruby, it's not my favorite but the programmers are SO passionate it would be hard to imagine her not getting interested...
Bill K
+1  A: 

Looking at your background, you could introduce her into programmable 2D graphics.

Just find (or create) the simplest api that allows you to draw a line and challenge her to draw pictures, draw a circle from drawing lines, writer her own math function plotter, create pong and then tetris, design a 3D wire frame engine, and then move on to shaded 3D (which you can still do by drawing colored dots with very short lines).

Graphics is the best way to start since it so rich, visual, mathematical, and loop oriented. And you get instant feedback.

On the side you can teach her solid software concepts like objects, encapsulation, modular design and how it applies immediately to the problem at hand.

EDIT

One more thing, I would definitely stay away from HTML and the such. Its very literal, and I would go as far to say its not code, just a fancier text editor.

Pyrolistical
I really disagree with this. For someone beginning programming, if you even half terms like "encapsulation" or "modular design" in your head while teaching them, you're approaching it wrong. HTML is a brilliant place to start - you see results instantly, somewhere they are familiar with (a browser)
dbr
What results? Use a document editor and you'll see them sooner but then again does that help with learning how to program?
SDX2000
I never said use big words. You can teach the concepts without telling them what its called in university course.
Pyrolistical
+2  A: 

Project Euler provides mathematical challenges of increasing difficulty (the first ones are really easy). The website keeps track of one's progress, and after solving a problem one gains access to a forum where people discuss their solutions. Very instructive and addictive.

If your daughter chooses to pick up any main stream language, this website may provide her with plenty of practice assignments that will introduce a lot of basic mathematical and programming concepts. The fact that the site keeps track of one's progress may result in a slight addiction ;)

Stephan202
This only works when one is really into math. If you aren't a math-lover then Project Euler will probably scare you away from programming. I've been programming for years and I'm clearly not the worst programmer out there, but I've had tough times getting past some of the first Euler problems.
Rene Saarsoo
You may be right about that (though I wouldn't say that I am myself *really* into math). The OP does mention that his daughter is good at math, so who knows. Also, the information in the forums will teach you things about mathematics/programming that are likely to aid in solving other problems.
Stephan202
+2  A: 

I teach Java and HTML in my high school classes. I've found that the language and technology don't really matter. When teenagers are really into this stuff, they'll dig into whatever technology you give them. It's easy to pick out the students with a real passion for coding - they're always trying new things on their own and doing more than what I teach in class.

Just give her a good starting point- if she's interested, she'll want to explore more on her own.

bestattendance
A: 

Don't sugar-coat our profession. If your 15 year old daughter wants to learn how to program introduce her in the same way that you would introduce any other person, give them a copy of K&R and let them learn C. Swap this with any leading book and real programming language, although C is a good place to start.

By asking for original and different ways of teaching her you're creating the illusion that programming is easy and all about creating squiggly lines and 2D graphics when in reality programming isn't that easy. Think how devastated she'll be if she uses a toy programming language and creates some great games, then moves onto Computer Science and realises that it's all about Math/Logic, Turing Machines and boring C/Java/Prolog.

In many ways Programming is like Mathematics, there's no easy option in learning it. Sure, there are ways in which we find easier, but the methods are all the same. If you want to put her on the right track then make her do it in exactly the same way that everyone else does. Give her K&R, let her write boring pointer arithmetic, let her experience the sexism in the software community with the "OMG UR A GIRL A/S/L PIC PLZ???" comments, let her see some of the content she'll have to learn if she takes up CS at university.

Let her learn to program on her own and don't sugar-coat it by introducing her to kiddy IDE's or stupid game languages for software developing toddlers. Show her that programming is complicated wizardry without bounds, wrapped into computable logic to create applications from mere commands.

Finally, don't bother down-voting this if you don't agree and think that all teenage girls should have to work in something frilly and basic. There have been plenty of good answers that have been down-voted for claiming that any tool would work when these are the very people that are 100% correct. She'll be no more a software developer for using a toy programming IDE than I am a game developer for using RPG Maker.

EnderMB
That's like saying "programming shouldn't be fun".
Rene Saarsoo
Oh for goodness sake .. that's like handing a Chilton manual to a kid who wants to learn how to drive! Let their interest (if any) drive them to such things ... you take this profession far too seriously.
Tim Post
However, I did not down vote this.
Tim Post
You have a point, and actually one of the problems is my daughter is far from 'frilly cutesy'. That's actually part of the problem and why I ask the question - I'm not at all convinced that a toy language is appropriate as she is quite capable of hadling something more serious...
Cruachan
Cruachan
Cruachan
Rene: That's the same as saying that C isn't fun. Well guess what, sometimes programming isn't fun. The girl is FIFTEEN, not five. In a years time she'll probably be at sixth-form working with C anyway. By introducing her to what C is really like she'll know whether programming/CS is right for her.
EnderMB
EnderMB
EnderMB
Beska
Beska: If someone wishes to learn to program they should use the best material FOR THEM, regardless of their age. This whole culture of getting our kids to take up programming as a hobby, going as far as to develop languages and IDE's for them to play with astounds me. They're kids! They're perfectly aware of deciding what is best for themselves! If your kid wants to learn to program you introduce them in the same way you introduce anyone else. If you teach a kid to program in a manner that won't help them they'll only resent the fact that they can't play with the adult tools, and that's fact.
EnderMB
A: 

I'd reccomend starting her off with some easier languages, maybe Python or PERL, or if she likes web development, have her learn HTML, Javascript, and even some PHP.

Vestonian
I recently started getting into Perl. Are you sure you would catagorize it as an 'easier' language? It seem loaded with unique particularities that other languages like PHP don't have. References are one which still has me baffled. And I really don't care for functions with no named parameters.
42
+3  A: 

Robot programming! How about a Basic-Stamp, if they even still make those :)

There are some more sophisticated environments for Lego Mindstorms, but when I played with my, the default IDE was more geared towards kids. I actually taught a class of 4 year-olds all about robots and programming using the Mindstorms kit - but I think it's too young for a 15 year old.

Well... there are Lego Mindstorms conferences, contests and leagues. Does her school do anything like that?

As for intro languages that could be pretty cool: how about Alan. It's an adventure text-based (interactive fiction) gaming language. It's OOP and pretty darn cool - especially if she likes story telling.

Other than that -I'd say you two should re-invent the blog engine together. I'm working on my blog now and it's a great way to learn learn learn!

42
+3  A: 

I think you should teach her some mainstream programming language, not a child language like Alice or SmallBasic. These languages often have limitations that will make harder to understand the "real thing" if she can handle it. Although she is not an adult, she is not longer an small girl so don't treat her as such.

ggf31416
+2  A: 

I would highly recommend Scheme as an introductory language. I think it is a great language to learn the concepts of programming. I would also recommend the text book "How To Design Programs" which can be found in full at http://htdp.org. It written for use with the Dr. Scheme development environment which uses students languages that are subsets of scheme to build up the concepts.

+1  A: 

The Kid's Corner on MSDN is great. There is also Robotics she could get into.

http://msdn.microsoft.com/en-us/beginner/cc963401.aspx

ModelTester
+1  A: 

I think kids want instant results these days to lend positive feedback. That pretty much throws out everything that we used to learn (i.e. pascal).

I can only suggest starting on the lowest level interpreted language that you can find, then working through higher levels of abstraction while she fights, curses and argues with the w3c validator while viewing her results in her browser.

However, don't forget the importance of C. Maybe bring up Linux in some simulator like QEMU? Load it up with gcc, binutils and other goodies and ask her to write a simple command line program .. then watch her curse valgrind like w3c.

If you have no knowledge of lower level languages, you can't appreciate what higher level, dynamically typed languages do for you.

The biggest recommendation here, don't PUSH her if she shows interest, just expose her to more things. If she's going to be a programmer she'll go after the hard stuff on her own. If that happens, she'll push you to push her by picking your brain. Please, at all costs, keep it fun.

Tim Post
+1  A: 

I enjoyed playing with Light-bot, and I think it nicely demonstrates some programming concepts, but it might be too simplistic for this occasion. Have a look and see what you think anyway.

Andy
as a developer this is really fun!
Thomaschaaf
+1  A: 

I'd toss Lua onto the list of programming languages to consider. Its been used in both serious applications (Adobe Lightroom, for instance) and quite a few games (WoW, some of The Sims, many others). A one-piece installer for the interpreter and a bunch of libraries is available for Windows, too. Lua is far from a toy language, and scratching the surface can lead in a number of interesting directions.

One lesson I'd try to teach is that there is no one universal language that is best suited to solving all problems. Perhaps you could find some problems to explore together that are hard to solve in one language and easy in another...

On the more general Geek and How things work front, I'd recommend a subscription to Make, and possibly its sister magazine Craft (which is apparently no more, at least as a paper subscription).

RBerteig
+8  A: 

Suggesting some programming language (say, Python, or Ruby!) is silly, don't teach her a programming language, teach her how to do something

Something you mentioned in the question is a great idea to expand on,

LSL scripting in Second Life

Improving a game you play is a great reason (and a great way) to learn programming.

Introducing someone to programming is entirely about getting the person to want to program - a video-game is a really visual, rewarding place to see your work. Seeing your name printed 100 times in a terminal is pretty boring compared to making stuff fly about and explode and such.

I first got first got interested in programming when I was young is because of Lego Mindstorms. To illustrate my point, compare if I started in Python, compared to Mindstorms:

Python:

import time
print "forward!"
time.sleep(1)
print "turn left!"

When I run it, in a terminal it would output..

forward!
turn left!

Lego Mindstorms:

Add-and-drop "output 1 forward" block
Add-and-drop "output 2 reverse" block
Add-and-drop "Wait 1 second" block
Add-and-drop "output 1 reverse" block
Add-and-drop "output 2 forward" block

When I run it, the little Lego car I built starts moving around, just like I told it to do!

After Mindstorms, I started learned about HTML by using Front Page and looking at the "Code view" while adding tables and stuff (so learning HTML while I made websites). I then started learning PHP because I meant I could add dynamic stuff to the web-page, like taking ?name=ben and putting it in the HTML by adding `!

Around the same time, I started playing "Operation Flashpoint", making missions using it's mission-editor. You could add _this setdammage 0 in a area-triggers code-box to heal any unit that entered a certain location (say to have a functioning "medical tent").

While I'm not suggesting Lego Mindstorms, or PHP, or Operation Flashpoint (although Lego Mindstroms is great, it might be a bit "childish" for 15 year old), my point is: seeing cool results is more important than learning something "useful" (like a real programming language like many people seem to have suggested).

Don't even consider mentioning a language, or doing it professionally, or force her into learning it - just point out the cool things you can do! Find something she's interested in, and show her the "script editor" button.

Something that just sprang to mind - something stereotypically popular with teenagers - Myspace and the likes - they generally lets you change the layout of your profile with CSS. Show her how to take the output from one of those "custom myspace style generator sites" and change the colours about (by adjusting the background: #aabbcc bits). It might "not be programming", but it's changing code and producing really visible results in the browser - somewhere most people don't even think about.

Actually, Lego Mindstorms didn't get me interested in programming - it was when I was in primary school, my teacher pointed out that someone had to program traffic lights so the lights turned on and off. It's something I never even thought about until then..

All you should really have to do is create the link in her head between "programming" and all these web-sites and video games she's interested in..

(Err, slightly long and rambling answer, which isn't so much entirely aimed at the original question, but rather many of the other answers, which seemed to be going about things the completely-wrong way)

dbr
+2  A: 

Listen to what she wants to do and then give some hints on what tools could be useful to do that thing, but don't help to much. It's important the she feel that it is her project and not your project.

And since newcomers don't have any clues on hard some stuff is, they often take on to much and fail. Teach here to divide and conquer, aka small steps towards the big goal.

So probably the best thing is to be around and help out when help it is needed, maybe just a question like this:

-"How is your project going?"

Johan
Ha - I spot another parent. Yes this is precisely my problem. Telling her what to do or teaching would be a sure-fire failure. I'm more looking for things to dangle in front of her nose and tempt her with - once over the initial inertia she'll be fine
Cruachan
A: 
John Burley
+2  A: 

You mention that she's doing visual design work. I think Flash is an excellent place to start, because you get almost immediate gratification from simple animations, and then ease your way into the programming side to do more advanced things. Flash is fun, and will let her use both sides of her brain.

And what got me going? I started with HTML and design. Then Flash. Then procedural programming with JavaScript and some PHP. Then CSS. Then SQL. Now OO PHP.

lynn
+1  A: 

My 14 year old son has been programming for a couple of years now. He started with Scratch from MIT - has done a little Alice - and is now learning Ruby. His motivation is developing computer games - he's been very self motivated since he started. Learning Ruby was his idea as it's used as the scripting system in RPG Maker. I've tried to encourage him to learn C or Python - but neither is easy to quickly get results - looking at what he's producing today either in scratch or RPG Maker would take many months to create in a different language - way beyond his attention span.

If he decides to follow computer science as a career, then I figure he'll get the foundation in college. For now, he's learning important concepts inside an environment that is fun and produces visual results quickly. He often encounters standard CS problems and asks for help. The key thing is he's learning while having fun.

I would definitely recommend looking at Scratch, Alice - or Storytelling Alice as a starting point. They all allow for quick visual results without requiring a lot of learning.

+1  A: 

Try Java for Kids by Yakov Fain.

iobit
A: 

I learned BASIC on the C64 and moved onto 6510 ASM pretty quickly. That was a skill that made my time at uni move much faster (being able to understand 68HC11 programming, which is VERY similar).

Simple languages that let something happen very quickly are the way to go for learning. BASIC was good when we didn't expect a pretty GUI, but it's pretty limiting now.

I recommend Python because you can hack at it without all the nasty compile, fix errors, recompile, run junk. Python also forces some kind of decent formatting skills onto new programmers. Ruby is also quite easy to learn - I'd picked up the syntax/reserved words in about an hour of basic hacking.

EDIT: If you go the Python/Ruby route and don't already know the language, now is a good time to learn it. As a seasoned programmer you'll pick it up fairly quickly and be able to guide her. But wait, she'll probably surpass you pretty quickly if she's got real things to build with it and you're only learning it as a learning exercise. You can make a great game of that and make a point of spending more time with your daughter while you help her out.

The best way to get anyone to learn anything is have a real task for them to perform, particularly a younger person. Perhaps find basic tasks that you do regularly for work that can be automated and can be done in a simple language and have her implement an application(s) to automate them for you. That's always a good thing.

Adam Hawes
+4  A: 

Ruby via Shoes. Shoes is a fun programming API for doing nifty little simple things like drawing, page layout, buttons and such. It's probably about right for that age, or for crazy-smart kids who are a little younger. It was my for-fun platform of choice for awhile last year.

Kevin Conner
+3  A: 

How about processing, it's java based so will probably be useful if she does take computer science at uni. Also it's really quick to get results.

Jamie
I would definitely recommend Processing over everything. I am at the end of my teenage years, though, not a girl, but for me Processing.org was the best. I also have some girl friends who have used it and were introduced to programming with it, mostly because of how easy it is to produce Visual Art with.
didibus
A: 

Microsoft Small Basic has very nice environment for beginner programmers. No messing with files, it just opens and you can start writing program. It also has code assist, help, can publish program on internet quickly for sharing. Fine for console programs, graphics, turtle programming. Very nice for teaching basic concepts.

Peter Štibraný
A: 

JavaScript has many advantages:

  • Functional language
  • Highly interactive
  • With JQuery, thinking in terms of result-sets
  • Runs everywhere
  • Gigabytes of examples
  • Understand what visited websites are doing
Thomas L Holaday
A: 

Once upon a time I looked into Greenfoot to help teach/learn Java. Its interesting, simple editor + API to teach programming structure, simple algorithms, etc. It looked fun, programming code for moving a robot and watching it do what you tell it.

Also similar, for java, is BlueJ. In fact I think Greenfoot may have been inspired by BlueJ.

KFro