I don't get all the hate?
I don't get all the hate?
Assuming that running Windows is a non-issue, the parts that really, really bug me are:
- Background operations suddenly become foreground operations that stall the IDE with a dialog saying "A background operation is taking too long."
- Misclicks spinning off long background tasks that stall the IDE.
- Automatic refactoring/code analysis that will stall the IDE.
- Incredibly aggressive automatic reformatting.
- The Microsoft Account agenda. VS2013 wants me to sign-in with my Microsoft account on so many different occasions: settings sync, Azure, Windows Developer account registration, auth refresh, etc... which wouldn't be so bad, but I'm signed in via Windows 8 already, adding insult to injury.- Nor misclicks stall IDE
- Nor automatic refactoring analysis stall IDE
- Automatic reformatting is a once click option to disable and is not terribly aggressive in VS 2010 up.
- wants you to. Not forces. So, by the way, do JetBrains, NetBeans, Oracle ...
That said, my experiences with Visual Studio only serve to underscore the point that my peers would prefer to avoid running a Windows VM altogether if there are open-source alternatives that are good enough.
As far as virtualization, why are you working in a virtual environment? What are your machine specs? What is the emulator? I'm genuinely curious, because I haven't encountered any of those issues.
Virtualization is kind of a red herring here, because as mentioned before, this happens on an array of workstation-level hardware (quad-core Xeon/i7, 16-32GB configurations, SSD).
The point is that virtualization makes these already-painful existing issues much more pronounced, such that my peers actively want to avoid spinning up a Windows VM for a project. These experiences, whether agreed with or not, were largely responsible for the immediate revulsion my team felt to Windows-based solutions. I can't begin to explain how excited people were at the prospect of not having to use Visual Studio anymore when ServiceStack rolled out at my prior company.
My use case for virtualization is mobile development spanning iOS, Android, Windows 8 and Azure-backed services. The last few companies I've been on-site at outfit their employees with high-end MacBooks, with developers occasionally using virtualized Windows under protest.
If you have to work with the tools daily, then take the time to learn them. You'll thank yourself.
I'd be inclined to agree with you if it were just me or one machine, but these are characteristics that I'd use to describe Visual Studio across a number of machines, projects and teams over several years.
I find a 100project C# solution (200mb deploy) to be perfectly snappy when using & fast to build. There are and have been zillions of annoyances with VS but perf hasn't been one since I set my machine up properly (in the office most of the developers complaining about build perf could cut 75% or more just by excluding certain dirs from AV scan).
I'd be as upset by a group policy demanding I scan my VS intermediate dirs on access as I would be by a no-chairs policy at the office. It's a dealbreaker.
Converting off of STA in legacy code is extremely difficult due to the transitive nature of it as well as the fact you likely have very large and complex types which were never written to be thread-safe because the STA protected them from that (let's not talk about re-entrancy though :)).
It is getting better since managed code has MTA semantics by default, but even with async code all it takes is one person calling Wait on a Task on the UI thread...
A huge sync API surface that is publicly callable also doesn't help. Even if you want to make things async under the covers you generally can't since callers are expecting synchronous semantics and there is no (good) way to make work async, present a sync calling surface to callers, and not block the UI thread (if you say nested message pump, you lose :P)
I'm not talking amazing hardware either, just a computer I put together myself.
After trying VS for a couple of projects I found it completely baffling and backwards.
And I don't think this is because VS is bad, but because the way I approach software is completely different. I want to be able to compile things from the command-line first and use the IDE to edit the code. The way this happens makes it much harder to use other tools I like such as Jenkins. I can't ssh to a windows server.
On the other hand I can see where somebody might be frustrated that they' can't remote desktop into a linux server or had to learn a new config language instead of having a GUI.
IIS is another beast altogether. I've had to help customers set up their servers and the instructions are a set of screenshots that are hard to follow and easy to skip. Most apache/nginx configs clients can copy/paste fragments into their configs to get things working.
I could have 1000's linux servers up by lunch, but it would probably take me all day to configure one windows server. You probably have a better solution for this, but I've not come across it.
For me VS C# probably wouldn't be too bad if it didn't require running windows.
For future reference you can compile VS projects from the command line if you want using MSBuild, that's all building in VS does. As far as IIS is concerned you can maintain all it's configuration via config files so an experienced Windows admin could have 1000's Windows servers up by lunch too. They'd probably take all day to get a Linux server up though.
I remember looking into MSBuild, but I couldn't get it to work. I must have had some path set wrong or something.
Err, no - MSBuild, is basically a clone of Ant, except that it is meant to be generated by Visual Studio. This is completely backwards from what happens in say Java/Scala with Maven, SBT or Gradle.
The advantage of having the build process external, as happens with Maven and Maven-like environments, is that you can easily automate things by writing plugins, plus you're not tied to the IDE at all. You need to push your artifacts into a repository? There's a plugin for that. You need to sign your artifacts with a PGP key? There's a plugin for that. You need to automatically increment the version number on releases? There's a plugin for that. Etc, etc... and all of these can be used in continuos integration processes.
Plus, MSBuild doesn't handle dependency management, which is completely retarded. You've got NuGet now, but again, Microsoft had to over-engineer it, to make it IDE friendly and thus the ease of setting up your own Maven repository is gone.
And have you tried building MSBuild projects on top of Mono? Try it. It's fun ;-)
Basically only a .NET developer that never experienced other environments could claim that MSBuild/VS.NET is satisfactory, but for the rest of us, it's like trying to do software development with early-2000 tools and IMHO, that's where the entire .NET ecosystem is.
MSBuild does not require Visual Studio
> The advantage of having the build process external, as happens with Maven and Maven-like environments, is that you can easily automate things by writing plugins, plus you're not tied to the IDE at all. You need to push your artifacts into a repository? There's a plugin for that. You need to sign your artifacts with a PGP key? There's a plugin for that. You need to automatically increment the version number on releases? There's a plugin for that. Etc, etc... and all of these can be used in continuos integration processes.
The equivalent of plugins for MSBuild is Tasks
> Plus, MSBuild doesn't handle dependency management, which is completely retarded. You've got NuGet now, but again, Microsoft had to over-engineer it, to make it IDE friendly and thus the ease of setting up your own Maven repository is gone.
Yes it does via NuGet, and again NuGet has no dependency on the IDE
> And have you tried building MSBuild projects on top of Mono? Try it. It's fun ;-)
Yes I have, what's your point?
> Basically only a .NET developer that never experienced other environments could claim that MSBuild/VS.NET is satisfactory, but for the rest of us, it's like trying to do software development with early-2000 tools and IMHO, that's where the entire .NET ecosystem is.
Thanks for the personal and professional attack at the end there, nice touch
Not necessarily true, I believe some versions of Visual Studio have their own compiler which is different to the one used by MSBuild:
http://blogs.msdn.com/b/ed_maurer/archive/2008/06/11/a-tale-...
Where would you suggest I go to find the best way to handle this?
You want a text editor, not an IDE.
I want to be able to access the compiler external from the IDE so I can automate builds/deployments easily.
Now I want both types of builds to happen in as close to the same manner as possible so they're consistent, but both are important.
fortunately those days are over and they've become mostly irrelevant, but everyone knows that given half a chance they'd do it again...
Everyone I know for the most part types their documents in Microsoft Word on Windows computers. Sure, they got smartphones and tablets for the media consumption and facebook, but they don't even know an alternative "big boy" OS exists. They think Windows == computers. Which I think means MS is anything but irrelevant (no matter how hard I try to stuff opensuse down everyones throat).
MS Office is the defacto file format for office work, and MS Office on non-Windows platforms (ie. Mac) is so bad as to appear intentionally crippled.
Microsoft makes most of its money with its business products, so it's not cheap. Some companies just simply don't want to pay the Microsoft premium.
I also should have mentioned Mono, but that's a different topic.
http://visualstudiogallery.msdn.microsoft.com/0e53eaf6-b031-...
Contrast that to your scenario. First, I need Windows, which is fine for most, but not me. Then, my prod setup has to be Microsoft based. I've yet to find a $5/month IIS-based host with SQL Server (apathetically, I haven't looked much). Oh, and Visual Studio. I can probably get by with Express, but at some point I expect I'll find a wall that forces an upgrade.
Microsoft has come a long way, but when I started years ago, I couldn't swing a Microsoft-based environment. VS was prohibitively expensive, and my parents' crappy computer couldn't run it. But I could learn PHP for free, run it locally through XAMPP, and be off to the races. Microsoft's never won me back, and your CMS is paying that price.
I wanted to redevelop our CMS in MVC (we missed the MVC train by about 2 months so it's Web Forms) as I like how much more lightweight it is but to be honest, I would rather completely redevelop in another language as it would help our adoption rate with our clients.
The painful thing is, I know how powerful our CMS is (to our clients at least) but it's such a hard sell.
We normally deploy onto our own cluster BTW as we roll out core updates through our own servers so everyone feels the benefits of new modules and admin updates etc so the hosting is generally taken care of.
They're free, period. You don't need Visual Studio Pro -- you just need to install the isolated shell.
If you have problems selling due to the platform, I think the main issue is your target market, and not .Net in itself.