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?