I’ve been programming C# professionally for a bit over 4 years now. For the past 4 years I’ve worked for a few small/medium companies ranging from “web/ads agencies”, small industry specific software shops to a small startup. I've been mainly doing "business apps" that involves using high-level programming languages (garbage collected) and my overall experience was that all of the works I’ve done could have been more professional. A lot of the things were done incorrectly (in a rush) mainly due to cost factor that people always wanted something “now” and with the smallest amount of spendable money. I kept on thinking maybe if I could work for a bigger companies or a company that’s better suited for programmers, or somewhere that's got the money and time to really build something longer term and more maintainable I may have enjoyed more in my career. I’ve never had a “mentor” that guided me through my 4 years career. I am pretty much blog / google / self taught programmer other than my bachelor IT degree.

I’ve also observed another issue that most so called “senior” programmer in “my working environment” are really not that senior skill wise. They are “senior” only because they’ve been a long time programmer, but the code they write or the decisions they make are absolutely rubbish! They don't want to learn, they don't want to be better they just want to get paid and do what they've told to do which make sense and most of us are like that. Maybe that’s why they are where they are now. But I don’t want to become like them I want to be better. I’ve run into a mental state that I no longer intend to be a programmer for my future career. I started to think maybe there are better things out there to work on. The more blogs I read, the more “best practices” I’ve tried the more I feel I am drifting away from “my reality”. But I am not a great programmer otherwise I don't think I am where I am now. I think 4-5 years is a stage that can be a step forward career wise or a step out of where you are.

I just wanted to hear what other have to say about what I’ve mentioned above and whether you’ve experienced similar situation in your past programming career and how you dealt with it. Thanks.

This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

73

4- 5, sorry, I thought it read 45 years and might promote some interesting discussion. You children :-) (32 years in, still not in crisis)
–
High Performance MarkNov 6 '09 at 8:04

7

It's only because now days it's so easy to be good at something, but most often being good at something isn't gonna cut anymore, you have to be extremely good at what you do but throughout my experience I've seen pretty much 2 people max who are great at what they do.
–
JeffNov 6 '09 at 8:09

Programming takes a long time to master and most people chase the money and glory, playing corporate politics. norvig.com/21-days.html Here, here for the supposed senior programmers. I'm on the other side of the fence, after 20+ yrs. I have to hire these people and it's not often you find someone that can really claim to be a senior programmer. Most of these people have hardly completed their first year 5 times, not the same as 5 years building and growing.
–
wentbackwardNov 7 '09 at 6:00

63 Answers
63

You open a very interesting question. I wholeheartedly agree with you. I've made similar observations.

I've been programming professionally for several years already and what I have observed is that the amount of good programmers out there, of great developers who love their work and can do it with quality and passion is pretty much close to zero. I probably met only one person who could teach me something. Most of what I know I have learned by myself, reading books and forums, asking in forums and googling for revelation thoughts.

After a while I don't regret this much.

The options to learn in a working environment can often be limited. You don't start things. You don't finish them. You don't design, don't improve, don't refactor, don't think about architecture, you just code and hack things together. It's how most of the shops work. Not only you don't learn anything, it's more likely that you will learn mostly wrong things how NOT to develop software. I've been continuously seeing scary things around me, all those anti-pattern you have heard of. What is worse, I'm forced to do them myself.

I don't know how it happened, but I managed to somehow build an input barrier. I stay open, listen and if I see some potential for self-improvement I research and maybe adopt some technique or idea. But no BS can ever get through. I have worked in badly run projects for a long time, but I have not adopted any of those bad techniques for myself.

I pretty much soon understood that if you wish satisfaction with programming, forget about job and have your own personal project. It's where you can apply all your love, passion and knowledge to do things right with the high quality level. You will learn a great deal of stuff, a myriad of things you would never have been exposed to and challenged with when hacking boring corporate staff. I only do my job for paycheck and get satisfaction with my own personal projects.

