Introducing Children to Computers? 886
Years ago, kids could be gradually introduced to computers through learning languages like LOGO and educational computer games. Many of us started our computing careers at our parent's workplace, logged in to a word processor to type away, only to become fascinated with the whole computing thing. So Slashdot, let's hear how you were lured into the digital life. What was it that drew you to a life of programming? How old were you when you first used a computer? What pieces of modern software do you think would be a good way to introduce today's kids to the world of computing?
Two of our readers had a few related questions: "A family friend has asked me to help teach her 13-year-old the art of computer programming. I initially thought this would be easy to approach but times have changed since I cut my teeth on text-only, ROM-based, BASIC interpreters. Twenty years ago, it seems there were much more clear and concise paths one could take to learn programming. Now I'm at a loss as to what language and resources I should use. Everything is so high-level that I'm having trouble finding convenient, simple tools that promote the fundamental tenets of programming, allowing newbies to jump in and see immediate results, without getting bogged down in corporate-centric APIs. It seems nowadays most programmers end up spending more time learning the development environment (and thus being confined to specific platforms) than core, transferrable programming knowledge. I'd like to ask my fellow Slashdot dwellers what tools, languages and approaches they have used to help introduce new people to programming?", and from sagefire.org: "My daughter is a huge fan of TuxPaint and ChildsPlay. We use Linux and MacOSX (and occasionally Windows) on different computers. We like to have stuff for her installed wherever we go. The two I mentioned go a long way, but we would love to pick the collective Slashdot brain on this one."
karel (Score:5, Informative)
as far as teaching programming goes, try karel the robot [mtsu.edu] that's what we used in high school before learning pascal, and it made the structures seem very logical.
Squeak! (Score:1, Informative)
quick and easy: HTML and JavaScript (Score:3, Informative)
Once JavaScript was added to the Netscape browser, I began learning it in earnest. It was an ideal "gateway language" for me because it required no compilation, no debugger, nothing more than an OS-standard text editor and the free web browser I was using.
I could build scripts one line at a time, debugging them as I went without much incident. Then as I got the hang of it, I'd start using functions and subroutines, then external includes, objects, and all the other things that make "real" programming what it is.
HTML and JavaScript are still ideal, in my opinion, for teaching someone who doesn't know much about programming what you can do and what it should look like without taking a lot of time or software to produce results.
Python (Score:5, Informative)
My 13-year-old brother recently decided that he might like to learn how to program. He has been fascinated by computers for a long time -- mostly due to computer games.
I've been programming since I was 8 -- about 18 years now -- and I started with BASIC on a VIC 20. I don't think BASIC is the way to go these days, so when I started to teach my brother I thought first of Python. Python has a lot of advantages for beginners and is an excellent tool for teaching programming. It works great for procedural, object oriented or even functional styles.
So far he loves it! At first we were using Dive Into Python [diveintopython.org] as a guide, but he wanted something that he could handle more on his own. Dive Into Python is much better for programmers looking to pick up Python. After a bit of searching I settled on Michael Dawson's Python Programming for the Absolute Beginner [amazon.com]. I gave him that book for Christmas and he has loved it!
The cool thing about Dawson's book is that the example programs are all games. It starts really simple (guessing games and the like) but by the end of the book Dawson has you using graphics and animation (thanks to Python's great package support). If you're looking to help someone learn programming then I'd have to really recommend Python as a start and a book like Python Programming for the Absolute Beginner as a guide.
Ham Radio - Simply Put... (Score:2, Informative)
Re:Logo is a good... (Score:4, Informative)
I think Logo is great for kids of that age because it provides them with instant gratification at the early stages. Once they get past seeing what the commands do at the Logo prompt, I have them write short programs using a text editor.
PHP is the "new" basic at many places (Score:5, Informative)
My local community college switch just this year from teaching QuickBASIC to PHP as the starter language. At first I was like... WHaaaaa?
Then I got to thinking about it, and realized that PHP can be as simple or as complex as the user wants it to be, and it really *is* a good starter language, and a spectacular path towards C++. The web browser is something most people are already familiar with, and what can be better than designing programs that communicate with your web browser if you want, or they can do other things, obviously... but the web browser is pretty close to a basic prompt, and you can do some neat things that would be entertaining for kids (maybe not 3 or 4 year old kids, but 7 or 8 and up).
If you're like me, your first reaction is going to be the "Whaaaaaa?" to it, but stop and think about it and give it some serious consideration before dismissing the idea... it really does have some merit.
Squeak and e-toys (Score:5, Informative)
For older kids, the game-oriented BASICs give quick results--things like Blitz Basic, Pure Basic, and Dark Basic. Almost certainly you want to steer kids away from stuff from the dark ages, like the Linux command line, makefiles, gcc, etc. I know, I know, lots of geeky types are going to hate that suggestion. But stop, take a step back, and just see the reactions you get to that stuff. It's not that it's unusable, just that it feels so awkward and out of place in the modern world. Show someone DrScheme, for example, and then show someone Emacs and makefiles. Your student will be horrified at the latter two.
Re:Yes, introduce them to IP piracy at a young age (Score:2, Informative)
the differance between copied and infringed is that when jobs looked at xeroxs PARC os(es maybe) they told him xerox didn't care about the technology because they were in the copier business.
there is nothing new under the sun. meaningles meaningles everything is meaningles
sometimes i have to respond to flamebait
Re:Lego Mindstorms (Score:3, Informative)
I think some amount of programming should be required for everyone -- people are absolutely incapable of describing what they want or how they want it even in daily situations; between that and horrible reading/comprehension skills, it's amazing we ever get any sort of specs, or work at all, out of our users. One of our professors always like to start out his intro-to-CS class by asking people to describe, precisely, how to get from the school to the shopping center; it served to explain the low-to-high concepts in programming, functions, code re-use, algorithms, everything.
As a kid, my brother and I battled out our differences on AT-robot, using assembly-like instructions to lead our killer robots to victory. It's a lot more fun when you're competing in an iterative process against someone you know; at first we'd build robots tailored to defeat a specific opponent, then when that started to not work as well, robots that were more general-purpose. I had learned the concepts of assembly before going to college and having an actual course in it (x86-based), which was handy. Interrupts, registers, call stacks, moving memory around manually, it was all there.
Alan Kay is amazing (Score:2, Informative)
I heard his talk entitled, "Introductions To Computing Should Be Child's Play" and he did a demo of Squeak, and it made me feel as giddy as a schoolgirl.
"Learn To Program BASIC" product (Score:1, Informative)
Re:Or take it a step further (Score:3, Informative)
Free ones like GNU Robots and Core Wars are a good no-cost option, but I imagine that with their lack of flashy graphics, they would fail to capture the interest of most kids nowadays. I would suggest instead tracking down Mind Rover (out for both PC and Mac), or an obscure Playstation game called Carnage Heart.
Both feature a drag-and-drop approach to programming. In Mind Rover, this is done via a flowchart, and you program the robots to do just about anything there has ever been a competition to pogram robots to do except soccer. (blow out a candle, battle to the death, etc.)
Carnage Heart, on the other hand, is really a turn-based strategy game with mechanics reminiscent of Axis & Allies or Risk. I personally prefer the way its programming is done, though, simply because the programming is very grid-based - strict 2D control flow with absolutely no subroutines or GOTOs. This limitation means it isn't going to take a kid very far towards learning to use modern programming languages, but it turns the game into a very interesting mental exercise as you work out nifty tricks for packing as much logic as you can into a rectangle that can only hold 10x10 instruction units.
Text Based is Still the Way (Score:2, Informative)
Times have changed. But I think text based is still the way to get into programming.
Even young kids can learn how to code HTML and make their own web pages. (Not that this is really programming, but it is a step in the right direction.)
Then, Linux and C/C++. Give them a good tutorial (book or online), and show them how to do "Hello, World!" using gcc.
The ones who are going to love it will pick up the basic idea in an hour or a day or few days. Then you give them K&R and... they either love it or they won't bother. Some people love it. They get to do what they love (or waste time, writing about it on SlashDot).
Possible Interesting Projects:
- funny programs where the computer complains that it feels funny, and starts going insane and asking the user funny questions and using the input to ask even more insane questions. Another variation of this is the program that looks like the computer is logged out, so you have to enter your password again... actually, if you tell your kid about this one, they will think it is so cool that within a few weeks, they will have been expelled from school.
- text-based role-playing games ("you come to a door on your left. Do you open it? y/n")
- game-of-life - checker board where each square might be empty or contain a fox and/or a mouse. Or modeling a forest fire or an election or the emotions in the stock market or the spread of a disease and the effect of using the vaccine, or...
- micro game of life - try to make a tiny system that behaves chaotically with 1 or 2 or 3 primary variables - "I say yes, you say no, you say stop, I say go" (actually that isn't chaotic; it is pretty predictable) or 3 girls deciding which movie to go to - try to do a three-body-problem where each of 3 objects tries to act in accordance to what the others are doing. Try to make chaotic behavior.
CARDIAC: The Cardboard Computer (Score:3, Informative)
Comspace Corporation
117 Engineers Drive
Hicksville, NY 11801
Phone:516-942-8191
Fax:516-942-8193
Emai
Webpage (hadn't been updated for a while):
http://hometown.aol.com/comspace/ [aol.com]
As of 2003, CARDIAC was 19.95 or a plastic version (for overhead use) was 22.95 + shipping
Re:Python (Score:5, Informative)
PyLogo [pylogo.org] is Logo implemented in Python
Guido van Robot [sourceforge.net] is similar, but so much cooler.
Finally, livewires [livewires.org.uk] has an excellent Python tutorial.
Re:Squeak! (Score:3, Informative)
Re:Yes, introduce them to IP piracy at a young age (Score:5, Informative)
And is this the same Sun Microsystems whose Unix is one of the more difficult (in relative terms) to port Linux code to due to the differences between them?
Here, put on this conical hat and go stand in the corner.
It would be handy to have an option to rename such as you from "Anonymous Coward" to "Brainless Coward".
Re:Linux, the open OS. (Score:3, Informative)
It also pretty much launched my career in comp sci. I loved video games and computers as a kid (built my first computer, a 486, from some cast off parts). But the TI allowed me to write my own games. Sure, the TI BASIC interpreter was slow as hell, and the calculator didn't have enough memory to code anything really cool, but I did manage to write at least 10 games for the thing. A number guessing game, a blackjack program, even a highly simplified version of Armor Alley (which really was more like an airborne Moon Patrol than anything else). Still, it featured a climactic battle against an evil enemy helicopter, which was pretty neat considering I didn't know hardly anything about programming at the time.
I plan on using the calculator as a tool to introduce my son to programming. He's 2 and a half now, but someday he'll get interested in games. And when he does, I'll be sure to quickly dispel the "magic" that surrounds their creation, and show him how he can even create his own.
As for your brothers-in-law, you may want to look for a BASIC interpreter, and write (or "find") a couple simple BASIC games that they can modify. Sure, they aren't rocket science, but the fact that you can toy with their innards and make them do other things is what gets people started. All they need after that is a BASIC manual, and maybe some helpful pointers. If they have the right mindset, they'll get excited about it, you won't be able to stop them! (Just wind them up and watch them go, as it were.)
I think the lack of amazement at computers these days is twofold:
1) Computers are everywhere. Everybody has one. They're just ordinary tools to people now.
2) Computer programming has gotten very high level, and very "untouchable" to the average person. Consoles make this problem even worse. You can't just sit down and code Quake Eighteen in a couple nights. Heck, even the mods take a person with a lot of programming skill a long time to complete.
Good luck. (And if you're really desperate, start looking for a TI-82 on ebay
POV-Ray and Marathon (Score:3, Informative)
Then I discovered POV-Ray (http://povray.org/ [povray.org]), a photorealistic raytracing program with publicly available source code, and which uses a scripting language to generate the scenes. Getting an actual picture as feedback when you get a working program is far more encouraging than a simple blurb of text. By this time, I'd learned Pascal and C++, but the most complex projects I did were in POV-Ray. In the process, I learned a great deal of mathematics...the images I could generate provided motivation as well as an illustration of how things worked mathematically. It's a lot easier to learn the stuff when you have a practical need for it and can see how it works.
And perhaps best of all, when I decided the program was too limited, I was able to get into the actual source code and make my own changes and additions. I don't recommend doing this as an introduction for beginners, as the program is quite complex and has some rather messy code, but just generating images with the scripting language is a great way to start.
Re:Lego Mindstorms (Score:3, Informative)
Do your child a favor and set up NQC [cs.uu.nl] (Not Quite C) for him. It's simple enough, you can actually call real functions with parameters, and the child learns basic programming skills at the same time.
I think the Lego Mindstorms set is awesome, heck, I have 3. But the programming environment included is really, really lame.
- Yolego
Lego Mindstorms? (Score:3, Informative)
I loved Meccano and Lego when I was a kid, but the most advanced automation stuff in those days was a photo sensor and relay.
Paul.
Re:Python (Score:1, Informative)
Either language would be a fine choice for a first language.
I think Python has a few small advantages. First, there are many tutorials for Python that are aimed at new programmers. Examples include:
The other advantange Python has over Ruby is the interactive Python interpreter. I can't explain how fantastic this is. With many other interpreted languages (Ruby, Perl), you really should write your program in a text editor and then run it through the interpreter. This is because the commands you type don't execute until you stop entering your program. The interpreter is not interactive. So every time you want to try something, you have make the change in your text editor and then run it through the interpreter.
Python's interpreter is much nicer to work with. You type in commands, and each command executes immediately. This is very useful when you want to experiment with the language, and is ideal for beginners. I don't know why Ruby's creator didn't include this feature.
Anyway, you'll be happy no matter which language you choose. They are both very nice. You might also consider learning PHP as a first languages. It's nice to be able to view the results of your work in a web browser, and PHP is probably the quickest way to do that. Another good choice for first language is Scheme. Check out the free online book Structure and Interpretation of Computer Programs (SICP) [mit.edu]. If you like video, there are also some video lectures [mit.edu] available.
Re:Linux, the open OS. (Score:4, Informative)
The first computer I remember was a Northstar. I don't remember it having anything other than a text editor, but apparantly it also had games such as Hunt the Wompus that I never found. Well, I was only three or so at the time. However, it did have a Little Red Button. When pushed, this Little Red Button would erase every file on the disk. I never quite grasped that, for some reason.
We also had a DOS of some description. With it were games such as Hocus Pocus, Recue Rover and something where you had to avoid monsters and spell words. We only had demos of them though. It also had a version of BASIC and a simple text editor that I never used. We eventually sold it for ten pounds or so. I was young enough and poor enough to think that that was a lot of money, so it seemed fair at the time. I now know that it's very little money, so it still seems fair.
Then came an Archimedes, running RISC OS 3. We still had the Northstar at that point, but it was unplugged to make way for this new one, which was put on top of the main body. With plenty of room to spare. The monitor was moved to the top of a filing cabinet. Eventually I started doing some BASIC in it, probably because my brother did so first. I was, to put it mildly, crap. I didn't understand the concept of a variable. I could INPUT A$ or GET A and PRINT it, but I didn't know how to do maths with them, even when I saw it being done. Nor could I use loops, although I could just about handle IF A$ = "Foo" THEN GOTO 50. I didn't know what GOSUB meant, or PROC and ENDPROC, and I thought ENDIF was a magical (and I really do mean magical) form of END which somehow worked out what conditional you wanted to END on. We still have it, and some time ago I started toying around with it again. BASIC was less confusing, although I'd now hate to work with it, and I also discovered its command prompt (which I remember thinking was superior to the Windows 98 one because it had a scrollbar and a help command).
Then we got a Windows 95. My time was spent playing Chessmaster 3000 and Civilization II. Eventually the Archimedies made way for The '98 that we still have and where I got reinterested in programming. I started with HTML about five years ago, and then tried to learn Javascript. My original tutorial was sucky, but when I found a better one (Thau's, at Webmonkey), I became passable at it. This of course led to the desire to learn real languages, specifically Perl because my brother knew it. After trying several times to learn from the Camel Book I gave up (I should have skipped over that first chapter, information overload) and found Beginning Perl online as a PDF. Eventually I started making GUIs with it using Tk (my brother was at that point using it to make a program for somebody else, but they never finished it), but I stopped because I was spoiled by HTML/Javascript, and Tk simply isn't as powerful. Or if it is, Mastering Perl/Tk isn't a very good manual. I still only consider myself 'good' at Perl, but that's because the more I learn, the more I realise I have yet to learn.
I made an attempt to learn C++, but I got more information overload. I've since tried again, and got slightly further, but the tutorial I was using simply doesn't cover enough libraries - it explains Terminal I/O, numbers, functions, strings, OOP and then File I/O, but not how to actually do anything useful. I can do simple stuff (such as a program I wrote a few months ago to find the number of odd numbers in the Nth row of Pascal's triangle), but no regexes or cool things like that. It really diesn't explain anything further than basic string usage, so until I get around to looking it up I won't be able to do very much.
Some time ago I got my own computer.