
Nobody Wants to Learn How to Program - jemeshsu
http://inventwithpython.com/blog/2012/03/03/nobody-wants-to-learn-how-to-program/
======
nhashem
When I was in high school (late 90s), they had kind of a weird curriculum for
teaching programming. We had AP classes for Computer Science A/AB, which you
had to be at least a sophomore to take. There was also a class called
'Computer Programming' that anyone could take, which I did as a freshman,
although the students in the class were actually pretty evenly distributed
between all four grades.

Basically we were taught QBASIC and given assignments. The first few weeks
seemed pretty mundane as the OP describes, getting into conditionals and
loops, etc, but after we learned those, my teacher told us to make something
like 'Choose Your Own Adventure' text-based game. I remember loving that
assignment and even compiling it as an EXE and sending it to my other friends.
This pretty much followed through the whole year, learning some new
programming concept (arrays, functions, etc) and then making some sort of game
as an assignment. We had the usual "write a program to display all the factors
of a number" assignments too, but I just remember loving the game projects. I
didn't know anything about Big-O or AVL trees or whatever, just that I could
create cool stuff on a computer.

In 10th grade I took Computer Science A, and about half the class hadn't taken
Computer Programming already. The material was a lot drier, obviously, and I
remember a lot of those students switched out. I witnessed the same thing my
freshman year of college -- no 'Choose Your Own Adventure Games' as an
assignments, just grueling midterms on polymorphism and inheritance.

So this post really resonated with me, because my thoughts have basically
echoed this for awhile -- why isn't software engineering taught as a
discipline that can let you implement and create, since that's exactly what it
is?

~~~
thecabinet
> So this post really resonated with me, because my thoughts have basically
> echoed this for awhile -- why isn't software engineering taught as a
> discipline that can let you implement and create, since that's exactly what
> it is?

Because most colleges teach "computer science" not "software engineering".
Computer science is primarily about abstract concepts, and not so much about
necessarily doing anything worthwhile with them. (This is similar to saying,
"Why doesn't physics teach me to build X?" Because that's mechanical
engineering!) Admittedly, there's hopefully some occasion to apply the
concepts, rather than just memorize them, but the focus should be on the
science, not the engineering.

In my curriculum, software engineering was one of my possible senior classes
(including OSes, compilers, etc., almost all focused on application).

~~~
pestaa
So why is there more focus on computer science than software engineering if
most businesses do not care about the science one bit?

~~~
SiVal
This is a great question, and the answer is that universities serve their own
institutional needs, not those of business, or of society, or even of
students. I remember the shock when I was in college trying to learn Japanese
and I asked why, after the first couple of years of language, all the Japanese
classes switched to literature or obscure linguistics. I told them that I
wanted classes in advanced language that would teach me how to live and work
at a professional level in Japan: present in a business meeting, read a
contract, etc. I claimed that going from basic language to advanced, modern,
professional Japanese was a lot higher priority than a switch to archaic,
literary Japanese or obscure linguistic analysis. They reacted with outrage,
claiming that if they were to do what I was suggesting, they "wouldn't have
any academic credibility at all!"

Ah, that's what it's about. Not my needs but theirs: not real-world skill but
academic credibility.

Of course it would be what I needed if, and only if, I intended to become an
academic in the field myself, but that is what universities are---farm leagues
for finding and developing future professors.

Since professors are only a small portion of the work force, most people
weren't even supposed to attend universities. Most people were supposed to
enroll in other educational programs (tech schools, art/cooking/etc.
academies, apprenticeships, and so on) if they intended to work for a living.

But these days, no employer wants you without a university degree, so
universities can go on serving themselves and you'll pay for it anyway,
because the end for non-professors is a general purpose "degree" credential
that employers use as a proxy for generic employment qualification.

I'm not saying that computer science isn't important, just that it is a higher
priority for academia than for business, and academia serves academia.

~~~
mathattack
True. And CS is still one of the more practical degrees. But in the end
faculty are weighted on their research, and producing Phds who cite their
research, so post-undergrad employment isn't a big concern.

------
edtechdev
This is stuff educational researchers have known for over 20 years, and
theorists have known for 100 years (John Dewey). It's called situated
cognition. Learning happens in context. You have to give students a _reason_
to learn, not just learn something for its own sake. It explains why for
example a Brazilian street kid may be a whiz at math, and a 6 year old may
have hundreds of Pokemons memorized. See for example the work by James Paul
Gee or Jean Lave. John Dewey said 100 years ago that we shouldn't educate just
to prepare kids for a future they know and care little about, we should
educate them for today, teach them stuff that is useful and interesting to
them today.

