I spent a few years at web shops and watched new programmers come in. They fancied themselves great programmers; being young, they had a lot to prove. They didn't like how we did things. It was so stodgy and dated. But rather than show us how it's done, they... did nothing. Overwhelmingly, they crawled into a shell, where they maintained at least the imagined possibility that they're a great programmer trapped in a terrible company. My take on this is that they're afraid that if they ever tried to spread their wings, they might fall, then they'd be really embarrassed. Or it would take a few tries to get it right. Or it would be more difficult than they imagined. Or they'd get unlucky and be judged by their one failure.
Advice: get over yourself. Good programmers know what it's like starting out, and we're not keeping score. We don't force you into a strict regiment because we have faith that you'll eventually grow into the role, trial and error included. If you don't like the company you signed on to, then do this: really spread your wings and risk making mistakes, getting in over your head, breaking things, failing to implement designs, and so on. Make your mistakes there, learn your limits, and grow, and do it before you find yourself in another company, in a position of having to prove yourself. Were you defeated by some small, backwards, ASP using company? Why? Try to conquer them. Even if you fail, you'll learn countless valuable lessons in trying to take over companies -- and by take over, I mean steering technology in a positive direction, one of your own choosing.
Work boring you out of your mind? Selling widgets not engaging? Don't pretend. Ignore the hype about agile... widget selling. They probably have a lot of turn over from unmotivated programmers. Rather than trying to strike a compromise with their programmers making staying worth their while, they treat the programmers like they're stupid and try to convince them that selling widgets is the coolest thing out there. Rebel. If you're really good, you can spend half of your time working on fun projects and still your employer will still be far better off than if they hired some twit who didn't have a good work ethic anyway. Spend your time improving Perl. Releasing code as open source used internally. Generalizing processes so your competition can use the code. Make Perl faster so your employer can buy less hardware, and share the wealth with everyone. Re-interpret your own job title. Yes, companies hate this, but it's a fallacy for them to imagine that a brilliant programmer could be tricked or coerced into spending that same energy and passion... selling widgets.
Learn what all of the other groups do. Learn the reasons they don't like your group, which almost certainly exist even though programmers are shy about admitting them. Be a judas. Make connections there. Connections are good.
Spend a certain amount of time trying absolutely crazy schemes. Write code to heuristically identify in-lineable method calls, cross reference it with DProf output of which are frequently called, and inline them with B::Generate or Code::Splice (created for that purpose). It might not work. It might be absolutely terrible. But doing something hard the wrong way will almost certainly illuminate you as to the (or a more) correct way to think about the problem. And if you get stuck in the mindset that all attempts must be successful, you'll only go after the low hanging fruit, and the project will slowly collapse under its own weight. None of the hard refactors will be done. No serious overhauls will be made. No really new ideas will be incorporated. I've worked in Perl shops that were downright xenophobic about ideas from other camps -- and I attribute it to this "all programmer time must be accounted for, all projects must succeed" induced shell shock. Under a fascist regime, all new ideas look like bad ideas.
After you fail at something hard, or something crazy, you'll have motivation -- saving face -- to work on the boring stuff.
Working on the boring stuff isn't all bad either. That's often when the patterns with a general solution appear.
A general pattern to this blog post is companies who hire programmers at one level and expect them to work at exactly that level and stay at that level, like a cog. That's not good for you or them.
Here's a fun crazy thing: write parts of the system in a completely different language. People whine entirely too much about splatterings of different languages. If the Google programmers are so fucking smart, how come they can only cope with having Python, Java, and C++ around, and nothing else? Pussies.
Work other places than in your cube. To get the juices flowing, you have to break the routine. Sure, they don't let you on the 802.11, and if you put an AP under your desk, they'd hunt it down and destroy it and you with it. But they're probably not sniffing for Ricochet. Get some old STAR modems and set up your own wireless network. Or packet radio. Or any number of other technologies. Work in the company cafeteria. Pretend it's a coffee shop.
Get your work done in a marathon session at the start of the week then take the rest of the week off. Stop in on Friday to catch up on email and get a jump on planning the next week. I don't mean work really hard from 9-5 -- I mean pull allnighters.
Make friends with people who work for your competition. Your employer will hate this too, but it's very useful to break out of the "We The Company" mindset. I'm not sure why they pump that stuff on everyone as it's fundamentally destructive. Having some perspective on it all will help keep the stupidity from bogging you down. Perspective wards off depression.
Every now and then, get your coworkers involved in a little fragfest.
When your CTO does something stupid, blog publically (but anonymously if necessary) about how stupid the thing he/she did was. Don't think that just because they report directly to the share holders, they're immune from responsibility to the shareholders (fuck all why anyone would take that leap of logic anyway).
Find people you like there. The job will end for one of you and before you leave or he/she leaves, get to know them. Your future is far more wrapped up in good people than some mythical, imagined "good job".