What is C#?

C# is used by a huge number of companies internationally for cloud, desktop, and mobile applications. Modern C# runs on Windows, Linux, Mac, tablets, mobiles and even embedded electronic devices. It powers websites, quantitative analysis engines, video games, laboratory instrumentation, business applications and developer tools. NASA use it. Google use it. stackoverflow.com was built with it.

C# is a strongly typed language, meaning – unlike Python and JavaScript for example – you’ll never unknowingly deploy an application which mistakes one type of data for another, or needs behaviour which just isn’t there.

C# is an imperative language, meaning you write the “how” as much as the “what”. It is a multi-paradigm language, meaning you can think and code in terms of objects and their relationships, or in terms of functions and data, or in terms of datasets and their transformation.

C# runs on the .NET Framework, which is both a core software system written in low level C and C++, and a set of standard libraries and tools written mostly in C#. The core of the .NET Framework is the “jitter” which translates C# programs into highly performant machine code “just in time” to run – it’s like the translator at the United Nations summit, the highway beneath a car, or the oxygen to a jet engine.

Modern programs need a lot of memory to get things done, and the .NET Framework offers garbage collection, which means you don’t have to manage memory yourself – you ask for it, and when you don’t need it any more, it goes away automatically. This trades away precise control (which some programmers love and indeed need, but many programmers and programs don’t) in exchange for fewer headaches. .NET also uses generational garbage collection, which is smarter and more efficient than the simpler flavours.

C# is easy to learn for programmers from other comparable languages such as C++ and Java. It’s not a huge step from Python either: the biggest differences being curly braces versus indentation, the fact that organising code into classes of objects isn’t optional, and mostly having to say what type things are when you declare them.

Why is C# a productive language?

C# is strongly typed, and the main benefit in strong typing is to the people using your software: users see fewer problems, because you see them first. This means less time spent searching for possible bugs by hand, and less time (and money) spent answering tech support calls from unhappy customers.

Equally important to developers, your tools can understand your code at a much more fundamental level: all possible options at any point in time are clear not just to you but to your code editor, so it can show you what your options are, rename something or rearrange code dramatically with a couple of keystrokes (even automatically fixing up all references to something across many hundreds of thousands of lines of code within seconds). Modern editors can even make suggestions if your code could be faster or clearer, and automatically make those changes with a single keypress. C# and Java are two of the best languages for such conveniences – C++ and F# for example are a little too complex for it to work quite as well, and Python and JavaScript are weakly typed so that information just isn’t there.

The .NET Framework is also a major asset. Need to interact with a web service, or fetch a web page? Check out System.Net.WebRequest. How about encrypting some data using government-approved AES crypto standards? System.Security.Cryptography.RjindaelManaged. Want to run some code in the background, and find out when it’s done? System.Threading.Tasks. Want to inspect your own code at runtime? System.Reflection. Load, manipulate and save or convert images? System.Drawing. Working with huge numbers? System.Numerics. Launch, or kill, another program? System.Diagnostics.Process. Talk to the operating system? System.Runtime.InteropServices. And so on.

Then there’s NuGet, where there are vast libraries of tested, proven, free and often open source code from other developers which you can drop into your program with a couple of clicks. Whether you need a better JSON or CSV parser, a web server, a NoSQL database, a machine learning toolkit, or technical infrastructure such as dependency injection, it’s on hand. NuGet packages receive 60 million downloads every week.

Getting a job as a C# Developer

As with many careers in the high tech sector, a big base to cover is your academic qualifications. A good degree in a technical subject from a well-regarded university, and good A-levels including mathematics, will help. If you’re on your way to university, you may not realise that employers do look at not just what you studied, but where you went, and what you did in your spare time whilst you were there.

You don’t need advanced mathematics for most software jobs – aside from finance, mathematical statistical fields such as data science, and certain kinds of computer graphics – but employers like to see a good grounding in a hard science, and the closer to your career the better, just as it’s easily relatable evidence of an analytical mind.

Whilst you’re doing a degree, whatever the subject, code as much as you can. This is true throughout your career: employers like to see people who love their subject. Put code on GitHub or GitLab or BitBucket. Join user groups. Help out on open source projects. Heck, start and run a small open source project. Put something you’ve done online, and take suggestions and fix bugs. Collaborate as much as you can.

Make sure you’re writing software, not hacking together code to crunch numbers for an experiment. Make sure you’re building things that a) other people could easily use – and would find a use for – without help or a manual, and b) other programmers, who have never seen it before, can understand easily. A good test if you’re coding regularly is to go back and look at code you wrote a year ago and haven’t touched since. Can you still understand it?

Get to know some of the key figures in the C# developer community. You’ll find them on blogs, on stackoverflow, and these days on GitHub, where a lot of the future development of the language is happening. Read as much as you can.

Once you’re comfortable programming, explore as much of the .NET Framework as you can. The best way to do this is to write a lot of different programs, solving real problems, as you’ll need different things for each. So to write as many different good quality apps as you can in C#. They don’t have to be large. Produce a website using ASP.NET MVC. Build a WPF or Windows Forms application to do something useful. Write a small game in Unity3D (which uses C# for scripting) or MonoGame. Write Linux command line tools. Control robots with a Raspberry Pi and Raspberry#. Make your code clean and beautiful. And put it on GitHub!

For more information on C#, http://dot.net is a great place to start. And check out the .NET Foundation at https://dotnetfoundation.org.

If you’d like to talk more about careers in C#, get in touch with ECM – quote reference #CSHARP_ECM_DJA, and feel free to send us a CV – we guarantee we hold your details in confidence, and your CV won’t be sent to any company without your express permission.