From a career perspective, there will be Microsoft (C#/SQL Server) jobs and there will be Linux jobs, and even some OSX jobs available to you if you market yourself well. (Not to mention of lot of iOS jobs as every company want's an iPhone app these days)
As far as I'm concerned, it won't affect your enjoyment of the job nearly as much as coworkers, commute time, and other company perks; and based on the nature of your question I'm assuming your coming in as a Junior where you would be expected to need to learn the environment when you start anyway. Maintain a passing familiarity with several technologies so you don't sound completely clueless in the interview and can put some nice keywords on your resume, then become an expert in whatever is relevant when you land the job.
As a disclaimer, I work primarily with ColdFusion, C#, Sql Server on Windows Server machines. At home / for hobby projects I use Arch Linux, C++, and php.
Forgive the brief digression but my own experience has been a somewhat circular route consisting of:
Starting off in the stone age of microcomputing (late '70's into '80's) with plenty of choice - disparate incompatible machines
Moved onto commercial Unix (and open BSD/Unix) mini computers - plenty of power but locked into commercial software
DOS/Windows machines were not taken seriously at first - until ODBC and 32 bit Windows gave users real freedom and choice
With Windows NT4 and Windows 2000 - PCs had real power - plenty of choice of Office Software and development environments
Microsoft gradually killed off competition (who remembers Borland or Wordperfect these days) and gradually increased the lock-in
Linux gradually improved from hackers only distros (like early Slackware) to now when Linux EASILY as good as Windows (yes really)
OK not quite a circle - from Unix back to a Unix-like environment (with MFC and .NET in the middle). These days
Windows = "lack of choice/lock-in"
Linux = "choice/freedom"
As others have stated, concentrating on technologies which can run on multiple operating systems like
MySQL or PostgreSQL
is a better idea (IMHO) than locking yourself into one vendor (like Microsoft, Apple or even Google) and a better investment in your future. Although Windows is still pretty ubiquitous (at the moment), web technologies are becoming the defacto standard. We are fast approaching a tipping point where software writers had better not target just Windows (expecially just x86 based Windows) as it locks out Apple, Chromebook, iPad, Android Tablet, smart phones (or even ARM based Windows 8) etc and need to target multiple platforms. When that happens - bye bye Windows monopoly!
Exciting but uncertain times I think. I have already thrown my hat in with the open source crowd - a better bet (I think) than the proprietary software group but for you I think betting solely on Microsoft as the way forward might be a little short sighted.
To all who answered, thanks. Let me try to sum up what I can understand from all the responses:
- if I like MS tools and am productive with them, use it.
- Casting my lot with Microsoft has its fair share of risks, especially with regards to how they treat developers at times (especially when they deprecate frameworks and APIs)
- In the short term, it's ok to focus on purely Microsoft technologies, but to ensure my employability in this field I have to ensure I don't get get too beholden to one set of tools; at the very least, know how to use more than just Visual Studio, C# and SQL Server. And go deep into whatever language / framework I'm learning at this point so that it makes transition easier, when needed. It is what I can produce for others to use that matters, and not what I use or what I write. I'll keep this in mind.
- In the medium term it's important to start learning to be a software engineer and not just a developer, and acquire some profficiency in at least 1 -2 other popular programming languages and other development tools to ensure that I cover a few extra fields.
- Long term will most likely require moving around from language to language and the effort put into the short and medium term portions will directly affect employabiity at this point of time
- Don't lose sight of the software industry as a whole; it's ok to focus on a few fields (i'm leaning towards desktop software development and backend software maintenance) during the short term but always remember that any field is but a small picture of the overall software landscape.
- There is no such thing as learning only a handful of tools / one language and sticking with it forever because it will never work in today's software industry.
If that is true, then I think I now have a better idea on what to start with and how to actually go about doing it.
Oh, and one thing:
Originally Posted by TheCycoONE
based on the nature of your question I'm assuming your coming in as a Junior where you would be expected to need to learn the environment when you start anyway
To be honest I'm reaching 30 soon. I know, 30 is a VERY bad age to start joining the workforce especially in such a field. My biggest regret is that I squandered away my youth, and now I have to make up for lost time. It's going to take a LOT of hard work and commitment to get to where I eventually want to be, and even then there no such thing as having success guranteed. Just gotta keep trying and keep moving forward everyday and aim for that one day where, hopefully, I can finally say to my parents, "I did it".