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.
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.
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.
8 comments
[ 4.5 ms ] story [ 25.3 ms ] threadFor developers, something like laracasts (or other screencasts) is working well it seems. Not very revolutionary though.
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/).
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...
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.
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.
No doubt, this has only contributed to the divide between software engineers and information security engineers.
Since then, even more have cropped up: Code Combat: https://codecombat.com/ Empire of Code: http://www.checkio.org/blog/empire-code-space-strategy-game-... Code Kingdoms: http://codekingdoms.com/ Taken Charge: https://takenchargegame.com/ ComputerCraftEdu (Minecraft Mod) : http://computercraftedu.com/