Fog Creek Software
Discussion Board

How best to teach programming to non-programmers?

Joel and others,

I'd like to ask your advice about how you would approach teaching programming to someone with little-to-no programming knowledge.  In particular, I'd like to help this person get started in programming Web applications, but it is of greater interest to me to have this person understand some core concepts that are pretty universal to programming (loops, conditions, modularity using functions, and OOP).

I have tried to make this happen before, but I can never seem to hold this person's interest for more than a day.  Sometimes I feel as if this person is only feigning interest to humor me, but he doesn't seem to understand that learning to program is never a waste of time, and will only serve to benefit him in the long run.  I understand that everyone cannot be a programmer, but if you were creating web sites for a living, wouldn't it be helpful and more lucrative to be intimately familiar with core technologies like HTML, JavaScript, databases, and web applications instead of relying on the GUIs of Dreamweaver and GoLive?

Joel, you mentioned that you were looking for possible topics to write about.  Well, how about my situation?  How to get people, who don't realize that the solution to their problems involves programming, interested in programming?

P.S. Joel, I really enjoyed your article on The Law of Leaky Abstractions.  It really hit home with me.  I read it to the person I'm trying to teach programming to, but it fell on deaf ears.

Don't wish to reveal that here
Monday, February 23, 2004

Forget it! Give up!

Some people are just born without the part of the brain that makes it possible for them to learn or enjoy programming. Actually probably most people are like this. There's nothing wrong with them. They're just not going to be programmers.

I don't know why. Different people have different mental skills. For example, I don't know or care about women's shoes. I have no ability whatsoever to comprehend women's shoes. I'm probably never going to understand women's shoes. Teach me about women's shoes and I will feign interest and then promptly forget everything you told me. (What's a pump? What's a blahnik? Why do straight guys enjoy porn featuring high heels? DON'T KNOW DON'T CARE!)

Joel Spolsky
Fog Creek Software
Tuesday, February 24, 2004

What you do not say is 'why' are you trying to teach them programming?

I suspect you would be better of giving them an 'instant gratification' tool such as Frontpage or Macromedia so that they can produce web pages. If they want to added some deeper functionality, I'm sure they will be more receptive to extend their creations with even some basic Javascript.

Tuesday, February 24, 2004

Definitely forget it. If you can't hold someone's interest they are not interested. I am harsher - when people who *are* interested ask me how to get into programming I am tempted to say "Don't bother - if you really wanted to, you would be doing it by now, because it's really incredibly simple to get hold of a cheap or free compiler and manual and you certainly already have a computer, so what stopped you?". But I try to be kinder than that, although I think it's futile.

Graham Asher
Tuesday, February 24, 2004

If the guy were interested I'd say have a look at Dan Gookin's "C for Dummies".

Since he isn't, I add my voice to those suggesting that you give up.

It's hard enough to get people to extend themselves to learn things they want to learn.

Fernanda Stickpot
Tuesday, February 24, 2004

'I am harsher - when people who *are* interested ask me how to get into programming I am tempted to say "Don't bother - if you really wanted to, you would be doing it by now, because it's really incredibly simple to get hold of a cheap or free compiler and manual and you certainly already have a computer, so what stopped you?".'


If they really wanted to learn it they'd know it already?


Fernanda Stickpot
Tuesday, February 24, 2004

Women's shoes?  Methinks he doth protest too much.

name withheld out of cowardice
Tuesday, February 24, 2004