An example of my own - at 9 my father attempted teaching me programming with
basic - I thought it was pretty boring all that work just to draw a US flag on
the screen, especially compared to the videogames I was playing. I was
similarly bored with a basic programming class in high school and a survey of
programming languages (lisp, C++) class in college (worst class I ever took in
my life, actually).

It wasn't until early college when I started making CGI web applications,
games, and educational software that I learned real programming and saw the
value of it (along with the value of similarly boring calculus/linear algebra
stuff).

I disagree with the author of this article's put down of GameMaker and similar
tools. Python was not designed for beginners, and neither was Javascript, of
course. Right now Scratch may be the best tool for teaching kids how to
program, although it is very limited and not so great for creating games as
other tools.

~~~
melling
I wish I could vote you to the top. It's painful to see people "rediscovering"
something so obvious. By not understanding this people are wasting so much
time.

I've been programming for 30+ years. It was the enthusiasm of putting sprites
on a screen and moving them around in 6502 assembler that kept me awake into
the wee hours, pouring through books and magazines. The need for loops,
branching, subroutines, etc all come naturally. As programs got bigger, the
need for modules arose.

Once you have the "need/desire" to learn a subject, the rest comes so much
easier.

------
karpathy
This post very eloquently expresses what I've believed for a long time as
well.

It really hurts me to see newbie programmers in first year classes going
through Java, writing getter and setter methods for a monster Object Oriented
cash register or something. The code is spread across 40 different functions
in 10 files, each function containing at most 5 or so lines of code. I'm sure
it is a nice starter code for an amazing cash register application that can
potentially scale to thousands of lines of code correctly, but it is not the
way to teach programming. What a disaster.

I've made my own set of tutorials in the past on programming (see the set at
<http://karpathy.ca/phyces/tutorial4.php>, though this set is for intermediate
students who are already familiar with coding). I've always felt that coding
should be taught in context of doing something concrete, not just by itself.
Snippets of code without the whole don't mean anything. I also take a somewhat
extreme view in that I think that game programming specifically is the best
way to teach, because making games is engaging and students learn all the
programming only as a by-product. Once they are comfortable with the basics,
they should be introduced to progressively larger code bases, and at some
point it becomes obvious why Object Oriented paradigms, for example, are a
good idea.

As a last point, I think Udacity recognizes this as well and shares a similar
philosophy. Notice their first two classes: "How to build a Search Engine" and
"How to build a Self-driving car", not "101: Computer Programming", with
Chapters 1. Variables, 2. Control flow, etc.

~~~
ilovecomputers
I tutored a friend who was in those OOP, Java, Intro to CS class. It was her
second class of the series and she was so overwhelmed by all this stuff that
was made for professional software engineers, that she just dropped that
class. It wasn't mainly the courses fault that she left, she also forgot how
to conjure up loops and how to use them, but knowing the professor she took
last quarter (he likes to weed out people by making the class difficult) I
can't really blame her for not having the enthusiasm to retain such
information. I was in her shoes before, so I was very familiar with the "blank
page" syndrom she was going through.

This "sink and swim" teaching mentality has to go. It seems like from this
thread and the article that we are getting a better idea of how people like to
learn programming. Let us actually put effort into teaching this way.

~~~
pullo
I agree. 'sink or swim' has been the technique of preference in academics for
many years. I would think it it is the same for any discipline (electronics or
chemical engineer). may be the fluid abstractions used in learning software
make it much harder to train people?

------
zedshaw
I have about 200k+ unique visitors a day reading my books, and over a million
since I started tracking in May last year. I have comments on nearly every
exercise on my books, which means people are actually going through them. I
have 2200 people taking my udemy course which is the most popular paid class
on the site (last time I checked). My books are used in workshops all over the
world, have readers from all over the world, and have taught people from
nearly every age group that can read English.

And my books do exactly what this article says you shouldn't do.

I'd say if nobody wants to learn basic programming concepts from you, then
it's not the concepts, it's you.

~~~
angelbob
Zed, you're awesome. With that said -- it's who you're teaching that lets you
say this.

Right now there are people who know they want to learn programming coming hell
or high water, and you do a damn fine job teaching them.

