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.

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.