I tend to disagree with Joel here (I don't remember the exact essay, but this is not made up). Joel's point was that _eventually_, the novice will need to know the subtleties of assembler and C, so it would be better to start by learning those.

I am learning to program in python instead of C. I think a high level language (higher than C in any case) allows the learner to grasp the basic concepts before he has to deal with the complexity of pointers and malloc's. This is true, of course, if the guy actually does study and learns C after that.

I concede that a grasp of the bits is essential for serious programming. I still think the millions of buffer overflows and similar bugs C allows you to make if you are not careful show that teaching C as a first programming language is like giving a knife to a monkey.

Python has allowed me to learn the basics of strings, lists (therefore arrays, lists in python are C arrays) without the drudgery of C. It also taught me to write clean, commented code. I can now start learning the hard part of C with the abstract concepts already firm.
...I guess.
So, to answer the topic's question: I'd start by teaching a clean interpreted language such as python or Ruby. Even better, HTML and CSS first, then scripting, then C.

Adriano Varoli Piazza
Tuesday, February 24, 2004

You misunderstand.

You are ACTUALLY GOING OUT AND LEARN THE THING YOURSELF.  You're ahead of 99% of the entire planet right there.

The OP is asking how to teach someone who probably might have a passing interest, but not enough to really get into programming.


Tuesday, February 24, 2004

Straight guys enjoy porn w/ high heels, because the design of the shoe tends to force a kind of ballerina/pointy-toe thing, that makes the calf and thigh appear somewhat more shapely than the "at rest" position. That's just one opinion, anyway.

I know you don't care but I just thought I'd add a couple of cents.

Tuesday, February 24, 2004

I thought a class on ASP and basic data base modelling for non programmers a couple of times. (Communcations college program.)
Most of the students could learn how to make basic web apps. The approach I took was to teach them how to do inserts/updates/deletes and of course how to select and output data more or less as fixed procedures. Once they had learned how to do this by route they also knew how to piece the parts together to make various web applications.

It worked surprisningly well. However, towards the end of the course I gave them the old number guessing-game as an assignment and about 80% were completly stumped.

I dont know what that says really, but its interesting none the less.

Eric Debois
Tuesday, February 24, 2004

I taught the class.. not thought.. typo..

Eric Debois
Tuesday, February 24, 2004

(to the poster who -i think- replied to my post) saying "The OP is asking how to teach someone who probably might have a passing interest, but not enough to really get into programming.


How would you teach history, or art, or maths, or writing, to somebody who had a passing interest, but not enough to really get into it?

Well... I'd try to make it interesting for them, try to set them a goal, and to think of a way in which programming can be fun to learn.
I was not talking about myself exclusively. If I had to teach somebody to program (god forbid), I'd try to start with something not too complex, going to the point, having fun...

The same thing I would do to entice someone in the study of any other subject.

Teaching programming for the non programmer is no different from teaching $anything to the non $anything.

Adriano Varoli Piazza
Tuesday, February 24, 2004

"How would you teach history, or art, or maths, or writing, to somebody who had a passing interest, but not enough to really get into it?"

You're mixing unrelated things in this comparison. Teaching in the school sense just means learning, and most people can force themselves to learn something and reproduce it on command so that they pass a test.

But writing or programming is different because the learners are supposed to produce something new eventually, not just reproduce previously learned things for a test. And you definitely do need a predisposition towards writing if your books are going to be worth a damn (or just so that you can stick through writing an entire book in the first place).

Chris Nahr
Wednesday, February 25, 2004

> "You're mixing unrelated things in this comparison. Teaching in the school sense just means learning, and most people
can force themselves to learn something and reproduce it on command so that they pass a test."

No, I'm not. I never meant "in the school sense". I wasn't thinking about tests at all when writing. I thought about me explaining concepts to someone who had yet to develop an interest in a subject.

> "But writing or programming is different because the learners are supposed to produce something new eventually, not just reproduce previously learned things for a test."

I don't think so. If I wanted to show someone why do I think History / Art / $anything is beautiful, I'd put into it the same passion I'd put for teaching programming. And I believe the difficulty of making someone interested in learning $anything (that little first step) is similar for every subject, be they "creative" studies (such as writing) or "memorization" studies (as history).

Indeed, you could say that it'd be easier to teach programmming or writing because you can set a very tangible goal: at the end of the course, you'll have your program, short story, painting, etc.

Adriano Varoli Piazza
Wednesday, February 25, 2004

Ummmm high heels are about changing the angle of the hips, nothing to do with the calves, not for nothing have they acquired their alternate appellation.

Simon Lucy
Wednesday, February 25, 2004

Totally off topic, but I believe the high heels are more of a cleanliness feature.  Porno sets aren't the cleanest to be walking around barefoot, so something needs to be on their feet.

It's high heels or sneakers I guess.

Phil Scott
Wednesday, February 25, 2004

Make learning programming fun.
One start is to make a game of it...IBM has two:


Code Rally:

Craig Laurent
Wednesday, February 25, 2004

- Strippers are often advised to wear high heels to make their calves not look like tree trunks.  However I assume some straights (or anyone attracted to lipstick girls?) like high heels because it's a sign of sophistication and feminine dominance.  Beats me, I'd think a pair of old sneakers is cooler but to each their own..

- It's hard to teach the desire of programming.  Maybe you can find an analogy to something they are interested in.  Are they some sort of human language nerd?  Then you can tell them about how compsci people have drawn on work from lingustics to parse information and computer languages; Chomsky's name comes up often and system designers likely have their own intuitions about Sapir-Whorf.  Dialects abound.  If they like philosophy, you could tell them about one of the symbolic-expression languages.  If math, you could mention how some computer scientists prefer continuations as more primitive than functions.  (Or whatever it is they like about them; I haven't looked at continuations closely. ;) 

Or you could argue how we have better formalisms than the ones developed through mathematical history.  Parenthesized notation is better for both humans and computers to reason with than mathematicians' kludges with inconstent notation; the lossages are on par with Newton's calculus notation vs. Leibniz's.  Then you'd draw them into a debate and they'll unwittingly learn stuff no matter if they win or lose.

But in the end, if it doesn't work, it doesn't work.  They'll need to feel strongly about something in order for you to make a bridge.

Tayssir John Gabbour
Wednesday, February 25, 2004

Well I thought the best way to learn programming now a days was through the web and not through the tradition route of a lousy dialect of BASIC. SO I got someone to write what I think is the best book for people to learn programming--of course I published it so I may be biased.

Gary Cornell
Friday, February 27, 2004

I can't count the number of ways it's stupid to join in this discussion, but just for the record, I completely don't buy the "missing part of the brain" argument.  I've continually been surprised by what people with the right motivation can learn -- even things for which they seem to have absolutely no natural aptitude.  Some people are naturally great at some skill and have a huge head start, and others just work incredibly hard at it -- like 5'3" NBA players.  I think talking from the point of view of anatomy (even metaphorically) is, well, as condescending as saying that using Lisp ensures that only great programmers will work on your project..... ;)

You can teach a non-programmer to be a programmer by making sure that they have or get the right motivation.

Marc Hedlund
Friday, February 27, 2004

Obnoxious, yer honor! Not all straight guys enjoy high heels. The prosecution is speculating. Me, I think women should be enjoyed like whisky: naked.

As for teaching programming - don't teach programming at all. Teach the joy of having made a program. Then programming will be necessary at some point in the future because those nice, userfriendly metaprogramming thingies can't seem to create the exact tweak he needs, and he'll find a need to learn HTML/Cobol/assembler/whatever. Then you can teach programming. The Chinese call that approach "wu wei" - doing without doing. Very zen. And probably quantum too.

Friday, February 27, 2004

Men are attracted to high heels in porn, because they are feminine, petite and attached to WOMEN.

Friday, February 27, 2004

To go back to the original question:

"Well, how about my situation?  How to get people, who don't realize that the solution to their problems involves programming, interested in programming?"

I think people have talked a lot about motivation and this is the right tack to go on ... you need to find a way to explain to the person that "the solution to their problems involves programming". Perhaps you're not the person to do this (you haven't had any luck so far and I don't know what your motives are), but if you get someone to come in and do exactly what your person wants to do, faster, better and easier, then I think they'd quickly get very motivated to learn programming!

Once you have the motivation, then it's a matter of picking your poison in terms of actually teaching programming. My personal feeling of this is that the "best" way usually has a lot to do with the temperament and needs of the individual.

Meri Williams
Friday, February 27, 2004

What did Robert A. Heinlein say?  Something like, "Never try to teach a pig to sing.  It wastes your time, and it annoys the pig."

Alex Chernavsky
Friday, February 27, 2004

Joel -

Your women's shoes analogy was an unfortunate for 2 reasons: 

1.  It caused several comments to wander off topic.  (Must we discuss porn here?)

2.  It came dangerously close to reading:  "Men are interested in programming" and "Women are interested in shoes."  I know you didn't mean that, but suddenly the whole thing became unecessarily gendered.

Friday, February 27, 2004


Lighten up.

Jim Causey
Friday, February 27, 2004

I prefer "Men are interested in women in particular shoes", which sort of drives about half of the discussion above.  The fact that we're discussing something as banal as porn in the context of programming (or is it the other way around?) I think is kind of a fascinating comment on humanity.

In any case, I believe that 95% of the programming I've learned has been to solve a problem.  Sometimes the problem wasn't really all that important, sometimes I just rationalized myself into playing with code, but I always had a 'reason', no matter how flimsy.

I'm by far not an expert programmer in any one language, but I'm very quick to pick up a new language to the point where it will solve a problem.  To say that one language is better than another, simply based on personal preferences is truly egotistical.  Granted there are specific cases where specific languages work best, but the overall menagerie of lingos out there all do more or less the same thing.

In a way, I've taught myself the meta-language of variables, loops, etc... and then all problem solving is simply matching the syntax.  Granted this produces awful code that is often hard to debug.  But when you run just about anything on a P4, it doesn't freakin' matter!

So - I say, find a problem, and try to fix it with whichever programming language that appeals to you most by name only.  There are hundreds of mailing lists, websites, support groups - all indexed by Google - that will help you through the hard parts.     

Nick Ryberg
Friday, February 27, 2004

First question: does this person use a computer? My wife, who I love more than any code I ever wrote, just uses the computer to surf the Web. I see little use in trying to teach her about programming. Even my daughter, who uses the computer constantly, has no interest.

Just because I drive a car does not mean I have any interest in how internal combustion works.


Doug Schwartz
Saturday, February 28, 2004

Thank you all for your insight.

For those of you who asked, my motivation for teaching this person programming is that he wants to create websites for fun and profit.  He currently uses Dreamweaver and Flash in his work.  He's not too familiar with HTML and even less with JavaScript, and forget database-driven web applications.  He basically gets by on Dreamweaver's design view, basic CSS, and Dreamweaver extensions to create drop-down, rollover menus that are actually just JavaScript (but he doesn't know that).

As for Flash, he uses ActionScript (which is pretty much JavaScript with built-in classes for Flash-specific concepts like MovieClips, sounds, and timelines), and has a ton of books on Flash and ActionScript, but he seems only to be interested in learning something when he encounters a specific problem that requires that piece of knowledge.  Otherwise the books sit on the shelf and gather dust, not to be opened until he has a specific problem.  My problem with that approach is that he carries it to extremes.  When he started learning ActionScript, he learned what variables are and how to declare them, the basic operators (+, -, *, /), and the dot syntax to access fields of an object.  Then he stopped reading and began to make his website look like and act similarly to a GUI (draggable windows  with content in them).  Since he completed that GUI, he hasn't gone back to pick up from where he started.

Now he has actual clients who he does websites for.  But he seems to have no real interest in going back to fill in the parts of programming and website development that he missed.  I often have to help him when he reaches in impasse and I would like him to be able to find his own answers.  When it comes to ActionScript programming, I notice now that he buys lots of books and especially magazines for code samples that do what he wants to do.  He doesn't understand the code samples completely, but that doesn't matter with him as long as it works.  You can't get by on code samples alone.  He's been doing this since Flash 5 came out (so I suppose that's about 2 years now?) and he still has no clue about loops (he's never used a while loop), functions that take arguments or return values, or any aspects of OOP.

Truthfully, I don't know if there's much hope for him if he continues like this.  Just like school, if the student doesn't really want to learn (not to be confused with really wanting the answer for a specific instance of a problem), you really can't do too much to make him learn.

Don't wish to reveal that here
Saturday, February 28, 2004


Maybe teach him something that he needs for his work.
He might not be interested in the OOP - Paradigma, but in how  Javascript handles DOM elements.

He might not be interested in pure HTML markup, but in how good metas make his webpages (even those flash intros) more accessible for crawlers, and such for search-engines and such for users wordwide.

etc, etc...

Saturday, February 28, 2004

Why high-heels?

Mass Marketing.  You probably couldn't find a television on the market today that didn't include a closed-captioning feature, yet most people couldn't care less about having that feature.  The same is true of mass marketed software like Word, Excel, etc.  Those programs are packed with features that most people don't care about.  However, there is some segment of the market that requires that feature and wouldn't buy the product if it didn't have the feature.

How to teach a non-programmer to program?

You can't teach anybody anything they don't want to learn or believe they can't learn.  Virtually everything else can be learned by any adult without serious learning disabilities, providing that they have enough desire to learn it and aren't carrying around a bunch of mental baggage that says, "I can't do _____."  People aren't magically born without the part of their brain that allows them to program the VCR or change the oil on their car.  But a lot of people won't ever do those things simply because they don't want to or because they've convinced themselves that they can't.

Sunday, February 29, 2004

>>> Virtually everything else can be learned by any adult without serious learning disabilities, providing that they have enough desire to learn it and aren't carrying around a bunch of mental baggage that says, "I can't do _____." <<<

How would one prove this statement?  Even if it were true in some logical sense, would it be true in a practical sense?  That is, can anyone learn any skill within a reasonable length of time.  If person A can become a skilled C++ programmer with, say, 3 years experience and person B could reach the same skill level in 150 years, then you could say they could both learn the skill, but for B there is no practical difference between being able or not able to learn.

I don't think things are quite as extreme as not having parts of the brain required to understand some particular concept, but people do seem to vary a lot in their learning abilities and a reasonable person will want to make the most effificent use of their limited life expectancy.

Sunday, February 29, 2004

how can no one respond to gina being told to 'lighten up'?!

it's really creepy how all the comments following just act like that response to her post never happened.

Monday, March 1, 2004

>>> Virtually everything else can be learned by any adult without serious learning disabilities, providing that they have enough desire to learn it and aren't carrying around a bunch of mental baggage that says, "I can't do _____." <<<

>>>>How would one prove this statement?

Well I could think of several experimental designs to test the hypothesis.

hypothesis : subjects preconceptions of their ability to perform a test/task will effect their performance on the test/task

design a.

3 groups - same task, same experimenter etc.

group 1 - tell 'the task is extremely difficult' etc, etc and see what happens.

group 2 - no lead up just do the task (control)

group 3 - tell task 'is easy' etc

use some nice statistics to compare the results of each group.

design b.

use 3 groups (again)
give group lead 'test'
same task, experimenter etc

group 1 : 'you performed excellent on test', administer 2nd test

group 2 : just give 2nd test

group 3 : 'you performed poorly on test' etc

I'm sure it wouldn't take too much to dig up some experiments with a similar hypothesis, it a question most psychologists are interested in (well I am anyways)

If people don't see the fun in learning something or appreciate what they learn or the reasons for learning it, well it's going to be tough.

Pink Panther
Monday, March 1, 2004

I'd like to second Gina's sentiments.  The subtext of many postings in this thread is very disturbing.

And no, mr Causey, I'm *not* going to lighten up about this; why on earth should I?

Peter Lewerin
Monday, March 1, 2004


The reason for the lack of response is probably related to the topic of the thread itself. The lack of involvement stems from the lack of interest from this particular population to direct applications of gender equality issues.

On another note, I believe Joel said of the high heels issue "DON'T KNOW, DON'T CARE". So it certainly was not for his information that the first follow up post on that issue was made.

Concerning learning:
I agree that the concept of 'aptitudes' is completely false. Short of exceptional difficulties such as dyslexia any adult of average intelligence and SUFFICIENT MOTIVATION AND CONVICTION can learn almost anything.
'Mental Blocks' and disinterest in learning a particular concept, or task are usually related.
I recently observed a CompSci class for a semmester at my uni. It was compulsory for the students to take the course even though they were in a different discipline (Mathematics/Education).
There were many different types of students.
There were the ones who 'got it' and were interested.
There were the ones who 'knew it' already.
There were ones who didn't 'get it' and 'weren't interested' but were willing to work at it and those who were not willing to work and instead copied assignments and got others to do it for them.

It was possible to learn how to program on a basic level by rote - without understanding all or even most of the fundamental concepts.

The lesson I can now draw from watching that class is:
It is IMPOSSIBLE to learn and UNDERSTAND a task or theory without interest and motivation.

It might take 3 years to make a professional C++ programmer out of an average intelligence adult, but if it takes 150 years I can confidently say that at least 145 of those years would have been spent gaining sufficient interest in programming in C++ rather than actual 'learning'.

Bob Hu
Monday, March 1, 2004

My progression was
Illustrator -> Graphic Designer -> Web Designer -> Web Developer ->  Windows App Developer -> ?

Motivation to learn?
1. Being in IT pays lots more than being an artist.
2. Believe it or not - IT has better job stability.
3. IT clients know that they don't know your job - Graphic Design Clients think pink and orange are a great combination.
4. IT guys have process to cover their butts.
5. etc

If he doesn't WANT to be in IT ... good on him. ( But Flash is nassty! )

Bram Borak
Monday, March 1, 2004


No-one responded because no-one cares.

I certainly didn't read anything gender-biased into Joels comment, & I find it amusing that Gina did.  I think the 'lighten up' comment hit the nail on the head.

If you want to raise the issue of gender bias in IT, fine, do so - in a separate thread, rather than tacking it onto another thread in a response to a totally unrelated post.  Frankly, the entire thing smells a bit of trolling to me.

Duncan Bayne
Monday, March 1, 2004


It's quite obvious that very few in this forum care, and that's frankly the scary part.  Someone (Gina) comes in and tries to point out that the discussion is getting offensive.  Someone else (Jim) dismisses her in a very patronizing way, and *nobody cares*!

Why is it appropriate to discuss the pornographic connotations of high-heels, but "smells of trolling" if you state that you are offended by it?

The gender bias was in this thread from Joel's first comment.  I don't think he intended it that way, more likely he just picked a bad analogy.  Regardless of intentions, it really did come out as "men program -- women buy shoes".

Peter Lewerin
Tuesday, March 2, 2004

There is an excellent article in the current issue of IEEE Computer (Feb. 04) on this very same topic.  The authors, who teach CS at the University of Geleph, elaborate on some of their travails with teaching non-programmers how to code.  The article describes their new cirriculum, which focuses first on JavaScript as the introductory language, and then Java as one progresses.  Excellent read:

Shehrzad Qureshi
Tuesday, March 2, 2004

Re: gender issues

Has it occurred to anyone that maybe what Joel really meant was, "women AND straight men like women's shoes -- gay guys don't"?

Consider the question he concluded with: "Why do straight guys enjoy porn featuring high heels?" Now, which of the above interpretations is more likely?

[Yes, I'm sure this will fan the flames of the non-programming-but-still-very-interesting gender thread. Apologies in advance.]

Wednesday, March 3, 2004

I'm not in the mood to be doing real work on a rainy day like this, so here's my two bucks worth...  There is another, albeit small, connection between these two topics.

High heels + naked or semi-naked women = SEXY! is a fairly recent development.  Take a look at any Renaissance painter (works by Ruben are usually easy to find).  In those days, plump + naked women = SEXY! was the rule.  Some beanpole with high heels (regardless of their clothing status) would have been seen as ill, insane, and in general, not very interesting to a "normal" male libido.

In between Ruben's era and ours, there was a complete paradigm change in female sexual attractiveness.  I don't recall when it was, exactly, but a good student of history in painting can tell you that it was relatively dramatic, and seems to correlate to the point at which the assured supply of sufficient food became an accepted "given".

"Programming for the masses" is probably going to see a similar paradigm change - we won't see it happening until the cultural underpinnings require real programming in order for a typical human to be considered a proper "brown monkey".

Note - "real programming" is what I call the ability to produce systems that have complex interactions and/or require specialized knowledge to make them practical. A very large portion of our society already does "programming", from my eight year old building a simulation in his Lego (tm) package to my sister-in-law trying to put up her web page on MSN.  Real knowledge of algorithms, search strategies, the design of easy to use and consistent UIs, etc., etc. that we professional "programmers" must have is not yet a requirement.  The original poster's friend probably does not need our depth of knowledge, and is being quite rational in not investing his or her time to gain this knowledge until, and unless, it is truly needed.  For their intellectual entertainment, they may be better served by a study of Chinese ceramics (or the subtle distinctions between high-heeled naked women and high-heeled, naked women smoking cigars...)

Wednesday, March 3, 2004

The sad thing is, this Dreamweaver/Flash guy probably calls himself a programmer or inadvertently leads others to believe that.

Thursday, March 4, 2004

Yes, NoName.  He does consider himself to be a programmer and has conviced his clients that he's more capable than he really is.

The sad thing is that his clients believe him.  What does that say for their intelligence?  So far, his clients have been very small businesses that haven't really gotten too far off the ground.  So they've been the type of people who want a website, but don't want to/cannot spend a lot of money.  Most of the time, they don't really know what they want on their website, just that they want one.  He usually makes a couple hundred bucks for a plain HTML website with static text and some graphics that he created or took pictures of.

He doesn't understand that he won't get the bigger clients (which means making much more than he currently does) until he can create the bigger website, which involves databases, programming, and dynamic page creation using technologies like PHP.

Don't wish to reveal that here
Thursday, March 4, 2004

Just how important is it to teach programming to non-programmers?

For most people, computers are a means to an end. In fact, an awful lot of early computing breakthroughs were developed by people who just wanted to do something else. A better focus for developers might be "how much can we let people do without programming", or at least without what we consider programming.

I remember when VisiCalc was introduced on the Apple II and suddenly there were people able to use computers to do all kinds of things. People developed all sorts of applications, interactive subsystems, and automatic analyzers using only the original VisiCalc spreadsheet primitives. Hint: there was no macro language, you looped by adding rows and copying.

Not everyone considers building a spreadsheet programming, but for the people who used VisiCalc, and later 123 and Excel, it really didn't matter.

Then you get the spectrum of programmers. There are the higher level language programmers, where you don't have to worry about memory allocation (e.g. Perl, Lisp, VB). There are the mid-level language programmers, who do worry about memory allocation (C++, C, FORTRAN). Then there are the real programmers, who use assemblers, or just ram in the octal or hexadecimal, or even raw seething bits. At what level are you "authentic"?

It's like trying to find hard science. I read a neat little essay on this which started with the biologist, who referred the searcher to the chemist, who suggested the applied physicist, who pointed to the theoretical physicist who deferred to the topologist who said topology was all rather "fuzzy and intuitive" and definitely not a hard science.

If someone wants to learn about programming, great! Teach them something that gives a lot for a little and quickly. I'd choose RealBasic or VisualBasic, because you get a familiar user interface without having to have a clue. This means you can concentrate on the real stuff.

Different people need different levels of understanding. I recently got a "birds and bees" talk at my local car repair place, and I found it very helpful, even if I already knew how synchronizers work. Do I really need to know what tappet valves are to drive to the store?

Thursday, March 4, 2004

"Has it occurred to anyone that maybe what Joel really meant was, "women AND straight men like women's shoes -- gay guys don't"?

  I don't think it follows necessarily.  In what Joel says, he leaves the door open to the possibility of a group of gay guys that like women shoes.

  I think he was comparing more to himself.

  Oh and yeah, I don't care either :-P

Friday, March 5, 2004

"How to get people, who don't realize that the solution to their problems involves programming, interested in programming?"

And lose my halo of mystery? Never!

Friday, March 5, 2004

In general, there is an apparent internal algorithem in most (if not all) humans that determines at what point how many people can be offended, and how much, and what amount of uncertainty there can be about their level of offense, before any action is taken.

In this instance, or or two people complaining about something being unneccessarily gendered crosses the threshhold for what is "too offensive to too many" to approximately...well, 1 person, at last count.

Interestingly (to me at least), far more people have an exceedingly low threshhold as to what level of personal offense must be met before they complain, and in fact most people have a lower threshold for complaint than for the correction of a multi-participant discussion due to possible (or actual) offense.

Now, wasn't that just fascinating?

I thought so too.

Aside: I have a very high threshold for what offends me, and a particularly high threshold of the amount of offense required to at all reconsider what I might say in a situation like this, much less myself object something as well. I also almost never object to anything as being "offensive".

As such, I don't particularly care either. It's the internet, and so I - and probably many others as well - take the stance of "If you don't like it, stop reading."

And I have to say, I love how it's wasn't Joel's comment about high-heel porn and straight men that bothered someone, but that a comment might seem somehow unneccessarily gendered.

My words may be dry here, but I'm really really quite tickled by that. Yes, I've obviously been awake too long at this point.

Friday, March 5, 2004

Ignoramus (that's what you posted as, I am not calling you one),

I agree with you that most people don't care about the internals of any system as long as it works for them.  But you need to read my earlier posts where I explain that my reason for wanting to teach programming to my friend is that he is getting in to the web site business, and that to be decently competent at creating web sites (of all kinds), you need to understand the inner workings of the technologies involved in creating web sites (programming being one of them).

You may not need to know what tappet valves are to get to the store, but you would want your mechanic to have that in-depth knowledge, right?  Especially since you are paying him to fix your car.  It's that in-depth knowledge that makes all the difference between being merely capable and excelling in any field.

Don't wish to reveal that here
Friday, March 5, 2004

Since others have spent electrons discussing a fringe part of this discussion, let me note that Adriano Varoli Piazza's characterization of history as "memorization studies" is only accurate in grade school, high school and those general ed courses you had to take as colleg freshmen.

History is supposed to involve studying past events to understand them. Unfortunately, when teaching history to masses of people who have no inherent interest usually can only result in some rote memorization and copious regurgitation of someone else's analysis. Kind of like taking code snippets someone else created and re-using them.

If you find the right teacher and the right technique, you can teach history in a way that most people find intriguing and want to learn more about it. When they get really interested, they start reading first person accounts of events, compiling a bunch of them and writing their own interpretation of those events, based on what several people who saw it said happened.

Hmm, maybe history and software development have more in common than any of us thought.

Dave Navarre
Monday, March 8, 2004

Flash is very cool.

I would like to think of myself as a programmer (plenty of experience in C++, c#).  I had to take over some flash work recently.

Actionscript 1.0 (used in Flash MX) is OK.  If you understand the basic concepts of OOP, and the prototype chain as implemented in actionscript 1.0 the whole exercise becomes quite easy.

With Flash MX 2004, the whole programming side has become more rigid, and rules based (similar to VB5 vs

However Flash is a tool that can be used by both designers and programmers (infact there is an ide setting to determine the type of user).

The designers do great work. It is up to us programmers to help them understand OOP better, and make sure that the interfaces to our actionscript components, and other serverside components are used properly.

I used to poo poo flash. But, I have become a convert. I can quite easily develop a platform independent application without too much difficulty - especially if we are talking about communications to server components.

Anyway my response to How best to teach programming to non-programmers would be to revert back to pseudo code.

Keep it simple. Translate that into actual code in whichever language being used. As the solutions become more complex, then you need to understand the implementation of the language in greater detail. But that is where experience, books, and the internet come in.

Monday, March 8, 2004

I wrote a tutorial for the non-programmer, using Ruby as the language.

My wife, who had previously never programmed, is now building a website generated by Ruby.  She's smart, but took no math or CS in college... has no interest in math... *had* no interest in programming...

Anyway, you might want to give it a try:


PS:  I'm with Gina on this; a huge portion of this thread has been taken up by totally off-topic stuff.  It's a shame, because it's an interesting topic.

Chris Pine
Wednesday, March 10, 2004

Personally I think only people who have taught (outside of a classroom) people how to program should answer. I have tired and it failed. But I should have known. The owner of the company said employee X was really looking forward to my arrival as he wanted to learn to program. I asked what what X had already done but the owner didn't know. When I met X I asked him. He had nothing. I asked him how long he had been wanting to be a programmer. He said a year. Oh boy. Forget it. I've mentored other people ... people who had used their bootstraps to learn. Mentoring is teaching someone who CAN and has learned. But if someone asks me how to program .... they are missing something. Now ... I've tried to get my kids interested. I used to pay my kids to read books and that has paid off as now I only have to buy the books. I've tried paying them to learn to program or at least create an html page but they are not there.  An adult who has to ask someone to teach them to program ... I'd say such a person would never learn. Anyone have evidence to the contrary?

Thursday, March 11, 2004

Web Design and Web Development are still two separate disciplines, even though programs like Dreamweaver and Flash are beginning to blur the boundaries slightly.  It is  extremely rare to find a talented Web designer who is an equally talented Web developer.  The two skill sets aren't mutually exclusive, but it is a rare person indeed who can do both jobs extremely well. 

Perhaps the person in question should find a partner who is as competent a Web application developer as he is a Web Designer.  That might make more sense than trying to encourage him to become more interested in developing programming skills, when it seems fairly clear that he is not. 

Unless he is also a bad Web Designer, in which case he should be advised to go into sales.  ;-)

too shy
Tuesday, March 16, 2004

He may not be interested in programming, but surely no one would want to turn down the possibility of making more money?  So instead of tackling the whole "learning programming" thing as an "end" (or goal), perhaps you can tackle it from the perspective of it as a "means" to the "end" of "making more money."  Anyhow, just my two cents.

(Oh, and for what it's worth, I agree with Gina, Peter Lewerin, et al.  I don't think I need to restate what they've already stated.)

Wednesday, March 17, 2004

I totally agree with Joel - programming is like playing virtuoso violin or hockey: if you've you've got the spark, you've been doing it since your teens.

I used to try to motivate people to consider programming as a career.

Now I realize that when I interview job applicants, my single criteria is: have you been programming since high school? do you have a computer at home with a compiler because you have an irrepressible compulsion to write code? If not, you're just kidding yourself and wasting our time.

But I don't want to get off on a rant.

Pierre Cloutier
Sunday, March 21, 2004


To answer your question about no one responding to Gina's being told to "lighten up":

In my own experience there is, in fact, a tendency of "Men being interested in programming" and "Women being interested in shoes".  Though statistical (and not deterministic), this is exactly what I see, and I don't feel a need to cover or lie about it.

Monday, March 22, 2004

Coming next week, gender studies in the information economy...

"Are shoes the definition of femininity?" or
"Is programming the definition of masculinity?"

This gender argument has been an interesting side topic to develop in this thread, with the numerous chest beating "I don't care" responses.

I would suggest that these responses are made for a variety of reasons, but I would contest that they are interpreted by readers as...

1) "I don't care" (because it seems irrelevant to the topic)

2) "I don't care" (because I'm a borish insensitive man, and I am indifferent to the so-called offence)

3) "I don't care" (because I'm staring intently at high-heeled shoe related pornography)

This has been an attempt to add a pointless, lightening up footnote to this wonderful thread.

anonymous coward.
Tuesday, March 23, 2004

Best Way is to teach them for some time the things such as TSR's and Algortihm Analysis in C and C++ or atleast those things which are of interest to a small kid in IT.... And after i think you need not ask them to read or study... they willlllll.... This is what i followed so many times with MBA Guys

Thursday, March 25, 2004


You want us to teach you, to teach him; or atleast inspire him. This sounds like marketing!

1) Define the constraints of your relationship to the student.
    Is he just a friend? Do you have the ability to hold out or punish if he doesn't respond at some level? Is there a reward system that can be employed?

2) Find character flaws of the individual you can exploit.
  Does he have an ego? Talking just over his head so that he has to learn to keep up the conversation... Works for babies :)  Does he have contemporaries that he can be embarressed (sp?) around?

3) Are you willing to hurt him to help him? Criticism of his work may spark the self doubt needed to seek education, and self improvement. And I mean real criticism, you have to tear it up, show examples of professional work here.

Ofcourse, you may lose a friend. But few of my best teachers were my friends. ;)

Also think about yourself here. A's want to hang with A's. He doesn't sound terribly A-like.

William Bingham
Thursday, March 25, 2004

The uninterested non-programmer is totally healthy and rational.  The problem is on the other side - YOU.

Somebody with helper syndrome is giving knowledge away for free and a so called "friend" charges his customers for reselling this knowledge to his clients.

"Wanting to help" is the real problem. The friend has no problems spending money on books to get his needs met. If he is not willing to pay you for your advice he is most likely just a user at your expense - so the problem is you letting him exploit you and your lack of people skills to see this. You already mentioned that this guy has no problems faking more skills than he has to his customers and you are actively supporting this by covering him with the difficult stuff.

Solution: Charge a fee $50/hour for ANY help (no exceptions) you give him.  That increases his respect for you as person and your knowledge. If he fails without your advice he will realize your worth. See also Joel's article about pricing and think about "pricing yourself".

Tuesday, March 30, 2004

I'm with the school that says certain people have a greater aptitude for certain subjects. However, there are great problem solvers who have no interest in programming.

In the case of the unenthusiastic website developer,
I'd say back off, clearly you've given this person
good advice (and help), and they choose not to follow it.

Perhaps you should start becoming less willing to help
with those little instant problems, and that might prompt
him to "help himself" and do what it takes to further his
career, and not embarass himself in front of a more
knowledgable client.

(off topic section of post)

As to the Gina affair:
Its my first time on this forum, and also my first time on Joelonsoftware, and yet I spent over an hour reading the essays. Why ?  Because Joel's great sense of humor is peppered throughout to keep the often technical topics interesting.

So if the joke (yes joke, not to be taken seriously) helped lighten the mood of the discussion, all the beter.

However now that this subtopic is on the floor....

No point going into any sort of forum with an unrealistic sanitized view of the world, ready to throw our giant "politically correct" dictionary at the first person who speaks their mind.

So I will be frank on the subject being insinuated.
Yes I think your average woman puts more effort into her appearance than your average man (this includes shoes, clothes, cosmetics, perfume, plastic-surgery etc....). Don't believe me ? Talk to someone in advertising, or better yet in the department store business.

However, this in no way makes them any less capable of being programmers. The broad sweeping statements like:

"men are more interested in programming and women are more interested in shoes"

are uncalled for. Since again those two intersts aren't mutually-exclusive (contradictory).

Hani Obaid
Tuesday, April 20, 2004

Q. How best to teach programming to non-programmers?
A. Don't.

I am a computer-science student (therefore might not know much or might miss something).
However, I used to teach secondary-school kids some very basic programming class (first steps in programming on example of Pascal) and very basic progamming related math (like modulus, etc). Please note that kids were paying money for this, so at least they pretended to have a desire to learn programming.

The whole impression I had is as follows: either someone has a brain that is capable of understanding programming principles or not, AND SOMEONE WANTS TO USE THE BRAIN, or not.

Group 1: wants and can
By asking "teach me some programming" a person from this group means "Explain me some basic steps and point out where to find more info". Those people are excellent at learning themselves and need you just for some very high-level guidance. They don't really need you to sit by their side and point where to go all the time. It might be appropriate for kids, but not for grown-ups. Cherish these people, as they are very rare.

Group 2: wants and cannot
This is a pretty sad case and much more frequent than the first one. Unfortunately, I must admit that I failed the mission and was unable to do anything good. The best advice I have is: this is not for you; you might one day become a good developer, however nothing extrodinary. But what the heck, not everyone has to be a developer, maybe you won't like this job at all, how about trying yourself at something else that developers cannot do, like women shoes?

Groups 3 and 4: don't want.
By asking "teach me some programming" these people mean "make me/force me to program". Impossible. Don't even bother. That's it.

The overall conclusion is: either people can and want to learn programming and those can do it perfectly by themselves, or teaching will lead to zero (or close to zero) results. So don't bother. I always have a couple of cool links/questions for the first group, and a couple of "I'm sorry" answers for the rest.

Sad as it is, I beleive it is true.

Aleks Santars
Friday, June 18, 2004

*  Recent Topics

*  Fog Creek Home