There are also a whole lot of people who might want to write apps, but do
_not_ want to go through the pain of learning programming.

The audience of Scratch, from MIT, is the narrow end of this giant wedge of
people. They have nowhere to go from there because nobody else does it that
way.

I miss the Apple II. It actually had a few on-ramps for people like that.
Those on-ramps are pretty much dead now, though I have no idea why.

The guy writing this article isn't aiming at your set of programmers. He's
aiming at all the people who aren't programming but would love to be able to
build apps of one kind or another. There are a lot of them, and even a lot who
could, and who we do a terrible job of teaching.

~~~
zedshaw
And no, I'm saying it's a huge myth that nobody wants to learn the "hard
stuff". They do, you just have to teach it right. After that you just have
people who aren't interested in programming at all and no amount of graphics,
games, or cute cartoons is going to make them want to. You can't force or
trick enlightenment on people.

But more importantly, _I_ have evidence to back my beliefs. This article has
absolutely no evidence.

~~~
AlSweigart
Hi Zed, I'm Al, the author of article. I'll admit the title is hyperbole.
There are people who want to learn programming for the sake of programming,
just like there are people who like learning math even though they don't see
immediate practical applications.

I teach programming to a tiny class of 10-12 year olds on Saturday mornings,
and have taught a couple one-off classes at Stanford's Splash program to a
classes of a dozen students. I've found that having an end-goal in mind of
what they will create is a much better hook than just explaining what for
loops are (or the idiosyncrasies of the languages are, which Python & Ruby are
good about keeping to a minimum.)

I don't think graphics and cute cartoons are needed to make programming
engaging either. My book "Invent with Python" has games that use ascii text up
until the last few chapters. There's a pretty low standard for games/programs
that are cool enough to show off to other people, but nobody ever shows off
code snippets.

I think the best thing about "Learn Python the Hard Way" over a book like
O'Reilly's "Learning Python" is that your book cuts it down to the bare
concepts: "Type this. This should appear. This is what is happening." That's
great compared to most computer books where there are paragraphs upon
paragraphs that could be whittled down to a single sentence or cut out
entirely. "Learn Python the Hard Way" is barely over 200 pages. That's much
more digestible than some 600 page tome.

I just think that many classes where the students aren't CS majors or
necessarily dedicated to learning programming forget that it's not just the
concepts that people want to learn but what they can make using those
concepts. Small games and web apps are great for that. Like in Exercise 22 of
your book says, "It’s important when you are doing a boring mindless
memorization exercise like this to know why. It helps you focus on a goal and
know the purpose of all your efforts."

~~~
zedshaw
Right, but I think you are confusing causation with correlation. You say,
"Nobody wants to learn the boring stuff and they just want to make games."
But, they _will_ learn the boring stuff if you teach it right. The concepts
aren't what's putting people off, they're just correlated with bad styles of
teaching it.

For example, explaining programming to total beginners doesn't work. Like you
say, paragraph on paragraph about boolean logic is pointless if they can't
even type:

print "hello world"

A beginner can't understand this because they don't have the cognitive tools
to comprehend your explanation. But, if you make them do it a bunch, in tiny
bites, and build their understanding as you go, then it works. This doesn't
work for experts, but it works great for people with no prior knowledge.

So, you are confusing the concept with the delivery. The concept does not
cause boredom, it's the delivery that does. And, I also don't mean you have to
deliver it wearing a clown costume, I mean breaking it down in a way that
builds the concepts from nothing.

~~~
wiredfool
So, I'm walking this edge right now with a few middle schoolers.

At the beginning of the (school) year, we started doing a programming class
using scratch. The operative theory was to be able to explore, get the
cause/effect thing going, some debugging, and be able to build something that
they could distribute and have other people play. It was a success for a
while, within a class or two, pretty much everyone had something that was more
than just basic behavior. There was some animation, some 'cat chases mouse',
and other basic games. But they quickly hit the wall where scratch is just
painful to program. There's no abstraction, and if you want to do space
invaders, you wind up copy and pasting a hell of a lot of code blocks. And woe
to you if you then need to change something. Dragging and dropping is
attractive till you need to build equations of motion.

So, beginning this semester, we're working through LPTHW. The class is
smaller, some were definitely scared away by the "hard way" and my warning
that they'd have to work. But the ones that are there are soaking it up. I
think we're at ~ 5 lessons a week, based on one class time when they can do
stuff + homework.

