Skip to main content
gamedev.net
🔒 Locked

Teaching Tips?

Started by Karl G 5 replies 2.1k views
Original Post
Karl G
Karl G
I'm considering teaching an extracurricular class next year next year consisting of C++ with an emphasis on game programming with DirectX. The people learning would have a general knowledge of how to use C++ and the compiler, but would be completely new to templates, pointers, the STL, win32, #define statements, virtual functions, inheritance...(insert anything cool/useful here)...etc. Any ideas about what to teach/where to start would be superb! :D Cheers, Karl
BrentBarrett
BrentBarrett
Well, if they don't know pointers, you've got your work cut out for you.

One thing that's pretty important, in my opinion, is to tell them that they're not expected to understand where everything you teach them is coming from. I remember back when I was learning, I'd be reading a tutorial and the author would say, "Don't forget to include at the top of your code!" and I'd think, "Where the hell did that come from? How am I to know what all my options are and where they come from?"

Basically, one of the best skills you can teach them is how to figure out the answers to their questions. Teach them how to use the SDK and msdn.com. A lot of people might think that's a given, but knowing how to effectively locate the answers to questions in the SDK and escpecially msdn.com can be one of the best assets a programmer can have. I still have problems finding the things I want from msdn.com; it's a very large and complex site.

Give them a list of resources where they can find tutorials and help(such as gamedev.net).

The example I like to give when talking to someone about programming is that it's like writing. First, you have to know the language. Then, you have to know the grammatical rules. If you hear a word you don't understand, look it up and make sure you understand not only what it means, but look for examples of the context it's typically used in. Writing well takes practice and effort; reading what others have written often helps you find the words you were looking for. The end goal is to write poetry: using a minimal amount of words that have a substantial amount of meaning. I find when I explain it to people in this way, and give them something to compare it to, they have an easier time accepting new ideas and information, because they can relate it back to writing.

That's really the only advice I have: give them something they can relate it to and sources that will help them further understand it.
Promit
Promit
I did this myself (took over the CS club), and it really didn't turn out well. A lack of motivation and basic understanding of some concepts (they were Java-taught) resulted in altogether not much progress.

A couple tips:
Let people work in whatever language they're comfortable in. Teaching C++, DX, and game programming all at once is simply impossible. Find some Java bindings to DX or something, if you need to.

If you're teaching a topic, teach just that topic, and make bloody sure they get it. Otherwise you'll get a lot of blank stares.

With new programming techniques, people tend to be skeptical. I was entirely unable to explain the usefulness of singletons. Be prepared for people not to accept your assertions blindly.

KISS -- Keep it simple, stupid. Don't make things overly complex, or even overly designed. Get down to the metal and dirty if you have to.

Realize that graphics coding involves a lot of new topics the first time around. You need to get that first triangle up quickly enough to hold interest, but you can't leave them dizzy in the dust, either.
SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.
S1CA
S1CA
In addition to the above.

Make sure you don't make them run before they can walk (a twist on a common saying)... Make sure the steps are a)small, b)evolutionary and c)fun

IME people learn a lot more if they see positive results from what they're learning and can clearly see the benefits.

For example if someone is learning DirectX, compilation errors and black screens aren't fun - anyone you're teaching should have a sense of personal progress - "I solved the problem and got the triangle to appear on the screen". The difficulty curve should be shallow for the level you're talking about.

To be honest I'd say there should be two classes - one for intermediate C++ and then a second class for novice DirectX - far too many books and courses try to teach everything in one go and fail in all respects!. If DirectX is the hook being used to persuade people to take a C++ course, then IMO you're going about things the wrong way, you're clouding the real content of the course with candy!

Simon O'Connor | Technical Director (Newcastle) Lockwood Publishing | LinkedIn | Personal site
Karl G
Karl G
Quote:
Original post by BrentBarrett
One thing that's pretty important, in my opinion, is to tell them that they're not expected to understand where everything you teach them is coming from. I remember back when I was learning...

I know exactly what you're talking about!! I hadn't even considered it now that I'm more experienced but you're definetly right.

Quote:
Original post by BrentBarrett
Basically, one of the best skills you can teach them is how to figure out the answers to their questions....give them a list of resources where they can find tutorials and help(such as gamedev.net).

Sounds like a good idea--that was another problem I had (and still have, for some fairly obscure topics).

Quote:
Original post by BrentBarrett
The example I like to give when talking to someone about programming is that it's like writing...