One thing I truly don't understand is how this situation is possible nowadays. Software development has matured a lot. It has had good and bad experience. Many successful projects and a great deal of failed ones. There is experience with long-term projects and understanding what long-term effects one or the other organization will bring upon the project. There are numerous studies available and good books written. "Pragmatic Programmer", "Code Complete", "Mythical Man-Month", "Design of everyday things" and others. Why nobody but us, the programmers ever reads them? How it is possible that even after 20 years of working in IT most developers and managers never found a time to read one or the other methodology book. They are written for, but hardly read by, those who need this medication most.

Regarding career perspectives. What I also have noticed in general on the job market for employees, is that employers out there increasingly lose interest in quality work (imagine they had it once) are shopping more and more for the cheapest work craft available. You find it hard to sell your knowledge, experience and understanding of the universe to anyone. It's not in demand. What is in demand is having your projects ruined by the juniors who have no experience and desire to do professional work. Cheap people are used and abused and then thrown out so that the next round begins. Projects are also outsourced to low-wage destination where they are done by people who apparently begin to learn programming just with your project. That's one thing I truly don't understand.

I'm entertaining more and more the idea that I will drop employed programming work at some time in the future. I would very much like to work in my own start-up with my own project. If not that, I'm considering trying freelancing or probably changing the payed job nature. After all, I hardly learn anything during working hours and I don't get any satisfaction at all. I can do anything 9-5 and always have satisfaction with my own personal projects. I learn much from online communities. I receive here attention, support for my ideas and on occasions even recognition I could never get with my job and my work colleagues. Will see where I will be in the future.

What you've described is exactly most part of my past experience. """Not only you don't learn anything, it's more likely that you will learn mostly wrong things how NOT to develop software.""" 100% agree.
–
JeffNov 6 '09 at 7:55

6

I sort miss the 80s and 90s, now days everything is too easy and much cheaper but what's missing is the quality and the enjoyment of life.
–
JeffNov 6 '09 at 8:33

16

I want to upvote this, I do feel the same way on many points but this really is way too much doom and gloom. The workspace isn't really that pathetic. If you are truly great, don't compromise for a company that is not truly great. I will only work for companies that I believe in, and where I can grow and where I can grow the company. My expertise has afforded me this luxury over my 20 year career. I loved my first job and I fought to get the position, I had to fight to get my second job as well, but my third was my pick and I wrote my own ticket and now I hire only growers.
–
joshperryNov 6 '09 at 17:24

11

I'm sad to see so many people agree with this depressing, demotivating post, and it makes me feel very lucky to work where I do. I've only been programming for about 5 years, but so far everywhere I've been able to work and learn from others. The majority of my coworkers have been passionate to some extent about their work. My managers have encouraged learning on the job. I've always practiced Agile and so have done tons of refactoring, pair programming and architecting. I'm not saying any of this to brag, just to hopefully let you know that there are jobs out there where code work is fun
–
mmrobinsDec 4 '09 at 6:33

There was a post by Jeff Atwood on Coding Horror that said that this is supposed to be fun. And part of the job description of being a software developer is enjoying your work. Otherwise it will become a really boring and cumbersome profession for you.

The fact that you continuously search for ways to improve your work, and you keep getting informed of the new stuff and the best practices shows that you enjoy your work in nature. So my advice to you would be to start looking for a new job.

However I do not think that working for a big company will necessarily improve the working conditions. I think the best environments for software developers are small to mid-sized companies, where the people like what they are doing. The best thing to do would be to search and check-out any companies before you take a decision. Try and make sure that the new company is worth it.

"part of the job description of being a software developer is enjoying your work. Otherwise it will become a really boring and cumbersome profession for you." Captain Obvious to the rescue!
–
Pavel ShvedNov 6 '09 at 7:46

As you mentioned I do enjoying coding but what I am facing at the moment is the gap between the “ideal” world and the “real” world. Less people function ideally, most of us function at below average level. I don’t seem to find the balance point yet. I also don’t believe changing job is the solution. But I do believe when opportunity comes if I am not ready I will miss it.
–
JeffNov 6 '09 at 7:50

2