They're getting it. They can find bugs. They have seen where we can go
(because of scratch) but they've also seen that there's got to be a better way
than drag and drop. My goal is LPTHW should take a quarter, then we'll pull in
pygame and some networking stuff, and do a basic networked game. My goal is to
be able to translate one of their scratch games roughly block to line, then
kick it up a notch. Seeing what I have, I should have abandoned scratch after
a quarter, rather than a semester. It would have still given them the view of
where we can go, but had them miss the more frustrating parts of the scratch
environment.

I've now got some home school experience teaching kids from pre-k to middle
school. Heavily scripted stuff is awesome, _provided_ the kids see where it's
all going at the end. Far better than random or directed exploration. (I've
seen this in learning to read, elementary math, programming, and an art
class).

------
endlessvoid94
"If you want to build a ship, don’t drum up the men to gather wood, divide the
work and give orders. Instead, teach them to yearn for the vast and endless
sea." - Antoine de Saint-Exupery

------
trjordan
As I sit here, past 3 in the morning, playing with an Arduino for the first
time, I find myself thinking...

GOOD LORD THIS IS FUN.

The Arduino folks have this whole thing nailed. The install process
(especially for something that involves, you know, buying resistors) was
super-easy. The examples seem endless (they have a UDP implementation?
Nifty!). The troubleshooting page is relevant and specific. The default
environment is so stripped down it hurts, but you know what? I don't care.

This _feels_ like I'm just getting started again, and I'm totally jazzed about
it. This whole system is approachable, understandable, and _fun_.

~~~
noonespecial
I started with MC6811's typing MOV AX,BX. It was like a tiny Manhattan project
just to blink an LED.

How I envy you.

~~~
gridspy
Yeah, and to write and read a byte of data from an SD flash card - woah!

------
AlexeyMK
The cleanest comparison I can think of is, nobody wants to work out. They want
to look good, feel good about themselves and be admired and have their pick of
their opposite sex.

This makes sense, as does the fact that working out can get you there. They
don't want to work out, they want to _want to_ work out.

At the University of Pennsylvania, we (CS club) held a Codecademy-style event
(hackertrails.com) targeted mainly at business folk. We had 150 folks, mostly
MBAs, show up to the first event and maybe 15 to the second.

They want to start companies, and get that programming gets them there. But
they don't actually want to learn to program, they _want to_ want to.

~~~
jsz0
Another good comparison would be learning to play a musical instrument.

~~~
keithpeter
Yup, and the approach to getting children interested and motivated is similar;
teach small easy pieces that sound like what their peer group is listening to.

------
jdietrich
To quote eight-time champion bodybuilder Ronnie Coleman:

"Everybody wants to be a bodybuilder, but don't nobody wanna lift no heavy ass
weight."

~~~
meric
Everybody wants heavy ass weights lifted, but don't nobody wanna have to be a
bodybuilder to lift them.

------
kiba
_The more material you give your students to plagiarize, the wider the range
of derisive works they’ll make from them._

Derisive should be derivative?

------
hnwh
This is one thing that Logo got right. You didn't learn to program, you
learned to draw cool pictures and animations with the turtle

~~~
gaius
... and before you knew it, you were recursing and doing all that fancy CS
stuff without even trying!

------
john2x
I think part of the problem why some aspiring programmers give up is because
the bar is too damn high. They get fed a constant stream of beautiful 3D games
and iPhone apps, and when they start to make one (from following a
book/tutorial, for example), it looks like shit compared to what they/others
are expecting and they lose their initial enthusiasm.

Compared to a few years ago where a simple 2D/text-based game is already
considered pretty cool.

------
j_baker
I agree with the general principle behind this. But I don't agree with it in
practice. It's a bit like saying "Nobody wants to learn how to drive, they
want to learn to get to the store.". And strictly speaking, that's true. I
mean, nobody wants to know about how to use the steering wheel or blinkers.
Now, the first time I got behind the wheel, did I get to drive to the store?
No. I got to drive around the parking lot _after_ taking a class about how the
steering wheel and blinker work.

Now clearly this example is different from programming because it's much more
difficult to hurt or kill someone learning to program than it is when learning
to drive, but I'm not convinced that the general principle is any different.
With programming, you'be simply gotta learn about variables and loops, just
like you've gotta learn how the steering wheel and blinkers work.

