# How To Start Programming

Most people who are interested in programming have the same problem: the starting point is unclear. Well I’m going to try and create a guide to help clear up this uncertainty. This guide will be a series of steps, with a few helpful links and some explanations. With that being said, you probably don’t need to follow this guide to a T. Each person is different and learns differently. So once you start, feel free to deviate and venture into the huge field of computer science. Now, let’s start with our first step.

# Step 1

Every programmer should be well versed in mathematics, specifically discrete math. Discrete math is not solving what $2 + 2$ is or calculating $\int_{1}^{2} \frac{1}{x} dx$. It is logical problem solving. It involves knowledge of combinatorics, propositional logic, number theory, congruences, induction, recursion, and basic graph theory. Seems like a lot, right? That’s okay. If you put in the effort now, everything else will be much simpler.

Discrete math is imperative to understanding programming logic. Without it, understanding the most basic of concepts is much more difficult. So, take the time to learn all this information. A good place to start is this book.

George Boole is very important in programming and computer science. He invented Boolean logic. This logic is how computer scientists see the world. Logical statements look like this
$$p \land q \lor r \implies s$$
To the untrained eye, this is very confusing. However, once you learn Boolean logic, it will say:
$$\text{p and q or r implies s}$$

This topic is covered in discrete mathematics, but with a little bit of self-exploration, you’ll be ready to take on your first programming language.

# Step 2

## Pick an easy programming language

This is where you start to get some freedom in the programming world. Your first language should be a simple, well-documented language. Personally, I know many people who started with Python. Others started with Java. A few daring souls started with C. But I started with Racket. Let me list some information about each.

Language Python Java C Racket
Data Types Strong dynamically typed Strong static typed Strong static typed Strong static typed
Easiness (1:easiest to 10:hardest) 2 4 8 5
Best Quality Simple Syntax Easy Organization and Hierarchy Data Type Definition Flexibility Easy Organization and Smooth Logic Flow
Worst Quality Loose Variable Conventions Syntax is Troublesome Data Allocation is Manual Old and Archaic

## Start following tutorials and enroll in MOOCs

I personally believe that one of the best ways to learn is through experience. So, start by building a basic application, like a calculator. Then follow a tutorial to learn what to do. Alongside this experimental learning, enroll in a MOOC (massively online open course). This will be the structure in your learning. With this, you can also watch tutorial videos from Khan Academy or resources like that.