views:

9841

answers:

63

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.

+7  A: 

In my opinion it's not midlife crisis - I'd say the honeymoon is over.

bernhardrusch
no, my "honeymoon" lasted about 12-15 months. 4 years is way to long for "programming honeymoon".
Jeffrey C
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.
joshperry
Ha ha, very true!
fastcodejava
+59  A: 

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.

Nikos Steiakakis
would you mind providing the link here just for reference? thanks
Jeffrey C
@Jeffrey: Yep, I want to, but currently I have trouble accessing codinghorror.com. Will do when I can.
Nikos Steiakakis
"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 Shved
Could it be http://www.codinghorror.com/blog/archives/000979.html ?
Ikke
@Ikke: Yep, that's the one! Thanks!
Nikos Steiakakis
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.
Jeffrey C
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 Gilham
This is an important point.
jchadhowell
I agree with the company range for developers, small-mid companies are the best because where people loves what they are doing.
Braveyard
Totally agree with company size, typically find innovation in small to mid size shops is higher and ownership of responsibility is needed rather than "not until earned".
Spanky
100% agree!!!!!
Ismail
Agree with company size does not necessarily equate to quality or professional satisfaction in your case. In my young career I've noticed working with smart people who share the same passion for quality and learning gives me a unique sense of pride and personal satisfaction.
pymendoza
+4  A: 

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 :)

Bootcamp
I appreciate working for small/medium companies otherwise I think I wouldn’t have written this question. Small companies have taught me a lot of “real life experience” in surviving also it taught me “how not to do many things”. By “large companies” I actually meant companies that are better suited for programmers, or companies that care about their “software assets”. I didn’t mean the size of the companies. I was considering freelancing maybe next year if I am still doing programming. As you know I am in a mental state at the moment. ^_^
Jeffrey C
Yes. Dissatisfaction is good; if you are satisfied with where you are, you become complacent like the 'senior' guys Jeffrey mentions. Alas, they do seem to form the majority of the people in the industry, and we all have to learn to cope with the fact.
Steve Gilham
+5  A: 

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.

Braveyard
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.
Jeffrey C
Sr after 5 years experience in 1 language? You should go out and get experience with other programming languages and operating systems. That would put you on the path to become a senior developer.
rsp
+4  A: 

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.

dlamblin
+152  A: 

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.

Developer Art
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.
Jeffrey C
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.
Jeffrey C
I feel like you, but I can't (won't) believe that there is no shop outside that in general has more developers "who could teach me something" than those guys who "just code and hack things together". I heard of an interesting job opening at www.realdevelopers.com - maybe that's the way we're looking for (ask me again next week ;-)
Marc Wittke
Second last paragraph tempted me to check your profile. Guess what? Viel grüß aus Köln.Your writing is lot motivating. Thanks.
Saar
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.
joshperry
That is a sad picture you are describing and I don't know if I'm ready to accept it. But I'll have to say the subject is something I've been thinking a lot lately.
Purple Tentacle
In some part I think what you are saying, "personal project" is very true for many programmers. I also think that is in part why small projects, like iPhone Apps, have taken off so well. Independent possible, can reach the audience, can design, can code, can release.
Spanky
@joshperry: Sometimes you just can't "move on" from the "doom" place you work. Maybe you're married, maybe you live in a city where this is the only company that pays well, you have a son, etc... it's difficult to just say "you should look another place to work". Sometimes is better to escape from reality doing personal projects than quitting. You try to convince yourself that a lot of people work in professions that they don't enjoy, but someone has to do it, so why is the end of the world if you're one of them?
GmonC
my feelings entirely...
Thomas Levesque
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
mmrobins
Developer Art
"The options to learn in a working environment can often be limited...": This is a horror story you are telling!
Dimitri C.
I agree with @Developer Art, @joshperry and mmrobins. They all are right in the respective area they are pointing to. I've been on jobs where situation was like the way @DeveloperArt described and currently I'm following Agile, Pair programming, TDD etc. as said by @mmrobins on by job.
Ismail
100% agree with the answer and with jeffery's comment
Yogendra
+1 for describing my life story
Kevin Laity
@Developer Art: are you going to do a startup soon?
ShaChris23
@Developer Art - One more anti outsourcing guy !! It is more related to finance(profit) then the coding skills of developers. Brandishing every low wage country as having poor developers is quite arrogant. This is a matter for company bosses not for a developer.
DumbCoder
@DumbCoder, your name seems to describe you quite well. `;)`
Arlen Beiler
@Arlen Beiler - Do you use your brains to analyze statements, or just babble out anything ?
DumbCoder
@DumbCoder, I wouldn't think that one could program very well if he was dumb. Be that as it may, I don't think that what you said is dumb, but he has Developer Art has obviously had bad experiences with group programming.
Arlen Beiler
+4  A: 

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.