What I'm concerned about with this approach is that it might give newbies a
premature sense of accomplishment that might hide just how difficult
programming really is. In other words, it's like trying to convince someone
that they've driven to the store when all they've done is driven around the
parking lot.

~~~
ilovecomputers
The article states "A small amount of programming concepts had to be taught at
the start and some single-concept examples are given, but the chapter always
centers around a complete game."

But besides, getting to the point of premature successes:

In a way, you need a premature sense of accomplishment to keep a person
motivated. Plus, if they ever come across the difficult portions of
programming, that motivation might get them to go through the difficulty.

To me, the difficulty in programming is solving a problem using a lot of the
difference concepts that make it up, but that's true with any profession and
you can't get those concepts in your head unless you learn it one at a time.

What I don't want to see anymore is programming instructors teaching students
a lot of concepts at the same time because to them that's the difficult way
they learned and the "right" way to learn. That's just not a proper way to
learn, you need to teach one concept at a time and if that means premature
sense of accomplishment, so be it in the short term.

------
mrich
Nobody wants to work hard (learn to program), everybody wants to show off a
coding masterpiece, say Quake or Future Crew's second reality, to their
friends. A good teacher leverages the latter to motivate students to do the
former.

------
capkutay
While learning piano, no one wants to sit in a room playing scales over and
over. They want to play Claire De Lune. Programming is similar in that it can
be an art but it is first and foremost a skill. You need to struggle with
boring parts until you figure out that you can actually make very cool
things...but first you need to learn about loops and variables.

~~~
muraiki
But you can teach new techniques in the context of full pieces, gradually
introducing them, to great effect. This is the whole premise behind the Suzuki
method of music education, and it's highly effective in cultivating not only
technical proficiency but also musicality -- and in young kids, at that (it
also substantially improved the musicality in piano playing for my wife, who
is obviously an adult)

------
geon
I tought a highschool level intro class in C++ programming. Sadly, it was very
short, only 1.5 weeks of 2 hours per day, so we didn't even have time to cover
classes.

What I _would like_ is to walk the class through implementing a naïve
Brainfuck interpreter, optimizing it, then implementing a Brainfuck-to-C
compiler and optimize that.

It would bring a whole lot of understanding I didn't gain until much, much
later.

After that, a simple text based adventure game engine to illustrate data
driven programming.

That would show the difference between hard coding behaviour in assignments
and creating actual usefull applications. It would also show that doing it
properly isn't necessarily more difficult, and definately less code.

~~~
orborde
> What I would like is to walk the class through implementing a naïve
> Brainfuck interpreter, optimizing it, then implementing a Brainfuck-to-C
> compiler and optimize that.

Nowadays, I would find that an awesome assignment, but your high school
students would hate you.

------
crewtide
As someone who learned to program in my 30s (spent my 20s as a professional
musician) I can't agree more. The book that was recommended to me was K&R,
which I found so dry as to be impossible to read through. The first book I
really used was C++ in 21 Days, which has you writing working programs
from...well, from day 1.

I always thought the reason for this problem in teaching programming is that
what you need to know when switching to a new language is totally different
from what you need to know when you don't know how to program. If you already
know how to program, the first thing you need to know is the syntax: data
types, iterators, etc. It's like being a carpenter and going to a new shop --
what are the tools? But if you don't know how to use the tools, being told the
torque on an impact wrench is completely useless information. Not only is it
useless, it's easy to look up, and therefore a waste of time to teach.

I now help teach the Boston Python Workshop, a weekend workshop for non-
developer women and their friends. We do cover loops and data types on
Saturday morning, but then all afternoon is projects -- building programs that
cheat at scrabble, access twitter, and draw colored grids.

I totally understand why experienced programmers teach the way they do -- it's
what they'd want to know. But the focus should not be on the language, it
should be on the skill of how to program regardless of language. And yes,
that's really hard to teach.

------
jiggy2011
Perhaps a good way to teach people beginning programming would be to show them
how to use a simple web framework.

It would have to be something purpose built to be easy though probably with a
dedicated language.

A bit like this:

No libraries or APIs , everything required is built into the standard library.

Database is a simple key/value store that can be used transparently within the
language. Something like "Store X = 3" and "Get X" where X is the key name.

Of course you would need some form of lists too, not sure what a friendly
syntax for that would be.

Very simple looping syntax, in my experience beginning programmers struggle
with this more than anything else.

