
Ask HN: Choosing between Microsoft and everything else - okatsu
I&#x27;m a software engineering student in his twenties. My work experience has mostly been with Windows technologies (.NET, SQL Server, Windows Server, etc.) and Java for Jenkins plugins. At home, I have a Windows PC and a Macbook, but mostly develop on the latter with frameworks like Django and Rails, in Vim.<p>I know a guy at work in his fifties who long ago decided to use Microsoft technologies exclusively, and I&#x27;ve never seen someone so happy to code, because he only has one ecosystem to work with and it works well. I&#x27;ve also been bit by the Microsoft bug, but I can&#x27;t bring myself to use their tools outside of work. Visual Studio&#x27;s a great IDE (especially as of late), and C# is a really fun language, but the license costs are enormous, MSDNAA licenses are for personal use only, and Azure generally costs a lot more than a VM on Linode or Digital Ocean. BizSpark also isn&#x27;t an option unless you&#x27;re seriously starting a business.<p>I feel like I&#x27;m at a crossroads of sorts, like my coworker once has been. I prefer my experience with Microsoft, but its costs and vendor lock-in are hard to ignore. I&#x27;ve tried Mono, and it&#x27;s slowly getting there, but until vNext is production-ready and I can give it a serious try, I won&#x27;t consider it a viable option.<p>I&#x27;d just like to know if anyone else has had this experience, and if so, what led them to choose one path over another. Any advice is also welcome.<p>EDIT: I&#x27;d just like to clarify that I&#x27;m not trying to choose one platform for the rest of my life, in every aspect of it. I don&#x27;t mind learning one tool over another in a work context, but I have an interest for the startup&#x2F;entrepreneurial world, and that&#x27;s when choosing Microsoft isn&#x27;t as easy as choosing anything else.
======
luuio
I was in your boat a while back.

I had always done development on the Microsoft stack (.NET, SQL Server, etc.).
I had always played around with _nix stuff but never anything serious. During
college, I got a Macbook to do iPhone apps, and decided I wanted to do
development exclusively on_ nix.

What I ended up spending 2 years of my side project time is switching between
languages and stacks: from Python to Ruby to Java to Scala to Mono to Erlang
back to Ruby to Node back to Java -- I was trying to find that perfect
productive replacement for C#/.NET ecosystem.

Finally I switched back to .NET on Windows, and things felt so right. I've
been happily productive on the .NET platform for the past year and a half.

About VM/licensing fee, it really isn't that much of a difference if you think
about it. I'm averaging about $90/month for the VMs and DBs I'm using on
Azure. Compare the price between "SQL Azure" and "MongoLab," the diff ain't
that big.

Don't take this the wrong way, but it is most likely that side projects aren't
big enough to really make the pricing difference more than $50ish a month --
this really is not much especially after when you have a job.

Edit: most of my (probably yours) projects fitted nicely in the free zone of
Azure (with or without MSDNAA) and AppHarbor. Also keep in mind that even the
FREE VS Express is better than most Open Source editors/IDE out there.

~~~
okatsu
That sure is my boat, alright.

If you don't mind me asking, how big are your DBs? That price is surprisingly
fair. And out of curiosity, do you still use your Macbook, but with Windows on
it?

~~~
luuio
None of my DBs have exceede 1GB so far. For larger things I throw them on
Azure Blob/Table -- which is dirty cheap (7cents/GB). I still use my MacBook
running OSX, only used for travel and browsing the internet on the couch
(thinking of replacing it with a surface). Most of my coding happens on my own
desk with a desktop running windows. I treat time outside my desk as
brainstorm/thinking time. In desperate times, I occasionally remote into the
desktop from Mac.

------
shawnb576
I don't believe this is the question you should be asking.

Your worth as an engineer, over time, will be measured by breadth, not depth.
I know engineers that have be come industry-class experts on font rendering or
compiler optimization. You know what happens? It's tough for them to switch
jobs.

For the most part this industry, at the most successful end, values rock solid
fundamentals and versatility.

Your co-worker's path is dangerous. Replace "Microsoft" with "COBOL" or
"Fortran" or "Mainframe" and you'll see that this is a problem.

At this stage of your career, you should be focused on learning how _software
works_, not a particular stack. Stacks come and go, rapidly. Technology
changes. But software and how it works doesn't change all that much.

So pick the right tool for the job and build your skills portfolio. Write some
iOS apps. Write some browser-apps backed by Node, or Go. Write some client
apps, build some APIs.

