Hi. I am a programmer. I'm one of those cool people that sit all day at the computer and make it do things.
We have it pretty good. No problem if the weather is bad, we work inside. Also, there's plenty of work, anywhere in the world. And we have the option to work remotely, since programming is done on computers.
I can understand why you want to become a programmer. And I want to help you.
First, you should figure out what is the field you're going to work on. Or the field you would like to work on.
This depends on your goals, your inclinations, and perhaps the odds of finding a good job in that field.
Because there's not just "programming", or "software development" in general. There are different kinds of programming. You might want to learn programming to:
- create a website
- create a mobile app for your smartphone
- create a game
- automate your home with an Arduino
or you might want to dive into complex fields like data science or machine learning, AI and so on.
Each of those sectors are very different from each other. Each one has a different programming language as their "main language".
We have countless different programming languages. Some are more complex than others. Some are more beginner friendly. Some are highly specialized, some are general purpose languages. Some are very popular, some others are obscure and niche languages. Some are old, some are more recent.
Typically, the language you choose depends on the field you want to work on:
- Want to create utilities and automate your tasks at work? Learn Python
- Want to work with Arduino and embedded devices? Learn C/C++
- Want to create the next Linux or a performant command line application? Learn Rust
- Want to create games? Learn C# and/or C++
- Want to work in Machine Learning and Data Science, or in general "crunch numbers"? Learn Python, R, Julia
To each specialization its perfect programming language.
The main issue with learning programming is motivation. If you have an ambitious goal, for example creating your the program or game you want to create, your drive to achieve your dream is going to do marvels for your learning.
It's much easier to learn this way rather than a general "learn programming" goal that can be too general and give less motivation.
Motivation is not just dreams to build your own software and games - it might also be getting better at your job, of course.
Learning programming requires lots of practice, trial and error, patience and persistence.
If you don't know what language to start with, unless your field is dominated by a specific programming language, and everyone uses that to perform the task you want to do.
Otherwise if you just want start and you want someone to tell you which language to choose, I think everyone should learn Python.
Python is a general purpose programming language that's easy to learn and very flexible. Once you know how to create Python programs, you're going to apply that knowledge everywhere.
Here's how to start.
Then pick some books. Books are immensely useful because you can have them at hand and they look at you all the time saying "read me".
Pick physical copies, so you can annotate notes and underline what you want. Good books last years.
Start with a beginner's book, and intermediate book. Books made for schools are great. "Intro to Python for Computer Science and Data Science", for example.
The programming language is just a tool. A very important tool that you should know inside-out, like a carpenter knows the tools of the trade.
The job of a developer is to solve problems. Analyze the domain, choose the right solution, identify the best tools, services and other software that can help you, and implement it into code.
This is why in parallel to learning a programming language, or while you learn it, you should learn how to solve problems.
Initially at a high level. How to reason about a problem, how to think like a programmer.
Then you will get more in-depth and you will start solving problems with code.
So you will learn better your programming language of choice, and you will learn how to solve problems with it.
Then if you plan to get hired at a company, you will need to prepare for the job interview. I recommend you to start with studying data structures and algorithms, and then start practicing with sites/books that are specialized in interview questions.
There's a whole industry specialized in just that part.
For some reason preparing for a job interview is very different from the actual programming you will do on the job, but it's a necessary evil in most cases.
Of course if you want to learn programming to become better at your job or for personal projects, you can skip all that part.
That was an introduction.
Go and download the books you're interested in from The Valley of Code and remember: it's going to be difficult, but it's going to be worth it.