Something like, "do X 3 times" where of course X would be a a subroutine, this
would make functional programming seem quite natural later.

A WYSIWYG HTML editor that can integrate seamlessly with the language itself.
Save teaching HTML/CSS until later.

Very friendly error messages that provide links to simple documentation that
explains where they have most likely made the mistake.

Documentation should include many videos as well as text.

Graphical debugging should also be taught through a super simple debugger that
just dumps the values of every variable at a breakpoint and allows users to
browse the DB.

One click "deloy to web"

------
AznHisoka
is this the same with foreign languages as well? Noone really wants to know
the rules of a grammar. They just want to impress others, understand anime or
foreign tv shows, or curse in another language

~~~
pozzy
I can say the same about programming languages. I'm reluctant to learn a new
programming language because I don't want to spend time learning the library,
the syntax, and any other intricacies. All I want is that one cool feature
that X language has that Y doesn't.

------
JVIDEL
I think the biggest fallacy these days is that "programming is easy". I bet
pilots think flying is easy, and surgeons will repeatedly tell you cutting
someone open and removing this vestigial part of the cecum is routine, but if
you did that the patient will bleed to death from the first incision.

My point is that coding might be easy for you, easy for me, and it must be
easy for most people here, but the rest of the world?

I'm going to sound like Spock here but most individuals out there aren't
logical. People out there don't thing in terms of ¬P->Q, so for them even the
basics of programming are very hard, if not impossible to understand.

And even if you work around your limitations and learn how to program there's
a long way between "hello world" and the engineering behind the kind of stuff
that motivates most people to learn how to code, like building the next
Google.

------
leouznw
That remembered how I learn programing, at the beginning of the course I
wasn't at all into that, learning pascal, printing words into a black window,
but when I started my project, I got a goal and it become very fun and I was
very enthusiastic into that...

I think sometimes the common sense of the right way of doing things its not
the best way, other thing that comes to my head about that, is when you end up
in big projects with very complex design patterns applied but since nobody
b-sides the creator fully understand the pattern, and the shift of people in
the project is very high, the thing becomes a mess.

teaching is about enthusiast your students and programing is about make
programs with readable code...

but what i really see today, is teaching about be difficult with a ton of
unused things, and programing about to be most complex that u can..

------
nazgulnarsil
plenty of people are fine with learning how to program. It's Learning How To
Program that people don't want to do. I blame hiring practices TBH. If
anything programming should be the ONE field that leaves the bullshit
signaling aside and just hires people who can make things work.

~~~
hsmyers
Shakespeare had it wrong---not kill all of the lawyers, leave them on the list
sure, but first kill everyone in human resources. Ask yourself how many times
the first question asked in today's interviews is 'Can you do the job?' To my
admitted old fashioned way of thinking, it should be the first , middle and
last question. Particularly since it is the only question that makes a damn
bit of difference. Oh---and then kill all of the lawyers...

~~~
bdunbar
_first kill everyone in human resources._

Blaming the HR guys for bad hiring practices is like blaming a coder for
feature creep.

The fault lies with business directing HR to do things the way they do.

This probably got started when someone infected business with the idea that
one should manage people the way xerox machines and staplers are managed.

They changed the Personal Department to Human Resources and lurched into a Red
Queen's Race to the bottom.

------
hsshah
I believe (and teach) programming the way I learn a new language ('Human'
language not a computer language).

It should be segmented in a way that at the end of each segment there is a
'reward' (an application of the learning that is considered beneficial/cool by
the student) and a 'desire' to learn more to achieve the bigger reward.

So typical segments for a new language could be: \- bragging/showcasing to
your family and friends that you know how to count some numbers and words \-
being able order food in restaurant in the new language \- communicating with
someone who speaks only the new language \- being able to enjoy a TV
show/movie in the new language etc

That's why I really like Scratch tool. I can gradually introduce new
capabilities (and implicitly new programming concepts).

------
danso
I disagree that regular expressions should be deferred to later. For
professionals who are trying to figure out what value programming has for
them, regexes have more use than game concepts

------
projct
Randy Pausch helped create Alice, which is a bit like a modern Logo or
Mindstorms - helps you create 3d animations and various other cool stuff,
while teaching Java syntax.

<http://alice.org/> (and if you haven't seen it yet, Randy's last lecture is
amazing... <http://www.cmu.edu/randyslecture/> )

------
Tycho
On a related note, I put an advert on Gumtree a while back offering to
teach/tutor people in programming for free, but didn't get any responses.