I will say, however, that if you are interested in startup stuff I'd recommend
against the MS stack. My company is partly on MS, partly not, and the
licensing issues with Windows become painful very quickly just for
flexibility. Windows licensing and things like Vagrant don't get along very
well if you want to have N flavors of a VM and use them at will. There are
other reasons here but I'll tell you that Linux machines are just a lot easier
to manage in general, and I'm historically a Windows guy (I worked at
Microsoft for a _long_ time).

You're still in that stage where you don't know what you don't know. You're
not choosing a wife or a house here, just go play the stack field.

~~~
gumby
I agree with your point overall but disagree with one point: >Your co-worker's
path is dangerous. Replace "Microsoft" with "COBOL" or "Fortran" or
"Mainframe" and you'll see that this is a problem.

The coworker is described as being "in his fifties." It's probably not
unreasonable at that point to have significant depth in a single ecosystem.
COBOL was exactly the case I was thinking of: very few (if any) new COBOL
programmers are being minted any more and there is still a lot of legacy code.
It will probably be a good, if dull, career for the next 20 years for that
coworker who will at the end be able to write his own ticket to fit around his
almost-retired status.

For someone with 40-50 years of working life ahead of him/her, this sort of
specialization is indeed premature and dangerous.

For me that kind of specialization has never been attractive, an attitude that
has served me well. But that's not true for everyone, at every stage of life.

~~~
okatsu
To be fair, COBOL stopped evolving a long time ago, while .NET hasn't. He's in
his fifties, but he's not working on legacy code; he grew up with the tip of
Microsoft's technology. For example, he has pet projects on Azure and just
completed a project at work in .NET 4.5 and Entity Framework 6. Sure, it's
still a lock-in, and potentially dangerous, but nowhere near as COBOL or
Fortran.

~~~
shawnb576
Yep, you've got it. So my point was directed against pre/chosen specialization
for more junior engineers.

I should say that some level of specialization over time is natural. At some
point you'll likely work on one thing for an extended period of time, and
you'll build a bunch of domain knowledge.

In my case, I'm fairly biased against developers who frame their skills in
relation to a specific technology - .NET Software Developer, Java Software
Developer, iOS Software Developer. I really want people who think of
themselves as Software Developers first and don't worry too much about the
stack/domain.

See: Software Athletes.

------
px1999
Mostly Microsoft guy here, though I do both MS and other stuff professionally.

Don't judge based on cost - there are perfectly capable free options in the
Microsoft camp too - SQL express, VS express, etc. If you can't do without a
higher tier version of VS, you probably have access to it at home through your
employer's MSDN account so long as you work somewhere that does use Microsoft.
MSFT gets expensive at the enterprise end of the scale, but so does
everything. The costs largely IMO are unquantifiable, what's the problem in
spending $10k for licensing if it saves you 1k hours of dev time over a free
solution? How about a system that can run on 1 server rather than requiring 5,
etc etc.

Yes, there's vendor lock in, but you can always move elsewhere later if you
want. You're not going to be developing a single project for the rest of your
life.

Do what you enjoy, where you enjoy it. Learn how to work in multiple languages
and make sure that you're not professionally locked in, but that's different
from being technologically locked in on a single project.

------
yulaow
You are in your twenties and have still to start working, why would you chose
a platform over another ( even right now )? I would learn both and move on
jobs to make almost equal experience over them.

Else you will end using the only tools you know over the best tools for each
specific problem, and it can be a disaster for you career and your
satisfaction as developer.