Would you mind if I use this? It seems to work perfectly in explanation--I'd give you credit, of course.

Quote:
Original post by Promit
Teaching C++, DX, and game programming all at once is simply impossible.

Yeah I was afraid of this. Mostly I'm concerned about the sheer volume of the content involved. Maybe I should key this more to the tune of "advanced C++ and directx" and allow them to apply the concepts to whatever they wish....?

Quote:
Original post by Promit
Otherwise you'll get a lot of blank stares.

Yup, that's happened before. >_<

Quote:
Original post by Promit
Be prepared for people not to accept your assertions blindly.

Thanks, I'll watch for that!

Quote:
Original post by Promit
You need to get that first triangle up quickly enough to hold interest, but you can't leave them dizzy in the dust, either.

Yeah tell me about it...I almost lost interest in coding alltogether once because I couldn't get the "stupid (actually it was a bit more descriptive explitive :P) triangle to show up!!!!"

EDIT:START

Quote:
Original post by S1CA
Make sure you don't make them run before they can walk (a twist on a common saying)... Make sure the steps are a)small, b)evolutionary and c)fun

I'll be sure that they are!

Quote:
Original post by S1CA
To be honest I'd say there should be two classes - one for intermediate C++ and then a second class for novice DirectX - far too many books and courses try to teach everything in one go and fail in all respects!. If DirectX is the hook being used to persuade people to take a C++ course, then IMO you're going about things the wrong way, you're clouding the real content of the course with candy!

I never really thought about this, but you're right. I suppose I should make the advanced course a precursor to the DirectX one, and leave the two separate entirely. Could you suggest some interesting content for the pure C++ version, though? As I remember, printing stuff to the DOS window wasn't too awe-inspiring :P

EDIT:END

I'm really hoping this project of mine will work out. I'll post the curriculum I come up with for everyone to use if it is a success. Thanks for the ideas so far; any more would be welcome!
S1CA
S1CA
Quote:
Original post by Karl G

Quote:
Original post by S1CA
To be honest I'd say there should be two classes - one for intermediate C++ and then a second class for novice DirectX - far too many books and courses try to teach everything in one go and fail in all respects!. If DirectX is the hook being used to persuade people to take a C++ course, then IMO you're going about things the wrong way, you're clouding the real content of the course with candy!

I never really thought about this, but you're right. I suppose I should make the advanced course a precursor to the DirectX one, and leave the two separate entirely. Could you suggest some interesting content for the pure C++ version, though? As I remember, printing stuff to the DOS window wasn't too awe-inspiring :P


I agree, plain text can be a bit boring and depending on the audience, could affect their concentration levels quite a lot :o).

I suppose the obvious solution is for you to supply them with a framework/playpen which uses DirectX to display some graphics, probably as a DLL or LIB file (to stop them from being distracted by how the cool stuff is being achieved).

That way you can demonstrate advanced C++ using the framework to make the results of what they're learning a bit more interesting.

At this stage you shouldn't explain anything about how the playpen itself worked. This would also serve as a nice "hook" to get them to attend the DirectX class; "if you want to know how the playpen/framework you've been using works, all is revealed in the DirectX class".


One difficuly with teaching DirectX graphics topics for example is making a clear distinction between the DirectX API, graphics algorithms, and mathematics (even in 2D, coordinates have the usual prerequisite of plotting graphs, and the interesting stuff usually needs some trig).

The API itself is a very small part really, the majority of the stuff someone should know is related to the maths and algorithms - the API is just the "printf" of the bigger picture ;o)

Because of this I'd probably further split the lessons so that the end of the C++ lesson introduces or recaps on the mathematics and algorithms and the start of the DirectX lesson continues that. Then finally, in the later part of the lesson you can give them the sourcecode to the playpen and start explaining how what they've learnt earlier relates to the API and what each part does in depth.


BTW, although I think the above approach would work in a classroom environment, I don't think it would work too well in a book or as a set of online tutorials; far too many books try to cover "everything you need to go from complete novice to professional developer", and end up covering nothing adequately.


Quote:
I'm really hoping this project of mine will work out. I'll post the curriculum I come up with for everyone to use if it is a success. Thanks for the ideas so far; any more would be welcome!


Good luck!
Simon O'Connor | Technical Director (Newcastle) Lockwood Publishing | LinkedIn | Personal site
Karl G
Karl G
Thanks very much S1CA! You've been extremely helpful.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.