~~~
ThePawnBreak
I'd love to take up that offer, if it's still available. I already know some
programming, but I would like to have somebody as a mentor. Send me an email
at mocanu_c at yahoo.com if your offer is still available.

------
altrego99
Well, I do. And I also did, in 1990's, when I was 10 years old.

------
loveitbaby
There are two ways to teach programming:

1\. SICP 2\. Everything else

If you think there is a method in (2) that is superior to the method in (1),
then please reply to this comment.

------
georgieporgie
Can anyone with kids comment on whether or not computers are even exciting and
empowering anymore?

When I was eight, we got a Commodore VIC-20. It plugged into the TV and booted
into BASIC. Just running PRINT statements and simple loops was unbelievably
cool. I learned key positions (and how easily mistakes are made) by spending
hours typing in bytecodes printed in magazines. With any luck, at the en of
it, a completely unforeseen game would appear.

Getting to play with Logo on the Apple ][e was awesome, too. Shapes and angles
and horribly flickering animations were exciting.

Now, it seems to me that the difference between Dive Into Python (or whatever)
and Call of Duty are so immense, that even running Hello World would be a
disheartening experience. But maybe I'm just too nostalgic.

Incidentally, I distinctly remember from my first proper high school
programming course (Pascal) that the instructor asked why we wanted to learn
programming. Every single student responded, "to make games."

~~~
artursapek
I'm 19, so I've never experienced a terminal running BASIC on a TV screen or
anything else from those early days. I think my oldest memory of computers is
Win 98.

What got me into programming originally was Lego Mindstorms (the original
version, the second iteration was no good). My dad and I made robots that
could follow black lines on the ground and read barcodes, and it was all with
the drag-and-drop interface Mindstorms ran on. (
[http://www.bouwvoorbeelden.nl/MindStorms/ShootOut_bestanden/...](http://www.bouwvoorbeelden.nl/MindStorms/ShootOut_bestanden/RIS_ScrnTTL.jpg)
) And it was fucking awesome.

It taught the concepts of programming like loops and conditions and variables,
but in a watered-down way that took care of the stuff that's not fun for a
kid. As you grow you find joy in tackling more complicated things, but as a
kid Mindstorms was perfect. Great role-model for any aspiring curriculum in
younger education.

Even though it would be way out-dated technology now I feel like Lego should
start manufacturing those kits again - they were really amazing. Maybe that
would be a good startup idea? Raspberry Pi for kids?

~~~
simonbrown
I thought the whole point of Raspberry Pi was that it was for kids.

<http://www.raspberrypi.org/about>

~~~
artursapek
Meh, I mean they are aiming it at education which I think is great, but I
doubt many kids would know what to do with Raspberry Pi if you just handed it
to them.

My impression is that the main interest in it has been from older people who
like to hack on hardware.

~~~
derekp7
That's true of the current ones, but I think the idea is to develop it into a
kit with case, manuals, pre-loaded software, etc. to support some sort of
programming or robotics curriculum.

Personally, I think it would be neat if the R-Pi could be made into a graphing
calculator, which most kids need for their math classes any way (actually they
don't need it, but are required to have them). That way, it can be a bog
standard calculator by day, and a full Linux workstation by night (after
plugging in display/keyboard).

~~~
artursapek
Having just graduated high school a few years ago, I'd say graphic calculators
are sort of needed. Most of the time a simpler calculator would do the job and
having a $100 Texas Instruments is just a luxury because they're better laid
out and show a history of operations like a terminal. Even when graphing and
matrices were part of the curriculum, those things can all be done by hand if
you really have a lot of time, but it would be harder to learn that stuff
without a reference to compare yourself to.

TBH I think books, calculators, computers, and basically every other tool kids
use in school will soon be replaced by the iPad, or a similar device. If
someone can make a cheaper alternative with R-Pi that catches on (very
doable), well great.

------
Craiggybear
I agree that involving beginners with OOP is a distraction -- albeit a very
important principle. But they must be able to write their own modules,
functions and classes first then be comfortable with exporting those _then_
OOP can come naturally from that. Most software is still highly procedural in
nature (while it may consume and refer to objects) and even in languages like
Python where everything is an object you can still write software that has a
clearly defined beginning, middle and end. Once you have a handle on all that,
you can then start utilising the objects and their properties and that is huge
fun in Python and Ruby.