A: 

I'm currently working at my third job. I worked at my first job for 4 years and then at my second one also 4 years.

I think it's a combination of wanting to do something and carreer opportunities and job offers.

I mean: when you work at a job for a year or so and headhunters contact you, you're like: "no sorry, I'm happy at my current job". But then like after a few years you might get tempted into looking around for better opportunities until you reach that breaking point and really look out for something else.

Gerrie Schenck
+15  A: 

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.

NeilDurant
So true! Currently I am in the phase where I mostly enjoy my personal dev projects, even if I have to work really late at night or very early in the morning
Nikos Steiakakis
+4  A: 

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)

Kezzer
Keep up your sense of justice, sir.
codebliss
+38  A: 

Hi !

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.

Olivier Pons
I agree with your point of view. I've heard similar comments on big companies.
Jeffrey C
+1. also looking for "I'm happy to go to my work because I'll learn AND do this and that"
Marc Wittke
Arnis L.
@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.
Ash
John, I'm a 20-25 junior in France, and what is crazy is that after 2 years of internship, I feel the same thing as you. So I've begin to do open source project, and to write articles on CodeProject.My goal was to be a developer in big companies, not anymore.Now my goal is to create a great company with the best of the best developer, that will kick ass to all companies which give crappy work to their developers.Now I don't know where I will be in 2-3 years ! :)The life is too short to work on boring stuff all the day.
Nicolas Dorier
Your colleagues who try to shoot you down might be acting rationally. I've only once been in the situation where a new developer arrived and basically said "I know technology X better than all of you and here's how you're going to completely rewrite *all* of your processes". He convinced management at first, but turned out to be a con-man who had got his previous job just by being persuasive at the interview but always moved on before anyone realised he was the cause of projects failing.
finnw
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 Pons
"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 Man
+5  A: 

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.

Anders K.
are you implicating that programmers are control freak?
Jeffrey C
He wouldn't be wrong ;)
hobbs
"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." Exactlly!
pierr
@Jeffrey, no it's a general human trait, The less control we have over our situation/environment, the worse we feel e.g. get depressed.
Anders K.
+6  A: 

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.

ammoQ
+1  A: 

I have these on a recurring basis. What happens is that i generally lose interest in my work and try to learn new skills. After that i try to put these skills into my work, but I rarely get the chance. This is due to micro-management and constantly changing company policy.

Worst thing is that i'm more or less stuck at my current employer unless i move to a different part of the country.

The only "senior" developer with us is actually not a developer, at least in my eyes, he's really productive, but i've never seen him write any code. And to my knowledge he hasn't got much longer work experience than the rest of us.

I'd really like to do something else, like building a boat or something. However i feel that i've really past the turning back point after 8 yrs.

But if i had the chance i'd be doing something different, but i do feel somehow that I would return because this is who I am. I know code.

Peter Lindqvist
+1  A: 

I think you might be confusing disaffection with 'A job' and disaffection with 'THE job'. As others have said, you just might need a change of situation.

Product-focused development, rather than Line-of-Business (LOB) projects, might give you that stronger relationship between your efforts/desire for quality and outcomes. When you are trying to make a commercial product the best it can be, you are very focused and aligned with the efforts of others, especially if your market is in the tech/programmer area - maybe you need to become a software tool developer for example?

At any rate I would certainly advise you against seeking out larger companies with more money - where do you think the average & below average developers go to hide?

