Greetings fellow developer and welcome!
Just by being here, I can tell you are “a gentleman (or a lady), a scholar and a fine judge of programming languages“.
Your quest to become a C# backend developer brought you to the right place. Here you’ll find a roadmap containing the required knowledge and skills. The learning path is not easy and it will be a continuous process. But it will be worth it. If you give your best and finish, this will be enough for you to claim the title and – even better – hopefully, land a job.
If you struggle with motivation or having to choose between multiple programming languages – don’t. You’re on the right track, because most principles and knowledge you acquire here, can easily be transferred to other areas of software development.
Just a couple of assumptions
Going forward, I assume that:
- You can Google stuff
- You wrote some code before
- You’re highly motivated and very cool
With that in mind – let’s roll!
02 GETTING STARTED
For your quest to be a success and for you to become a well-rounded developer, you’ll need to get familiar with both theory and practice. Both are equally important!
Theory and principles will enable you to identify problems you’re solving and help you outline a solution. They transfer your skillset to different areas because they don’t depend on specific technologies and they make you immune to everlasting changes in the tech world. On your journey, this includes:
Practical skills will get things done once you start implementing your solutions. They are your tools of the trade. You need to learn the best practices for using them and wisely identify which ones are appropriate for specific situations. Here you will learn:
03 THE THEORY
Paradigms and principles
As stated before, this knowledge is not dependent on specific technologies or programming languages so anything you learn here, you’ll be able to take with you even if you don’t end up being a C# developer. Programming languages are classified based on their features into different paradigms. You can look at paradigms as a model or an approach to solving problems. Once you understand a paradigm and adopt its way of looking at a problem and solving it, you can switch rather easily between programming languages since learning them doesn’t require much time. The most popular programming paradigm today is Object oriented programming (OOP).
Object oriented programming
OOP looks at the problems it aims to solve as the interaction of different parts which are called – as the name suggests – objects. By dividing complex systems into simpler structures that interact with each other, we end up with easily maintainable and reusable components. Also, OOP comes very naturally to humans since we already see the world around us through objects and their properties.
To start learning about OOP here is a language agnostic video about OOP fundamentals and its four principles. More concrete and C# specific resources will follow. If you continue reading.
Intro to Object Oriented Programming
Other principles you should keep in mind and be familiar with are SOLID principles. These will all be your helping guidelines when you’re designing software.
04 THE LANGUAGE
At the beginning of this post, I’ve complimented you on your taste in programming languages. There is a reason for that.
C# is an elegant, simple yet powerful, efficient and versatile language that you can use to develop a broad range of programs. From web applications and games to desktop and mobile apps. Investing your time in learning C# will pay off.
As opposed to the previous chapter where I’ve presented principles that aren’t bound by a particular language or technology, this chapter will handle the specifics. Going forward, you’ll be able to gain general knowledge while using examples in specific languages for deeper understanding and retention.
To learn fundamentals of the C# language, there are a few resources to choose from. If you’re already familiar with basic programming concepts then I recommend you just skim through to see how things are done using C#.
Learn C# collection
Find the link here.
C# for beginners (video series)
Be sure to go over object oriented aspects of the C# since they will be used a lot moving forward.
05 THE PATTERNS
Software development patterns
After learning about the C# language, you’re ready to take on patterns. Patterns, in the world of software, can be defined as the typical solutions to commonly occurring problems.
Just like in the real world – when problems occur multiple times, humans try to extract patterns from them, generalize and come up with the solution that fits multiple situations.
These tried and true solutions are useful because you don’t have to reinvent the wheel which can take some time and requires effort. You can just easily communicate patterns to others who already know them.
Keep in mind that knowing the patterns is equally important as knowing when to use them.
Here are a few patterns you should learn in the context of software design:
These are just to get you started.
If you want to learn more about design patterns here’s a good starting point.
Another type of patterns we have are architectural patterns. They describe the broad structure and organization of the software system and the responsibilities of its parts.
Once you start using them in practice (in the chapter about frameworks) they will make more sense to you but for now just read about these two for comparison:
So, theory done!
Let’s move on to the nitty-gritty and build something concrete. For this purpose we’ll need software frameworks.
Framework is a set of tools and components that provides structure and foundation to your software and enables you to build software much faster and more reliable. It’s a lot of already written code upon which you implement your software so you don’t have to reinvent every part of the application.
Since this post is about becoming a C# backend developer we’ll concentrate on frameworks that help us build such apps.
Reading about .NET can be a bit overwhelming because of its long history and because it is now used to build many kinds of applications.
Here’s a resource for a broad overview of it.
Keep in mind that you don’t need to know every aspect of it to use it. In fact, if you’ve written a basic C# Console application you were using .NET framework.
This is a framework you’ll use for building web applications including both web UI and web API.
Here you can read about it and there is a “Get started” section to see it in action and try it for yourself.
After that there is a more complex (or realistic) tutorial about building a web API.
While we’re on the topic of web APIs you should also be familiar with:
An architectural style which you should use while designing your API.
See REST here.
Format which is used to transfer data between your API and clients that consume it.
See JSON here.
Authentication using JWT
Most of the APIs you build will require authentication so for starters learn something about JWTs and their usage.
Entity Framework Core
If you’re following the tutorial for building a web API mentioned above you’re going to use EF Core.
This is an ORM (object-relational mapper) framework that helps us connect your application (our business logic) with data storage (database). It abstracts a lot of data access code you would otherwise need to know so you can access databases without leaving the .NET world.
We did mention that EF Core handles our database access and eliminates our need to learn and write data access code.
However, you should know at least SQL basics since the database is a very important part of your application and often you’ll need to connect manually to your database to query or to tweak things a bit.
SQL is the standard for relational databases.
Here’s a resource to help you learn about it.
08 SOURCE CONTROL
You learned so much by now and you’re ready to tackle real world problems using your newly acquired tools.
In the real world, chances are you’re not going to work alone and you’ll be part of the team. Going solo or especially working in a team you will be wise to learn the practice of version control.
Version control, also known as source control, is the practice of tracking changes to your source code during development. This is very important if multiple developers work on the same project as they can easily manage changes they simultaneously make, minimizing errors by comparing changes against previous versions of code, keeping separate versions of software altogether and much more.
Git is the most popular and widely used version control system and that’s why you should invest your time and go through this Git training made by Microsoft.
There is no software development job in which this knowledge won’t pay off.
Suppose you have a large piece of working software, maybe a team of developers, paying customers – great! Not much to worry about. Or, is there?
Bugs will be reported, new features will be requested, new bugs will be introduced while new features are being developed, dependencies will need updates and so on… All of these will require you to test your software over and over. Well, every time you hear “over and over” in the world of software think – can it be automated?
You can opt for manual testing but soon you will figure out that it takes an absurd amount of time for any larger software and it is prone to error. Even after testing, you’re not really sure everything works.
Learn automated testing and implement it in your project early on. Like any other important part of software development, there are frameworks and tools to help you write and execute automated tests. Read about them and try them out.
More details about the automated testing can be found here.
10 THE NEXT STEPS
Resources presented here and knowledge they contain, are enough for you to start providing solutions as a C# backend developer.
As stated in the intro, there is so much more to learn but don’t allow this fact to stop you from starting the process now.
Build something cool, put it in practice and, if you’re looking for it, apply for a job.
New frameworks, technologies, ways of doing things, more advanced topics are always coming your way and that’s why, for a good developer, learning never ends.
I hope this blog post will be a useful tool and a starting point for you to do something great.
P.S. If you know all the stuff that we are talking about here, please take a look at our .NET developer job 😎.