What is programming?
Programming is basically giving a computer instructions what to do. Computers talk between themselves using a bunch of verbose instructions (as in: “put this number into this place”, “add number x to number y and store the result in z”, etc). These instructions are very exact and also depend on what CPU kind or architecture you’re using.
Programmers instead write in human-readable languages that do the heavy lifting for you. There are many of these languages out there and there are also various ways you can go about writing code.
Programming is not just remembering syntax or knowing a language. It’s also about knowing what to do and why you do it. Programming involves a lot of problem solving and practice.
What programming language should I learn?
In theory, you can start with any language! The important part is that you understand the fundamentals behind what you’re learning. Programming is all about solving problems. Some languages might make this process easier but all should allow you to get the concepts going.
You may also decide to learn a language appropriate for a field you have in mind. If you want to learn how to make a website, Javascript may not be too bad of a starting point. If you want to specialize in automation or data science, Python may be a great choice.
Alongside your programming knowledge, you will also need a healthy amount of problem solving, communication skills, and knowledge of computer concepts (how memory works, navigating a computer, using the terminal, etc). The key point isn’t just knowing how to code, but also what to code.
How should I learn to program?
TThere is no set path that works for everyone. There are many paths you can follow to learning code: books, written articles, videos, interactive courses, etc. However, when mastering any skill, you should always practice.
Passively following courses or reading books without doing any work or research of your own is not an effective method of learning. Practicing, on the other hand, gets you into the rhythm of programming, helps you understand how to solve problems you encounter along the way and allows you to gain an understanding of what to do.
A common recommendation is to make projects when learning. Projects don’t have to be complex — they can be as simple as you want. The importance of projects is that you are putting work and effort into learning.
What are the “fundamentals” you are talking about?
The fundamentals will differ depending on what path you are following or the person you’re speaking to. However, most resources I’ve read have agreed, in one order or another, that the fundamentals include the following:
- How to use a computer (navigating your device, using a keyboard, and others).
- Command line: Familiarity with the command line will be very helpful when programming as you will find that some things can be done more quickly or easily via a terminal as opposed to a graphical user interface. In some scenarios, such as when working on a server, the only thing you may have is the command line.
- Input and output: How do you tell things to the user? How do you get things from the user?
- Variables and data types (integers, strings, lists).
- Operators (arithmetic ones like add or subtract, logical ones like and/or, etc).
- Conditional statements (if) and loops (for and while).
- Handling errors and exceptions.
- Object oriented programming: Working with classes and objects. It is also worth understanding when to use such paradigm.
- Working with files.
- Working with modules and libraries .
- Project management and version control.
Are there any other prerequisites?
Apart from the fundamentals, there are very little prerequisites to learning how to program.
-
Owning a Computer: For programming, you should preferably own a computer. While programming on a tablet or a phone is possible, you will be vastly limited in what you can do with these devices.
-
The interest to learn: A grain of curiosity is also appreciated as programming is a field where teaching yourself concepts is important. Knowing how to search for an answer can vastly improve your productivity and your problem solving skills.
-
Math: Knowing complex math is not required. Though some disciplines in programming such as machine learning or parts of game development may require a handle of calculus and linear algebra, in most other parts, you should be fine with general arithmetic and basic algebra.
-
English: English is the lingua franca of programming, there’s no way around it, but it does not mean that you need to speak English well to program. However, while many resources are written in languages other than English, you will quickly find that most resources and projects are delivered in English, so a command of English will help you. You will probably be fine with the basics though and there’s always room to learn more.
How long does it take to learn x
?
There is no universal measure on how fast you should learn something. It should not be used as a metric to compare yourself. Humans learn differently and at their own pace. Will it take a few weeks? A few months? A year? It depends a lot on you.
Also, learning is a constant and developing process. It doesn’t stop at one milestone. And if there was a milestone, where would that be? Is learning classes the milestone of “learning Python”? Is it finishing a project? Is it knowing topics like decorators or metaclasses? There is no way to measure something that is infinite.
I’m comfortable with the fundamentals, what should I do next?
This is heavily dependent on what field of programming you want to pursue. Projects are also a great way to apply the fundamentals you’ve learnt and create something you are proud of!
Learning is a never ending path of failure and success. If you are interested in something, dabble in it and see what you can achieve.
If you want project ideas, you can take a look at Kindling Projects which lists a few project ideas and other sources of inspiration.
How should I go about making a project?
First, settle on an idea for something you want to make. It is essential to get a good understanding of this idea, plan ahead and see what exactly you want to achieve.
Then break down that idea into multiple smaller ideas. Then work on each idea individually until you get your project to the point it resembles the basics of your original idea. Make sure everything works correctly. Keep extending it with new small features until you get bored and want to move on to something else.
If you decide to do so, you can share your project online (usually done via Github, Gitlab, and the like). This is also a great way of learning version control if you haven’t already. Sharing your project allows others to use it, share feedback and hopefully make your project better.