Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Choosing between Microsoft and everything else
39 points by okatsu on Aug 17, 2014 | hide | past | favorite | 48 comments
I'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.

I know a guy at work in his fifties who long ago decided to use Microsoft technologies exclusively, and I've never seen someone so happy to code, because he only has one ecosystem to work with and it works well. I've also been bit by the Microsoft bug, but I can't bring myself to use their tools outside of work. Visual Studio'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't an option unless you're seriously starting a business.

I feel like I'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've tried Mono, and it's slowly getting there, but until vNext is production-ready and I can give it a serious try, I won't consider it a viable option.

I'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.

EDIT: I'd just like to clarify that I'm not trying to choose one platform for the rest of my life, in every aspect of it. I don't mind learning one tool over another in a work context, but I have an interest for the startup/entrepreneurial world, and that's when choosing Microsoft isn't as easy as choosing anything else.




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.


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?


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.


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.


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.


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.


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.


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.


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... ].


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.


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...

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.


Why do you need a preferred platform for personal projects that are not serious? Some very successful start-ups rely almost exclusive on Microsoft technologies, like StackExchange.


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.


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.


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).


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.


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.


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.


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.


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.


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.


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.


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.


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.


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

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).


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.


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


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


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.


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.


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.


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...


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.


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.


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 :)


"...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.


I would definitely be interested in hearing this story.


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.


If that's true, I suspect it's because Java is an awful, unsexy language that few programmers are interested in learning. You have your .NET people, and you have people interested in exciting alternative languages like Ruby, Java, Erlang, Haskell, Go, etc. And then, for some reason, there are all these companies using Java (perhaps founded in the late nineties?) who need to keep things moving. (Also possible: maybe I'm wrong and Java is just a delight to program.)

I'd be curious to hear about the job offer and salary comparison between .NET and "various fashionable languages" apart from Java.


This couldn't be further from the truth.


you serious?


It's true. While many think they need to run to Microsoft to get a job, nix applicants have become more scarce and command a higher salary. Now that the world is moving to mobile, where Windows is almost non-existant for devices and far behind world-wide server usage, nix/BSD people will be in more demand.


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.


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)


You know that you can run an entirely non-.NET stack in Azure? 100% linux servers, PHP, apamongoDB, postgresSQL, mySQL, etc. You can even leverage a lot of the PaaS offerings with PHP/node.js.

I don't know that anyone should take what you have to say on this matter seriously.


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).


> 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.


MEAN.

Mongo, great for unstructured data where horizontal scalability is important. Node great for many concurrent asynchronous connections. Angular is apparently very good at what it does, but is probably overkill unless you want to specifically develop larger scale single page apps.

On the other hand if you want to develop useful software quickly and efficiently for the other 95% of use cases, choose something more general purpose like a relational database and Rails / Django.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: