Hello.
I have the privilege of being part of a group of TWC Members who are proficient programmers, and are willing to dedicate some of their time to sharing some of their skills as part of a project called the TWC Programming Academy. The idea is still in the works, but I thought I would post for critique.
My fundamental idea here is to have the advanced programmers (Tutors) teach amateurs and newcomers (Students) the principles of programming. Class sizes will be limited to three or four students per Tutor, unless the Tutor is willing and capable. This enables each person to get highly personalized help and teaching, without Tutors having to go too far out of their way.
I have drawn up tentative outlines, largely from reference materials, for the two languages I can teach, but review would be great. Feel free to post new language course outlines, and I will add them to this list:
C++
- Architecting a program The before-code stuff. Programming, not coding!
- Variables and Datatypes declaration, assignment, identifiers, core datatypes, scope
- Operators assignment, arithmetic, equality, compounds, conditional, bitwise*, precedence*
- Flow Control if/else, switch, iteration, jump/break/continue
- Functions definition, prototyping, scope, arguments, inline, overload*, recursion
- More Datatypes arrays, character sequences, typedefs, union*, enum, struct*
- Pointers and Memory pointers, reference, dereference, passing by reference or value, declaration, initialization, arithmetic*, void, null, function pointers*
- Misc. preprocessor, namespaces, templates*
Java
- Object Orientation basics objects, classes, behaviors, attributes, inheritance, class hierarchy, interfaces, packages, subclasses
- Basic Java statements, expressions, variables, datatypes, comments, literals, arithmetic, comparison, logical operation
- Basic Implemented OOP* class definition, instantiation, calling methods, accessing and modifying member variables, typecasting, class libraries, main(), command line compiling and running
- Arrays declaring, creating, accessing, modifying, multidimensional
- Blocks and Flow Control block, if/else, switch/case, for, while, do/while, recursion, break
- Methods overloading, constructors, overriding, finalizers
- Modifiers and Access public private protected package modifiers, encapsulating code, instance variable accessors, abstract classes
- Exceptions handle/recover, creating and catching
- Streams java.io, input and output streams, InputStream, files, filters, byte arrays, sequences, pipes
* Likely need to be discussed
Both of those outlines should provide enough of a solid base for a good entry into more advanced programming, and they provide (I think) a good general overview of the respective languages. I'd rather teach Java over C++, so if someone wants to claim C++, that'd be great.
Anyways, what I'm thinking is that I will retain a master list of who's in what class and who is teaching what. Students will be responsible for contacting their Tutor with details of Time Zones and such, and Tutors can teach the course as they wish. A mailing list could be a fine idea, if the Tutor sets it up. The Tutor will basically cover all of the topics, and give you lots of stuff to read online to reinforce whatever it is that he is trying to teach you.
MSN will likely become your best friend. Having a small class of 3 or 4 people lets the Tutor give you highly personalized support, and to keep a whole class rolling.
For example, the Tutor might conference with all of his Students on MSN on Friday at 20:00 EST. Let's say he covers File IO. He then gives his students a few links to check out, and an "assigment" to write a simple Java program that will output every line of a file that ends with a "!". He is available on MSN when he is, and the Students can always ask each other. The following Tuesday, he gets back together with everyone and they discuss the problem, and he can judge who's 'getting it' and who isn't. He can move onto a new topic, and in private continue teaching File IO to the guy that didn't get it. Win win.
Of course, it depends on the goodwill of the programmers out there...
So yeah, thoughts?
n.b This is not a sign up thread. Feel free to indicate interest, but this is really just to refine the concept.