If you’re reading this article, the odds are that you’re a gamer. And if you’re a gamer the odds are that you have a whole load of ideas about what makes a great game, how the games you know and love could be improved, and probably a raft full of ideas for your own games too. Whilst most gamers are very tech savvy, many don’t really understand how they could go about creating their own games, what would be involved and simply where to begin. This article is here to help. If by the end of this article, you know whether learning to program is something that would be worth the time and commitment involved, and also how you would go about learning to program if you were to want to do so, then this article will have achieved its aim. I’m going to approach this by trying to answer a series of questions that commonly crop up when discussing programming with people who are new to the idea of software development but are interested in learning. I will also try and include specifics wherever possible, accepting that these can never be entirely accurate or reliable, rather than simply leaving you with broad generalisations that everyone would agree on. So without further ado, let’s begin!
How is software developed and what is it anyway?
Answering this question is the building block to explaining computer programming. Computers run programs by simply following the instructions they are given by programmers. Those instructions are machine codes. Each code carries out a very small operation but when you string enough of these instructions together, you get a working program. Therefore the first thing to understand about programming is that, whatever else happens during the development process, your programs will have to end life as machine code instructions that can be handed to a CPU for execution. There is no getting around that. However this does not mean that we have to write our programs in these machine codes. Rather, we use other programs that act essentially as translators between our own high level code and the very low level machine code. There are two main types of these programs. One type is a compiler. A compiler reads a file or series of files that you have produced in a predefined high level code and translates that code into instructions that can be executed by a CPU. The other type of translator is called an interpreter. An interpreter performs a similar function but it translates the instructions “live” whilst the program is running rather than all at once before the program is run.
To answer the question of how software is developed, the honest answer is that there are any number of ways to do this. Some will involve typing in instructions in a programming or scripting language. Others will be achieved by purely visual means such as dragging and dropping options. As a rule of thumb, the simpler and higher level a software development tool is, the more limited your options are for how you will develop your software but the quicker and easier the software development process is. So a visual development tool may be very easy to learn and give you very quick development times but if the developer of the tool hasn’t implemented a particular feature that you want, you may not be able to have this feature in your software. Many powerful and successful game engines use a combination of both of these. So they will have visual elements, to allow you to place objects visually in a game world for example, but will also allow scripting so that almost any functionality you want can be implemented in your software.
Just how difficult is it to learn to program?
Answering this question is tricky in that the answer depends on what standard you want to get to and what tools you want to be able to use. It’s going to require a lot more effort to learn to code a 3D MMO in C++ than it will to learn to program a 2D platformer with DarkBASIC Professional. Having said that, I think the best generic answer that can be given is that programming is something that takes time and effort to learn and the difficulty of it depends largely on your level of enthusiasm. Large numbers of people, myself included, have learnt to program entirely in their spare time and are self taught. Therefore it certainly is possible. However you will need to devote time to practising coding, reading and investigating. Thus, if you have the enthusiasm and the patience, if is perfectly possible for you to learn to program in your spare time. However it is not something you are going to be able to learn overnight and it will prove to be a challenging task if you lack motivation.
So having given you all those generalisations, what does this actually mean? Well I can only really speak from my own experience. Having done some purely visual game development and tinkered with extremely basic code, I decided to try and build a simple game as a way of learning. I read a couple of books as I started development and I had my first game to show after somewhat less than a year. It was a fairly simple entirely 2D game written in DarkBASIC Professional, it was not of a quality that I could publish, but by the time I had finished it I would definitely say I could program. That was, of course, developed somewhat intermittently in my spare time around A-Levels. I imagine this would be similar to the amount of time most people could devote to it but if, say, you have a long empty summer holiday stretching out before you that you wanted to devote to learning to code I’m sure you could finish something by the end of the summer without problems. Having said that I was able to start developing more basic 2D games in purely visual tools after just an afternoon (I started programming with Yoyo Games’ Game Maker) but I always felt constrained with what I could do. That is not a criticism of the tool itself as it allows scripting to greatly enhance it. I simply mean that at the time, being completely unable to code, I felt limited by it.
One final point I would add in answering this question is about the level of technical know how required. Generally, in learning to program, knowing your way around a computer is fairly important. That doesn’t mean you have to be a computer expert but feeling comfortable using computers to a fairly high level from a user perspective is a very good basis for learning to program. One widely held misconception however is about the maths requirements of programming. By and large, programming demands fairly little of you in the way of maths. That’s not to say that maths isn’t useful to computing scientists, of course it is. However there are many things that you can do in computing without having to do anything much more advanced than addition, subtraction, multiplication and division. For game making in particular, understanding basic trigonometry can be an advantage but even if you’re not too clear on that, there are many example codes available on the web to help you out when you need them.
What can I honestly expect to be able to make?
I think this issue is particularly important for prospective programmers. Many learners, and particularly those with an interest in games, can get somewhat over ambitious. It is almost an in-joke how many beginners declare that they are working on an MMORPG. I know that was my plan when I started. However I feel that whilst people are more than happy to state that that MMORPG isn’t ever going to be made, they are very bad about explaining why, which leads to further confusion.
The thing to understand about what you can develop is that is has very little to do with your programming skill. Of course a non-programmer can’t sit down and write an MMORPG right now because they don’t have the knowledge. However they are almost certainly capable of learning if, as discussed above, they have the requisite dedication. No, the issue of what you can build has nothing to do with ability or what you know. It’s all about time. The reason that we say you aren’t going to build something kind of like Guild Wars 2 but better is because of the time that the development of these AAA games takes. Let’s run with Guild War 2 as an example. ArenaNet has had a team of 270 people working full time on the game for the last 5 years. So not factoring things like the fact that all of that team were already experienced programmers to start with and so weren’t learning on the job, or the fact that it’s still not finished yet, or the fact that they are all working full time whereas most indie game developers are working in their spare time, basic maths tells us that Guild Wars 2 has taken 1350 person-years to develop. Now do you see why you’re not making that game as an indie?
Having said what may sound very negative, I would like to take a positive out of it. The question is not ability. You can learn to develop pretty much anything you like, and if you want to think big, you can always try and team up with people. It’s just that if you want to work on something really big like a modern MMORPG, you’ll probably have to join a company with a big team.
I would also like to counter all that negativity by pointing out that indies have and will continue to achieve incredible things. The popular browser based MMO RuneScape was initially developed by two brothers in their mother’s house in Nottingham for example. Further numerous indie developers and small teams have produced many high quality games. But we can never avoid the fact that time is always the crucial factor. It is worth considering that many of the most successful indie games are, in fact, developed by teams, and are often developed full time. Consider Rovio or Mojang. These companies developed Angry Birds and Minecraft respectively by working full time, and in the case of Rovio, as a team. Further the games develop much more once they become successful. Looking at RuneScape today, we can’t say that it was developed by 2 people in their spare time. What they developed was the original incarnation of RuneScape Classic which, as those of us old enough will remember, was (relatively!) limited. At the last count, RuneScape is now developed by a team of 84 people, and it has benefitted from 11 years of development since it was first launched.
So basically, you can learn to build whatever you want. But if you’re thinking big, then you’re probably thinking of full time development, teamwork or a very, very long term project.
Is there any money to be made in programming?
There is money to be made but it would be misleading in the extreme to say that everyone is making it. The huge profits of a few high profile indie teams (Rovio with Angry Birds, Mojang with Minecraft and so on) have misled some people into thinking that lots of people must therefore be making quite a bit of money. However this is not necessarily the case. Truth be told, one of the reasons that this site exists at all is to help deal with the problems faced by indie developers in getting their apps known. Once apps go viral, they can earn a lot of money. However that rarely happens. With regard to larger games, they certainly can make money and certainly can be profitable. However I have to say that in many cases, I feel that they are still undersold. That is not to say that their pricing has been pitched wrong, but more that indie games are often not able to charge as much as they are truly worth. Which is, of course, a great reason to buy them! But not such a great reason to develop them ;).
My advice on the money front would be that if you enjoy developing games, then it’s a great thing to do and you might as well try and sell what you make. If you can make enough, who knows, you could even make it your full time job. However going into development, and particularly indie game development, just for the money, is probably not a sensible idea! You can’t engineer an Angry Birds or an Tiny Wings.
Which language should I learn to program in?
This question is very common among people who are considering learning to program and it is something that is generally assumed to be very important. I used to think this too and as I remember, the logic goes something like this:
“Learning to program is difficult. There are a huge number of languages and development tools out there to choose between and I have to choose just one to learn with. As I’m going to be investing a lot of time in learning this language, it is crucial that I make the right choice now. Because I don’t want to find out after a year of studying this language that it wont let me do all the stuff I want so I have to start all over again.”
Logical as this sounds, there is a flaw. I believe this flaw comes from the use of the word “language” in the term “programming language”. When people hear “language”, they associate it with learning a human language like English, French, German, Mandarin etc. Whilst we all know that learning a new European language is easier if you already know a couple than if you are starting from scratch, it is still a very long process. My point here is that programming languages are NOT like this at all. Most programming languages are, in fact, very similar. If you learn to code in one, learning others with be a very quick process indeed.
Therefore my advice would be not to worry too much about which programming language you start with. Programming languages are good at different things so just start learning one that will be good for a project you want to work on at the moment and as you need others, you can quickly pick them up later.
There are, of course, various different types of programming language, based on different programming paradigms. However only a few of these are commonly used. One type of languages are imperative languages. These are languages where you simply give a series of instructions to the computer. Another very popular type of language are object-orientated languages. These languages allow you to build your programs using a series of self-contained “objects” that allow for highly structured code. In addition, there are many other types of language out there such as functional programming and a wealth of technical jargon such as strongly and weakly typed languages and so forth, all of which is designed to put off the beginner. However once again, I would advise you not to worry too much about these distinctions as you are starting out. Once you learn how one languages works, you’ll be able to spot the differences with how other languages work, but understanding all these differences is not necessary from the beginning.
To get down to specifics with this, I would generally recommend starting with an imperative language as object orientation, whilst extremely useful, can make languages more complex to learn. As everything you learn from imperative programming also applies in object oriented programming (but not visa versa), you can start with imperative and move on to object oriented later. That said, I still think it is better to select a language on the basis of how useful it will be for a project you have in mind. I will therefore leave you with some languages along with their strengths and weaknesses so that if, having read this, you are interested in starting the process of learning to code, then you will know where to go. Regardless or not of whether you decide to embark on the process of learning to program, I hope you now have a better understanding of how software is made. And if you are planning to learn to program, let me be the first to wish you the very best of luck!
|Type of Software||Programming Languages Well Suited|
|3D games||DarkBASIC Professional
|2D games||App Game Kit
|Windows applications||Visual Basic|
|Cross platform applications||Java|
Particularly large or complex applications, especially those developed in teams
C++ (Microsoft Visual C++)