Gordon Mackie JoanMiro
last sentance, haha!
Jeffrey C
+20  A: 

Maybe take a look at The Passionate Programmer by Chad Fowler... quoting from the webpage:

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.

Adam
+1  A: 

I suggest that, given the opportunity of course, you do something else for a time. Like IT consulting, data warehousing, sales, or even support.

You'll either rediscover your passion for programming and be so glad to get back to it (which is what happened to me) or you'll be happy with your new job and pursue a different career that you hadn't thought of before.

If you get back to programming then, it might also open up the possibility to work on different projects in other industries using other technologies than before, which can also be a good thing.

Robert Petermeier
+20  A: 

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.

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.

AZ
really nice point!
Jeffrey C
+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 Dorier
+6  A: 

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.

dodecaphonic
Kinda pessimistic, but realistic all the same! I think you have a great stand on this.
Nikos Steiakakis
+5  A: 

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.

Nicolas Dorier
+15  A: 

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.

mfeingold
totally agree! as many people have mentioned "people" is the next task to tackle!
Jeffrey C
+5  A: 

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.

jessecurry
+1 for "As a programmer you're always going to have to balance your desire for perfection and your employer's desire for a working product".
pierr
A: 

Perhaps consider going to graduate school? That might open up opportunities for a different, more long-term-oriented kind of work.

Max Strini
Is programming not a worthy, long term oriented profession?
wentbackward
grad school opens up research and another tier of work. notice that the hot companies of today(google, microsoft) like hiring people with grad degrees. make the connection. :-)
Paul Nathan
Sorry, I meant a different kind of programming work, programming different kinds of things.
Max Strini
+28  A: 

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.

ElGringoGrande
+1 You're so right! Communicative skills are the next step in becoming a good software developer.
Dimitri C.
After one year of working full time having finished university, my collection of books went from 100% programming to 50-50 programming / people skills. I truly understand this post. As someone once told me: "It's right for them, if it feels right for them."
lb
" to developing by technical skills while also working with management." I totally agree with you on this. I'm sticking around with my current job even though I dislike the recent changes - micromanagement, no time allotted for learning, no noticing the good work or the improvement done,too much pressurizing,dirty politics. The good thing is that I have 2-3 people who advice on my problems concerning soft-skills. Once I feel I'm not learning any soft-skills anymore I'm going to quit. This is because I have started realizing that these skills are definitely more important than technical skills.
Mugen
+8  A: 

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.

Matt Hamsmith
+3  A: 

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.

The book I'd recommend is: http://www.amazon.com/Software-Measurement-Estimation-Quantitative-Engineering/dp/0471676225

lordspace
+7  A: 

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.

There are other questions like "Roadmap to a better programmer," and "How to become a 'faster' programmer," that may have suggestions for you if you do want to improve your skills.

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.

Some places can appear as awesome places to work and others can lead to burnout as that has been a question here a couple of times, "What causes developer burnout," and "Developer burnout stories," while other questions are the flip of that, "What is your motivation," and "Programming (de)motivation and further plans..."

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.

JB King
+3  A: 

My two points:

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)

mendicant
+1  A: 

A lot of people have basically said Learn Something, and I agree with that. In particular, I suggest finding a domain you have a special interest in and getting good with it. I know too many web designers who "really wanted to be 3d artists but never figured out how to do it." By far the best way to get hired for interesting projects or technologies is to have experience in other interesting projects or technologies. An unfulfilling-but-undemanding workplace can be used to your advantage, giving you the mental breathing room to take on new concepts.

In general, the best advice I have heard in these situations is not to think positively but to think constructively. Where am I in my career? Where do I want to be? What steps do I have to take to get from here to there?

Even taking a hands-on, holistic view of your own company's activities can be refreshing - what realistic alternatives would you implement to the workflow as it stands? are there any small components that can be introduced without too much disruption? Presenting a written proposal of a new model along with working code for a part of it shows vision as well as technical competence. The difference between a good junior programmer and a good senior programmer is the scope of the solutions they are required to craft.

(Also, 4-and-a-bit years of a 9-5 also represents 10,000 hours put in to a field. Not particularly relevant, but I thought it was a neat yardstick to know about!)

