I want to be very specific in my question to avoid duplicate question. Hopefully this is adequate. I am working with non-programmers on a project. They are adult and in IT but they may not have the math background or any programming or heavy computer experience. What are the quickest ways to teach them programming concepts. Just the concepts so that they quickly get programming (as much as they can). Let's say that you have 2 weeks to understand X programming language oriented technology. And these are adults not students.

What are some of the best ways for them to understand some of those concepts? What are some solid techniques that really help a non-programmer get the big picture quickly? And I was trying to avoid talking about specific language implementations.

Notes: I see two major hurdles with non-programmers, (1) They don't understand what a computer really is. To them, it may seem like a magical device. (2) They don't have the time to hack out or even learn programming. There are just some concepts like recursion or understanding data structures that may take at least one all-nighter. They don't have the time to debug and test out a solution.

I have worked with people and gone through a programming task (editing properties) and gone through that task step-by-step and asked them to repeat those steps exactly. This works but once they miss a step, then they can't recover. Basically, they aren't understanding what is going on.

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.
If this question can be reworded to fit the rules in the help center, please edit the question.

What are they expecting to get out of it? Are they asking you to teach them, or did you decide you needed to teach them?
–
John BodeApr 21 '11 at 16:19

What is the primary technology that they need this for and what are they going to be doing with it? i.e. writing utilities to manipulate Active Directory? Writing Excel Macros for sales forecasts?
–
Dave WiseApr 21 '11 at 16:29

8 Answers
8

As a former HS and College computer science teacher I'm afraid that you're on a bit of a fool's errand. Their lack of background necessitates a slow process of laying a conceptual foundation. I work shoulder to should with "IT" folks everyday and I can attest to the fact that the gulf between us in not trivial.

What are you trying to accomplish? What are you expecting them to be able to do at the end of the two weeks?

The idea of doing this all in a completely conceptual way, w/o letting them get the "psychological paycheck" of seeing their efforts accomplishing something on the screen is not going to work.

Teach them branching and looping with something like Raptor:
http://raptor.martincarlisle.com/
If they're from the business you can also use Excel for if/thens. (Teach from the familiar to the new.) Just b/c they're adults don't be afraid to use something kid-friendly like Scratch or Robomind. (They will secretly like it.)

Then ease into something more complex. I've had great success to with VB.NET and Python.
The Intellisense in Visual Studio sounds like just what the doctor ordered. It can hamper a real coder, but it is incredible at giving a quick feeling of confidence to a novice.

Do a bit of lecture and then allow time to practice with it. Ensure that the reinforment activity can be completed in the time alloted. If they don't get 'a' and 'b' builds on 'a' - you are wasting your time.

I've sat through very expensive, week-long "trainings" on several occasions. Professions will listen politely, but try as they might, they cannot escape from the fundamental laws of learning. We learn iteratively, slowly buidling "schema" on which we hang our new knowledge "bits". Any attempt to brute-force through this barrier is doomed to failure.

If you are a very good teacher and committed to building lessons instead of lecturing endlessly I'd say that you could make some good progress in 2 weeks, but I think that recursion might be at the outside of what they can take in depending on the level of mastery that you are aiming for.

That is why I brought up the question. The gulf is pretty big but I was curious what you think bridges the gulf. The goal would be to teach someone that hasn't done programming to use Perl or Python to look for any patterns in a log file as opposed to manually do it. Also, the may use similar skills with VB macros to customize excel spreadsheets.
–
berlinbrown2Apr 21 '11 at 16:19

Also, another point in my question, I wanted to discuss how to describe a computer and computing such that they understand...what a program is?
–
berlinbrown2Apr 21 '11 at 16:20

The only half factetious answer to the "bridging the gulf" question is "a Business Analyst". :) Thanks for the context. I think that using a "tips and tricks" approach to solving a familiar problem in their paradigm would be best. What are they doing manually in Excel that you can do effortlessly with a Macro. Once they see the value they'll buy in. Also, if you have access to a Sharepoint environment you could show them how to use a View to refine a list.
–
Trey CarrollApr 21 '11 at 16:44

You are a teacher and I have noticed a lot of responses about specific programming languages implementations, but what do you think about "generic" computing concepts. How do you describe that and what is something that really should be covered. Computer memory is big, ram, cpu, etc.
–
berlinbrown2Apr 21 '11 at 19:29

What are some of the best ways for them to understand some of those concepts?

Lots of exercises.

What are some solid techniques that really help a non-programmer get the big picture quickly?

Lots of exercises. The "big picture" emerges after people synthesize and integrate a lot of details.

The forest emerges after walking among the trees.

And I was trying to avoid talking about specific language implementations.

Poor policy. Hands-on work in a specific language is the only way to understand programming.

I see two major hurdles with non-programmers, (1) They don't understand what a computer really is. To them, it may seem like a magical device.

Largely false.

(2) They don't have the time to hack out or even learn programming.

They are taking the course, aren't they?

A 2-week course is not 80 hours of you talking. It's less than 20 hours of you talking and at least 60 hours of helping them do the exercises and assignments in a classroom where you walk around and help them.

