Why do some programmers prefer Windows over Linux? by Daniel Turan
Answer by Daniel Turan:
It’s not about Windows, or Visual Studio or .NET or Azure or SQL Server, or TFS. It’s about all together. It’s about the Microsoft ecosystem of tools.
Microsoft ecosystem starts to make sense only when your time is money. When by saving time you save money.
There is specific area of software development where this ecosystem rocks and that is development of custom software or let’s call it line of business apps.
In such kind of software development, productivity is very important. And believe or not, Microsoft ecosystem saves you a lot of time and thus increase productivity.
Let’s see how it can save productivity:
- C# and .NET were designed with productivity in mind. Every aspect of the design of the language was confronted with productivity. C# is fundamentally similar to Java, but see the difference:Which one do you think saves time?
- C# and Visual Studio is the best marriage. For example, when syntax of Linq (a C# feature) was being designed, they had to ensure, that it can have the best support in Visual Studio’s intelli sense. That’s why in Linq you write from clause before where:
as you can see, Visual Studio is able to provide you perfect suggestions, because the collection is known. This is just one example of tons of such productivity features in C#.
- Example of Visual Studio integration with TFS resp Visual Studio Online:
- The picture above show ctor method. Above the method are “code lens”, where you can see all places where the ctor is used. You see that only 6 of 11 unit test are passing. You see who created or changed the methods. You can see that there are three changes (commits) related to this method. There are two bug associated with this method and two work items. You can also see who reviewed the code if there are any code review request.
You know, when new version of Visual Studio is released, I can be sure that all features will be working with new version. When new version of TFS is released, I can be sure it will be working well with latest Visual Studio. This is the advantage of having ecosystem of tools provided by single vendor. It’s like when you have iPhone, it’s better to have MacBook and iPad and iWatch than devices from different vendors.
- The DevOps Story. Let’s see how it fit’s into Microsoft ecosystem.
- Setting up a new agile team project (source control, bug issue tracking, scrum) – 5 minutes in Visual Studio Online (TFS as a service)
- Create new Solution in Visual Studio and connect it with the Visual Studio Online (5 minutes).
- At this point you have all you need for development. You can write Web, Desktop or Mobile Apps, Web Services and use SQL database. You can write unit tests, automated UI tests, performance tests. No setup needed, no plugins needed. All you need is single peace of software – Visual Studio
- Setup automated builds on TFS Build Server (20 minutes), including running unit test, and automated UI tests.
- Deploy build artifacts to development environment – Azure. Again, this is similar story to C# and Visual Studio. It was designed with productivity in mind. When I created my first website, it took me 20 minutes to figure out how to automate release in TFS so I have each night deployed latest build which passed tests.
Now, cross your heart, how long would it take to do this in Java/Eclipse/Jenkins/AWS for example or any other stack?
I’ve read article about DevOps in AWS and the recommended way was to create a VM and install Jenkins on in. Well, not only it is more expensive than Visual Studio Online, it also sucks. You need to maintain it. install updates. Ensure backups. A lot of work that you just don’t have to do in Microsoft ecosystem.
- I will mention Active Directory as an example of time saving. It the DevOps story I mentioned Source Control, Integration Server, Build Server and Azure. If all the services were provided by different providers, you would end up with bunch of accounts for each service. Management of the accounts for each service is not only time consuming but usually leads to security vulnerabilities, like sharing accounts, passwords, etc. In Microsoft ecosystem, you have Azure Active Directory and that’s the only account you need to login to all services. Almost no management. When an employee leaves the company, it’s account is disabled and that’s it. But how if the employee has access to bunch of services with different accounts, it’s almost impossible to disable his access everywhere without disturbing others.
Unfortunately I don’t have enough experience with the alternative stacks but I can compare productivity of our team using Microsoft platform with another team working using alternative technology stack and I can say that we need much less time to do the same.