There is really no correlation of company size with how likely it is that you can manage some guerilla/grass-roots process improvement initiatives -- it depends on the personalities (in smaller outfit) or existing process deadweight (in larger ones) how open to change the environment is.
–
Steve GilhamNov 6 '09 at 8:00

2

I agree with the company range for developers, small-mid companies are the best because where people loves what they are doing.
–
TarikNov 6 '09 at 19:32

First thing : a big warning : if you've been developing for 10 years (like I have) there's nothing else you can do better than developing. So if you want to do something else, something new, do it quickly otherwise it may be too late and you won't be good at doing something else.

Just to share my own point of view : I'm a self driven person, self taught.
I've learned alone pure C, C#, Amiga C developing, Windows, COM, Delphi, PHP, Cinema4D and now Blender and Python. I've almost always worked alone.
Here's the biggest problem I've encountered so far : small companies try to survive and you're one of the ones who keep it alive : it's very stressing but it's also rewarding : you work more, you learn faster, and a lot of stuff quickly, you make products faster (event though you often can't do your job properly). Anyway : too much stress. On the contrary, big companies will always survive but the problem is about people : too many people. It's a jungle, but far worse : nothing is clear : if the people you work with feel like you're better than they are, they'll try their best not to help you to go up but only to shoot you because they fear for their own career. It's the way it works in France (I don't know for other countries).

To make it short : try to find a middle sized company where you feel like it's your place.
No matter how long you've been programming, no matter how long you've been working, the day when you get in your car to go to your job and you think "I'm happy to go to my work" will be the day you found your place.

It's not a question of 4-5 years or whatever.

NB : there's a huge difference between "I'm happy to go to my work" and "I'm happy to go to my work because I'll do this and that" / or / "I'm happy to go to my work because I'll learn this and that". If you think "because I'll do this and that" this means "this and that" will end one day and you may not be happy after. This is my 12 years programming experience. And I'm a senior, I'm well paid, but I do realize that 20-25 y.o. people think faster than I do. They just don't have my experience so I've just admitted I can help them to do things, they do it faster, but I help them to make them properly (which is almost never the case when you start developing).

Sorry for my English which isn't perfect, don't hesitate to correct my post to make it proper English.

@Arnis, I don't think making sushi is quite the same as changing your whole career path after ten years of being a developer. Try getting to the age of 35 and deciding you want to become a lawyer/doctor/journalist/accountant etc, you'll be at least 45 before you get to a basic level of skill required.
–
AshNov 14 '09 at 12:01

3

I'm sorry maybe I didn't explain myself: I'm not a seller or whatever job where "being a good liar is being a good seller". I did mean that once you've shown you are performing better than the other ones they will only try to shoot you down the day you need some help. Real life example: it was 20h00 (I was single and still working) I needed to access to a PC with a password. I asked to the 55 y.old man who was not good, and he answered: "you're sooooooo good why don't you crack it?" and I didn't get the password this evening. These things happened more than once only in big companies.
–
Olivier PonsJan 17 '10 at 11:12

4

"So if you want to do something else, something new, do it quickly otherwise it may be too late and you won't be good at doing something else." - Wrong. Dead wrong. I've known people that worked corporate jobs until the age of 45 and then decided to go back to med school. You know what, those people are doing quite well because they love what they do. The point is, it's never too late to change as long as you keep an open mind, and all that malarky about your brain atrophying after the age of 25 just isn't true unless you've been sitting around watching daytime TV the whole time.
–
Repo ManMay 14 '10 at 13:09

I've been a software developer for twenty-one years -- among other things, that means I've been doing this long enough to drink! ;-) But seriously, though, I can't imagine doing anything else as well or as joyously as programming. I'm apparently one of those rare birds that really love this job.

I was recently freshening up my resume, and I noticed that I've had many, many jobs in the last two decades -- mostly contracts. But what I realized in looking at that long list is that the jobs I loved most (and the ones I stayed at the longest) were with software firms, i.e. companies whose business model involved selling software to customers. The following theories are probably not universally applicable, but they go far to explain my experience.

