Aleksander Kugushev, EPAM Lead .NET-developer, spoke to us about how to choose the first language when you are a beginner, what areas of development there are in .NET, why C# is good, and what trends in .NET should a junior specialist be aware of.
How to choose a language for beginners in IT?
This is a good question. First, I would suggest giving a well-thought answer about the desired occupation in IT: do you want to grow in frontend, backend, gamedev, DevOps, or maybe Data Science? You'll need different skills for each ot these areas. I'm not saying that frontend and backend are very different (in fact, not really), but a good frontend engineer should, for example, be able to create a website layout, which means that a skill of design is required. So, I would suggest focusing and figuring out which direction in IT you like better.
Next, I’d check what language options are present in the area you’ve chosen. In backend, for example, the most popular languages are Java, C#, NodeJS, Python, and Go. Luckily, all these languages are cross-platform, all run both on Windows and Linux. Meaning, we just have to figure out the pros and cons of each one.
Java in an interesting choice of a programming language. But it has one problem: it is quite conservative, and new functionality is rarely added.
What does conservatism mean for a developer? We won't be able to try new approaches in development, which will be needed in more advanced projects. To grow professionally in Java, it's essential to constantly «expand» competencies. And if choosing Java, I highly recommend trying to write both on Kotlin and Scala. These languages allow to try approaches that are used in other languages, richer in functionality. But this will require additional efforts. In other words, there is a huge number of libraries and frameworks in Java community that are necessary to know in addition to the programming language itself. Ultimately, this leaves little to no room for creativity.
If deciding to learn Java, check out this roadmap from Java beginner to a successful developer.
The situation with Python is controversial, because while the language itself is amazing, it supports dynamic typing (read: you will have to write more tests). Let's not forget that when developers say "Python is popular", they mean it is popular in Data Science, DevOps, Data Analysis, but not so much — in backend. And most importantly, the language has problems with parallel request processing: just look at the Global Interpreter Lock, and you will understand everything.
NodeJS is a good option for those who want to become full-stack developers. With this language, it's easy to dive into IT and learn how to create websites. But it's essential to understand that other developers make a great competition in this sphere.
Golang provides an interesting approach to programming. I recommend looking and reading what Go looks like, and comparing it to other languages. I should highlight that Go poses a problem for beginners: it does not support multi-paradigm; the programming on Golang is purely procedural. It's good for those who know OOP (object-oriented programming) and functional programming, but not so good for absolute novices. It's just like with cars: if you have learned to drive automatic transmission car, you can't simply switch to a manual transmission.
C# has been developing rapidly since 2012. At some point, the compiler was rewritten in C# (it used to be in C++ earlier). And after that, the capabilities of the language increased significantly. Now C# allows to write a Scala-style code with minimal differences.
C# is rich in functionality. From a developer's point of view, C# is good because it allows to try many different approaches to programming. It has a number of competitors like Kotlin, which, however, are not well-suited for backend development. Another point in favor of C# is that when Microsoft created the cross-platform .NET Core, the company used the latest libraries and web frameworks, so outdated approaches are impossible to encounter.
Compared to Java, C# has more functionality and approaches.
Where else is .NET applied besides the backend?
.NET has had a desktop lobby for a long time because desktop applications were extremely popular in the first half of the 2010s — and, of course, they are still being developed and maintained. From the developer's point of view, there are really interesting tasks to find here.
.NET is also used in cross-platform mobile development for a simple reason: you can make a cross-platform application with business logic, and it will have a completely native User Experience for both Android and iOS.
Are C# and .NET the same?
In short — no, they aren't. Yet, Microsoft once considered the option of developing a unified sublanguage.
.NET — an open source developer platform — has a Common Intermediate Language with which C#, Visual Basic, F#, and other .NET languages compile. Visual Basic for .NET is not very popular in the modern developer community, but F# is a functional language with object-oriented capabilities one can try.
The problem of not learning .NET because it's Windows-only does not exist anymore.
What are the current trends in .NET?
Of course, there is a lot of emphasis on backend development. I also notice an increased support of cloud technologies: Microsoft's main interest right now lies in the sphere of integration with Azure Cloud. Accordingly, everything is done to support cloud solutions.
The third trend right now is Machine Learning (ML) and Data Science mix. A library with ML functionality has been released recently, and so the .NET community is considering new features of C# 8.0 in this area.
If you are interested in C# and want to become a .NET developer at a large international IT company, discover the available opportunities for .NET Juniors in EPAM ;)