There are just some concepts like recursion or understanding data structures that may take at least one all-nighter. They don't have the time to debug and test out a solution.

False.

They don't need to learn recursion in a two-week intro to programming for non-programmers. Numerous professionals don't understand recursion. Some languages (i.e. COBOL) don't even support it.

Data structures are pretty trivial in most OO languages like Python. Indeed, they're so trivial that you should be covering them about day 3.

It isn't a course. I am just talking about other people in the IT department that need to use programming languages and other tools to do their work.
–
berlinbrown2Apr 21 '11 at 14:46

@Berlin Brown: Either it's a course with a syllabus (i.e., a meeting with an agenda) or it's just social.
–
S.LottApr 21 '11 at 14:48

If you are paid to use a programming like Perl or Python or something else to complete task and it isn't outside of a class, that isn't social?
–
berlinbrown2Apr 21 '11 at 14:53

@Berlin Brown: I can't parse your comment. Too many negatives. If you're going to teach programming, you must have some kind of outline or syllabus or agenda. That makes it a course. I can't see any possible alternative. If there's no outline (or syllabus or agenda) then it must be a purely social gathering with no particular knowledge objectives or new skills. In which case, don't worry. Have a nice time with them.
–
S.LottApr 21 '11 at 14:56

It's going to be a monumental task I can say that for sure, First thing I'd recommend would be to have a good teacher by teacher i mean someone who is really good in programming and who is also very good in expressing his thought process very clearly and sound. In our terms the best abilities of Developer and business analyst put together.

Two weeks is too little a time to learn any programming. If you were to make them pick up the basic loops, conditions and statements I think two weeks would suffice. More practical examples would help greatly and how well the person who teaches paces the lecture is the key factor. As a typical adult I'd imagine them getting bored in those post lunch sessions if they lose interest in the lecture.I'd recommend a hands on session in the afternoon keeping the concepts to day time.

It should be more interactive, real life examples for using the loops and statements and making the curriculum more suited to what they work in their daily day to day life, for instance i had the opportunity to teach little kids about logic and programming and the analogy for loops with chocolates and ice cream helped a whole lot greatly and they were glued to the entire lecture. If something along those lines could be worked out for these lectures it would help a whole deal. I am focusing on the sustaining the interest of the audience rather than the actual coursework.

Finally it all boils down to the individual person rather, For concepts like recursion its harder to teach and these are something which the individual figures out the best part(aha moment is enjoyed that way) and videos illustrating recursion flow could help much here.

Teaching some functional programming language would help a whole lot for starters. I'd always go for a high level language like C#, but keep the lectures clear off pointers :)

Good answer. If you could highlight one thing in your description of "programming", what would that be? Is there some aha concept that really breaks down the programming process. For me, I might use the concept of interpreter and compilation and that transformation into computer instructions or processing.
–
berlinbrown2Apr 21 '11 at 14:55

You meant for teaching perspective or was it intended for me?
–
VenkiApr 21 '11 at 15:06

Start a small but motivating project with them that includes what you want to teach, yet is simple enough for them to be able to recover from mistakes. It has to be interesting so they will want to learn more and spend time on it. Eye candy'd stuff is usually a winner here.

Supply them with simple documentation about what they'll need to do without holding their hand through it. For example, you might want to make it obvious they need to use recursion at some point, but instead of giving them the implementation, give them a short lesson about it, some written documentation and let them get their hands dirty.

Also, use a high level language in your lessons to avoid the inconvenient low-level stuff. I'd personally go with C#, Java or Python but it's ultimately your choice.

EDIT: It'll be hard, two weeks is really not a lot, but I think you can get some serious progress going on if you can get them to enjoy what you teach and manage to keep them interested.

The amount of required reading is small (less than 20 pages regarding basic concepts in the reference manual). You're ready to start after that.

Syntax is very easy, consistent and easy to the eye. Nothing to be afraid of.

The language features "advanced" or "modern" (whatever that means) like garbage collection, built-in dictionaries and functions as first class objects.

All in all it has the advantage to get you working very quickly without having to learn much up front.

I read "Structure and Interpretation of Computer Programs" recently and began to translate many examples from Scheme to Lua in my mind while reading (not completely, just as an idea). This book may not be suited for your planned introduction to programming, but this experience let me have the impression that Lua would be a decent language to start programming with.

Each exercise is one or two
pages and follows the exact same
format. You type each one in (no
copy-paste!), make it run, do the
extra credit, and then move on. If you
get stuck, at least type it in and
skip the extra credit for later.

By far, the fastest way I've found to teach adults the concepts of programming is Excel. Start with built-in functions. Get them to understand the purpose of functions, If/Then statements, outputting modified results (Round()), etc. One they've grasped this, you can move into UDFs in VBA and show them loops and the concept of an object model.

Granted, this is all more about scripting and tasks/macros, but I don't believe you're going to get very far with OOP or functional programming in 2 weeks. Fundamentally, they need to know about the automation benefits of programming first.

Just as important, make the topic relevant for them. A mortgage calculator, an expense report, balance checkbook, etc. Something like that. If the topic is something as irrelevant as "hello world", it's meaningless for the students and their brains check out.