Java Vs Microsoft .NET for recruiters

Java Vs Microsoft .NET for recruiters
Post Author: Aaron Decker
Date published: January 16, 2020

Java and C#.NET are the dominant enterprise backend languages in many of the largest companies around the world. They are used to build desktop applications, web servers, API servers, and more.

Java developers frequently get approached about doing work in C#.NET, which if you know anything about these two technologies does not make any sense (because they are different in a myriad of ways, which we'll go over).

I'm a Java developer (or at least I used to be), and this is a big complaint I hear from other Java developers about recruiters.

Actually, it's worth mentioning here that mis-targeting job opportunities is the #1 reason developers ignore recruiter messages in general based on the last survey I did.

I'm going to lay out here why and how Java and .NET are different, and why generally speaking backend developers will stick to one type of tech stack and not often cross over.

Background

Microsoft is the company behind the .NET platform. Java is owned by Oracle, but was originally developed by Sun Microsystems and had a strong open source background.

Definitions you should understand

  • Java is a programming language for writing (mostly backend) code. It is owned by Oracle, originally created by Sun Microsystems, and it is open source.
  • .NET is a platform for building applications developed by Microsoft.
  • C#.NET is the primary backend programming language for writing (mostly backend) code on the .NET framework. C# is now open source, but it was not originally.
  • Linux is an open source operating system that most popular for running application servers. Java and Linux have a long history of being used together.
  • Microsoft Windows you are probably familiar with the most commonly used operating system in the world. The .NET platform is closely tied to Windows.
  • ASP.NET a framework for developing web applications. ASP stands for "Active Server Pages". You write C# when you build ASP.NET applications. ASP.NET is now open source.
  • Spring a framework for rapid web application development build for Java and other JVM languages.

*By the way these are all in the Job Description Keyword Tool.

Below I have a table showing how tech stacks might look to make this a bit clearer.

Common .NET vs Java Tech Stacks.

You can think of Java and .NET both as foundations of backend tech stacks. But, what is a "Tech Stack"? A "stack" is a set of technologies that are frequently used together.

For example, here is a breakdown of a common Java application stack vs a common C#.NET application:

Stack Component Java App C#.NET App
Deployment Server OS Linux Windows Server
Application Server Apache Tomcat Microsoft IIS
Programming Language Java C#.NET
Web Framework Spring ASP.NET
Database MySQL MS SQL Server

People tend to Specialize in one or the other

Notice something in that table of tech stacks? Not a single one of these technologies overlapped. Programming is not just about writing code, to do anything substantial it requires you to understand databases, servers, and platforms you will integrate your software into.

Being a backend developer frequently means that you need to write the server side application code, build the database structure, and manage application deployments.

Because these collections of technology are usually quite different in Java Vs .NET shops, and there are so many pieces to learn, you usually see people specialize in one or the other but rarely both.

Open source culture

Open source software is a philosophy of sharing the source code of software projects, I go into it in more detail here but generally speaking the Java programming language and ecosystem has deep roots in open source and .NET platform does not.

For example, the source code of the language Java itself is available via the OpenJDK project and has been for decades.

Almost all of the major libraries used in Java applications are open source: Spring, Hibernate, Lombok, Guava, Apache Commons, Gradle.

Although C#.NET and ASP.NET are now open source, they did not start out that way.

Culturally, this open source Vs closed source was traditianally a huge difference between the platforms. Many developers are philosophically opposed to working with anything closed source.

Despite the fact the source code is available and C# and ASP.NET are open source there are still many licensing fees associated with developing on the .NET platform. When working on a Java / Linux stack you can avoid most of these licensing fees.

Linux vs Windows Servers

Another big task backend developers are usually responsible for is production support, which entails making sure that if a live software application crashes, it is fixed and returned to service.

Managing a linux server and troubleshooting issues is a very different experience from a Microsoft IIS server, and this alone is a major reason why people specialize. Production support can often entail late nights and working weekends to fix issues in applications that real users are trying to use 😨.

Because of these huge differences in operating systems and deep knowledge needed for troubleshooting, it makes sense to really know one server platform well. Most developers and DevOps engineers just know one or the other (IIS or Linux), not both.

Cost

Generally speaking it is more expensive to run Microsoft stacks because there are more licenses to pay for. You have to license MS SQL Server, and Windows Server which means paying Microsoft for the yearly license, and additionally you probably will pay for support.

Oracle owns Java, and it has an enterprise version that costs money to license (and support contracts are available). You can also pay for Red Hat enterprise linux licenses and support contracts are available as well. Oracle database and Java play very well together and this is a popular combo.

With Java you have another option though: you can run OpenJDK for free, you can run Debian linux servers for free (for example), and you can run PostgreSQL or MariaDB (a fork of MySQL) completely for free. The only thing you will pay for is hosting costs. Because of this option Java is a lot more attractive to many companies.

Summary

So to summarize, there is a big difference between the Microsoft .NET platform and Java based tech stacks at every single layer of technology used.

Backend developers that like linux and open source tend to end up writing Java code, and backend developers that like the Microsoft tooling, support and servers tend to use C#.NET for their main language.

And to be clear, often this is not a purposeful choice. Got your first job out of college doing ASP.NET? You probably end up continuing to do that OR you permanently switch to something else at some point.

Generally speaking backend developers are not doing both stacks or switching back and forth frequently because of the amount of work that goes into learning and keeping up with one platform or the other. I would question someone's skill at either if they claim to be expert in both.

The takeaway is that if you are trying to fill a .NET backend position, it is generally going to be ineffective to approach developers with mostly Java experience, and vice versa. People tend to specialize!


Want updates?

Want new posts about tech topics emailed to you? Sign up to the list below 👇

Also, if you are interested in learning technical topics through a video course specifically created for recruiters, don't forget to check out the courses I offer.

The main course "How to Speak Software Engineering Jargon for Recruiters" is specifically designed to help tech recruiters get up to speed fast on technical topics.


Written By Aaron Decker

I'm currently a co-founder and head of engineering at a venture backed startup called Bounty. I tend to think of myself as a backend engineer that can work up and down the stack in Typescript. Previously, I have worked as a Tech Lead and hired teams, and as a Senior Software Engineer at multiple fortune 500 companies building large products. I also did a brief stint teaching programming courses as an Adjunct Instructor at a local community college, which taught me a lot about breaking down complex things into understandable chunks.