Programming For Terrified Adults?
makeitreal writes "My mom is getting bored with learning the basics of email and has mastered Solitaire. She asked me what I do on my computer and I told her that I was teaching myself programming in Scheme. She expressed an interest in learning what I was doing, but I tried to teach it to her with the HtDP and we didn't even get past the introductory chapter. Everything I've looked at so far seems too complicated (Scheme, Python, VB) or too childish (Logo, Squeak, Lego Mindstorms). Is there anything in the middle that is also cheap/free and suitable for adults? Or should I give up the whole idea?"
..there are the endless worlds of interesting and expectant computer games. Introduce her to one of them and she'll continue learning about the handling of a computer.
for x = 1 to 10000
print x
next x
No GUI will make things easier to learn it, and it's nowhere as bad as C++.
There's also a web based language, like PHP / ASP, or Perl. It's not hard to begin with, even though it can become more complicated as time goes on.
/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
I have no idea if they still make it.
But Hypercard was *perfect* for people who wanted to get their feet wet but were totally scared of everything
If you want something a little more advanced: bash shell scripting. Easy to learn and obviously very very powerful.
Sunny Dubey
Why not start with basic programming theory? There are a number of good books on learning the logic and purpose behind programming. I've found that without fundamental skills, the learning curve is very steep.
Maybe you should start with computing theory (just the basics, memory and cpu intermixing). Sort of, making up your own language in more plain english and just logicing your way through rudimentary math problems (like figuring total body fat, that program isn't horrible to write; or make a program to figure interest). After you write a setup in your imaginary language show her how to translate that into VB or PHP or some other loosely typed language.
Well, it depends on what you mean by programming. Clearly writing C++ code and compiling it is programming. But what about less obvious programming (which are essentially instructions). Script languages like Perl, Applescript or ColdFusion (3 that I'm at least a little familiar with) certainly seem like a fair place to start. Even markup languages like HTML could be considered programming; after all, the HTML are instructions that tell your browser how to display a page.
If you're more interested in using an IDE to develop code (and not work with the underlying intsructions directly), then those listed above are not the best choices. But learning the basics of code syntax & understanding how these instructions translate into on-screen instructions are essential if you're interested in learning the core prinicple of programming.
Do you realize what you're about to get yourself into? Haven't you ever heard the joke where the people call tech support and the tech support guy asks to talk to the youngest child in the house to fix the problem? And of all things, programming? Something that takes a huge effort to produce something that's really worth using much? While there are small rewards along the way, you oughta get her involved in something more along the lego lines.. but mix in some programming if you feel that she really wants to learn.. Check out the botball kits or something with the handyboard and let her play with some robots.. www.botball.org
Have you tried Realbasic? It seems to be powerful enough for people to use for "real" programming (and it's crossplatform, well, at least it runs on Macs and PCs.) You can also try introducing her to a stack-oriented scripting language (similar to Hypercard.) There's one called Runtime Revolution and it runs on Macs, PCs, and Linux (according to their website.)
I'd personally find stack-oriented scripting languages easier to pick up (from a newbie's perspective) because the process of dealing with event-driven loops is automatically built into the environment - you just have to tell the stack how to interpret button presses, etc. Also, it's easy to keep things segmented - individual scripts live on their own cards, and you can link the cards together in any particular order you want.
My first choice for someone who wants to learn a programming language (but does not know any yet) would be Python. Bear in mind, that's for someone who just wants to learn a programming language for general tasks. (Afterwards I'd teach C).
For someone in your case. Don't teach a language for the sake of teaching a language. First you need a problem. Something your mom is really interested in solving. It should be something simple. One example could be a program (possibly a daemon) that will e-mail a reminder about the b-days in your family. Or perhaps just pop up a window. Another idea might be to download a lot of recipies from the web and build a front end around it. Something that allows you to grep through them. Eventually adding ability to recognize ingredients and query for those, etc. The important thing is to start small, have a visible result almost immediately and then slowly build up.
Another alternative might be to show your mom how to use photoshop or a 3d rendering package. You can download Maya educational version for free. You also have povray and a whole slew of others available. Maybe it's time to help your mom develop the more artistic side...
I did a lot of my early programming in QBasic, (though I started with gwbasic), it is a good language for beginners. But Python is also good:
for i in range(1, 10000):
print i
range() is a wart in the language, but the basics of the language are on the whole very nice. Python is a complicated language, but the basics for functional programming are quite simple; the complication can be ignored.
BTW, what the heck is up with <ECODE> stripping whitespace?
She is just trying to reach you and understand you more.
Because it is impossible that an 'older' lady would be interested in learning how to create programs. Let alone a mom!
Nice stereotyping there budy.
In conclusion I think that the best are probably BASIC or Python, and I would lean to the latter. And no matter how much you want to help her yourself, I would suggest getting her a good book on the language to read. Preferable one geared to new programmers (instead of a "___ for C++ programmers" type books, or a massive tome of everything in the language).
Hope that helps. I'll answer any questions on the why I think such and such about the languages above or any other language if you just reply to this.
Comment forecast: Bits of genius surrounded by a sea of mediocrity.
the best language to teach her is probably the one that you know the best. If you know it well, you would be able to teach it to her. If you can't, you probably don't know the language as well as you thought. Just be sure to keep it very simple; avoid mentioning advanced features.
No data, no cry
http://www.ibiblio.org/obp/thinkCS/
Invaluable
Teach her to write some Excel macros. First, this is somewhat of a valuable skill (using Excel cuts accross many professions) and second, it's very obvious what's going on.
It's more than just adding values in cells. How about taking 2 cells with a time format (eg, 1 pm and 6:15pm) and having a third cell display the number of hours in between (5.25 in this case)... You can get pretty fancy with Excel programming or you can keep it very simple. By the time she grasps the finer points of programming in Excel, she'll grasp much of programming (though probably not of good programming practices) in general.
Though the question remains: why?
Ecce Europa - Web Design for Business
i agree re: Flash. although it sports the downside of needing the Flash application (ok, not strictly speaking but realistically), it has a a very gentle learning curve, immediate graphical feedback of your scripts, a huge community willing (eager!) to help with the most basic of functions, and is moving towards a bonafide language (ECMA... uhh, something something something spec...)
although i also agree with another post: she most likely just wants to spend more time with you...
You can download a free Personal Edition of Delphi for Windows (or Kylix for Linux) from www.borland.com, but you might want to start teaching in freepascal (because Delphi can look a little intimidating when you first use it). You can get a (free) copy from www.freepascal.org .
'For we walk by faith, not by sight.' II Corinthians 5:7
Maybe you should look at these with her. You might think they are too complicated or childish, but she may not. In fact, she might surprise you with what she likes.
Computers are useless. They can only give you answers.
-- Pablo Picasso
Check out Java programming for kids, parents and grandparents e-book. Review and sample chapter here.
Andrew Yeomans
Don't write off Lego Mindstorms. It was used in my MSc class to teach the basics of programming to non-techies. It has the advantage of showing off the program you have created in the real world by getting the robot to do something interesting. It also teaches the basic things like subroutines, how to debug problems, counters, etc. In your shoes, I'd borrow or buy a kit, and give it a go.
I disagree - AppleScript is extremely powerful and its scripts are easy to read, but debugging them can be a royal pain. I'm an experienced programmer, but Apple Script's inconsistencies never cease to amaze me.
I've encountered situations where "<VERB> the <OBJECT>" would not work, but "<VERB> <OBJECT>" would, etc. And the error messages usually aren't of much help - with some luck you can figure out which line the error was in, but figuring out the correct syntax is often a matter of trial and error.
So yes, AppleScript is powerful, but as a first programming language its quirks can be off-putting.
The problem is that HTML "intrpreters" as well as ECMA Script (Java Script, JScript, etc) are very lax as far as enforcing good syntax. While I *love* Perl, I think it'd be an awful first language for many. A beginner needs a language that doesn't let them develop really bad habits so easily. Some would argue that it's more important to get someone "hooked", which is more easily done with something that will let them make mistakes - but I think it's more useful to use a language that identifies the error and doesn't work until the error's fixed. I'm not saying that Fortran or any other evil whitespace-dependent languages are the way to go either, but I do think that something like Scheme or even Java would be a good starting point. You want lots of sample code (java.sun.com) and a compiler that tells you where the syntax error is (javac). You don't want the program to either run or, worse, appear to run without giving you any debugging info (javascript under IE).
Sure, if the "teacher" is gonna guide the "student" and drill good practices in, that's fine. But the Javascript and HTML that's to be found on the web is 95% awful code - so I personally think that'd be a bad choice for a first language. That's my 50 cents, anyway.
While TCL is a little odd, it isn't odder than some of the other languages you listed and it has the best integration to the wonderful Tk toolkit of any of them. Nowadays it is important to show a new programmer they can create 'real' programs and in their mind that isn't tty apps, it is graphical user interfaces. TCL/Tk is perfect for that purpose. It is also more than able to create useful programs and is cross platform.
Democrat delenda est
Rather than Logo, how about Alice?
;-)
Ok, so I know it's based on Python which you said was too complicated, but the subset you need for doing neat things in Alice is not so bad I think. Plus you get the exciting visual feedback of seeing your characters move around the screen and do stuff. Sort of like the same fun you might get from logo, but there's only so much drama you can get out of a few geometric squiggles on the screen.
With Alice you can make little 3D movies in your spare time that actually tell a story.
Well I guess it depends on how creative your mom is whether this would be interesting to her. I don't think my mom would get too far with it. She'd be more interested in something that would let her do geneology things or family history stuff.
I guess the key is to try to find some programming related things that tie into your mom's interests. Like maybe she'd enjoy learning to use video editing software so she can put together some nicely edited family videos, or maybe she might want to learn html and put together a family website. That's more the kind of stuff I think my mom might like. You'll have to think about what might be fun for your mom. I only know the kind of fun she likes to have in the sack.
I too reccommend the little schemer. The outside picture is childish, but it also has an on-line version you can use for free at MIT press.
It is the best book for learning scheme that I have seen, and I have had to endure 3 books on scheme.
It is pretty straight forward, at least it was to me.
Of course I cant program a lick of scheme now, but thats neither here nor there.
If you don't vote, you don't matter, so don't waste your time telling me your opinion
Rather odd that all Dartmouth resources (including those written by the authors of the language) say it's an acronym for Beginner's All-purpose Symbolic Instruction Code.
So whether the jargon file is correct or not, The authors have blessed the acronym repeatedly and therefore it is correct. What used to be true is irrevelent, after being blessed by the originals authors the acronym is fact and to say BASIC does NOT stand for Beginners all-purpose symbolic instruction code now is incorrect.
All resources from Dartmouth and the authors of the language also make clear that it was intended as a beginners language for learning and a stepping stone to REAL languages like FORTRAN and C.
If you are just trying to do basic programming constructs, pick something that has a good IDE, good error messages and can take a cheese sandwich, compile it and run it. Some of the errors from Java and Java script are pretty sad ( "is not an Object" is always helpful to me).
Logo, Basic, Pascal, Fortran, Squeek, etc. are all easy to learn the concepts with. I say start with one of them. You can always move her to something else later on.
The other options are to build her a Wiki and let her generate content (family news, ancestors, stories, garden info, hobbies, etc. Wiki presentation can be considered some level of programming (and slightly easier to understand than HTML).
Good luck, and remember your Mom raised you, so when she does not get the quirky points of Perl you are trying to teach her, don't yell at her.
Visual Basic (and TI Basic on my calculator) was the first language I learned... it's definitely easy to pick up, and she'd be able to do basic stuff relatively quickly.
Modern spreadsheet applications are a full programming language. It's a nice interface to learn about programming, because you can see the results of different steps of your program in spreadsheet cells. Furthermore, she can make use of it right away to manage her finances.
THE NERD IS THE COMPUTER.
I agree that Pyhon is great, but its not just for n00bs; if speed is not a concern, it is the easiest language to program in (for everyone).
-ashot
1. Have her read ESR's How to Become a Hacker.
2. After that, start her on Learning to Program.
3. From there you can cover a little review material as well as some more advanced topics in Dive Into Python.
I made the mistake of leaving "Learning Perl" and "Learn to Program in C in 21 Days" lying around the house. My wife read them and understood them for the most part, but she's not exactly whipping out kernel modules. The track mentioned above is definitely better for, as you put it, a "terrified adult".
-- Stu
/. ID under 2,000. I feel old now.
I'd recommend Activewords (a Macro?? language for Windows -- it's the easiest to learn), Lazslo (an easy Flash tag based language), or Ruby (an easy object-oriented scripting language)
While I hated it when I was in high school (mostly because I had a programming background), Turing, developed by Holt Software, is a pretty neat pascal-derivative language. It enforces good style in that there is no "goto" statement, a big problem with BASIC. Plus it has a lot of fun graphics mode routines like drawfillmapleleaf() for wasting classroom time... I mean... studying!
It's got a fairly decent IDE with syntax highlighting and the like, and even a compiler should you want to redistribute your dinky little maple leaf assassins. There was also an Object-Oriented Turing (OOT) available, but once you're into OO I'd say you should move to a real language like Java.
When life gives you lemons, you CLONE those lemons, and make SUPER-LEMONS. -- Dr. Cinnamon Scudworth, Ph.D
Wow...why was this modded funny? Corewars WAS my first programming language, and it is great fun. It also teaches you some important ideas like OPTIMIZATION that seem to be lost on many programmers today. You have no idea how great it is to see your little creation DAT bomb something...
That thinks Perl or PHP would be a good choice? As scripting languages, you don't have to worry about compile or link errors, but they're also relatively powerful. They can start simple, and, I think, they're pretty intuitive languages. Of course, if you choose the PHP route, you might want to start them off with HTML as was suggested. Ryan
I'm going to have to withdraw my small concession that jargon file may have been correct at one point.
It seems that the jargon was NOT correct to begin with and the current Jargon file states as much:
"BASIC stands for "Beginner's All-purpose Symbolic Instruction Code". Earlier versions of this entry claiming this was a later backronym were incorrect."
Now that was a rant worth the time and effort it took to produce. Way to slice through the b.s.! Many good points, though I'm sure the elitists you skewered won't agree.
Thanks!
It's easier to wear the spandex than to do the crunches. --David Lee Roth
I suggest POVRAY (http://www.povray.org). It's free, it's less "childish" than LOGO but still shows great results! Of course, might be seen more as a scripting language than a real language but still. Don't let her start with the plain void; start a construct, let her finish the rest, opening her mind... You have to show her the door, she has to walk through it.
My mom, born in 1945, had never used a computer before 1999. I bought her one on a whim that year and the first time she used the mouse she laughed like a little kid. She was completely mystified by the whole thing, though, and I wasn't hopeful that she'd actually use it much. But I gave her a couple days of instruction and set her loose. She did master email and web surfing in a few weeks, and I thought that was as far as she'd go.
;)
What really triggered her learning was finding ebay. She got the bug and wanted to start selling off her old stuff. I would never have guessed it would happen, but a few months after buying her the computer I was teaching her the basics of HTML. She loved it and got pretty good at it for a casual user. Today she codes crypto functions in assembly. Okay, that last sentence is a lie, but the rest is true
I think the most important thing is having something enticing that they want to actually do with programming. For my mom this came about naturally from wanting to post fancy ads on ebay.
Programming as an abstract goal or with contrived toy projects isn't likely to stick or be very interesting. But trying to think of a real project with a real language for your mom would probably be difficult. Which is my point.
Another post mentioned HTML, which is a great idea. It's not a programming language, but it teaches people how to make something using a strict (heh) set of text instructions. This is a huge leap of understanding that will go a long way towards understanding the concept of programming. It's also great because it's easy to thing of an HTML project. Just about anyone would like to try their hand at making a web page.
Anyways, those are my somewhat disjoined thoughts. Gotta go!
Good luck!
I have used a game called CROBOTS to get people started with programming. It is a simple subset of a C compiler with a small game. You program a simple robot to compete with others, and immediately see the results on the screen.
... then watching the results on the screen.
Comes with sample 'robots' making it easy to start by looking at them and trying to make them 'better'
I've used it to introduce people to programming for at least 10 years, and it's available for most platforms.
Either Gogle for it (lots of varients available), of look at http://www.ioprogrammo.it/crobots/home.php
http://www.realbasic.com
REBOL www.rebol.com
Free small, cross platform, interpreted scripting language. Whole development setup less than 0.5MB with GUI and command line.
These one-liners give a good taste of what you can do really easily.
oneliners
Complete example code:
; Send an email to someone
send aperson@aserver.com "Hello from REBOL"
; grab an html page from somewhere and display it
print read http://www.google.com
; GUI with a button to send someone an email
view layout [ button "Send email" [ send aperson@aserver.com "Hello from REBOL/View" ] ]
; Run some code directly over the web
do ftp://aserver.adomain.com/script.r
Many built in data types to make it easier for new users
; eg
>> type? 3-may-2003
== date!
>> 3-may-2003 + 1
== 4-May-2003
>> type? $12.99
== money!
Very powerful and extensible language. Hints of basic, lisp, scheme.
Above all, great fun to code in.
I think the concept of "different types of intelligence" is popular not because of the facts but because of today's society's egalitarianism, and low-IQ people trying to preserve their self-esteem. I used to believe it too, trying to avoid being elitist, but after meeting enough highly intelligent people I've been forced to admit that the truth is, talent at more or less any academic topic is one single shared quantity. Someone unable to learn to program likely isn't too good at solving math problems, understanding works of literature or writing essays in philosophy classes either. It's not a question of "being born to do certain things" --- most of the time, either you're good at everything, or not so good at everything. That's the pattern I've seen among high and low-achieving students in my college. The best students tend to have an amazing variety of skills and excel at everything, whereas the worst get poor grades in everything.
I'm sure your girlfriend is not a retard, but she probably either isn't that bright or isn't really motivated to learn. That's just the way it is.
This point of view is not politically correct in today's environment, but the statistics I've seen --- for instance, IQ is a meaningful predictor of success in life --- and my personal experience bear it out.
Although I do most of my programmign in Python, I have had the best success in teaching people Ruby. IMO, Ruby is a lot cleaner and easier for people to learn. There is also a book available for free online at http://www.rubycentral.com that will help with the basics.
I always thought that Scheme and Logo were basically the same thing. Aside from some simple syntax differences and possibly scoping, I have always thought of logo as scheme with a drawing turtle. In fact one of the first things that I did in the first computer science class I took was first making a Scheme interpreter in Scheme and then making a Logo interpreter written in Scheme, which didn't require many changes. Anyway, you can do some pretty complex things with some simple languages. I would use Logo to draw some cool fractals.
I know it's not particularly marketable, but I've always thought Pascal was an excellent learning language. Pointers, structures, dynamic memory allocation... and simpler syntax than C. In my experience, most people learning programming via VB get bogged down in UI tweaking, and the C/C++ learners get bogged down in the &*&! syntax. Java leaners tend to get confused with OO when they haven't yet been exposed to variable scope, and functional decomposition, etc. Again, in my experience. Pascal is simple enough to get started quickly, but rich enough to let the learner grow into the advanced concepts. It's a gateway language - it makes learning C/++/#,Java, etc. much less intimidating. Although, for "Holy Crap, I made something!" value, VB's prety good. In no time at all you can make something that looks "just like a real windows application" (with all the inherent reliability ) I guess it all comes down to how much you want to spend on 'fundamentals' and how much you want to spend on, well, let's be honest, 'fun and cool stuff'. Ultimately, for some, it comes down to not choosing the right language, but the right project - start something simple and then keep pushing and pushing it. Maybe start with some HTML, move onto JavaScript (where you can get into parameter passing, functions, syntax, and control structures) and from there maybe into database or media stuff, depending on what would be fun to do next.
On HTML:
It can be mastered in a matter of days
I disagree. The syntax is easy enough, especially in XHTML (no this tag ends this tag doesn't mess.) But mastering HTML is much more than the syntax.
I've been doing HTML professionally for years, and I'm still working towards creating proper semantic documents and learning how to structure my content and then apply design.
Furthermore almost no sites actually validate against W3C's validator, and if you have mastered HTML you should be able to create valid documents.
But yes, HTML is easy to learn how to use in a matter of days.
.: Max Romantschuk
The point isn't that BASIC is a worthwhile language (although sometimes I like to play with VB for old-times sake). It is that just because you've learned some bad things along the way (yes, I used goto but hey, I was teaching myself) doesn't mean you're done for.
This is a good time to say that despite how I feel about MS now, it is true that if wasn't for them putting BASIC with MS-DOS, I don't know if I ever would have become a CS person.
You're missing the point. She wants to do something 'clever' with her computer but she's never going to be a hardcore 'C' geek, so you need something that is fun, gives fast results and looks good.
If she's got any hint of design skills at all go for Flash. Hell you might even get something 'commercial' out of it - get here to design a flash game that hooks in 'moms' and you have a seriously sellable product!
Yes, python. Consider it's interactive feature, you have an immediate feedback in teaching code fragments or typical algorithms. This quality made basic a learnig tool for decades, but basic is inferior in it's expressiveness.
Of course, some people will never understand the paradigm of computing. My mother calls any and all of dozens of computers I have or ever had "that silly thing" for forty years. As an accountant, she used a mechanical calculator for whole life. Her current boyfriend (both are aged over their 70's) was a nuclear scientist in his carrier, and he never touched the computer nor calculator. He did all his computing manually on logarithmic ruler.
There you are, staring at me again.