Mobile and software development is an extremely lucrative field. Many businesses transfer their products online, creating applications and websites. That’s why the demand for skilled app developers is still quite high and will continue growing till 2030. However, it’s not easy to win a place under the sun and get your hands on a promising project. Trends and requirements are constantly changing. How to keep growing as an experienced specialist? Are the C programming languages still worth learning, or are they slowly getting outdated?
We discussed those and other intriguing questions with the Shakuro senior C# developer, Fedor. He has more than 10 years of experience in software development and participated in a variety of projects. Fedor also spent quite a bit of time teaching juniors cool coding tricks and tips.
Let us start with icebreakers. What is your ordinary workday as a C# developer look like?
For starters, I set my mind on work: look through the plans, calendar, emails, and messages. This helps me remember the context of yesterday’s tasks. If I have another free minute, I grab a cup of coffee and talk a bit with my colleagues. Only after I’m refreshed and energized I get to work.
During the day, I try to plan my tasks according to the Eisenhower Matrix. This method divides assignments into four groups: important and urgent, important and not urgent, urgent and not important, and finally, not urgent and not important.
It’s not surprising that I prioritize urgent and important tasks. Then, if I have time left, I switch to other assignments. Of course, there are different situations, but still, basing the plan on importance is key.
During app development, we often have meetings, and it’s crucial to get ready for them. Revise the current tasks, stay up to date with the project course, etc. Overall, it’s better to gather meetings connected with technical aspects in the morning. The same goes for overseeing junior software developers and other people’s work: you have more chances to notice a mistake.
Why did you choose to study the C# programming language?
I started writing code with Adobe Flash, which was used to create simple browser games. I also tried out Turbo Pascal and Delphi while studying at the university. But when it came to choosing the primary programming language, C# was already a great option back in the day.
The .NET platform got the new framework version, and it offered a versatile integrated environment for developing web applications. There were many pre-installed options, and one could build web pages in a few clicks. As a novice, I was amazed by that feature and started learning the С# language. I liked .NET for its convenience. A developer just needed to deploy the platform and install Visual Studio — and they were all set. One didn’t have to adjust anything, create access, etc. Moreover, .NET soon became open-source.
Also, C# is still one of the most popular programming languages. In 2022, almost 28% of mobile and web developers worldwide are coding in this language.
Therefore, I think that the .NET platform and the C# programming language are the easiest way for newbies to get into app development. These tools don’t require knowing some special architectures, drivers, and other high-level coding magic.
A great developer team is nice, but one programmer in the field is still a warrior.
Does C# language have any disadvantages?
Sure, it does. For example, if a developer needs extremely high performance, they need to upgrade their skills in order to get that speed from the .NET platform. Usually, that advancement takes lots of time: a programmer has to discover new approaches, ways, and protocols, like ‘unsafe’, etc. And more importantly, they should be able to implement them into the code.
Nevertheless, I think the pros outweigh all cons. The C# language just requires patience and learning, like all other things.
What programming languages do you consider popular in mobile and web development?
There are several of them, each has its pros and cons. For example, I often come across:
Machine learning is one of the most promising spheres nowadays. Around 65% of businesses consider adopting this technology to help decision-making. Most of such algorithms are running on Python programming language, so it has a spike. It also has a low learning curve for beginners: there are lots of pre-made libraries and frameworks to ease the work. However, Python is different from C#. It is an interpreted language, while C# is a complied one.
Go is aimed at high performance and operates well with various systems located in different networks. So it is vastly used in processing large amounts of information. However, it has other implementations as well. For example, many companies choose the Go programming language for their messengers, online video games, conferencing software, microservices, networking, and even cloud computing services.
Despite all speculations, it’s still alive and demanded by startups and medium-sized companies. Skilled developers that create fast and complex desktop or mobile applications quite often rely on C++. This popular programming language also works well for building low-level systems. C++ is extremely popular in the video game industry because it gets on with the Unity engine. That’s why companies implement it in VR and video or mobile games.
Still, setting one language as a goal is not really productive. Today developers can switch from one language to another since they have lots of similar things, approaches and methods.
What other languages, toolkits, and frameworks do you use?
I tried out neural networks and machine learning, mostly with those algorithms that had .NET optimization. Also, I had experience working with PHP in one of my projects. As for my recent work, I used the Arduino platform. It allows the developers to build their own devices using the C programming language. I really liked Arduino because it offers a convenient working environment.
As for the test applications, I often use Postman for checking requests and building certain scenarios. From front-end applications, I tried out Angular – it’s a platform for creating mobile and web apps. When our team has to work with database servers, we implement Microsoft SQL or PostgreSQL.
How do you deal with time estimations?
Giving relevant time estimations is a crucial skill for software developers because other people depend on them. For instance, a project manager needs to foresee any risks with development costs.
In the early stages, when there are few details about the project, it’s better to use a top-down estimate: when you pick an approximate period and divide the task into several parts. This method creates a certain expectation, although it’s not always precise. When the team lead gives you specific details and requirements about the project, then you can rely on your estimates on previous experience with similar projects.
During the project development, the requirements can change, and so can your estimations. In this case, if you are familiar with the technological stack, you can start analyzing tasks, create plain designs, and give more precise numbers based on bottom-up estimating.
For example, we need to create a weather forecast service for a website banner that will appear on all pages. So, we look at all the detailed requirements and say — in the best scenario, we will build the service in 3 days. If things go south, we give a more pessimistic estimation — 6 days. So the real numbers will be something in between. The key idea is to get into that realistic estimation. If the app developer doesn’t know the tech stack, they have to fit at least into the longest time they’ve given.
Another tip I can give is to always check what knowledge you’re missing if you fail with estimations. This is especially vital for junior developers.
A good programmer is a lazy programmer. They strive to do everything correctly at first take to avoid redoing the tasks.
How to cope with deadlines efficiently?
Let’s look at two situations. The first one — the employer asked us to do something in 7 days without checking our estimations. The second one is similar, but we estimated the task for 7 days ourselves.
In the first case, the team will experience an enormous amount of stress and will most likely make more mistakes. So this is a negative scenario, which I do not recommend at all. As for the second one, it’s a positive situation. People will be more productive because of the given estimation, and the timing is more flexible. However, communication skill here is also very important. A person may be extremely knowledgeable in programming, but they can let down the team because of character. A well-established communication is vital for proper teamwork in any condition.
For a junior C# programmer, the key thing is to have a solid list of tasks that they know how to do. If the mentor gives assignments the newbie doesn’t understand, then the missing piece here is on the senior’s side. This is not teamwork. Everyone should know what and how they are doing.
How do you ensure the code quality?
The quality is based on several criteria that all team members should know and share. There should be certain methods and ways to write the code. It’s a codex they agree to follow. The first rule is the code should be readable both by you and your colleagues. The second rule is the absence of any architectural errors. The mobiles and web applications have many layers, like pies, so they should be ‘cooked’ according to the recipe. This practice will help integrate people with lower skills into the team and assist in avoiding any mistakes. The third one is code review. Your team members and senior developers should check the code you create for any errors and leave feedback.
For sure, some programmers won’t like the codex you offer because it’s inconvenient for them. They have got used to doing things the other way. Here, you need to find a golden middle or exercise in convincing people.
Moreover, many programming languages like C# have official standards for code quality, as well as automatic systems for their testing. For instance, SonarQube for the .NET platform. I think it’s a wise decision to integrate them into the app development process.
Summing the answer up: the team imports the metrics from SonarQube (as an example), takes the official code quality standard, and synchronizes them in the working environment and in the developers’ brains. Everyone is happy.
What are the best ways to keep the C# developer’s skills sharp?
There are tons of different resources. I check out news and advertisements in Microsoft magazine — MSDN. It is free and sent by e-mail. Habr is another great website where you can discover new ways to solve issues and find certain cases about specific frameworks, tools, etc.
I like web development, so I study Blazor in my spare time. I’m also interested in server-side development, so I look for news resources in that field. Alternatively, I dive into creating multithreaded applications. This is a very complex topic, however, I prefer considering it a challenge.
Junior developers should have a list of topics they need to learn in order to upgrade their level. It’s better if such a list is given by the mentor. During this time, one understands what they like to do most. So, if turns out you don’t like to code desktop apps for Windows, do not continue that path and switch to a different one. Usually, senior developers have one main specialization where they constantly evolve and a couple of other skills just for experimenting.
Moreover, do not be afraid of negative feedback, like — hey, you have an error here and here in the code. It helps you polish your skills and become better at development.
What do you think about no-code technologies? Are they the future of development?
I think it’s a really cool technology, however, keep in mind that no-code is not as simple as it sounds. Such platforms are just an attempt to bring business process management to a new level where the knowledge of any programming language is not a must. Still, people should still be familiar with the coding field. They need to understand how to build schemes, blocks, algorithms, diagrams, etc. It requires IT skills.
In its current form, no-code eases the development process and saves up time and costs. But it can’t replace the programming itself. It’s more of a helping tool.
What advice would you give to newbie programmers?
If a person wants to be a .NET and C# developer, then I advise finding a good team and a complex project. This method boosts skills much better than any IT course. Try open-source projects or start your own to get experience in the early stages. Joining a devoted community also works: they will stimulate your studies and suggest solutions.
As for the team, it’s better to join a company with an established workflow, not a startup. This way, you will learn certain standards for writing code, ensuring its quality, etc. In startups, there is too much background noise, and high chances are you will get a mess in your head.
At the same time, if a junior developer has the possibility to join any team and get on-field experience, it’s a go-to option. For sure, not everyone finds a great company on the first try, but the more knowledge you gain, the better conditions you will find.
If you are looking for a trusted team who is experienced in developing applications with C# .NET, contact us. We will create a one-of-a-kind of app that corresponds to all the latest trends and demands.
Created by Fedor Varyukhin & Mary Moore