As a teacher I've noticed 3 things that deterred me from learning programming as a teenager. I already was doing it for 2 years as a hobby, but the next point of frustration just made me quit.
1. Social isolation
2. Setting up the right environment (a WAMP stack back in my day) could take me days (I had no help).
3. Understanding that if a program crashes that you're not stupid as a computer expects a 100% perfection in order to run. If you do it right 9 times but screw it up the 10th time, your program won't run if you need to type in 10 things. Teach them how to fix these mistakes and that making these mistakes is fine. When I taught at a coding school, I'd make these mistakes in front of them all the time and then fix them. Most of the time, I didn't do it on purpose.
-----
It also depends on the level you were teaching. I actually got CS in high school and it was an elective.
If you're in this scenario then teach something practical. Preferably something they will use in their personal lives. This is why I think web development is a good candidate to teach them (1) web development and (2) programming. Don't let Java or PHP be a first programming language, please. Let it be JavaScript when combined with web development (it's visual and practical, students will go the extra mile for practical).
I even think Python is a bit meh as a starter language as it is too computational, to number-y, not visual enough. JS is in principle the same, but you basically have a GUI DSL with HTML/CSS, which is why JS is a good starting place. Moreover, you have Chrome Dev Tools right built-in to it. If you let them debug early on with the Chrome debugger, they learn much faster (I did anyway, I'm shocked that my programming teachers never taught me but a fellow student did!).
Also, if you think about doing VBA, do Google AppScript from Google Sheets instead. It has a better debugger, not great though.
-----
So yea it depends on the level of the class. In all cases, I think a 50% focus on CS history/context and 50% CS would be good. That history should be split up as follows:
1) 50% Programming history
..1A) 50% Programming language ideas -- note: 50% of 1)
..1B) 50% People like Alan Turing
2) 50% What world do we live in today?
..2A) 50% See Iv his comment.
..2B) 50% Hacker Culture (Atari, Steve Jobs, a recent submission on Warez culture was on HN)
-----
Note: these are simply ideas and a rough sketch of my first thoughts. I'm not married to them, so if -- on the off chance -- you're completely aligned with my thoughts, know that I'm not fully as I'd need a week to think about stuff like this at least.
1. Social isolation
2. Setting up the right environment (a WAMP stack back in my day) could take me days (I had no help).
3. Understanding that if a program crashes that you're not stupid as a computer expects a 100% perfection in order to run. If you do it right 9 times but screw it up the 10th time, your program won't run if you need to type in 10 things. Teach them how to fix these mistakes and that making these mistakes is fine. When I taught at a coding school, I'd make these mistakes in front of them all the time and then fix them. Most of the time, I didn't do it on purpose.
-----
It also depends on the level you were teaching. I actually got CS in high school and it was an elective.
If you're in this scenario then teach something practical. Preferably something they will use in their personal lives. This is why I think web development is a good candidate to teach them (1) web development and (2) programming. Don't let Java or PHP be a first programming language, please. Let it be JavaScript when combined with web development (it's visual and practical, students will go the extra mile for practical).
I even think Python is a bit meh as a starter language as it is too computational, to number-y, not visual enough. JS is in principle the same, but you basically have a GUI DSL with HTML/CSS, which is why JS is a good starting place. Moreover, you have Chrome Dev Tools right built-in to it. If you let them debug early on with the Chrome debugger, they learn much faster (I did anyway, I'm shocked that my programming teachers never taught me but a fellow student did!).
Also, if you think about doing VBA, do Google AppScript from Google Sheets instead. It has a better debugger, not great though.
-----
So yea it depends on the level of the class. In all cases, I think a 50% focus on CS history/context and 50% CS would be good. That history should be split up as follows:
1) 50% Programming history
..1A) 50% Programming language ideas -- note: 50% of 1)
..1B) 50% People like Alan Turing
2) 50% What world do we live in today?
..2A) 50% See Iv his comment.
..2B) 50% Hacker Culture (Atari, Steve Jobs, a recent submission on Warez culture was on HN)
-----
Note: these are simply ideas and a rough sketch of my first thoughts. I'm not married to them, so if -- on the off chance -- you're completely aligned with my thoughts, know that I'm not fully as I'd need a week to think about stuff like this at least.