Software Development Overview
Start course

If you want to know how to develop software using C# and you have little to no experience programming you've come to the right place. This is an introductory course to C# and .NET programming that is the first in a series that will show you how to use these dynamic cross-platform development tools.

In this course, we set the stage in two ways. First, you get an overview of the basic elements of computer programming and fundamental issues that face software development, and how .NET addresses those issues. Secondly, we set up our software development tools on Windows and a non-Windows platform. To test our development environments we create and run a simple C# .NET program.

Learning Objectives

  • Get a foundational understanding of computer programming and .NET
  • Learn how to set up a development environment
  • Learn how to run a simple C# .NET program

Intended Audience

This course is intended for anyone who wants to learn how to develop software using C#


To get the most out of this course, you should have some basic understanding of programming, but it's not essential; this course can also be taken by complete beginners.


Without software, even the most powerful computer is just an expensive collection of copper and silicon, not even useful as a boat anchor. At the most elementary level, the computer CPU "understands" a set of operating instructions to do basic mathematical and logical operations like add, multiply, subtract and divide, and compare values, or move data from RAM into the CPU so it can be worked on.

If I wanted to multiply a value x by 2 then add a value b to that product, it might look like one of these instructions, depending on which brand or type of computer we're working on, or more specifically, which type of CPU. These instructions demonstrate two of the biggest issues that have and continue to face software development.

From a human perspective, it's not immediately obvious what these instructions are doing, not to mention a lot more typing compared to a purely mathematical expression. Secondly, there are different instructions depending on the CPU.

This presents two other problems. The same code can't run on multiple platforms or CPUs, and the developer needs to know the instructions for different CPUs. These problems aren't quite as bad as they initially appear, as software developers very rarely program directly against the CPU. We program against the operating system, so Linux, macOS, and Windows.

Programming against the operating system addresses the non-intuitive aspect of the CPU instructions. In the case of the mathematical expression example, no matter the operating system or programming language, coding the multiplication and addition will be very similar if not identical. 

However, the language is just hiding the platform and CPU differences from us. When we write code in a programming language, it still must be translated into the appropriate instruction set for the specific CPU. A programming language is comprised of two elements. The syntax or code we type and a piece of software, either a compiler or interpreter, that transforms the code into instructions the CPU can understand.

Many languages have different versions of their compilers for different operating systems and CPU combinations. Unfortunately, for all but the most simplistic programs, it's not a case of just running the same code through the appropriate compiler, called compiling the program, to get your code to run on any CPU or operating system.

There are usually some OS-specific elements of your code that prevent this. Earlier I said compiler or interpreter. A compiler turns your code into an executable program that can be run over and over independently of any other software. An interpreter is a software program that turns your code, known as a script in the context of interpreted languages, into CPU instructions as needed, on the fly as the script executes. This is often referred to as byte code or intermediate language.

Interpreted languages like Python cannot run without the interpreter installed. One side effect of interpreted languages is they execute more slowly as the CPU has to translate each language instruction into CPU instructions each time the program is run.


About the Author
Learning Paths

Hallam is a software architect with over 20 years experience across a wide range of industries. He began his software career as a  Delphi/Interbase disciple but changed his allegiance to Microsoft with its deep and broad ecosystem. While Hallam has designed and crafted custom software utilizing web, mobile and desktop technologies, good quality reliable data is the key to a successful solution. The challenge of quickly turning data into useful information for digestion by humans and machines has led Hallam to specialize in database design and process automation. Showing customers how leverage new technology to change and improve their business processes is one of the key drivers keeping Hallam coming back to the keyboard. 

Covered Topics