When I was a teenager (about 8 years ago), programming used to be fun. That alone led me to study Systems Engineering. (Later, I found that SE wasn't only about programming, but that's another story.) However, my first experiences working as a programmer haven't quite been what I expected. Most of the time, those I work for don't expect me to carefully design my programs before I write them. They seem to think of programming as a physical production process in which the most obvious way to improve productivity is to speed up the process.
Writing code that validates data input against business rules is boring, but tolerable. But being forced to do a half-assed job just to finish projects under unrealistic schedules puts me off, to say the least. It's the opposite of what made programming so attractive to me.
What do I do to fix this?
Find a better place to work?
I know it's the simplistic answer, but there are places out there that treat programmers well and require top notch coding.
And if you can't find one (or get in on one), try starting your own business.
There are many possible courses of action:
Ultimately life is too short to do something you hate.
I suspect that the first and foremost answer you'll be given is, probably, the best: find a new employer.
I realise that's a lot more easily said, than done, but if you loved programming, and have a career within the field, it's a shame to see that wasted. Are you still programming with hobby-code; if you're not doing it for fun, then it might already be time.
But still, a new employer with more interesting challenges would be a better first step to soemthing new. Find the fun again.
Sadly, your experience is reality. For every hour you program, your employer is paying you. Your employer doesn't know how successful the product you are coding will be. It just needs to be good enough to be able to discover if the product has the potential to be a success.
Some call this concept "fast failure". Finding out quickly if what you are doing will be a success or failure, and move on to the next idea. If it's succeeding, iterate on it. This is especially critical in new platforms where there is a huge advantage to being first.
Look back at the Facebook application platform and the iPhone app platform, both fairly mature now. It's harder to get noticed now on those platforms. The quality of the applications have improved immensely since the beginning.
If you want to write well designed programs, you need to find the right industry. For example, one that is not short term market driven, like research. NASA is probably the perfect example of a company that would require well design programs. When your code is running on a system millions of miles away, you have to get it right the first time.
Say no and accept the consequences. That may mean finding another position.
If you asked a doctor to amputate a healthy limb, you'd expect him or her to say no. If we want to be treated as professionals, we have to have a professional code of ethics. Writing poor quality software to meet artificial deadlines does not serve the common good.
Or start your own (consulting?) company.
Everyone here suggests working for other people. If you feel like your coding style is just that much better, then go ahead and produce your own code that way for whatever customers you can find, starting with freelancing websites (like rentacoder).
One thing you may discover is the business reality of whatever market that you're in is that programmers may need to be nimble. While one solution may be theoretically pure, if it takes five times longer to code than the plumbing solution, then it's probably not so good to be so pure.
I've learned a lot from my employer. He is very much in the as-fast-as-possible-specs-are-a-waste-of-time camp. I've forced a build process, a bug tracking solution, and source control, but in the end, if he wants it by the end of the week, we'd better be able to produce it. Why? Because sales depend on it, and the sale can't be made, then it doesn't matter how pure the code is. The nimbleness of a small company is one of the only real advantages it has over a larger company with more money to throw at a problem. If your stance on code purity flies in the face of that nimbleness, then maybe your purity is misplaced.
But maybe your code is just that much better. If you know your market segment, if you can get customers, go off on your own (but don't poach any from your current employer, there might be laws against that one) and try to succeed with your approach. If you do, if your customers are happy and your producing code up to your standards, then you were right. If it doesn't work, then you might need to reevaluate how 'pure' code should be, or whether your approach is the right one.
The day has 24 hours, only ~8 of them is for your work. For me, if the projects I'm doing at work are boring and/or stressful, then I tend to have fun private projects I spend the evenings and nights with.
If my work projects are fun and challenging, then it seems like I spend the nights in the bed with my wife instead.
Either way, I'm happy. ;)
Unfortunately you seem to have fallen into the same trap I did. When you do your hobby as a profession you no longer have a hobby. Programming can still be your hobby especially if you differentiate it from what you do at work. Doing real time embedded C at work? Do some web development in Python for a hobby. Probably the best thing would be to find something really different say horse back riding, running marathons, or building furniture.
Best advice I ever got when I was in this situation: You can either change where you work, or change where you work.
Are you alone in this sentiment, or do your programmer colleagues share this frustration? If so, you could try and put up a unified front.
I wouldn't quit your job that easily, try and improve the one you have now.
But being forced to do a half-assed job just to finish projects under unrealistic schedules puts me off, to say the least.
Unrealistic schedules are common in software engineering. I don't know if you will find it different even at the best of companies (except maybe Fog Creek?)
You can leave the company and hope for the best. Or you can stay and learn as much as you can and gain influence. Then perhaps you can bring about the changes that you desire.
But be forewarned, there's a good chance that when you've matured enough to see both the technical and business side of what you are doing, you will realize that some of the things that used to keep you up at night (e.g. perfect design) are not as important as others (e.g. delivering what your paying customers want on time).
I too am a computer programmer. I've been in the industry for almost 7 years now. In that time I have literally met a handful of programmers who enjoy what they do. Most of us are disillusioned, having discovered too late that IT is actually a terrible career choice, even if you love computers and programming. Maybe even especially if you love computers and programming.
What I can tell you with relative certainty, is that it's probably not the company that's the problem. I've worked at several blue chips, amongst them Fortune 500 companies, I've also worked abroad and at smaller companies. IT sucks everywhere, and programmers everywhere think so.
To the people suggesting that enough money can fix the problem: it can't. Believe me. If you're miserable every day it doesn't matter what you get paid. I've quit jobs for ones that pay less just to escape the situation. One of the best paid developers I know recently had a nervous breakdown and possibly can't go on working anymore because of it. Another one is on 5 different anti-depression and anxiety medications. Doesn't help much you're rolling in dough and your job is slowly killing you.
My suggestion would be trying to find something that appeals to your creative side and studying that. Unfortunately career change is a long term goal, and if you never start, you'll never get there. I find a lot of people get into development because it was their hobby and they thought it would make them lots of money. Most of these people also have something else they would have studied, but decided against because it doesn't pay as well. Maybe not a bad idea to revisit some of those options.
As far as delivering 'good enough' quickly I would consider that an art in itself. Programming is fairly high intellect but bottom rung work. There are tons of smart enough people in the world to do the work so the unique value of that position is fairly low. The key is to have some plan to create a better income stream or career with whatever income you can generate. Working 60hrs a week on something is only valid if you are actually building a future(or facing starvation). Top corporate career prospects now are in nursing/health care and domestic based accounting/finance.
Get so good that your day rate is so high that you don't care what you have to do for it.
The commercial realities of programming need to be accepted, and embraced.
But also, it's just a job.
I happen to get a lot of enjoyment out of my job, but at the same time, I have lots of little side-projects that I work on at home, at let me get that bit of 'perfection' that we are sometimes looking for.
Don't fight the commercials though; it is important to deliver programs, and you can better your software dev processes, in general, by coming up with schemes to make this process deliver stable code, regardless. Writing unit tests, and enforcing them for builds, is something that helps.
-- Edit
I will say, getting fed up as happened to me, in previous jobs though. It's only natural some times. In these times, focus on other things. Start a project at home, or maybe don't even program at home at all, build something using wood :)
rant
deserves to be community wiki. - gnovice