←back to thread

7 points AsifMushtaq | 1 comments | | HN request time: 0.329s | source

I’m an experienced developer, but recently my 13-year-old daughter told me she wants to learn programming—and surprisingly, I find myself unsure about how to get her started.

There’s an overwhelming amount of advice out there. Some suggest beginning with Scratch or other no-code platforms, while others recommend jumping straight into the command line or a “real” programming language.

I’m torn between a bottom-up approach (teaching the fundamentals first and building up) and a top-down approach (starting with something more visual and practical, then filling in the gaps later). If we go top-down, should we start with Scratch or dive directly into a language? If it’s a language, should it be Python, JavaScript, or something else?

Even on the hardware side, I’m debating whether it’s better to get her started on Windows, macOS, or something else entirely.

I’d love to hear from those of you who have introduced programming to kids (or started young yourselves). What worked, what didn’t, and what path would you recommend?

1. zahlman ◴[] No.45078632[source]
> I’m an experienced developer, but recently my 13-year-old daughter told me she wants to learn programming—and surprisingly, I find myself unsure about how to get her started.

Start by making sure you understand what she hopes to accomplish, and that she has a reasonable concept of what "programming" is.

But you really don't have to sweat these choices as much as it seems like you're doing. Kids are smarter, and more adaptable, than you think.

And don't fret if she discovers a different, related passion (e.g. computer animation) instead.

> I’m torn between a bottom-up approach (teaching the fundamentals first and building up) and a top-down approach (starting with something more visual and practical, then filling in the gaps later)

You don't have to choose. There are visual/simulator based ways to understand hardware at the gate level (check out the various Zachtronics games for just one example) and build up from there. Nothing prevents students from considering this at the same time as really abstract programming concepts (SICP-style). Programming is about problem analysis as much as it is about writing code, after all.

> If we go top-down, should we start with Scratch or dive directly into a language? If it’s a language, should it be Python, JavaScript, or something else?

Many language choices are reasonable and you shouldn't sweat this too much. If you start with written, textual code then you should probably also expect to start with simple command-line programs — anything involving an event-driven framework is going to be too complex to start; code is much more easily reasoned about when the student controls the timing and sequencing of events. (Students will very commonly want to make "action" games, or even just things as simple as "the user has X seconds to type the password or game over". This opens up a new world of complexity, and you should be candid about that.)

But students must be engaged with what they're doing in order to learn. First, make some toy CLI demos/programs of your own. If that kind of program doesn't catch her interest, choose a different starting point.

> Even on the hardware side, I’m debating whether it’s better to get her started on Windows, macOS, or something else entirely.

Has she not used a computer before? (I realize that nowadays this can't be taken for granted any more.) Use the hardware and OS setup she's accustomed to using, if possible.

If you really must introduce to her the concepts of sitting at a desktop, opening a terminal, typing on a keyboard, writing text in an editor etc. — then start on Linux. It's just a more developer-friendly experience. Honestly.

> I’d love to hear from those of you who have introduced programming to kids (or started young yourselves).

For those of us who started young, computers were radically different when we started. For example, I started with ROM BASIC on a Commodore 64.

... Honestly, you could do worse than an emulation of that environment. Certainly it set reasonable expectations.