views:

903

answers:

5

Greetings to all! This is my first time to ask question here, and any comment is welcome.

I have been looking at the job market lately, and thus come this question. A little bit background: I am a developer spending most of my career in .NET technology (C#/ASP.NET for the most part). However, I am never satisfied with just .NET skill, or even to the level that I am never satisfied to be a mere programmer: I would like to be in a role as solution architect, a role that (in my mind) would connect the technical world and the business world.

I also consider my personality fitting much more to be a technical generalist rather than a specialist. This has proven to be very exciting and beneficial in my current work, when we have to perform black-box testing for a 3rd-party J2EE application. Even though I do not have proven track record of working in J2EE environments, my knowledge in Java actually helped the team to reverse-engineer the J2EE app in order to maintain interoperability. In fact, I love to know and utilize more than just what I have been using for the longest time.

Hence my problem in job hunting.

I would really like to have an opportunity that lets me grow not as a specialist, but as a generalist. For example, I would really like to have the opportunity to work on a variety of technologies, e.g. J2EE, PHP, Ruby, Python... not just as personal interest, but also as professional experience. Also great for having the opportunity to grow not just as developer, but towards solution architect. When I look at the market, though, the descriptions and requirements are so specific.

I may be in the same industry and requirements as an opportunity has presented, but missing the J2EE/Oracle technical experience track. True, Java and C# are not quite the same; also Oracle is very different from SQL. However, I believe that it is not the tools that matters. It is the ability to come up with the optimal architecture to solve the correct business problem; the analytical skills to pinpoint technical problems and yield to the best solution; the mindset to understand various parameters during performance optimization; the capability to construct maintainable code... All these fundamental and "general" stuff, rather than a special set of tools.

Sadly, it looks like not only very few companies are looking for generalists, but with the current market's rules (proven track records), once a developer jumps into a specific tool, s/he has a high chance to be stuck. In my case, it's C#/.NET.

So, here comes the question: despite spending most of my career in .NET, how to look for a job that promotes the generalist approach, providing opportunities to utilize different sets of tools, or even to the extreme of jumping to a position primarily not using the platform I have been using the most, regardless of the "proven track record" rules?

The catch: without losing the "mid-senior" status.

One possible answer that I have in mind is to be a consultant / contract positions rather than staying within a permanent position. I do not totally agree, but when somebody mentioned the following to me, I consider it having its valid stand: consultants and contract positions tend to perform more actual code constructions, while permanent positions tend to do more maintenance and patching jobs. However, it does not totally solve the "jumping to totally another platform/framework/language" problem.

Another answer I could think of is involving in outside-position opportunities, such as short-term contracts, volunteer works, open source developments, etc. This requires lots of extra time, and while I would love to do it, my personal life does not permit me doing so at this moment.

So, what are your inputs? Thank you for your patience to read this, and as I have already said, any comment is welcome.

Have a nice day!


Thanks for the comments so far!

There is something I would like to update, in case if I was not communicating accurately.

For this post, I definitely concern about my personal growth; however, there is an even greater concern for me, and this is the market rule known as "proven track records".

Let me use the example I have given at the very beginning: reverse-engineering the 3rd-party J2EE app for interoperability. To be honest, my hands-on Java experience is pretty limited. School projects, a little bit Swing, a few personal JSPs. I have not ever written anything for J2EE servers. I had read a few books about J2EE, installed JBoss 6 years before, and that is it. I stayed pretty much in .NET shops all the time, and I have never gotten a chance to use it in production environment.

Nothing above can be put into my resume as "proven track records". Yet, with almost all my "proven track records" experience in .NET, (try not boasting myself) I have contributed a major portion of knowledge and analysis leading to the successful reverse-engineering of the J2EE app. And this is not done solely by my theoretical knowledge of Java; this is done by a generalist approach of technology, applying analytical skills and software architecture knowledge, which are quite platform independent.

After this event, I feel quite comfortable to work with Java. Other than adopting the new language / platform (which indeed may take some time and effort), I believe that my skill is up to par for different kinds of platforms. Same for SQL performance optimization, I suppose. However, it is quite challenging to make this as a selling point in my resume, when companies are looking for "5 years in Java" (or sometimes even a specific J2EE server product), with specialists as possible candidates may be worse than the generalists (in terms of problem solving).

Reading upon the comments, I start leaning towards the opinion that small companies tend to have more opportunities to play with different technologies, and having a better chance to become a generalist, for when not having enough staffs, everyone works like an octopus (8 hands!), and so more exposed to many situation.

What do you think?

+3  A: 

Most of the good generalists I know are simply nerds. They love reading about everything, they love learning. But most of the time they're doing specialist work. But they're the best generalists you can get.

So I suppose I'm saying that you don't train to become a generalist, you just move from specialization to specialization. If you decide to stick with a few you become a specialist, otherwise you're a generalist.

Unfortunately It's still easiest to switch jobs/positions to do the "big" hops in technology. Some of it I just think you'll have to do in your spare time to be able to manage. Attend user groups and conferences, meet the people who know the stuff you want to learn. Get ideas, see some code.

krosenvold
+1  A: 

Today's job market is a buyer's market. That means companies can hold out waiting for the perfect candidate and said candidate is probably specialized. Some companies will hire for general skills, but most won't. You'll have to be picky if you want to find that rare generalist job.

Here are a few suggestions:

  1. Look at startups. They are much more likely to need a jack of all trades than other companies.
  2. Look into test development. Not QA testing, but true test development like some companies (like Microsoft) have. In this role you'll likely have a lot more freedom which technologies to use and will see a wider portion of the product.
  3. Look for a company hiring a tools developer. Very similar to a test developer.
Steve Rowe
+1  A: 

In general, generalists are more needed in small companies, in which there is not a separate guy for every skill. If you can get (and accept) a work at a 2-20 person company, it's much more likely that multiple skills are needed. But then, smaller companies don't necessarily use "mid-senior", or any other statuses.

Joonas Pulakka
For the "mid-senior" status, what I mean is not having to downgrade to a junior position just for the new platform/language, not necessarily about the status literally. Otherwise, I agree that small companies tend to have a lot more flexibility.
TimeSpace Traveller
A: 

I agree that there are several skills that apply to professional software development in a wide variety of languages/platforms. It would make a Big list, among these: design skills, real understanding of architecture concerns, agile, unit testing.

That said, you will find few businesses that will promote/enable the generalist approach. Make sure to check what's the case for the company you are evaluating, remember an interview is not only they evaluating you but also the other way around.

Check out software development companies doing projects in different technologies, these have a better chance on having the projects to fit in.

Additionally note that if you are interested in getting into a project with a certain technology you should do some initial learning about it first. You wouldn't want to pay a senior dev that haves trouble understanding the technology, would you?

Regarding "connect the technical world and the business world". You don't need to be an architect for that, just go with an agile environment.

eglasius
Of course I would not pay for a senior developer who cannot understand the target technology. And this is exactly the problem I have stated in my update: what if I have already acquired enough, but not meeting the number of years of "proven track records"?
TimeSpace Traveller
On one hand, you can focus part of your resume on the type of apps you have built with less emphasis on the technology used. That said, if they are specifically saying - 5 years of java experience, it might not be the one you are looking for. As I said, you will find a few --
eglasius
-- hopefully as our industry matures the number of these will grow, I definitely see a lot of technologies sharing more and more in common and developers growing in understanding it. I am used to recruit like that, but as we grow internally on this, we will definitely be changing it - gradually :)
eglasius
A: 

In my experience you will often get hired for a specific skill, such as C#, but in practice you end up learning or improving other associated skills, such as SQL. When looking at job applications, you'll need to read between the lines.

Also, if you're at a level above junior, you should be in a position to advise on the best technology to use to crack the problems the company has. This means being up to speed on the latest and greatest and reading and experimenting as much as possible with the technology you're interested in mastering.

A good generalist always uses the best tools for the job, not the tools the company dictates (in it's job advertisements).

Jonathan Swift