Others have answered many of your questions, so I just want to answer the general "what should I do to prepare for cool stuff in the future?" question. For everyone: knowing what you know now, what advice would you give yourself as a beginner?

Here are my thoughts, as someone who was a TA in CS courses for several years while in grad school.

1. As a beginner in a new area, we often think that if we could just get some help getting started, we could then continue on our own. But the problem is that that's just not true because that feeling _never_ goes away. There's always so much more to learn! Once you get good at the beginning stuff, you're only then able to appreciate how much is out there to learn. The more you advance, the more you can do. At any level, you're a beginner in the new world your skills enable.

So a better approach is to forget about trying to get over that "clueless beginner" feeling. Instead, realize that you already have a lot of usable knowledge--you just have to figure out how to apply it. And more importantly, how to find challenges to push against and grow.

2. So where is the knowledge of empeg? Three places: the heads of the people you can ask, the newsgroups and FAQs, and the code itself. Beginners tend to go in that order: ask first, study code later. But that's the frustrating and slow path that puts others in charge of your progress. Experts go in the reverse order. First study the code, then search newsgroups and faqs. Only if you're still stuck do you make yourself dependent on others.

Experts can easily tell when someone is asking a good question and when the asker is too lazy to look in the faqs, or worse, the asker is just trying to get someone to do their homework for them. Experts are good people to make friends with; having been through the beginner stages, they're usually generous with help. You make friends with them by not wasting their time with questions that you would know if you made a little effort before asking.

It takes great effort to write documentation. I am, and I know others are, quite grateful to Tony and Loren for making the effort to write faqs for empeg and Hijack. So much of what you need to get started is already there in the faqs.

Even with their great efforts, though, it's hard to keep up with a whole community of people contributing new code and projects. So the ultimate source of what you need is in the source code itself. By studying it, you'll learn not only how empeg and Hijack work, but you'll see great examples of how professional code is written. It may be intimidating at first, but that's part of learning--don't fight it. (Remember, you're always a beginner; there's always something you don't understand that feels intimidating.) So dive into the source code. Wander, skip, puzzle, play, imitate, change, fool around. I promise it will gradually yield to your efforts.

3. Finally, be careful to be too focused on looking for specific answers in class. Your coursework will try to teach you many things that seem irrelevant to you. But I think many us wish we had paid closer attention the first time around so we wouldn't have to relearn things later. The value of learning everything you can is that when you are confronted by a challenge, you'll have a great toolbox to apply.

This is a pretty friendly community--lot's of people will enjoy helping you and appreciate your contributions.

Let us know how we can help.

Gary