I am starting to pull together materials to teach programming on Youtube (seeing all the awesome things KhanAcademy and Vi Hart, among many others, have done for education makes me think I should be giving back in some way). Those of you who have poked around on my websites have probably noticed that I already have (or in the past had) some stuff up; I'm hoping to pull all that together over the next few months into a dedicated educational subdomain of my website, ideally erasonably separate from the philosophy and advocacy stuff (the latter of which is mostly gone by this point).
Here's my first shot at a lesson plan/structure. As many of you are either programmers or can at least knock out some code when you need to, comments would be appreciated. I expect to do roughly the same thing at some point with my intro to unix documents (which a few of you have seen).
==Principles/Structure==
- Alternate hands-on and theory
- Try to be reasonably programming-language agnostic, but procedural/OO centrism is okay
- For actual code examples, we'll do them in parallel in both Perl and Python
- Make it easy for others to add their own examples for a lesson in other languages, webpages should accomodate that (crediting those who contribute, na klar)
- Basic format will be Youtube combined with written material and a website
- Public domain or at least some really open license that permits forking, editing, republishing, and the like. I'd be ok with a license that required attribution of some kind and is viral
- Basic output
- Hello, world
- Running a program
- Simple maths (use immediates; no variables yet)
- Variables
- Storing things into variables, doing calculations on them
- Outputting variables
- Validation
- Stepping back: General structure of a program
- Functions
- Let's make some functions
- Let's see how functions are documented
- Builtin and language functions
- How can we find out what we have available?
- Where can we find good documentation for existing functions?
- Organising code
- What are the best ways to organise functions?
- Let's do a project!
- Variable scope
- How scope works with functions
- The stack
- Immediates are not variables
- A bit more about immediates
- Talking to other programs (an introduction)
- Recursion
- More on data types
- Data structures
- Let's do another project!
- Handling files
- Databases
- Programs running in unusual environments (in a web server? browser?)
- GUIs
- and so on
Thoughts? This is an early draft; I haven't decided what good projects would be yet. Also, if for some reason you want to claim this as much as I am and collaborate with me on it, that'd be great!