I have recently graduated from the University of Wolverhampton with a first class BSc (Hons) Computer Science degree. I also managed to obtain the Deans Computer Science Student of the Year award for my final year dissertation on mobile contextual learning.

Java (1.6 - 1.8)

Java was the core language that all the modules were based around at university. This has therefore become the main language that I use, both at work and outside of work. At university, I managed to create my own web server, websites with JSPs and servlets, my own compiler for my own language using the GCC compiler as a basis and desktop applications using the Swing framework.

When I started working at OpenGI, I learnt how to use the JavaServer Faces framework to create web applications. When the new version of the web application was being made, I also learnt to use the Spring framework. These were both packaged as WAR files and deployed onto Tomcat instances.

In other projects at BSkyB, I have also used the Spring framework deployed onto a Tomcat instance, where this has been the base for the majority of projects. But the new projects have been created with the core technologies of Grizzly and Jersey.

Outside of deployment, I have used other Java technologies such as the Quartz scheduler, Ehcache and Solr/Lucene.

Testing Frameworks

I first learnt to use automated testing frameworks whilst at university, where we were taught to use jUnit. This has become the basis for the majority of the automated tests that I write, especially at work where we practice TDD.

When I started working at BSkyB, I learnt to use Mockito and PowerMock for mocking. Whilst Mockito is an excellent library for mocking methods, it does have some limitations that PowerMock is able to cover, mainly around testing static methods and logic within legacy code that cannot be changed. However, I have also learnt that using PowerMock in a new project is usually the sign of a poor design.

For testing RESTful APIs, I have learnt to use REST-assured with jUnit. This gives us the ability to write our API tests as if they were being written in plain English.

Another set of testing frameworks that I have learnt whilst working at BSkyB are Selenium, WebDriver and Watir. These are very useful for automated testing website UIs.

Cucumber is a great framework for allowing non-technological minded people to fully understand what the tests are trying to do and even allow them to write the acceptance criteria of tasks and business logic.

When it comes to non-Java related testing frameworks, I have used Test::Unit for Ruby and qUnit for JavaScript.

SQL Databases

In a professional environment, I have used both MySQL and Oracle SQL databases when requiring a relational database.

For my own hobbyist projects, I use MySQL databases when I need to use a relational database.

NoSQL Databases

When a non-relational database is required, I have used Mongo and Cassandra. I have only used Cassandra on a small project in a professional environment, but I have used Mongo in a lot of highly available and fundamental projects.

For relational databases, I have started to use Graph Databases instead of the usual SQL databases such as MySQL and Oracle SQL, I am using Neo4j and even Mongo with TinkerPop (due to financial reasons around Neo4j).

GWT (2.6.x)

I first used GWT as a way to create a quick rich web application for a project at BSkyB. The reason for using GWT instead of JavaScript, was that the team I was in was a predominantly Java team, therefore we wanted to make sure that anyone could pick it up without too much of a learning curve.

Grails (2.x)

The only time that I have used Grails, is for a project when I was still in the software engineering academy. This was an internal web application to make sure that websites conformed to BSkyB's web standards.

Ruby (1.x - 2.x)

Ruby is a language that I picked up when I was completing the software engineering academy at BSkyB. During that time, we created an internal web application to allow inter-communication between two teams. However, the main use that I have for Ruby now, is for monitoring with Sensu and maintaining a consistent working environment through Puppet.

Android

My knowledge of Android started from my dissertation at university, where I created a simple application to allow to test what the benefits were of mobile contextual learning, rather than just reading information. Since then, it has become a series of hobby projects, mainly as little helpers for my phone.

The only application that I have published to the Google Play store so far is 'Silent Metting'. All the application does is read all the events from the calendar that are set to 'busy' and mute/un-mute the phone during that time period. It can also be set to mute for a period of time before the events and carry on being muted for a period of time after the event. I created this application as my dad would have a lot of meetings and would forget to un-mute his phone afterwards, therefore missing calls.

Python (2.x - 3.x)

As with most languages that I use, this started off as part of some hobby projects, and have then been used for more useful projects at work. I have created quite a few personal applications in Python, mainly with Flask.

As for its use at work, it has been mainly used for automating jobs, so therefore fairly simple and using fairly basic logic.

PHP (5.x)

PHP was the first language in which I learnt to create a dynamic website. Once again, this was a module at university, which gave me a good basis for learning the quirks of web development. I also learnt to use my first framework, Zend. Whilst I have never used PHP in a professional environment, I have used it a lot whilst outside of university due to the cheap hosting that is PHP only. My mine project has been my own basic CMS, BritIntel.co.uk. Unfortunately, I have not found the time to update it in quite a while and when I last updated the site, I also change hosting, where I regrettably lost a lot of my articles.

JavaScript

I am fairly new to Node.js, only hearing about it when I started work at BSkyB. However, I have learnt the system, as it is just JavaScript with some extra features, as well as learning to develop using the Express framework, with the inclusion of the Jade template engine.

This site has been created using these technologies as a mini project and to save on resources, but being dynamic enough that I can update it easily.

HTML/CSS

Whilst knowing HTML and CSS isn't something to brag about, it is worth mentioning that I have a very good understanding of both technologies and have a passion for making websites that are accessible to everyone, no matter what their disability may be. This is something that I have been very forward with at work, as I believe if a customer is funding our work, whether through advertisements or through some form of subscription, they deserve to have a really good experience and want to come back again and again.

C/C++

At university, I managed to break away from the core modules based on Java and PHP, where I learnt how to program in C and then C++. I managed to learn a lot about how programming is like on a lower level and how higher level languages work, that would not have been possible if I had not taken the module.

Outside of university, I have only created one or two small applications in C/C++, more to get an understanding of QT/GTK+.

Whilst I would not class myself as an experienced or well versed programmer in C/C++, I can at least say that I understand the language and that I can competently create an application in C/C++.

Visual Basic 6

Visual Basic was the very first language that I learnt during my A-levels. Whilst this is not a language that I have used since then, but it taught me the basics of computer programming.