Updated 31/Dec/2009 after reviewing material from Spidertools.com My son, NimbleJack, is doing computing at school -- 6 months so far using VB 6 and next year (our academic year starts in Jan here) he will be doing a 12 month VCE IT course -- again using VB 6 <sigh>. I've been pretty unimpressed with the teaching:  a) The lack of core understanding about topics like classes and algorithm design b)  reliance on the VB GUI stopping the students practising important coding skills. So I've been encouraging Jack to teach himself Python in order to get around some of the shortcomings of the school course (as I see them). I chose Python because:
  • Powerful enough to be a proper language
  • OOP features
  • Not as hard to use and learn as C++ or Java
I did consider Ruby -- however a lot of the Ruby code I have seen it pretty arcane to a neophyte, despite what the Rubyists claim. Next we come to my approach to teaching. This is something of a shock to many of my 'students' (I'm not actually a teacher by profession by the way) as I see myself as a mentor to assist self learning rather than a 'listen as I tell you all your need to know' approach. How does that work? The job of the mentor as I see it is:
  • Set the topics to be learned
  • Review progress (by looking at students working code and exercise answers)
  • Identify appropriate texts and other resources for the student
  • Set the learning pace, with the co-operation of the student
  • Answer questions and be a resource when things get confusing for the student
Apart from that students are on their own. i.e. they have to
  • Plan their studies
  • Do the reading
  • Takes notes
  • Look for other resources
  • Complete the exercises
  • Identify issues and formulate enquires or questions
  • Articulate issues with the teaching and associated material (which teacher is perfect or can't improve?)
I had made the mistake of expecting Jack to learn from Lutz's Programming Python which a) assumed to much knowledge about programming systems and libraires and b) does not introduce OOP. This is not a criticism of the book, for someone like me it's a very useful resource and it is aimed at advanced programming. I've just bought "Python Programming: An Introduction to Computer Science" by Zelle. This text concentrates on introducing core programming concepts OO, recursion, string processing etc. Python is used as the vehicle of instruction. I'm looking forward to seeing how well the new text works, and of course once basic programming has been mastered we can move onto "What a young developer needs to know"