views:

330

answers:

8

A friend of mine is taking a course called "interaction design". She has no previous experience with programming, but is technical by nature. Worked with networking and system administration for a couple of years.

I started helping her with grasping the basic concepts of software and coding, but I feel the pace is so fast that I'm beginning to doubt if it's possible to learn at such rate.

They're using a fairly new language/platform called Processing, which is kind of like Java directed towards graphic programming.

It's 2-3 weeks into the course and they're already starting with classes, recursion and larger assignments like "make a rotating cube with images and webpages on each side that updates every minute" (she's barely digested what a function is or that variables are not return values). As if that wasn't enough, the teacher throws in code-to-start-with containing use of polymorphism and multi-dimensional arrays. Half the class has already quit.

I could really use some advice here. Do you have any recollection of how some things just "clicked" when somebody described a certain aspect of programming to you? How did they describe it? What method of learning was most efficient for you?

Should I go downwards and describe how code is represented in memory? Should I rant about analogies like cars inherits vehicle, with properties and car.Drive() etc?

+5  A: 

I would do some pair programming, nothing too complicated. Just explain what each line does and why it is there. Lecturing wont help - coding is learnt by coding (and coaching).

Petteri Hietavirta
+9  A: 

If the teacher is throwing that much at the students already, there's two cases possible:

  • The teacher is assuming a higher level of knowledge than your friend has.

  • This is the first time the teacher has taught a course and he's a genius that thinks everyone else can grok a new language in a day with a compiler and a spec.

If it's the first case (and you really want to help your friend succeed), then you're going to have to work with her really hard to catch her up on the baseline knowledge she's missing.

If it's the second case, then ... well, it's probably a waste of money. Teachers that don't understand that other people aren't quite as intelligent as they are generally turn out to be pretty useless teachers.

[Additional to earlier] If no previous programming experience is required and the teacher is throwing recursion, polymorphism and multi-dimensional arrays at them three weeks into the course, it sounds more and more like the teacher is completely clueless about "normal people" (if there is such a thing as "normal"). If that's the case, you and her have to decide if you're collectively going to bust your chops trying to do a pole-vault without a pole, or if you're going to just fail the course (and, presumably, complain about the course and try and get a refund).

If you're determined not to let the teacher win, you're trying to cram years of knowledge and learning into a span of weeks. In that case, it's going to come down to finding out how she learns best, then trying to cram everything she needs to know in there. Analogies are good, simplifications are good - hell, draw sketches if that helps.

Simon Righarts
No previous programming experience is required. Since half the class has dropped off already I suspect no-one expected much programming either.
sharkin
+1  A: 

I would probably start with "How do we get here"? Probably go back to ENIAC and then goes step by step from the first languages and the problems/constraints they had until you reach Object Oriented. Focus on the why of the features (polymorphism, inheritance, etc) and not the hows. Be clear to her that programming is like art, and everybody has a way of doing it. She should understand that computational problems could be solved in any language, the big question is "How difficult will be"? Programming is not about languages, is about a process. Once you dominate the process, the language should be irrelevant.

Freddy
A: 

Does your friend like to cook? Take some simple recipes, and make up a pseudo language out of them. and actually go through the recipes with your friend, showing different constructs: E.g.

if (basketOfEggs.Count == 0) basketOfEggs.Fill(getfromTheStore(eggs)); foreach (egg in basketOfEggs) { break(egg); discard(shell); }

funkymushroom
she cooks like elephants play the guitar..
sharkin
Does she have any hobbies? Or interests?
funkymushroom
+4  A: 

There was never a clicking moment in my case. I was taught some basics (literally) in school and learned the rest on my own (through the internet, books and trying).

Your friend seems to need to learn key areas of programming fast to keep up with the course. This should be extremely hard to accomplish if she has no prior knowledge of programming. You could give her an intensive course by explaining the areas step by step, but that will rob her of the fun of creating her own first programs on her own by trial and error.

If she has expertise in a specific subject, it could be helpful to show her how knowing programming will make her work easier and better. This would serve two purposes: she will be motivated (key to learning something fast) and will help you explain aspects of programming by using examples she can relate to.

If it's a possibility she should really think about taking the course after she has a good grasp of programming.

marg
+1  A: 

The "processing" languages doesn't look too bad: Here is a page with a Hello World section / example. Processing (the language) looks sort of like "logo" for the JRE.

It does sound like an instructor with high expectations. I'd go with the "let's type some of the stuff in from the web site, and see what it does" approach. I would try to go though the basic "script kiddy" sequence:

  • statements (these are not mutually exclusive, but you get the idea:)
    • I/O
    • variable assignments
    • calculations
  • functions (also not mutually exclusive from "statement")
  • variable / data types (scalar)
    • string (most data, surprisingly!)
    • numeric (gloss over integer vs float (real??? - not!) vs fixed precision)
    • boolean
  • conditionals
  • loops

Only after you are comfortable with the "moving parts" in a script, do you want to go into "scalar vs compound" data values, and then into "Abstract Data Types" or OOP.

Roboprog
+1  A: 

I'd be tempted to take a step or two back and consider these points:

  • Method of learning - Does your friend know what kind of learner she is? What I mean is what is the preferred interface for her to accept knowledge? In less geeky terms, does she do well reading, hearing, seeing in visual diagrams or is there another form that may work for her?

  • Mathematical inclination - Some of my earliest programs were the simple take a value and return something else type,e.g. converting metric to imperial or vice versa, and while these are extremely simple, they do cover some of the basics as most programs have just a few parts to them,e.g. get input, process input, output result. BASIC was my first programming language so there weren't a lot of things around data types or arrays initially.

For myself, some examples were useful but being able to abstract things out was a key point. So while someone could walk me through an example of doing a conversion from metric to imperial, being able to see how to put in variables instead of specific values is the key jump to be able to write the program to my mind. There are 1,001 to learn how to program and there may be a lot of trial and error for your friend so I hope she has enough patience and tenacity to make it through.

JB King
A: 

if it's java there is a program called java-hamster.. it's a german tool and the page is in german but i guess the code is english so you might wanne try it (look for simulator and then to download).. it teaches really basic programming and makes fun so she might grasps the basics faster.

another possibility is microsoft ants.. it's the same idea but with a .net language

Dimitri