As I see it, the difference between a software shop and your typical IT shop is surprisingly obvious. It's merely a question of what those in upper management understand. If the company gets most of its revenue from software, then the top brass will really grok software and how it's made. But if revenue comes from selling widgets, they generally don't have the faintest inkling of what it takes to keep their IT infrastructure running, let alone the processes behind software development. Worse, even though they delegate the task to IT staff, they try to map the IT processes to what they know, with results that generally range from disappointing to disastrous.

One reason is that there's a wide range of talent out there, from the merely competent to the software virtuoso. This runs completely counter to the cookie-cutter, one-size-fits-all mentality that works so well for unskilled and semi-skilled positions. The expectation that any one developer can be replaced with any other with a similar "skillset" may seem ludicrous to us, but often seems perfectly reasonable to a management structure that's focused on raw numbers. If this seems incredible, just look at how many shops are still trying to make the Waterfall model work.

You don't necessarily need all virtuosos on your team, but you need at least one or two. And part of their role must be to mentor the junior people so they can grow into the role (or wash out -- it happens). Otherwise, bad-to-mediocre junior code will prevail, with its attendant misfactoring and bloat. Once that cancer sets in, the code rapidly becomes unmaintainable, productivity across the team falls sharply, and people start to burn out.

This creates turnover, until finally somebody says, "We can't keep this thing going anymore! Let's scrap it and start over!" The investment in the legacy codebase goes out the window, and the process starts all over again. "But this time will be different," you promise yourself. And for a while it is. Then somebody hires away your rock star, and you're left with undirected junior people trashing your shiny new codebase all over again.

Lather. Rant. Repent.

But I digress... So, to answer your original question: No, half a decade is not the midlife of a software career. It's more an Age of Reason, perhaps -- the place in your career where the scales fall from your eyes and you start to see the business for what it is. The realizations come in a different order for everyone, and that colors the conclusions you may draw along the way. But hang in there -- if you come out the other side sane, you'll have a much healthier perspective, and you'll ultimately find this crazy business we're in more rewarding than ever before.

I love your explanation about the difference between a software shop and the typical IT shop and I totally agree with it. To be honest I’ve worked more at the typical IT shops than software shops and no wonder why my programming skill hasn’t improved too much over the past 2 years. Though I keep on reading new techniques/practices/ patterns (I am currently learning CQRS and find it to be amazing how simplified things are. At the beginning it might seem to be complex and not worthwhile.) but I find I have no where to actually apply those I’ve learn except my personal projects.
–
JeffMar 22 '10 at 0:49

I think you need five more years experience. Then you will be able to accept the compromises and be happy to fix what you can.

At least that was my experience. At about 5 years (about the time it takes to become an expert) I think I actually "got it". I realized my code was crap. I realized my shiny hacks that got the apps working were just that, hacks. I came to understand that I had been creating sub-par code just to make my bosses happy and keep the paychecks rolling.

At the same time I realized that the desires of the bosses were not going to change. They were always going to want it yesterday without spending any money on good tools. They never were going to care if I used a particular design pattern. Never would they be in awe because I increased the maintainability by applying the Single Responsibility Principle judiciously.

I also realized I would be fighting my younger self embodied by inexperienced programmers. The programmer that hacked the program to get it working fast. The young programmer that resisted all the silly things that took me years to understand. The young programmer that thinks having 5 classes is more confusing than have one huge class that does it all.

But now that I am at my 10 year point I have come to see that those frustrations are just like the frustrations I experienced in my first five years. It is the frustration associated with learning a new skill. But this time the skill are interpersonal. The skills are getting non-programmers to understand the limitations of going down the cowboy path. And these skills are maybe more important in the grand scheme of things than the coder skills I acquired during the first five years.

But what is really amazing about this job is that I can continue, and actually must continue, to developing by technical skills while also working with management.

So I say to you keep at it! Because you have become comfortable with the technology you can start working on your skills dealing with the mushy things called humans.

do not seek to have everything you want but seek to want everything you have

life it's tough - it doesn't matter how hard you can hit (good you are, personally and professionally); it will always hit back harder. it matters how much you can get hit and still be able to move on.

After all it's all a walk in the park and there are more important things than bits and bytes, and practices and stuff. Just enjoy all experiences as they are and fight back as much you can.