I am not saying to be a jack-of-all-trades-master-of-none, you can still have
(and focus on) a preferred platform/os/tools/etc for any reason (like you like
it more, you have an ethical problem with another, in your zone one is
overused compared to the other, ...) but, imho, is better to be something as a
T-shaped person [ as described on the Valve handbook, page 46
[http://www.valvesoftware.com/company/Valve_Handbook_LowRes.p...](http://www.valvesoftware.com/company/Valve_Handbook_LowRes.pdf)
].

~~~
okatsu
In a work environment, I don't really mind learning one thing over another (I
normally wouldn't touch Java otherwise, for example). I agree that you have to
choose the right tool for the job.

My dilemma is more towards choosing a preferred platform. I've been interning
for a large enterprise since the beginning of my studies, and would like to
try working for or starting a startup eventually. And that's when choosing
Microsoft isn't as easy as choosing anything else, even though I would like
to.

~~~
lpolovets
Given that's your goal, here's an analysis of startup technologies that I did
last week: [http://codingvc.com/which-technologies-do-startups-use-an-
ex...](http://codingvc.com/which-technologies-do-startups-use-an-exploration-
of-angellist-data)

TL;DR it seemed like few startups were using Microsoft products. That's not to
say that you can't create a successful startup on the MS stack, or that MS
products are not good -- just that startups are generally using other tools.

------
n72
I was a mostly MS guy, but once I moved to the startup/entrepreneurial world
moved to multiple non-MS stacks and I'm very happy I did. Yes, the MS tools
are really very nice and C# is a wonderful language, but the costs just can't
be justified. Moreover, I just don't really miss C#/VS, since I'm having so
much fun with Clojure and Haskell. There is certainly something nice about
becoming an expert in one ecosystem, but there's also something very fun about
constantly trying new ones out and learning from each one. I have become a
much, much better developer for having the exposure to multiple ecosystems.

------
honr
You should probably do some research and find out what language(s) you like
(note: there are many languages and stacks outside the MS ecosystem, some of
them might be far more fulfilling than what you have experienced so far). In
particular, take a look at functional languages and see if you like them. Look
at some dynamic languages and see if you get happy with one. Also play with
some properly typed languages (ML family and Haskell, for instance) to see how
those fair. Then also consider C++ (the widely used, but frankenstein-style
language) as it is not as horrible as it used to be. Some new languages might
be fun too (I'd suggest looking at Rust, Go, and Clojure). Once you've done
that, you can probably have a better picture; without looking at all these,
you might be or feel missing out.

That all said, and as you might have already heard, the MS ecosystem is not as
wide as many of these, but it is far more unified than most other frameworks.

My own opinion is that you _will_ miss out on new price and competition that
is happening outside the MS world, so I recommend having some hands-on
experience there if you are serious about starting your own business.

------
pstatho
IMO you should lean towards whatever makes you feel productive. There is
nothing more self-motivating than being able to build something even if it's
just for yourself. No matter what technology you use, you will come up against
hurdles, so how does the documentation and community help out? These are much
more important than licensing.

As for licensing MS technology, I highly recommend the Bizspark program. You
can register a company for $50 at Registres des Entreprises and that's all you
need. You will get free licenses for 3 years that you get to keep plus a whole
bunch of Azure discounts. BTW, the licensing of Windows and VS are pretty much
negligible in any business. SQL server on the other hand is cost prohibitive,
but that is where you can use PostgreSQL.

MS is slowly changing, adopting more and more open source, github, mono. I
think they are transforming their business from selling licenses to
subscriptions (like Office).

------
collyw
My impression (as someone that went the GNU / Linux / Perl / Python route) is
that .NET languages are likely to land you a more corporate type job.

If you want a bit more autonomy, go the other way. If you prefer having more
structured career options go MS.

------
ams6110
Your 50 year old friend will be like the COBOL programmers of the last
generation. Highly productive, satisfied at work, until the job market moves
elsewhere.

Incidentally I had the opposite experience, and found Microsoft tech and tools
to be rigid and stifling. Perhaps related, I felt the same way about COBOL,
which is what I used in my first job out of school.

Other than sticking with emacs as an editor, I have not ever "specialized" in
any one technology. I've never found one to be so clearly superior as to make
it worth the risk of lock-in. No stack dominates forever.

------
mdda
Just like when a startup bases their existence on (say) the Facebook API,
becoming part of Microsoft's ecosystem has a lot of benefits : But there are
significant downside risks.

I think it's already telling that you're interested in Django, Rails and Vim.
AFAIK, they're all built by *NIX people (even if they're using MacBooks), and
treat supporting the Windows platform as a necessary evil.

From my point of view, it's better to be on the side of contributing to a
global software ecosystem, rather than one owned by a specific company.

------
seanmcdirmid
Microsoft employee here (but talking for myself): your worth will be measured
by your ability to learn new platforms as well as your technical depth not in
a specific stack, but in a specific domain. You should always be in the "use
the best tool for the job" mindset, and if you can combine the best pieces
from multiple stacks, then you'll never have a problem.

If you want to reach the top of the ladder, you really to do everything
possible to be professionally immune from this Microsoft vs. Other option.

------
eddie_31003
This question comes in many flavors, should I learn MS or Open Source? Should
I buy a PC or a Mac? Should I drive a Ford or Nissan? Should I buy a Dell?

I really comes down to personal preference. Who says you can't do both? I have
a corporate IT Background. Microsoft Technologies have kept me happily
employed for over 10 years. I'm currently a Full Stack Developer on the MS
Stack working for a local gov't agency. However, I have never been exclusive
to MS Tech. I love the Mac Book I use. I spin up VMs whenever I want to try
something new.

Never stop learning. That's what you should focus on. You'll never be an
expert an everything. Try to learn as much as possible about as much as
possible. Breadth and depth. I believe we're passed the point of praising the
Tech Specialists. Organizations are in more need of the Tech Generalists. We
need to know a lot about the Full Stack and everything in between.

Lastly, it's all about finding the right tool for the job. It's best to have a
nice set of tools that you can pull from. You'll be better prepared to make
architectural decisions when you understand the differences in the tools
needed to build great products.

------
korzun
Do whatever makes you happy.

The only thing I don't understand why you keep bringing up the licensing
costs.

If that is an issue then the choice should be already obvious.

------
mattgreenrocks
Been there. Started as an MS dev and learned a lot programming straight Win32
in C++. College bridged me into Unix, and OS X pulled me in full time. (I
prefer Unix now generally). Playing in other ecosystems is fun. You learn
slightly different ways of thinking about things (process-centric v. thread-
centric), and the toolchain experiences are vastly different. But it's just a
stack. It's a really crappy thing to get passionate about, because it's just a
set of transient APIs. It's here today, gone tomorrow.

Instead, you should consider trying different programming paradigms entirely.
Investing in skills themselves yields disproportionate returns that you can
apply to whatever hip thing every insists you must use. The tech industry only
moves fast if you're trying to learn every stack everyone's salivating
about...which usually isn't that different from what's already being done.

~~~
jorgecastillo
An open source stack is not just a stack it's also a community & to me
personally it's a way of living. More importantly you can drive the destiny of
that community & software. If as a developer you invest your time in open
source you won't regret it. Your destiny is in your hands and not in the hands
of some random engineering in a big corporation.

The worst that could happen it that you end up having to take part in
maintaining some piece of critical software to you but with a small community.
That doesn't sound so bad, the worst that could happen with a proprietary
stack (Visual Basic 6) it that the owner forces you to move to some new shiny
thing.

~~~
mattgreenrocks
Open source doesn't really change much here.

I'm arguing against taking a stack-centric view, which you and the author are
doing, just taking opposite sides (open source/MS).

I'm arguing in favor of building up foundational knowledge that you can apply
in any stack. This is the real essence of computation: decomposing problems,
inventing abstractions, and composing those abstractions. These skills serve
you in _every_ stack you come into contact with. Why wouldn't you want to hone
them? If you're good enough with these skills, then every new stack that comes
along is relatively trivial to understand -- you can apply your foundational
knowledge to easily understand what it is doing on your behalf.

------
dennybritz
Before getting into an argument of MS vs. the world let's take a step back.

What are you goals? Do you want to get a corporate job? Do you want to start
or work in a startup? Also, where do you live?

There was a related thread a while ago:
[https://news.ycombinator.com/item?id=8159427](https://news.ycombinator.com/item?id=8159427)

To make a long story short, my personal opinion is that you can have a very
fulfilling corporate life focusing completely on MS technologies. In some
countries/regions more so than in others. For example, you won't find a lot of
MS-based companies in Silicon Valley, but I've been to a couple of European
and Asian countries where the majority of businesses seem to heavily favor the
MS stack. An MS stack is almost always the wrong choice for a startup though
(and you've mentioned some of the reasons).

~~~
okatsu
I've only interned at large enterprises so far, but I'd eventually like to
start or work in a startup, which is why costs come into play for me.

Right now, if I want to make a site in Django, I can just get a $5 VM and spin
up the rest for free, regardless of my goal. The same can't be said for an
ASP.NET website, unless I'm underestimating Azure's free tier or something.

I live in Montreal.

~~~
volent
For a small Django app you can also use a free heroku account, free is cheaper
than 5$ !

------
luuio
Career wise, I'd say don't even worry about what stack you choose. Ignore all
those posts about ".NET will land you corporate jobs." Companies should not
worry about what languages you have experience with. They should care for how
much programming (not languages) experience you have and how fast you can
learn new concepts and new languages. Know your algorithms, and data
structures etc. you wouldn't wan to work for companies (especially startups)
tht require "3 years of Ruby." That's just shallow. That's why Google Apple
amazon MSFT hire the best folks. They don care what langs you know. They care
if you can code and solve problems

------
SkyMarshal
If you want to focus on something and be a happy expert on it, but don't want
the insane license costs and lack of freedom, Java + Linux/BSD is a superb
alternative. It gets you the same familiar, consistent platform, IDE support,
performance, and do-anything-ness, while being much less restrictive. There's
nothing that platform can't do that Microsoft can't, and you also get the
option experimenting with interesting JVM language alternatives like Scala,
Clojure, Kotlin, JRuby, etc, if you ever get bored of pure Java.

------
jwatte
Consider the bizspark program for msdn licenses. I agree that MSVC is an
awesome IDE and debugger, except for creation 2002 which was terrible. The
more tools you know well, the wider are your options for each problem you want
to solve. Vim, make, and C++ is a fine choice for many things. PHP and MySQL
for others. C# and winforms and sql server where that model fits. If you stay
only with MS, you will build more experience in that area, at the expense of
becoming narrower. Only you can make this choice for you.

------
diminish
Try a dual life, at corporate work use ms, java, as/400 or whatever ecosystem
is well paid in your town. For hobby or side projects go node.j, rails, django
or cooler newer things.

------
dmcclurg
Like others have said. Do more research. Microsoft is the total package... for
a price. Check out HTML5/XAML/TypeScript/Entity Framework/MVC if you're
interested in Microsoft's mobile stack. Yes, you need to run an MS backend,
but this is a good thing. I have personally found the open language ecosystem
a little convoluted to navigate where MS has always seemed straightforward to
me. These decisions are all very personal...

------
timrichard
I think the problem is that you have to go all-in with the MS stack, which
flies in the face of the time honoured "just tools in the toolbox" mentality.
The MS stack components don't seem to be considered "best of breed"
individually, and your hands are tied when you have to take them collectively.

------
chrismcb
License cost for WHAT are enormous? Visual Studio Express is free. I assume
you already own a copy of a Windows OS, so what other license do you need?

Just because you are using Windows and C# doesn't mean you have to use MSSQL
and other Microsoft products as well. And honestly, using other things, you'll
be just as happy.

------
leggo2m
You should learn other stacks. Many startups value using Open Source stacks,
and it will be worth your while to have experience with them.

That being said, as someone who went from Eclipse to Visual Studio, the
difference is night and day :)

------
icantthinkofone
"...he only has one ecosystem to work with and it works well."

Unix is one ecosystem that works well, too.

In my case, we started a web dev company using Microsoft tools I got from my
brother-in-law who managed a large Microsoft shop. After a year, Microsoft
made changes which totally crashed the most important parts of our project
(long story) to where my brother-in-law told us we should switch to Linux. We
actually wound up with FreeBSD but now use it exclusively for 10 years.

~~~
jorgecastillo
I would definitely be interested in hearing this story.

------
antocv
Ive already noticed Microsoft people get fewer job offers compared to Java
(enterprise not Android) people. And they have lower salary.

The only thing keeping Microsoft afloat right now is the contracts with the
state or municipalities.

~~~
luuio
you serious?

~~~
antocv
Yeah, thats just my observation.

Big deal, Apple fanboys / Objective-C people earn the most and are in highest
demand still.

Microsoft is downhill because anything with clouds or servers is none of their
business.

~~~
yulaow
In reality (microsoft) Azure is becoming one of the most profitable "division"
of microsoft itself, increasing revenues quarter over quarter (and also, they
announced around 20% of their vms are running linux)

------
palavrov
Don't even think to continue with Microsoft. Focus on *nix + node.js (MEAN).
Probably you will need a prove for these words, sorry - I don't want to spend
hours writing arguments and examples. Just one thing: I spend 10 years with
.net and even participate in bizspark - it was endless pain and big waste of
time, resources and energy. Microsoft only goal is to sell more Windows
licenses - everything is around that, it is like big wall and you will realise
that when you hit it with your head. World has changed, Microsoft don't know
how to survive when hardware and software are so cheap (less than $100 for
hardware, less than $10 for software).

~~~
korzun
> Don't even think to continue with Microsoft. Focus on *nix + node.js (MEAN).

Or you know, do your research and figure out what you want to focus on outside
of Windows stack. Not what some guy on HN wrote.

