Coding is not as intimidating as people sometimes think or Hollywood depicts, but there are some skills that are strongly recommended or essential before learning to code. While it’s possible to, say, find a Java or Python tutor and jump right in if you are learning from scratch, it’s better to confirm you have the basics first.
This list covers the “lowest common denominators” across different kinds of coding in different contexts. Specialized areas might have their own requirements. As a result, this article will focus on skills that are needed for the vast majority of coding, whether its for education, academic, industry, practical, or hobby reasons.
Computer programming is somewhat analogous to music composition. Making up a simple tune, composing a symphony, and improvising a jazz solo are all composition, but of very different types. There’s a baseline of musical knowledge and experience, but the amount and specifics vary.
Don’t be intimidated by how much there is to learn to become a coding whiz. You’ve probably mastered at least some of the items on this list already, and the knowledge and skill required in each is not exactly comprehensive. For example, for typing, the requirement is a steady pace, not rapid speed (or even good technique). These skills can all be learned at home.
Typing
Typing may seem irrelevant. Does it matter how you get the code in the computer?
Yes.
While it’s true that your program runs identically regardless of how it was typed in, the ability to type fluidly allows you to focus on a problem, and reduces the risk of losing your train of thought.
Increasing accuracy is also helpful. Typos are frustrating, for one thing. Additionally, if things frequently don’t work the first time because of a typo, it can make you feel like “things never work” and cause you to lose confidence in yourself, your tools, or your learning materials.
All these benefits hit diminishing returns rather quickly. If you’re fast enough to type up detailed emails, five-paragraph essays, or other medium-length pieces of writing without much inconvenience or errors, you’re probably fast and accurate enough (you’ll also improve over time anyway).
While the prevalence of computers in schools and homes means the average speed of 30-40 WPM is enough, there’s about one in five people who are slower than that. Fortunately, bringing up typing speeds in a slower-than-normal range is usually a matter of working on improving over the course of a few weeks of regular practice.
There are two important exceptions to note: disabled programmers and young kids. Accommodations for programmers who can’t use their hands aren’t as advanced as those for blind or low vision programmers, unfortunately, but they do exist. For young kids who may also be learning to read at the same time, there are a number of good options, including visual programming languages that bypass most (or all) reading and typing.
Reading
If you are a native English speaker who struggles with reading or writing, it’s wise to refresh and build your skills first. Fortunately, many communities have literacy programs for low or no cost, librarians are happy to help you find books and other resources at the right reading level, and many tutors are specialized in helping with English literacy.
Non-English speakers are often encouraged to learn English as well before learning to code. Because English is the dominant language for teaching, documenting, discussing, and commenting code, it’s arguably the no. 1 “programming language.” However, if you can find resources in your language, it’s usually something you can learn alongside programming rather than something you need to do first.
Logic
Coding is all about giving structured instructions to computers, and that means you need to be explicit about the logic. In fact, while computers are often as described as being “all about numbers,” those numeric operations are usually based on combining individual bits using very simple logic gates.
While hardware design and academic logic gets very involved, the logic you need isn’t. Just be comfortable with basic logic operators and combining them. Deciding whether a statement like “True and False and (True or False)” is true or false doesn’t need to be second-nature for every programmer…but should be something every coder can easily understand how to do. You may have already picked this up from math class or from using software like search engines that has logic operators built into the interface.
Pre-algebra
While programming doesn’t require a lot of math, there are a few helpful math skills needed to understand both coding and the technical details of your computer’s operation.
These tend to be taught in the years (and courses) leading up to algebra. These skills include decimals, rounding, scientific notation, function notation, working with units, and reading numbers in bases other than decimal. If you’ve prepared for a test like the GED, SAT or the GRE, you’re likely ready, as these cover a broader range of math.
You don’t have to be good at pen-and-paper math, let alone mental math – you are working with a computer, after all – but you should have a good conceptual understanding of how basic algebraic math works, and how it can be applied.
Science and problem solving
You’re going to have bugs! It’s a part of writing code.
How are you going to figure out where they are and how how to fix them?
If your program is short, you can try random guessing, but that quickly becomes unworkable. To make a dent, you have to be able to reason what is likely to be the issue, and also spot errors in your logic. To do this you have to use an (informal, sped-up) scientific method—make hypotheses about what went wrong, test them (usually by making the necessary fix).
Similarly, you may need to collect observations and look for patterns. While some bugs happen reliably, others may require specific conditions to happen.
While independent thinking and experimenting is essential, they don’t mean you should see coding as a solo endeavor. Tutors, classmates, or coworkers can often be the best resources. Often programming tools point out the specific location of an error and, increasingly, some even suggest corrections. Learning to recognize errors and bugs without a lot of trouble is an indispensable skill for coders.
Computers and Networking
Naturally, you need to know something about the device you’re coding, and, given the predominance of the internet, the way computers communicate. Coding is actually a great way to learn these skills, but if you don’t have them at all, you’ll be lost.
Make sure you have a basic sense of:
- Where programs are located
- How files work
- How computers connect to the internet
- The purposes of different internet protocols
If you typically lean on technically savvy friends for tech support, try doing it yourself (or asking them to explain an issue, not fix it). Configuring and maintaining systems is a separate skill from programming, but both draw on a common pool of technical knowledge.
Command-line
It’s rarely necessary to use the command line for day-to-day coding, although some prefer it to graphical tools. However, you will likely run into at least one situation where it’s needed.
Installing coding tools is a big one, so you can’t put off learning how to properly do it. Fortunately, the knowledge needed is, again, relatively small.
And although command-line interfaces can be cryptic, there isn’t much to them. Users execute commands in the context of a particular place in the file system. You can also combine commands in various ways and control their execution, which is why some programmers gravitate to them, but these details aren’t needed on day 1.
Specialization
Coding has relatively shallow background knowledge requirements, at least at the very beginning. However, there are definitely specialized cases where more knowledge is helpful.
Sometimes you can postpone these until you have the basics of coding down, but if you want to dive in quickly or take a fast-paced course, getting them out of the way might be necessary. In case you’re in one of these situations, here are some common additional areas to consider for background study:
- Discrete math is the umbrella category for much of the math mentioned mentioned in this article. Diving deeper and exploring additional topics likes graphs and combinatorics is helpful, and sometimes necessary, for more advanced coding.
- Geometry and trigonometry are the basis for much of computer graphics, including games, multimedia, and some web and GUI development.
- Statistics is a must for any kind of data science or analysis or machine learning. It can also be helpful for doing intensive work optimizing programs, as it helps you interpret the results.
- Calculus is useful both for video games, because they provide the basis for equations of motion, and machine learning, as the strategies to progressively train the models.
- Linear algebra is also useful for both games and machine learning, as vectors and matrices are used in both types of programming.
Another group of skills is helpful background for the organizational and social elements of coding:
- Software engineering is the discipline concerned with specifying, producing, validating, and maintaining large software systems.
- UML and ER Diagramming are specialized tools for helping plan the design of object-oriented programs and relational databases respectively. These skills and diagramming in general are helpful to know but can be postponed until the programs you’re working on get more complex.
- Technical communication is the field concerned with gathering and documenting technical information, including software. Much of it is technical writing, but it also encompasses instructional videos, graphics, animations, and oral presentations.
For coding with a creative or design element, you can of course explore the relevant arts as well. For example, practice creative writing in order to write dialogue for games, or pick up graphic design to create a logo.
Finally, there is computer science, which is the theory of computing, and computer engineering…the science of how computers physically operate. They are almost always taught with coding as a prerequisite, rather than the other way around, and are included here for completeness.
As you assess whether you have them, remember that the skills explained above are not a prerequisite for reaching out to a tutor, signing up for a class or even dipping your toes in. They’re recommended before starting to learn to code in earnest.