Having recently graduated from university this summer, I found myself with a lot of free-time between job interviews. Rather than see that time going to waste, I decided to test myself by taking on a project to work on over the summer months. As a software developer and a computer scientist, I love to make software and applications, whatever it may be. However, I found myself at a crossroads. I would pick up an idea for a project, spend a couple of days, maybe even a week on it, before dropping the project. I decided to take a step back and evaluate the situation.
What I found was wrong amounted to a similar phenomenon to ‘Writer’s block’. For those unfamiliar with the term, Writer’s block refers to when an author loses their ability to progress further with their work and they suffer from a creative slowdown. Programmers often seemingly suffer from the same condition, losing sight of their thought process and getting in a rut. Looking back to my own experience with ‘Programmer’s block’, I began to see all of the problems which resulted in my projects turning out the way they did.
Sometimes I lost interest in what I was making. Sometimes I broke a program to the point where I deemed fixing it not worth the effort. However the main point that I found was that I didn’t put enough thought into a project before jumping right into programming, which brings me to the point of this blog post. I am going to offer some advice and insight into planning a programming hobby project in the form of three simple questions.
What is it that you want to make? You might already have an idea of what you want to make in your head, but it’s important not to think too far ahead and to keep your thoughts simple with regards to starting points. Every idea that you have for your project increases your workload. It’s a good idea to write down your thoughts even if you may never end up acting upon them. You might remember from English classes in school that your teachers would always tell you to plan your work before you jumped straight into writing? The same applies here, you don’t want to start programming immediately, only to find yourself stuck because you failed to account for a certain factor which impacts the program in such a way that you cannot continue.
How are you going to make your program? It’s necessary to consider what tools may be needed for your project. What programming language are you going to use? It’s nice to use a language you might be familiar with but in the larger scheme of things, especially if you’re considering a career in software development, it’s key to step out of your comfort zone and try out new languages. I personally like to use C# and C++ in my projects which revolve around graphics. 3D programming is one of my favourite hobbies in programming, it’s in an entire league of its own in comparison to other forms of development, and is something I would recommend software developers to try out at least once even if they aren’t confident with their mathematical abilities.
Will you need to use any 3rd party libraries? I’ve come to be much more considerate about using 3rd party libraries in my own projects. More often than not, a library will lack a functionality that I need, and I end up having to side-track myself extending the functionality of a tool which is intended to lessen my workload, not increase it.
‘Why?’ is the most important question. Why do you want to make this? To find out if what you are trying to achieve is actually possible? To discover new things by accident? For fun? Programming is an experimental field of work. Some developers will write programs to simply find out whether what they are making will actually work, or what they thought would work. Don’t be afraid to write a program only to find out that it ends up not working and hopelessly breaking. Finding myself in similar situations, I’ve found that it’s better to not say “Why doesn’t this work?” and to say “What can I do to make this work?” And simply because something does work doesn’t mean you should never revisit that part of the code again, you should always think “How can I improve this?”
After taking a long, hard look at my current projects (and those which I have given up on in the past) I came up with the idea for my most recent project, an OpenTK ‘sandbox’. It’s essentially a testing environment branched off from a game I am developing so I can perform physics simulations and experiment with 3D objects without worrying about potentially cumbersome code messing with game logic.
Although I am ashamed to admit it, development has been slow as I am getting used to my new life in the town of Oldham, with my job here at Web Applications UK; but if I follow my own advice and make sure I can answer the three most important questions, I’m confident I’ll get something out of any project going forward.