As a student who hopes to someday teach, here is my perspective:
In my introductory programming course, we started out with pseudocode, then graduated to Alice programs (the environment is a pain sometimes, but the resultant "programs" were often quite amusing and fun), and as our final project of the semester, we were split into teams and tasked with programming some Lego Mindstorms robots for a simple race. Pretty awesome introduction to programming, IMO.
In Java 1 & 2 (same professor), we were usually rotated in 2-4 person teams for programming assignments out of our textbook to learn the material. We would always do a "presentation" of our code -- and we were required to "speak the language", using all the technical terms like method, constructor, accessor/mutator, etc. -- so we could see what our peers had done and learn from one another's code. The Java 2 course wrapped up with a larger project (a golf handicap tracking application) which the professor rounded up several industry professionals to judge (which helped us make contacts at local tech companies).
I hope to teach someday, and I do plan to implement some of the above methods. However, I think it would be pretty awesome to secretly (or not) build a game or web app other fun, interesting, and relevant application during the course of a semester by doling out potentially "boring" assignments that teach the students the fundamentals but apply to the overall project, and then spring the completed program on them at the end of the semester for a big "Surprise! -- You built this!" and show them where their code fit in. I think it would be a good "real world" experience for the students. I haven't quite worked out the details of how it could be pulled off, though. :)
I think it's imperative to inspire the students by keeping things interesting and relevant to what's trending in the field while still building the foundation they will need to be good programmers. You may want to check out MIT's online course material from years past to get some ideas -- they do a good job of keeping it interesting and relevant (ie. One of their software engineering courses gives the choice of building a game or an RSS reader and encourages the use of 3rd party libraries and APIs).
I hope this helps.