Ask HN: The most interesting current approaches to teaching programming?

4 points by cproctor ↗ HN
Are we trying any genuinely new strategies? Or are we still trying to successfully implement ideas from the 70's?

8 comments

[ 4.5 ms ] story [ 25.3 ms ] thread
I'd really like to see some deliberate practice approaches. Kahn's academy seems close.

For developers, something like laracasts (or other screencasts) is working well it seems. Not very revolutionary though.

Solving programming puzzles (or competitive programming) is a good basis for a deliberate practice plan. There are a lot of sites that provide puzzles of increasing difficulty. So you can work on problems slightly above your current level, which is one of the tenets of DP.

I wrote a blog post on this topic with more details on a specific process: http://www.redgreencode.com/deliberate-practice-for-software...

Khan Academy is a reasonable way to start learning programming, but like other learning sites (Codecademy and others) they focus on learning things the first time, and not as much on getting better. CodingBat (http://codingbat.com/) takes a more drill-oriented approach, which is more effective for learning the basics well. But there's not a lot of content there, in comparison with a puzzle site like SPOJ (http://www.spoj.com/).

Was there something wrong about the approaches of the 70's?

I think we look for something that makes it easier for large numbers of people to become programmers. And I guess that's OK, for some definition of "programmer". Teaching people to be professionals still takes a degree, or basically an apprenticeship, or both, and I don't see that changing. (You don't see a new approach to teaching chemical engineering dramatically changing things.)

But perhaps I have misjudged the thinking behind your question...

I agree that becoming a professional requires socialization and sustained practice. I intentionally left the scope of the question open, but am most interested in approaches that help move people from being novice users to being literate: able to accomplish their own goals using programming (at a hobby level) and reason thoughtfully about programs.

There are a huge number of ed-tech apps and products being developed with the intention of "teaching X to code," but they mostly seem to fit into a taxonomy of approaches that was already in place 30 years ago. Approaches such as interfaces where syntax errors are impossible (Scratch), toy worlds that present puzzles to solve (Karel the Robot), or full-power programming languages that are fundamentally oriented toward teaching by providing graphical feedback on program execution state (Swift).

I'm curious about others' sense of what's really new, but am not very interested in saying novelty is good or bad as compared to working on a previously identified approach. I thought Bret Victor's DBX talk (http://worrydream.com/dbx/) was an interesting exploration of this space.

I think your right up to a point but when people talk about apprentices in IT terms you really mean Technicians.

Classically apprentices left school at 15 or so did 4 years learning how to use lathes ect before going on to the more academic day release.

In the IT industry there is no real analog to spending your first year "filing" and making tea.

Well, I meant as a programmer specifically, not just IT. In my own experience, people who are self-taught (myself included) might be good enough to be entry-level programmers, needing a high level of supervision. If you're going to learn good judgment rather than just knowledge, though, it really helps to work with more experienced people for a few years. That's what I meant by "apprentice", more being mentored rather than a formal apprenticeship.
One thing I've found concerning is the continued lack of secure coding curriculum being taught to computer science and software engineering students.

No doubt, this has only contributed to the divide between software engineers and information security engineers.