Brandel Zachernuk
+1  A: 

The project is the thing. Really. I've run my own small company, and medium and large size teams. The single biggest thing I see is that everyone is motivated when they dig the project. Won't you work cheaper if the project is really cool? Won't you work longer when you're totally into what you're doing and charged to see everyone else feeling the same way?

We do what we value best. So how can you inject value back into your career when you are working for someone who pays your bills? Through innovation. Innovate and share that with others. That's keeps it fresh.

Spanky
+8  A: 

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.

Mystere Man
word up, yo....
Paul Nathan
u sound like a manager. what u described is true but i disagree.
Jeffrey C
I'm not a manager. I've just got 25 years of experience, and have delivered hundreds of products.
Mystere Man
...but companies should feel a moral responsibility to develop their employees, even if it doesn't add to the bottom line. In a mid to large sized company, you shouldn't lose sleep over the company's money situation; the higher ups probably wouldn't let you share in the profits so why give a damn about them?
temp2290
+2  A: 

Let me give a manager's point of view. The world supply of coding opportunities greatly exceeds the available talent-hours available to address them. Managers run businesses to make a profit, for which reason they try to apply the available talent-hours to as many coding opportunities as possible, so it is only right and proper that things get done in a rush, and on the cheap, provided the consequences don't affect the bottom line.

In my experience the best work gets done when management isn't looking, either as a skunkworks project at a larger company, or increasingly by voluntary contributors working on open source projects.

My advice is embrace the discipline of cost control, look for skunkworks opportunities, find an open source project to engage your spare time, and get into management, because if you don't someone with less technical competence will get to make decisions instead.

PS. I was a C/C++ developer for 12 years and still code Java as a director.

Piers C
I think the point of running businesses is not to make a profit, rather to make superior product. When you make superior product, you make a lot of profits. That is the point the OP is trying to convey: a lot of managers do not understand this; they see numbers but they forget that at the end of the day, if you come out with crappy products, no way you can make profits. And lastly, getting things done in a rush will most likely make the group pays later in terms of bug fixes, code maintenance cost, morale, etc.
ShaChris23
+4  A: 

There are a lot of programmers, but only a small fraction of them are software engineers of quality. I suppose that's true in any profession.

Loadmaster
A: 

Think of this as a chance to chanllege you beyond yourself.I would suggest you to take initiative to improve your atmosphere. You will learn lot along the way ,no matter you would fail or succee.

It's much easier to complain (I know people don't like this words, me too) than to make positive change.To change you should be able to influence others; you should be able to communicate;you should be able frame common ground; you should be persistent and patient; you should be able to listen and motivate others with you vision. These are the never-out-of-data skill that will benifit your whole life.

pierr
if the people surround you don't have the passion as you do how can you motivate them, how can you communicate with them? they are just there doing their work, they do it because they get paid for it.
Jeffrey C
+1  A: 

Imagine if your experience was less than 4 years, be a woman, be pretty, be complete in-love of your work as developer and no one take you seriously. Although if you have squashed one and another time in knowledge the men that's surround you but you must pretend all time that you are a silly girl. Yes sometimes it's really frustrating, but I think that everything in live is how much you love what you do, and certainly the only way to really learn is by our own effort.

ae2
If you have to pretend to be a silly girl, you're working with the wrong people. You're better than them.
Greg D
i yet to work with any pretty female co-workers, maybe that's why i am in this "mental" state atm. ^_^
Jeffrey C
+2  A: 

I worked for 2 companies in 2 different continent with total different mentalities but what they have in common that they both don't care about programmers... Programmer is usually associated with the bottom level of companies... They are usually associated with beginners and have the smallest wages... while Project Managers, architects etc... usually take more money and do less work...

I have been working for almost 4 years now and I have nearly the same feeling as you... Switching between projects... trying all the possible programming languages... C, C#, php, ASP.NET, WinForm, C++, Python, VB.NET, VBA... and a lot more was some of the languages I worked with... Since the moment your superiors discover that you can make it with any language that they give you, they will tag you as a "good" resource and give you all the dirty job...

