I am interested in hearing how various people remain in the Software Engineering industry for so long in their careers. I am at a crossroads myself as I have worked with Network Engineering, Communications, VoIP, Parking, Government Contracting, and Military related projects.

Question: How does one manage to stay relevant as a programmer while bouncing between different engineering areas (Testing, Integration, etc) and remaining motivated in the profession?

Old questions:

Do you bounce between pure Software Tester, Integration, and back to straight coding?

15 Answers
15

The worst thing you can do is get settled into one particular technology for too long. At my last company, we used C#, .NET 2.0, and ASP.NET webforms. We used the same technologies at my current company too. So I got really really good at one narrow niche of development -- so try to guess how I did when I interviewed for a job looking for people with experience in .NET 3.5 and ASP.NET MVC ;)

Oops.

Of course, the trick is to read blogs, try out new technology, go to programming conferences. Last year, I saw a very very early demo of Microsoft's Azure cloud, and was really impressed that the preferred coding style resembled Erlang more than C#. Additionally, during those slow periods at work and having no other hobbies at home, I started fiddling with F#, which was quite an experience (and its hella impressive to quote your F# skills in an interview!).

I bet there's a technology you haven't learned yet, probably one of ASP.NET MVC, Ruby on Rails, Windsor IoC, Haskell, NHibernate, Yahoo Pipes, iPhone dev, etc. If you say to yourself "I haven't really learned anything new in about a year", pick something that interests you and run with it.

How do you find your passion ?

I like tinkering with code and new things. I actually still write code as a hobby, and I consider myself the luckiest person on the planet since people actually pay me to do my hobby.

I'd define my job as problem solver. That means I investigate something first to see what has to be done, determining what changes have to be made which is usually a mix of code and database changes in my current project but could include installing other software, configuring software, testing software, or changing software. At times there isn't much that I do that is straight coding unless there is some big task before me where I want to automate its completion.

I'm not sure I get how "one-hit" applies here. I have a set of skills that I believe makes me generally employable in my area. That set is a mix of technical and non-technical skills and performing well in my job is another part I do to remain on good terms where I am.

For me there are a few ways generally. Here's the series of questions to ask to discover one's passion:

As you talk about something, do you get more excited, energetic and enthusiastic? If your speech patterns change from Ben Stein, the economics teacher from "Ferris Bueller's Day Off," to Steve Irwin, the Crocodile Hunter, that's a topic of your passion.

Are there things that as you do them, you feel better? By better I mean that life is worth living, that you are important, you are doing something meaningful, that kind of thing.

Solving puzzles or problems is definitely something I enjoy intensely. Enjoying mystery shows like "Matlock," "CSI," "Murder, She Wrote," "Agatha Christie's Poirot," "Miss Marple," "House," and similar shows is how I found this about myself.

Getting thanks from someone for helping them also has that intensity for me. There is a wave of tingling sensations or a big Cheshire cat grin that tend to be signs that I'm happy.

I go into every project as an opportunity to learn something new. It's either a new language(C#, Ruby, even JavaScript), or a new component/technology (WPF, JQuery), or a new personal goal (active focus on my Refactoring skills, more Test Driven Development, passing on my knowledge to junior members). It's often several of these goals, but I'm very hesitant to accept a new project where I can't do at least one.

When I accept an assignment on a project, I try to ensure that I'm not "indespensible" to the project, leaving my code as clean and readable as possible, documenting when necessary. My goal here is to turn over my responsiblities at the end to someone else so that I can face the next challenge with a clear conscience. (stress the word - goal. Not always achievable)

Passions are personal, and can change over time. The more you read and interact with fellow developers, the more you'll be aware of the possibilities. Something will grab your attention.

If you focus on refining your craft and delivering results (and staying out of politics as much as possible), you'll build a reputation as a go-to guy. That helps in ANY economy.

Question: How does one manage to stay relevant as a programmer while bouncing between different engineering areas (Testing, Integration, etc) and remaining motivated in the profession?

For me, this just follows when you think about programming in the correct way. See my answers below...

Old questions:

1.Do you bounce between pure Software Tester, Integration, and back to straight coding?

For me, this one is all about not differentiating between them. Keep in mind that you program is there in order to make a tool - there is an end goal for every piece of code, and every process in the pipeline. If you're programming in order to make something useful, it's very easy to switch tasks in the chain of working on a project and not see them a different things.

2.How do you prevent being a one-hit wonder in this economy?

Keep up to date. Keep learning. Stretch your boundaries, and learn something new on a regular basis.

3.How do you find your passion?

This, to me, is the key. For me, it's about the love of learning, and the love of problem solving. It's not about finding my passion in order to program, it's about programming to fill a need deeply set inside of me.

However, just programming, for me, wasn't enough. I found that, as I got more and more into my profession of choice, writing code wasn't everything. In order to be a more effective programmer, I went through a bunch of phases, but I think the critical things for me are:

I learned the basic foundations of the trade. I learned to think in terms of algorithms. Learn the basics, because without this, you can't do anything effectively for the long term. This has nothing to do with learning a specific language or technology, but rather learning to think in a different way.

I continually strive to find new subjects, new technologies, new languages, etc. Keep learning. You never know enough - it's a continual, never ending process. If you can't discover the joy of learning as a fulfilling aspect of your life, you're going to have a hard time keeping passionate in this industry, since it changes so frequently.

Learn to be a mentor. Find ways to help other people. This one has been critical for me to really feeling like I can push myself further. Get involved in the community, whether it's online (in places like this), or in local user groups, conferences - whatever works for you. I really "found my passion" by sharing it with others.

The best way to stay relevant is to know everything about everything. If you can't do that, try to know at least something about everything. Learning bits about new technologies/practices can help you to better understand your own.

2: You should not allow yourself to stagnate. From your list of jobs, it does not seem like you have allowed this to happen. As you move from job to job, it's also important to build friendly and trusting business connections everywhere you go. If you are ever in a bind, a network of solid connections is invaluable.

3: Reading blogs and good books about software engineering, programming, high-level product design, and the intersection of any creative discipline with computers has helped me in the past. My recent favorite was Coders at Work. More generally, I've found that, personally, I can't give 100% of my energy and attention to one subject for an extended period of time. I need to move around, explore new tools, and change projects to stay content. I guess I can say that I've discovered my passion to be not one subject, but the learning and exploration of new subjects :]

The public's concept of passion needs to be redefined. Passions aren't magic and you are not born with talent these are things that require work. At least I hope that's right because its how I plan to pursue my career.

There has been great answers so far. Answering 2 and 3. In particular I believe staying relevant as a programmer especially in this economy requires having your hands in multiple projects. This is the only way to find out what are your strengths and passions. You won't have to be worried about being "pigeon holed" on the technology your using at your current job. Especially if your in a job that requires alot of red tape to get new technology. Never be afraid of testing out new technology.

Do you bounce between pure Software Tester, Integration, and back to straight coding?

I have the chance to do a little bit of everything no matter what role I am in if I keep my eyes/minds open. I understand different roles better in this way. This helps one offering better service on his/her own role, and keep one informed on every aspect of the project.

How do you prevent being a one-hit wonder in this economy?

Focus on general problem, or think meta-physically(meta-technically), therefore, all the experiences gained are highly reusable.

How do you find your passion ?

There are various ways for me:
- I like to see that my work actually do something useful and helps people. Doing things like that passionates me.
- Keep the feedback loop going: challenge - battle - achievement - channenge - ... Try to keep the loop short if you are like me hate long unfinished tasks.
- Seeing a beatiful solution of a problem generates good feelings to me too. In a great team, you can see that happens a lot.

Actually, the ability to feel bored is a great one, forcing one to find something interesting.

Question: How does one manage to stay relevant as a programmer while bouncing between different engineering areas (Testing, Integration, etc) and remaining motivated in the profession?