+1, the journey is way more important than the destination. I find myself not knowing where I'm going, the destination doesn't interest me... but one thing is sure, I've never seen such a beautiful park!
–
Nicolas DorierNov 6 '09 at 13:14

In most cases, remarkable careers don’t come by chance. They require thought, intention, action, and a willingness to change course when you’ve made mistakes. Most of us have been stumbling around letting our careers take us where they may. It’s time to take control.

IMO the dissatisfaction you obviously feel is not a crisis, but rather a sign that you reached a certain level. You outgrew "I am just a programmer" slot. You have enough understanding now to see the flaws in the current state of affairs and how it can be fixed.

The next step is find a connection between what you see as potential improvement and what the company you work for would see as such. Then you have to convince your boss(es) that this is the way to go.

It is not enough to understand things and know how to do things. You also should be able to convince people that you know what you are doing. And if it sounds like sales that is because it is. But this is absolutely necessary to become "great". You are working not with computers, you are working for people and with people, you have to be able to sell your ideas.

Of course some companies would be too conservative to accept your ideas, and your boss can reject them because of the color of the tie you are wearing. Just keep in mind that selling ideas is no easier than generating ones, and unsuccessful sale is not necessarily a result of your boss' ulterior motives it can be bad presentation on your part.

I agree with Nikos completely. I think what you maybe need is to find a company that is technology and product focused. There are companies where the software developers consider development just their job, and they never think about this stuff in their own time. The working environment is usually much more geared up for managers doing desk work rather than developers doing mind work. The average standard of the developers is generally low (although you occasionally get one "guru"). They tend to cut corners on (or even avoid) things like version control, testing, process etc. The company generally ships software that does do the job, but it's often ugly and buggy, and nobody seems particularly bothered.

On the other hand there are companies where the developers are just there doing what they'd otherwise be doing at home anyway; they go home in the evening and work on their own home dev projects, and and learn new languages/tech in their spare time. The working environment is usually quite developer-centric, with good monitors, good tools, good atmosphere conducive to thinking. The developers are often of a high standard, and you find yourself learning from all your peers on a daily basis. They generally take things like version control, testing and process seriously. The company generally ships decent quality software, because the developers take it personally if there are bugs or imperfections.

I don't think finding a larger company will necessarily improve matters; in fact in many cases larger companies are worse, and the problems are just deeper ingrained and more institutional.

Obviously I'm polarising things a bit....but if you're a software engineer at heart (and not just on your resume), then you need to try and find one of the latter types of company. Think of some good interview questions you can ask them, to find out whether a company is that kind of place.

Something I've found many programmers don't understand is that not all decisions are technical. Sad as it is, doing something "right" is not always an option. This leads many developers to think their bosses are stupid, or make poor decisions... and yes, often that is indeed the case, but equally as often the fact of the matter is that the company might be out of business, or lose a job entirely if they allowed the programmers to set the schedule and make all the technical decisions.

Sadly, sometimes it's our job to work within the political or financial constraints of the job and do the best we can.

One thing you learn from experience is to be conservative. The latest techniques may not be proven and you may not have a strong grasp on them even if they are. Managers don't like spending time on letting you get up to speed on a new technology just because you want to learn something new.

Programmers forget that many companies are not software companies. They're <insert business industry here> companies that also do software. Your job as a programmer is to facilitate the mission critifcal processes, not write perfect software. Sometimes it works out that those are the same thing, but it's actually quite rare.

20 years and I still have passionate moments daily with my programming! I'd say try something different, in programming like in love trying new things can really revive a dwindling flame.
–
joshperryNov 6 '09 at 17:32

I can relate in terms of the code written could be better but there has to be a line where one may be too much of a perfectionist as if something works 99.99999% of the time, isn't that close enough to 100% for most people? Part of my struggles at times with negative thought patterns are perfectionism and intense self-criticism and judgement so maybe I can overly identify with that.

4-5 years is enough time, IMO, to figure out a few things:

What you want - What practices in your current position do you enjoy?

What works for you - This is slightly different in that what works may not always be what you want.