I haven't neither got a mentor to guide me thorough my career... and like many who wrote here... I only find my satisfaction when I do make my personal projects... but unfortunately usually the long hours of work didn't let me to make some serious work...

In conclusion, I will spend some months lost till I decide like the majority of passionate developer to give up and take a merely boring architect post to get more cash

Zied
That is inevitable in any capitalism system. The labor is always going to be used and abused for the benefit of a few. This is oppression; there definitely need to be strong programmer unions.
temp2290
+1  A: 

If you're good at what you do, as a programmer, most people you encounter in corporate life, will have more to lose than to gain. Senior management would gain from your abilities and you need to ensure you have their support.

Find your own mentor. It is your responsibility, if you love this game, to find someone to help you grow.

wentbackward
+2  A: 

Somehow we have a similar feeling. Now I am wondering if this is happening because we're both having five years of experience or because of the organized rising of those people who read "Clean Code" (we in germany have a quite active community around the "Clean Code Devloper" initiative) , "Pragmatic Programmer" and "Code Complete" like ALT.NET and so on. All the blogs are full of ideas how to do things right and clean.

So I am thinking, that the five years of experience is just a matter of coincidence, while the main reason is the change of the industry - which is quite new: houses and bridges are being build since thousands of years, machines are constructed for many hindrets of years, higher medical stuff goes hundred years, computers some 50 years and we're coding in a 3rd generation language since 20 years. See the point? It takes time to become mature for an industry, and I think the industry is coming to the age of adolescence :-)

Marc Wittke
i totally agree that IT industry is still very very new. and i sometimes things the consequences of things go bad isn't as obvious as a dying patient so people don't care as much
Jeffrey C
yeah, we should try to let people dying for bad architecture and duct tape programming to get some audience ;-)
Marc Wittke
+1  A: 
Danny Varod
A: 

The reality is that length of experience doesn't really amount to any sort of guarantee when it comes to competence. A good model of what happens is the Dreyfus model of skill acquisition which although originally popularised in nursing has had a bit of a revival in software engineering - here's an example applied to Ruby (personally I'm a bit dubious about the mapping, but still an interesting read).

Sadly most people never pull themselves past the "advanced beginner" stage in their skills (note that the model should be applied per skill not to a person as a whole) - you'll only get better by not only practicing self improvement but by choosing the right sort of learning which will pull you to the next stage. This is why some people can do lots of courses, pass exams and still be rubbish.

It sounds like that you've reached a particular stage in your skill development (competent or proficient) and so are able to differentiate yourself better from others. The general pattern is that it takes 10 years to become fully expert in any particular non-trivial skill - but most people never do.

FinnNk
+4  A: 

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....

Luis Abreu
+1  A: 

welcome to the real world.

life sucks.

David
A: 

A few ramblings from someone who is wondering if after 40+ years of hacking, maybe a new career might be in order ... :-)

Nah. I love this stuff. From punch cards and paper tape, through the CDC mainframes, PDP-*, 4004, Alpha, Nova, Eclipse, Eagle (the hardware which came long before the software), Mac Minis and all the stuff in between. And there are a few of us who still are curious about new technologies after many, many have come and gone. My first confession is how, as a child of the Mini-computer industry I looked at the old fogies of the Cobol/Mainframe era and thought them dated and basked in the knowledge that us young whipper snappers were here to save the technological day and get stuff done, not to mention make millions.

In all that time I never seriously thought of actually leaving programming because there was just too much left undone. Much of it work created by clueless management in a rush to deliver a 5 month baby, time after time after time. And it is that work that is the bulk of the uninteresting work done by 9-5ers or by off-shoring.

The interesting stuff is being done by startups, small companies, and companies like Apple and Google who for different reasons have created work environments that foster creative programming. And in big companies with dysfunctional work environments by mavericks who are willing to be stick their necks out and have their heads lopped off from time to time. Been there, done that and will do it yet again, if only because at the end of the day, there is just nothing like seeing that application, system or library actually working and being used, and most important of all, knowing that but for your efforts, the end product would be worse off still.

Not to worry. If you love this stuff you will be doing it 30 years from now. If not you will, with any luck, find what you do love and it will lead to internal satisfaction and hopefully lots more. In any case, excellent question if only for the opportunity to express some deeply felt passion.