Don't think of them as discreet tasks so much. If you're doing testing right (automated testing, tests first, tests as specifications of behavior) then testing is an inextricably linked component of just about every piece of the engineering process. I've personally found that my motivation and happiness level are directly correlated to the freedom I have to do the job right. Don't let managers tell you how to do your job; if they do, politely tell them that you feel like you're being micromanaged, and that you would like to be entrusted with the full responsibility of the engineering process — surely they wouldn't have hired you in the first place if they didn't think you knew what you were doing. Be sure to pitch it positively; i.e. this will help them to be more successful because it frees up more of their time to concentrate on the "what" and the "why" rather than the "how". Always be diplomatic, believe in what you're selling, and be prepared for either responsibilities or consequences — you're going to get one or the other. If the manager doesn't like that, start looking for another job. I recognize that people have families to support, which is why I didn't say "Quit right then and there," but programmers need to recognize that bad managers are the #1 source of unhappiness on the job. If you're unhappy, it affects not only you, but also your family, and you owe it to them as well as yourself to find a job you enjoy and a group of people you can work with successfully. (Google is hiring by the way.)

Learn strategically useful skills, like say, evented I/O. If, for example, you can do evented I/O well, you'll never be out of work. Node.js is a great place to start there because it makes it easy to do small experimental projects in. The ability to use multiple processors effectively has eluded the grasp of many, but a well-designed event-based system really helps. Know your stuff in realms like this and the demand for your skills will be exceedingly high. Remember, the job market is just that: a market. It follows the laws of supply and demand. You always want to position yourself in the low-supply, high-demand corner. This is the corner of the graph where all of the "strategically useful skills" are.

Write open source. I know this is a community that's very friendly to closed-source and proprietary code, but I can't emphasize this enough. Open source is a community, and in a community, you get to know people. Networking has always been the best source of good jobs around. Open source makes it easy for you as a person to be hired into a job that you will love: If you've written open source, there's a good chance that you wrote code you care about. Companies that happen to use your code are subsequently much, much more likely to seek you out and try to hire you, and more importantly, that means they're hiring you to do something you already know you enjoy. I don't have enough fingers to count how many times it's happened to me, though a lot of that was while I was freelancing — YMMV. And even if that doesn't happen, open source projects give potential employers a chance to see real code that you've written; if nothing else, assuming it's good code, that dramatically ups your chances for an interview.

For many software engineers (I include myself) a very big element is fixing things. Someone - whether it's a client or a manager or myself - perceives a problem of some sort, and I fix it. So those of us motivated by a desire to fix things look for ways to find new problems - so we can fix them.

You can find new problems by learning new languages, new technologies, new methodologies. You can be keeping current by reading software journals, and finding problems there.

You can look for other types of problems as well, and here we come to what many senior people I know comment on: look for what will simplify people's working lives.

Read "Working" by Studs Terkel, and "The Soul of a New Machine" by Tracy Kidder, for insights into meaningful work. If your work is meaningful to you, it becomes easier to keep current.

All the above answers are great. Taking a different tactic, imagine you meet me or someone you'd want to work for in the lobby of a building and you have the chance to express your potential value as an employee. What can you do? And, what skills do you have in reserve that would help you if you could not, for whatever reason, use your strengths? What facets of your personality drive you to learn, acquire new skills, and to persevere?

In these times is may not be the "relevant" skills that distinguish you from the rest of the talented people in our field. It may be your desire, attitude, and ability to innovate where others would not. Your goal is to be able to convince others that you as a person are a key contributor, and not a collections of project timelines and acronyms.

Staying updated is the simpler part - read blogs, go to workshops and learn whatever you think is important for you to remain relevant. Being interested in what your doing is a big part of it, if you like your job and you like programming you will learn new things just because you enjoy it.

Advertising yourself is a big part of staying relevant. Think of a role model in your industry - what did he do that differentiate him from the rest?
Open a blog, speak at conventions, and networking is part of it.

In today's world being good is just not enough in the long run you need to be able to answer - what makes you better then the other developers that have the same certificate and experience as yourself.

Don't get caught up in the roller coaster of highs and lows of being a programmer professionally. Realize that not every piece of your code is going to be this perfect reusable heroic savior of a project.