Personally, I am self taught, and have never taught any sort of skill
to anybody else before so I am not quite sure where to start.
... snip ...
teaching him a few basics (variables, functions, classes etc) then
finding some programming challenges and asking him to work through
these. Does anybody have a good source of these sorts of challenges?
I do: it's MIT OpenCourseWare's Introduction to Computer Science and Programming.
Here's the most important thing: if your situation is like everyone else's when they are asked to "teach programming" to someone, you're expected to add this onto your existing job. Worse, it's sometimes not clear if the student is actually interested in learning to program or not.
These lectures are excellent. They use Python: it's low friction (no major IDE requirements) and generally pretty useful. They take students from zero knowledge of computer science up to a functional level that's based on sound knowledge of fundamentals (in contrast to some "Learn Java is Five Minutes" book).
Finally, what are your experiences of teaching programming to somebody
else and what advice would you give?
I've done a lot of teaching at this level in the university and on-the-job. The critical point that I've come to understand is that the student must demonstrate that they want to learn. Programming is hard to learn and quite hard to teach. If the student isn't willing to invest their own time, you're going to feel like you're pushing string.
Here's my specific suggested procedure:
- Assign the first video to the student. Ask them to work through all of the in-class examples and homework.
- When they've done that, the two of you can meet to go over the student's work, answer questions, etc. Note - you'll likely want to watch the videos as well for background (they're really good).
- Repeat from step 1 until all videos are completed.
At the end of this time, the student will have experienced a good first undergraduate class in computer science and will be able to write some code in an actually useful language. You will have contributed to the learning while also getting your "real job" done.