pajato0
+1 to combat the drive-by downvoting. pajato0, great answer - it all boils down to the passion that you have for programming. All the rest - that's just noise that gets between you and the code.
MagicAndi
+4  A: 

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.

kdgregory
A: 

I have worked for large (enterprise) software companies for the past 4-5 years, and as described in the question, have seen a number of solutions just been thrown together without any real thought or design. I have been fortunate enough to work with some great people, but it does get a bit depressing to see the same mistakes being made time after time. More often than not, the problems are not technical, but are the result of poor management.

MagicAndi
+1  A: 

looks like its time to start dealing drugs.

gweg
+1  A: 

There is a difference between 10 years experience and one years experience 10 times.

PurplePilot
i totally agree with you!!!
Jeffrey C
+1  A: 

This question describes pretty well the sad state of our industry: programming is awesome but most programming jobs sucks.

Mr. Brownstone
+1  A: 

Speaking for myself, there is a cycle. When I started professionally developing I was excited, eager and had a great time working through every new problem. After a few years, I wound up traveling for a company for several months. I wasn't really prepared for the amount of travel required and wound up moving on. The next company I worked for had a problem with being too big and not having a clear focus. There was never a clear intent or business reason for the coding I was doing. As a result, it was mostly filling time.

After that, I became a consultant and found things aren't really that much different from FTE work. I've typically been on multi-year assignments where eventually it just becomes a job. As others have said, you wind up doing lots of evil things to get the job done and get mired in the technology you're using, as opposed to new and interesting things. I spent several years where I didn't really care about the technology. I've seen cycle enough times now that I know that if you ignore a round or two, you won't really doom yourself... but it does take quite a bit of effort to get back on the bandwagon and catch up with the important changes. Last time I had an interview, Unit Testing and MVC didn't really exist in the .NET space and patterns were barely spoken of in the .NET community.

I find the best determinant of if I'm "doing it right" is if I'm coding on my own on the weekends and evenings. If so, then I'm passionate about the technology, interested and learning. If not, my job probably has me on the road too much or has me doing the same thing over and over and I've lost interest... in which case, it's probably time to move on.

Remember: Your boss is in charge of your job, you are in charge of your career. (Blatantly stolen from Brian Prince's great talk on being a better developer)

Ben Von Handorf
+1  A: 

I've felt the same way for a while. I'm in a large, corporate IT shop, and I'm seeing the same sort of thing; the seniors are mostly stagnant and resistant to change, and that resistance is so ingrained that we can't even get away with streamlining the user interfaces for our software, instead ending up cloning the original almost exactly.

It doesn't help that the original software is mostly terrible; the designs overly complex, very inefficient, and equally error prone... yet the management forces us to make many of the same architectural decisions.

So I'm working on transitioning to freelance...

Rakesh Malik
+1  A: 

:-) I assure you, the law of code to market go's as follows:

Larger the corporation the least time to market you have, project timelines keep getting smaller and competition to get your product out quickest makes for almost zero time to write the "perfect" solution if there ever was such a thing.

In my personal experience, some 8+ years development in large corporations, smaller businesses and then medium scale enterprises - the projects I was able to focus the most amount of time and polishing was the SMME (small guys) - Sure cost comes into play but don't sell yourself out either!

As a developer stand up for realistic timeframes, have a game plan that allows enough time for some polish which will make you feel better about what you've delivered. Failing to plan is like planning to fail, a term coined by many to date.

Best of luck with your future plans / career.

Microdot
+2  A: 

