Mark As Completed Discussion

Definition

When we ask ourselves a question such as what computer programming is, it's tempting to just look up the definition. We all sort of know what it is, but we want to get it precisely right. Let's not do that this time - let's build the definition from scratch.

So, if you were to ask a layman what programmers do, they might say that they make computers do stuff. This is certainly true! You interact with a computer and make it perform some tasks you wanted to get done. But that's not a good enough definition, because that would make any old bloke just using existing programs a programmer.

Definition

What that definition is missing is the how. The difference between a programmer and any other user of computer software is that a programmer is making the computer do stuff by writing code. This is still not good enough, however. We might be getting into some nuance, but there are types of code that aren't programs, such as markup languages.

We've arrived at the question of what kind of code do programmers write. And the answer to that is programs that can be executed, which result in certain commands being run on the central processing unit, that can be converted to machine code. So that should about encompass our definition? Uh, not quite.

Another very important consideration is that writing code is just a part of programming. That code has to be made up first! It might sound like a silly complaint about our definition - of course, we have to think of something before writing it down. But the thing is, in computer programming the code we write has a lot of theory behind it. There are good and bad ways to write code and there's a lot of computer science theory behind how to do it well. So you have to also know how to design code, to think up systems and algorithms that will do a good job, that other people will be able to read and maintain, that will execute quickly, be bug-free, testable, provable, optimal.

And now we're ready to formulate our definition.

Computer programming is the process of designing and writing code that can compile into an executable program that does a specific calculation or another task.

Why this long-winded way of deriving that definition? Because this is exactly the type of thinking that makes a good programmer - thorough, analytical, iteratively building upon previous work, precise, able to pull a concept one knows from practice apart, and then put it back together in a formal sense. This approach to information, even when it seems trivial, is going to help you notice gaps in your knowledge and understanding - or indeed bugs in your code - much quicker.