I have a couple of friends interested in computer programming, but they're non-CS graduates; some of them have very little experience in software testing field (some of them took some basic software testing courses). I am going to be working with them on teaching basic computer programming, and computer science fundamentals (data structures etc).

My questions are;

What language should I start with?

What are essential computer science topics that I should cover before jumping them into computer programming?

What readings can I incorporate to make the topic interesting and non-overwhelming?

If we want to spend a year on it, what topics should take priority and must be covered in 12 months?

Again, these are non computer science folks, and I want to keep the learning as much fun as possible.

This question appears to be off-topic. The users who voted to close gave this specific reason:

"Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – gnat, MichaelT, Bart van Ingen Schenau, Kilian Foth, ratchet freak

6 Answers
6

Perl, or actually, Python. In my experience they are the easiest to setup, pickup, and get moving in, while the underlying implementation of programming languages is abstracted away.

What are essential computer science
topics that I should cover before
jumping them into computer
programming?

Before actually programming? I would go into basic programming constructs such as different variable types (or in the case of python and perl, different types of data), such as integers, floating point numbers, and strings, to start off with. Then move into control and flow constructs such as if-then-else statements and loops. These are essential to almost all modern programming languages. Then move into data structures later, although mention lists and arrays, since in python that's what you'll be using most.

What readings can I incorporate to
make the topic interesting and
non-overwhelming? If we want to spend
a year on it, what topics should take
priority and must be covered in 12
months?

After introducing them to a few languages and writing small programs in them (Hello World, adding numbers, manipulating strings, opening, reading, and writing files) have them choose a language they like best, and have them build something they like with it. Get them a book or provide online resource they can turn to for help.

Again, these are non computer science
folks, and I want to keep the learning
as much fun as possible.

Bring in as much (fun) reality as possible. Learning hashes (dictionaries)? Bring in basic cryptology. Learning trees? Bring in Facebook and friend networks. Learning algorithms? Write a program that guides the user to making a pizza (an algorithm is simply a recipe). Visualize data structures like trees whenever possible.

Once your friends are comfortable programming in a language of their choice, you have to let the "fun" part go a little bit in order to get into higher-level concepts. Programming is a lot of fun, but it isn't all fun, there are frustrations that can come up, just like in anything else you might learn.

Go with C or maybe Python. Only teach them the basic constructs such as if-else and for loops and then give them challenges to get answers out them. Do this for 3-4 months. If they are still interested, then move into more challenging stuff. Only start referring to books after this stage and that too only if they want to.
Books can make it feel a bit boring and technical. What you would need is to develop their interest and provide them a means to fulfill that.Aqua has some good ideas about making it fun. But remember to go easy and go slow. Take up things that can be implemented without too much fuss or something which you have experience with. That is vital.

Programming professionally is not at all akin to academia. It's more focused on the customer and requirements than anything. Being that web dev is so popular (check your local area), HTML is a great place to start. HTML has a low barrier to entry both for difficulty and monetary investment. From there you can take them into javascript and finally onto a lower level lang. like .NET.

really? algorithms maybe...but data structures? How on earth to you program effectively without any concept or understanding of data structures. How do even write code without first figuring out how to organize your data.
–
PemdasFeb 13 '11 at 3:10

Modern framworks abstract the data structs out sufficiently to perform most tasks to a customer acceptable level. Without a knowledge of fundamental concepts such as looping, variables or even the importance of code readability, its difficult to appreciate and understand advanced topics. Finally, there's no shortcut to a degree in computer science. There's a reason the above is not covered until after calculus, linear alg. etc.
–
P.Brian.MackeyFeb 13 '11 at 4:07