Interesting post. I'm midway through my fourth year professionally doing .net development. I'm really unhappy with my current job (I am looking but so far there hasn't been much to say on that front).

  1. I had a teacher who once went absurdly out of his way to stress documenting everything. I don't mean code, I mean "everything". And he said it probably still wouldn't be enough. Well, there's a difference between knowing a thing and understanding it and I've come to understand it, and he's right. There's never enough. I fail to documnt but bring up a recent conversation, I lose. I document, I get told I misunderstood something. I have taken a long, hard look at myself through all of this, and I think some of my own faults are definately at work. But communication is a two way street, and I am not always the one who fucks up. It's even worse when I suggest things or address problems, these get blown off at the time, and then come up later. I sat dumbfounded in the VP's office recently as he and my boss asked why I hadn't done something on a particular page on our most recently released app. And yet I'd asked about doing that thing during development and was shot down. Stuff like this is happening far too often for my tastes.

  2. Learning/keeping up on your skills/etc is dicussed sometimes, but we don't do it. We have opportunitues to do this at work and we still don't do it. Very disappointing. I don't expect us to jump on the latest and newest tech/tool every time one appears. But e.g. we should be doing .net 3.5 development. There is no argument for not doing 3.5 development. But we're still doing 2.0 development. It's stupid. It's mostly good that my boss is distrustful of new things, but it's gotten silly. I tried explaining LINQ to him recently (when arguing for moving to 3.5) and his response was "it sounds like that english language query stuff". I realize part of the problem was me doing a poor job explaining LINQ. But going back to the two way street of communication, that was someone on the other end who didn't want to listen. I don't expect the company to make mentoring me it's top priority. But my group (just 3 developers) could do more to foster learning.

  3. My group's standing in the company has improved somewhat in the last year and a half. But we still have some problems. Our VP is largely responsible for this. It's frustrating, but I could live with this if certain other aspects of the job were more fulfilling.

  4. Ironspeed Designer - god I hate you. And the thing is, I understand why a code generator can be helpful. I have wanted code generators for certain tasks at times in my life. We seem to be becoming an Ironspeed driven group, though. I do not like this, since it will severly hamper my ability to grow on the job.

  5. I care about the craft of software development and programming, even though I'm deficient at both. I do not work with people who care about the craft of software development/programming. No code reviews. I often can't get help testing things (and then can't get users to test though things have gotten better there in the last year. . . and then get yelled at if a bug makes its way into production on a release. I'm one man. I can only do so much).

So I try to learn on my own (I'd do better around someone who is interested in seeing me learn, though). I go through phases where I like to program outside of work, and phases where I can't stand it. We just recently got done with a particularly hectic project that saw me put in significant overtime, and so I haven't done any real learning off the job in about 6 weeks. But I'll slip back into it and re-read Skeet's C# in Depth, and do some more playing around with MVC. . .

I have battled a lot of doubts (self confidence has never been one of my strong points anyway) in the last year and a half. I wouldn't call it a crisis. I soldier on because I do like doing this. Even working at a crappy job.

peacedog
MagicAndi
+5  A: 

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.

Arto Uusikangas
A: 

I just started working about 2 months ago in a small company. Programming isn't boring at all if you really love it. And I also rely on the internet to search for answers for my own questions but there is also our manager (who is also a developer/programmer) who I can ask from. Well, it's not all about earning huge income but your passion to get things done. Try to add some skills. I'm not just programming but I'm also writing. I'm also into database design. When I'll have my spare time, I'll start doing my personal project. As of now, I enjoy what I'm doing and I'll be still enjoying it after 5 years.

jean27
6 months from now you will find your manager knows only a few pages more than you've read. And please check back in 5 years time. Most of the time is not you that not loving programming anymore is mostly the environment that made you so angry that you no longer want to be in the business.
Jeffrey C
Our manager is supporting us and he believes that we can surpass him. He wants us to explore and to be the best that we can be.
jean27
+1  A: 

Changing your perspective is very important

I think we programmers complain and cry about lot of things. We want everything to be "perfect" ( = we want everything to be our way). I was (still trying to change) a lot like you. But reading Chad Fowler's "The Passionate Programmer" changed everything for me. I now consider myself lucky to be a programmer. I do my 52-55 hrs a week job (yes this is true). It isn't "perfect". But, I try to do my work passionately. I work for an outsourcing firm in India and the kind of work we get is far from being termed as challenging. Programmer are lucky to have a wide variety of opportunities to satisfy their creative urges. We can work on our own projects. We can work on open source projects. We can do freelancing on weekends. I think most professionals in other fields don't have that luxury.

P.K
I agree with with all of your points. Having said that, it's also not wrong to *always* improve your working condition when opportunities come up or by actively looking for one.
ShaChris23
A: 

Here is a book:

  • Apprenticeship Patterns : guidance for the aspiring software craftsman / David H. Hoover, O’Reilly, 2010

If you are planning a career in Agile Software Development, then this book contains good advice. The foreword is by Ward Cunningham. See also the author’s site. 125 pages.

rleir
A: 

My answer is no. I now am a software developer for 7 years, and my fun it's still getting better. (I'm doing desktop apps in C# at the moment)

For the part of not feeling senior yourself, I recommend two things:

  • Go to a big company with experienced people
  • Get yourself a good education. I do not know what this means where you live, but at my place they have a great post-degree course that is 2.5 years part-time. This opened my eyes for good software and development in general.
Marcel
What does this "great post-degree" major in? I see no point in doing another CS/IT related post degree course unless it's a research degree. Because I am already a seasoned developer and I can self teach pretty much a lot of things in the same field. I might however do a none CS/IT related post degree course that I may consider open my eyes for other fields I may have interests in. What's your view?
Jeffrey C
@jeffrey: Where I live, it is common to study IT or (someting else) at a so called "Technical college". Afterwards one has the opportunity to further specialize in an area of like, doing a socalled post-degree study. I know have done the "Master of Advanced Studies in Information Technology" with specialisation in .NET, and would recommend that very much.
Marcel
I can't imagine doing a post graduate degree with specialisation in .NET - why wouldn't you just do MCPD instead?
Kirk Broadhurst
+1  A: 

Funny i've just come across this.... I've had enough of programming and plan to leave, but seem to have had the career you desire. Maybe best to follow this thread of mine and hopefully the answers will help us both: http://stackoverflow.com/questions/2055669/how-to-find-part-time-development-it-work I understand your frustration

Jonathan
___thank you!___
Jeffrey C
A: 

what do you do when "personal projects" no longer give you sufficient learning or motivation?

Jonathan
I believe personal projects will always give you the opportunity to learn and motivates you however the problem is how good these projects are. If they are really good you can probably make it become a commercial products. But most personal projects are crap ideas or just repeating what you've done previously in a different implementation or language or platform.
Jeffrey C
my experience is that good sales and marketing accounts for 90% of product success, and what you learn in "personal projects" is the remaining 10%. so i never kid myself these are anything more than technical skill acquisition. my 2c worth
Jonathan
+30  A: 

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.

Eric Lloyd
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.
Jeffrey C
Like you described most of those bosses/managers at those IT shops only look at numbers nothing else! But to be fair those typical IT shops do provide more employment opportunities than those software shops. Except IT shops are mostly run by ambitious business people backed by incompetent IT people trying to make some quick money.
Jeffrey C
+1  A: 

I would suggest that if you really enjoy programming then make the time to work on your own projects that interest you, outside of work. Even if you’re handed a dream job, the day-to-day reality of working on professional level software can often take the fun out of it, just like anything else in life.

There’s a good reason why programmers get paid well (it’s incredibly difficult to build and maintain software systems, it’s fraught with compromises, and you’re often working under high-pressure time constraints).

My advice is to work hard while at work, learn what you can from those around you who know more or have more experience (even if you think you can do better than them), and continue to enjoy the thing that got you into this mess in the first place: a passion for programming.

dvanaria
+2  A: 

Unless you find a job doing what you already wanted to be doing with your knowledge of programming, working full time on a related-yet-uninteresting part of programming will dull your interest in what you liked to begin with.

Or, someone with a fierce interest in self-guiding robotics using modern path planning algorithms doing web development work full time probably won't want to see a computer at home, much. The same person plowing their way to the career they actually wanted and not stopping halfway will often gladly work more than a 40 hour week, go home happy, and wake up rested in the morning.

In theory, at least.

Dean J
+1  A: 

I am in the same situation as a four year Java programmer in a big company. I can confirm that I too am facing the issues you mentioned.

My solution is to earn a PHD in computer science in order to find new challenges.

Manuel Selva
I doubt PhD will help you in any way. I sort of think once you gained PhD it will make your situation worse!
Jeffrey C