I prefer to use CAM packages, but it doesn't hurt to know the G-codes for hand-optimizing the larger programs and making tiny ones of your own. I have mainly used Deskam, a hobby-level CAM program that does only 2 1/2-d parts, one toolpath at a time. I can't afford the likes of Gibbs, FeatureCAM, and MasterCAM, although if I could or had access I would spend the time to learn them. The chain of Inventor drawing .dxf export -> Rhino for tweaking -> Deskam to convert to G-codes -> DeskNC for G-code interpreting has worked well for me, for both a converted Bridgeport and my own desktop Sherline mill.
Here's a pic of the most complex part I've created the g-codes for and machined, to go on a formula car:
http://userfs.cec.wustl.edu/~bdh4/FS..._1651small.jpg
The directory it's in also includes pictures of machining the part:
http://userfs.cec.wustl.edu/~bdh4/FSAE
Once you've spent some time with learning a CAM package, the complexity of the part should no longer be the limiter. It's great when you reach the point where machining time is the limiter, not your imagination.
-Brandon Heller