Tuesday, 29 April 2014

Computer Science at the Open University

I have been studying for a computer science degree with the Open University since 2007 here is a brief overview;

"In one breath! Here we go.....
The courses started with learning about data, representation and how a computer processes data, analogue and digital, the link between data and information, some html and JavaScript, how people interact with computers and Computing in the wild.
Then with the building blocks of software I learnt about specifications, code constructs, tracing code, binary trees, logic, Boolean algebra, rules of inference, proof by induction, databases, recurrence systems, efficiency, axiomatic specification, classes.
I then went on to learn object orientated programming with Java. Java was covered in a number of courses, one course started of with OOP and gave me a solid grounding in everything class orientated and then another course put that knowledge to work with more detailed work on the communication between methods within an object and then on to understand the relationship between many objects. I learnt about input, output, exceptions, packages, abstraction, graphical user interfaces, event-driven programming, Threads, internet programming.
In another course that used Java covered software development, UML, use cases, Structural and Dynamic models,
A small course covered working as a distributed team on a web project. This taught me a lot about planning and communication with others.
I then went on to study Natural and Artificial Intelligence, which has been by far my favourite course. It is very interesting and has so much content your could spend a life time on each topic of study. It has made me want to investigate AI for games and simulated worlds, which I will discuss at length in future blogs.
After AI I studied concurrent and distributed systems, which roughly translates to multithreaded processing and communicating across a net work, and the internet. Multi-tiered systems and various client/server models. It used Java enterprise edition,  serverlets, beans, thin and thick clients, distributed and multiple databases.
After all this I chose to go back to the level 1 courses and learn some Maths that I probably should have learnt a bit before starting on the higher level courses.
Once I had refreshed myself of the Maths I went on to study Software engineering with Objects, which focused on a an engineering approach to developing software.  Simply put 'Software must be delivered on time, to budget and to specification'.

I now have an Bsc open degree! (bows, takes breath)....."

My Programming beginnings

Sometime ago I got into playing computer games, particularly Star Wars games, in fact  I have over 50 SW games. Some of the early games got me into modding. I played with a modding tool called JED, which let me make my own levels for Dark Forces 2: Jedi Knight. I then played with a tool that let me make my own levels for Jedi Academy. ( I believe it was based on the one of the Quake engines or something like that.)
Some years later I got in a MMORPG called Star War Galaxies (still my favourite game of all time) . This led me to the idea that I wanted to get into making my own games so I found a program called Realm Crafter. This appeared to be a complete system to make an MMO without learning a massive amount of programming. I was wrong =(. Struggling to get it to do anything I wanted (I had no programming skills so it is no wonder), I planned to learn to program. After some careful thinking, I applied to the Open University to do a computer degree. With no previous programming knowledge, but with a lot hard work, I am slowly getting there. 
See next post for Open University stuff.....
I have used Dark Basic Pro, which I have used to varying degrees of success. I have been using Torque3D. I like the graphics and some of the pluggins are good fun, but for a beginner it is hard to use. I have also spent quite a bit of time using Leadwerks2.

Rancor rendered in Leadwerks 2
I developed a wrapper to use Leadwerks 2 in Java, it worked surprisingly well, but due my concerns over security (with the wrapper not Leadwerks2) I stopped the project.
As I have found it hard to get into other people's game engines I felt that the only way to get a game engine that I could use easily and in the language I enjoy is to write it myself. So that is why for the last year or so I have been learning OpenGL using a number of different books and websites. The main programming language I know is Java, so I tried a couple of options. I gave the JMonkeyEngine ago, but didn't get far as I really wanted to use OpenGl at low API level. I tried JOGL, but didn't like how you had to set up a window or how you access the OpenGL functions. My third option was to try LWJGL which I have found much more intuitive. The tutorials are very good and have helped me understand enough to use books and tutorials designed for programming in C or C+.

Recently I have started to learn Android development with Java. So far I find the API to be very user friendly. It makes sense to develop for Android as it is a growing market and is fully accessible to a Java programmer like myself. So my plan at the moment is to learn everything I can about Android development and OpenGL and make my own game engine that can be used on Android as well as a desktop. As Java  has a write once use anywhere philosophy I'll make the code so it can be used on plain old Java and Android with just a change of jar file. I'll use the LWJGL for the OpenGL on the desktop and the Android OpenGL ES2 so shaders will be used but some on the desktop will not be available on the Android system until OpenGL ES3 come out and I have a development machine that can run it.