Introduction to Software Development
Tags: tutorial, dotnet, csharp, beginners
Published: 2020-08-24 18:02:57

In this article we are going to explore this huge and passionate world of software development by demystifying what it really is and how can we get started in this field.
So, let's start with the most important part:

# What is Software?

![What is software?](https://dev-to-uploads.s3.amazonaws.com/i/a6bdaaefnkcr07ei7t85.png)

Yes, in simple words software is just a set of instructions to make your computer do whatever you want, wow that you know what it is, you may be asking:

# How can we build Software?
If software is set of instructions, then to build it we need a way to write those instructions. We humans communicate with each other by using languages and turns out we also use them to communicate instructions to our computers although we call them **programming languages**.

## What is a programming language?
In short, a programming language is just like any other language, a structured system with a set of rules that lets us build sentences we can use to communicate instructions to our computer.

Just like we have several languages to communicate with each other, we do have several programming languages from which to choose, among them, we have two big categories we need to know:

### High-level and Low-level programming languages
Even if I said we have several programming languages, it turns out that the only language the computer can understand is called **Machine Code** which is a **Low-level programming language** and it looks like this:

```
8B542408 83FA0077 06B80000 0000C383 FA027706 B8010000 
00C353BB 01000000 B9010000 008D0419 83FA0376 078BD989 
C14AEBF1 5BC3
```

Although it may seem exciting to learn and start programming software in that way, it is not the most productive option and indeed it is the most difficult. That is the reason because we have created High-level programming languages which are closer to our understanding and are easier to learn, they look like this:

```csharp
Console.WriteLine("Hello World!"); 
Console.WriteLine("The current time is " + DateTime.Now);
```

As you can see most of the words are easy to understand and is this characteristic that makes possible the development of those pieces of Software we see nowadays that changes almost every day to meet our needs.

But if the computers can only understand **machine code** how can we write instructions in **high-level languages**? The answers are Compilers:

## What is a compiler?
In the software world, a compiler is basically a translator who takes the code you have written in your language of choice and converts it into machine code, that way computers can run your instructions, awesome right?

Languages and compilers are the building blocks to create software and we are going to talk more about them in future posts, but now it's time to understand that nowadays to build software we need more than building blocks. To build them, we need entire **ecosystems**, this can sound scary and complex, but they actually make our lives and jobs easier.

# Development Ecosystem
Let's explain in simply words what is a development ecosystem and its components:

![Development Ecosystem](https://dev-to-uploads.s3.amazonaws.com/i/ll1xe5wen0gftz7f9jdx.png)

* **Languages**: A structured system with a set of rules that helps us to communicate instructions to our computer.

* **Runtimes**: In essence, it is a piece of software the lets you run your code in the target machine, it is part of the "Compiling 
Process" that makes your code understandable by the computer.

* **Frameworks**: An already working and highly flexible software that lets you personalize it by letting you attach to it your own code so you can make software on top of it.

* **Libraries**: Reusable general-purpose pieces of code that you can use repeatedly to speed up development

* **Tools**: A set of other pieces of ready-to-use software that improves the quality of life of the development process

Hey! where my compiler? The "Compiling process" is more complex today, different compilers can be in separate places, they can fall under the tools category and they can also be part of the runtimes. More on this on future posts.

### That seems a lot, do I need to install all those things?
Fortunately no! Nowadays we have something called **SDK** or **software development kit** that is an all-in-one package we can install to have the entire ecosystem into our machines.

# .NET Ecosystem
.NET is one of those ecosystems that is easy to use, multiplatform, open source and with it you can build almost every software you can imagine.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/iqdcok2h8ub65c3ymgt2.png)

Getting started with this ecosystem is something that will take you 10 minutes or less, the official tutorial will guide you through step by step but in short you need to:

1️⃣ Download and install the .NET SDK but make sure you download the **.NET Core** version as it is the newest one.

2️⃣ Create a folder where you want to store you project.

3️⃣ Open that folder into your **Terminal**.

4️⃣ Create a new .NET project by executing in your **Terminal** the following command.

```
dotnet new
```

You will see two new files has been created in the directory you have created:

```
📝[yourfoldername].csproj 
📝 Program.cs
```

* **[Yourfoldername].csproj**: Contains various configurations like what language and what framework you want to use.

* **Program.cs**: Contains the code that will be executed when run.

5️⃣ Run the project by executing in your CMD the following command
```
dotnet run
```

You will see a `Hello world!` text appearing into your console. Congratulations! you have started in the world of Software development.

# Conclusion

Software development is a great world to start working on and although nowadays there are many concepts and things to learn, if you look carefully at them, you will find they can become easy to understand. Especially because most of them were inspired by the daily things we see every day.