What are your dealbreakers - Could you go work for a company that wouldn't let you have an IDE? Extreme example but I would hope that illustrates the point somewhat.

I've also experienced where the senior title is given to someone merely for surviving in the field for so long, rather than achieving a level of skill. You can either accept this as part of how the world works or you can try to find places that run differently. How many actually exist I don't know, but I can say that sometimes you can find a good place in terms of how you like to work and what the company and co-workers use to get the job done.

"Sources of Insight" is one of my favorite blogs and I enjoy reading it nearly all the time. The material is a bit head heavy in terms of there being a lot of intellectual elements to what is written but there are nuggets that one can take and make their life a little better or at least that has been my experience.

I can remember in school when I was a child that there were often transitions after 4-5 years as while my first school I was at for 8 years(Junior Kindergarten to grade 6), then it was 2 years(grades 7 and 8), 4 years(High school which was grades 9-13 where 11/12 was done in one year in my case), and 4 years(university bachelor's degree).

I can accept the idea of crisis coming at various points in life,e.g. finishing university can cause one to wonder who they are or after working for a while wondering if it is all worth it.

Just for the sake of background in my answer here I've been developing web sites/applications for almost 12 years now as I got my first out of university job in February 1998 and aside from an 8 month drought where I wasn't working I have been doing this all the time in a few different environments: A couple dot-coms, an application service provider and now within the Information Systems department's web development team at a local technology company. I realize this is a long answer, but I think the questions asked don't have short answers to my mind.

I have found similar things in my 10 years of programming, and I surmise that these are rather common occurrences. In the business world (as opposed to academia), money (or lack of money) and time drive the schedule, features, and quality of the programming. Often those resources are lacking for doing things fully correctly. This is a prime motivator for finding the most efficient methods to solve problems. This situation has also guided me to keep in mind that my programming should solve only the problem at hand (with some amount of future consideration) instead of building something that contains many more features than is required. This is a crucial lesson to learn, in my opinion.

Your comments on "senior programmers" is also, sadly, common in my experience. I think the reason for this is two-fold - first, many experienced programmers get lazy, using only the tools and methods they have used in their careers. Technology keeps moving forward, however, and this leads these experienced programmers to become "dinosaurs". Second, after programming for a while, it can become easy to fall prey to a bit of hubris ("my talents have gotten me this far, so I must be a pretty good programmer"). I try to combat both of these problems by continually trying to learn new methods or technologies to solve my problems. Sometimes this contradicts the "build only what is required" lesson state above, but the goal is to strive for a healthy balance between the two.

I would suggest using the experiences you have as a motivator to continually improve yourself. I have quit the programming industry myself after about 5 years because I lost the passion to engineer code. But I couldn't get rid of the itch to build programs, and I came back to the industry several months later. I did learn that you have to engage yourself doing what you enjoy doing - if you want to project manage, find a position that allows you to manage projects. If you want to code all day, find a position to do that. Finding a job that challenges you and fulfills your desires is a wonderful and necessary part of a happy existence - I wish you luck in finding that.

Hey buddy, it was really good reading your question. I am glad you wrote so. You know what, you dont realize what understanding you have right now. The things you wrote make me understand what experience you have had, and believe me this experience is something that not all programmers can have in their life. You are a self driven person, self learning. Right now you are in a very mature state of mind, after working 4 years for small companies. If you would have been into big companies, you would have had nothing to be considered as an experience. Now you have an understanding of how this industry works, how things are done and how they should be done. What level these so called "seniors" have. I have a suggestion for you, if you are so good a self learner and have practiced self learning for over 4 years, why don't you try freelancing as a career. Believe me you would be working for yourself and enjoying much more.

As an ending note, dont regret what you did in the last 4 years. Its a wonderful experience and only a few have this in their lives :)

The difference between senior and junior programmers, when talking about people with experience at all, is generally just a pay-based one. There's a lot of variability in what organizations value in order to change the title, and often it's determined by what you demand when you get hired.

