330
votes

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.

9
  • 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) Commented Nov 6, 2009 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.
    – Jeff
    Commented Nov 6, 2009 at 8:09
  • 4
    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.
    – wentbackward
    Commented Nov 7, 2009 at 6:00
  • 1
    @jeffrey, it has always been the case you need to differentiate yourself to stand out. I don't see many programmers that are that good. A lot of time, good is perception .. the-one-eyed-man-in-the-land-of-the-blind
    – wentbackward
    Commented Nov 7, 2009 at 6:03
  • 1
    I voted to migrate. How is this localized to any region in the space-time-continuum or be considered a narrow situation? - Many programmers I know have experienced this (and the many voters and answerers seem to agree). Commented Apr 28, 2011 at 23:29

63 Answers 63

3
votes

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

1
  • 1
    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
    Commented Nov 20, 2009 at 19:16
3
votes

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

1
  • 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
    – Jeff
    Commented Nov 19, 2009 at 12:18
3
votes

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

3
votes

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.

1
  • 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
    Commented Jun 15, 2010 at 3:05
2
votes

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.

2
votes

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?

0
2
votes

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.

1
  • 1
    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
    Commented Jun 14, 2010 at 6:04
2
votes

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.

1
  • 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.
    – Jeff
    Commented Nov 19, 2009 at 12:14
2
votes

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.

2
votes

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

0
2
votes

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

2
votes

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.

1
  • peacedog, an interesting answer, as it reflects a lot of what I have felt myself at different stages of my career. The fact that you're taking the time and effort to improve yourself both technically and in your soft skills is important. I wouldn't get too concerned about the company policies & politics that prevent you being a "perfect developer". Every large company has these problems. Focus on becoming the best programmer you can be in your current circumstances, and being a person that people respect. That will shine through all the other bull that can happen in the workplace.
    – Tangiest
    Commented Jan 8, 2010 at 21:07
2
votes

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.

2
votes

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.

1
vote

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.

1
vote

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.

1
vote

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

1
vote

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.

1
vote

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.

1
  • If you have to pretend to be a silly girl, you're working with the wrong people. You're better than them.
    – Greg D
    Commented Nov 8, 2009 at 14:33
1
vote

From my experience also in some large companies the situation is the same. What matters is the organization's values and policies and much less its size.

Try finding a sub-field of software engineering that you are more passionate about and enquiring what companies have jobs in the field and what working there is like.

The seniors are usually people that either have been there for a long time, or have key positions (e.g. team leaders, architects, ...), however staying in one company for a long time tends to have a negative influence, since you get used to the situation their and the technologies they use and you strive less to change things and try new approaches. - Fresh minds are very important, internal experience is important for knowing how to get things done in that company, companies should have a combination of both.

Also try to get your work place to send you to as many external courses as possible, that you think will improve your technical knowledge and working methods.

1
vote

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.

1
vote

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.

1
  • +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.
    – Tangiest
    Commented Jan 8, 2010 at 21:10
1
vote

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.

1
vote

looks like its time to start dealing drugs.

1
vote

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)

1
vote

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

1
vote

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.
3
  • 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?
    – Jeff
    Commented Jan 12, 2010 at 21:14
  • @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
    Commented Jan 14, 2010 at 11:17
  • I can't imagine doing a post graduate degree with specialisation in .NET - why wouldn't you just do MCPD instead? Commented Mar 13, 2010 at 10:50
1
vote

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: https://stackoverflow.com/questions/2055669/how-to-find-part-time-development-it-work I understand your frustration

0
1
vote

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.

1
vote

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.

1
  • 1
    I doubt PhD will help you in any way. I sort of think once you gained PhD it will make your situation worse!
    – Jeff
    Commented Sep 15, 2010 at 6:52

Not the answer you're looking for? Browse other questions tagged or ask your own question.