If it's any consolation I'm having a 10 year mid-programming-life crisis, although I did start programming on an Apple ][+ so it might be a 24 year point; I don't know. I just wish people didn't expect magic from programmers.

I find the red thread I have seen in my career has been that when I feel I get caught up in a situation where I have no control of my environment that is when I start feeling bored. Just doing what everybody else is telling you. It is important to have an area that is one's own (IMHO) to have complete responsibility of - maybe that is missing in your work as well?

In that case you should speak with your manager, maybe there is some solution in your current job? Asking for more responsibility is always a good move.

In my experience, the first few weeks (months at most) are crucial for the general quality of a project. If you happen to start working at a place where other programmers have already created a mess (bad coding standards, no version control etc.) it's very difficult for a manager, and mostly impossible for a new peer, to establish any improvements. Later, deadlines and budged issues will cause some ugliness an almost every project, but if the foundation is well done, the damage will be limited and manageable.

For that reason, if you find yourself in a situation where you have to work with bad peers on a bad project, try to get assigned to a new project (if this is possible in your company) or find a new job. Don't wait too long, since bad habits are contagious.

I have had the same questions and possibly looked at the same things you have (great startups, inspirational advice, motivated people creating amazing things, processes, algorithms that make your head heart) only to find none of it in my coworkers, current or former, nor in the people I know who are in the business. So this conundrum of matching this deep interest with a paid job has meant a lot of badly slept nights and a search for a project so ingenious that could be taken on the side and yet grow into its own thing quickly enough to provide a way out. Like a lot of people, I have a family to support, and I personally think the energy it takes to build something in a startup targeting the Brazilian market is not well spent if it's not completely IT-ish and boring. And seriously? I do IT-ish and boring things all day long.

So to me the answer has been keeping the will to learn and improve in one place and work in another. I've taken up processing.org and keep trying to draw, write and cook more. It's been great for me, to be honest: sometimes you're so caught up with matching the people you admire and being taken up to the Pantheon of great achievers that you ignore serious facts about who you are and what makes you feel life is worth living. And while work is something that takes a considerable chunk of your day, the minute you stop worrying about what it all means and where you're going is the moment you realize you don't need it to get there. Keep coding if it's what you love, write software at home, contribute to projects you're passionate about. That type of satisfaction hardly ever comes from a paycheck for most people, and maybe that's the case for you too.

As a programmer you're always going to have to balance your desire for perfection and your employer's desire for a working product. At some companies these two desires will be closer to one another, at most companies the two desires will be far apart.

My best suggestion for dealing with the drain of your day job is to start a personal project on the side, one where there is no deadline, where you can work in areas that you don't usually work, one where you make all of the decisions. The most rewarding code that I've written was while working as a Wii developer, I can suggest that you write a game. You'll be able to touch on every different aspect of programming, 3D, networking, AI, etc... and since you're already working with .Net I'd suggest grabbing XNA or Unity

As far as Senior Programmers not knowing much, you're probably right. Most senior programmers at larger firms were promoted at a time that they did know a lot, or when they were able to get the job done. Now that they're senior they have different responsibilities, mainly as managers. It's expected that their coding skills will slip a little. Some are better than others, and some probably did just get promoted because of who they know, but most senior programmers that I've worked with in the past had a solid (although sometimes outdated) skill set.

So to wrap it up, do a personal project to relieve the day to day boredom, and take it easy on your seniors, just do the best work that you can in the time allotted and you'll be fine.

I think it is time to be Sr, Developer for you, I m new at this market and learning and improving but employers are not looking for humans, they are looking for monsters like Jr. developer with 6 + years of experience and it is really frustrating.

Absolutely right! When I just graduated from uni all the so-called "junior position" were like new graduates with at least 2 years experience. I was fortunate to find a good place and worked 2 years there.
–
JeffNov 6 '09 at 7:52

Good question Jeffrey. Do you still enjoy programming? Are you passionate about it, do you do it in your spare time? Or are you just sick of some of the terrible programming jobs you have had.

If you are feeling like programming is not for you, there are many other disciplines you could branch off and do at this point in your career - project management, sales, pre-sales, analyst. These opportunities wouldn't have existed when you were a junior/grad, so you might not have started thinking beyond cutting code. Perhaps you can approach your employer to sponsor you for certification exams, or if you want to explore a new technology (Azure/Silverlight/WPF?)

On the other hand, if you feel like your workplace resembles a true-to-life Dilbert comic, maybe it is just time to move on. If you have been working in a large company, how about interviewing for a few startups, or vice versa. You don't have to tell anyone you are applying for jobs, and even when you get an offer, you are in a great negotiation position since already have a job, you can simply decide if the offer get is better than your current situation, and if not then just keep looking. Larger companies can often offer you better career development opportunities and training, whereas with a small company you get more intangibles, like responsibility for the success of the company, flexible working hours, stock options, and seniority/respect later on if/when the company hits it big.

If it's any consolation, I've felt exactly the same way about seniors in my work place. Last week I filed an evidence-based report, and this week I had an hour long meeting with personnel to officially file a complaint about the managers (taking into account I'm a junior). It was either grow some balls or be unhappy in my job. It's not malicious complaints, it's constructive complaints. There's a difference, and it can certainly have a huge impact on your happiness in work.

EDIT

I'd also say don't just "give up" because you have an issue with people. It seems a lot of people in here just say "quit your job", the truth is that you can make the difference in the work place. It sounds cheesy I know, but I think you'd make change happen and gain more respect if you're pro-active for things to change. Don't be scared to take your boss aside and make a complaint. I have, and already it's made a big difference. We're adopting new technologies, changing our work procedures and more formally approaching tasks all because of what I said (and I'm a junior developer)

Well, you should learn another domain (mathematic, AI, data mining, BI, integration whatever).
Then after mastering this new domain chances are that you have new ideas which respond to real business needs.

At this stage if you are a great programmer, you just need to make a startup. Well it's risky, but way more fun.

Learn different skills and competencies, not just in programming, then combine them to create a new thing nobody has thought. That's easy, you already have the best hammer ever : Programming.

My personal experience is the same that you mention. Mostly all the projects i have been working on lately all are made in a rush and all could be better. I've been a program developer for roughly 7 years now and been in the same medium sized company. The management dont have a clue and are running all projects as "non-projects". There is very little order in the chaos.

The thing i fear the most is, that I fall into the pit you are talking about and start doing "crappy" programming and stupid decision just to get forward in my career. I hope there is someone there to hit me in the head if that happens.

Wow!
I like how valuable this conversation is.
I am a web developer with 5.5+ years of experience and I love it.
I can't vote but I will quote AZ's words.
I agree with that!

I've found that there are 2 secrets of
relative happiness: - do not seek to
have everything you want but seek to
want everything you have - life it's
tough - it doesn't matter how hard you
can hit (good you are, personally and
professionally); it will always hit
back harder. it matters how much you
can get hit and still be able to move
on.

I hit mine after a mere 2 years in the industry. I overcame it by bettering myself and learning.

Most of the time, it will come because you are doing the same thing over and over. And if you're doing the same thing over and over... well... you're doing it wrong.

Always improve. Always learn. And hell, if your current company isn't giving you that atmosphere, go find one that will. I did and the last 2 years have been the best time of my life (I'm also probably 100x better at my job than I was 2 years ago too)

Welcome to the real world...unfortunately, what you describe happens in most careers with people which just aren't passionated enough about what they're doing. There's only one option (that is, if you love your work): you must find a better shop to work for, though that is not easy in the current days....

I’ve also observed another issue that most so called “senior” programmer in “my working environment” are really not that senior skill wise. They are “senior” only because they’ve been a long time programmer, but the code they write or the decisions they make are absolutely rubbish! They don't want to learn, they don't want to be better they just want to get paid

... followed by ...

I’ve run into a mental state that I no longer intend to be a programmer for my future career. I started to think maybe there are better things out there to work on.

Then it's time to start looking, and to take action. Because if you remain a programmer with this attitude, you will end up just like those "senior" people that you so clearly despise. The operative word is "trapped": you'll make enough money that you can't justify moving to something else, and your skills will be so narrow that you can't move within the industry.