Curriculum Vitae

I graduated from University of Southampton with a first class honours degree, Masters of Engineering (MEng) in Computer Science.

During my time at Southampton I volunteered for Student Robotics, a charity running an international robotics competition for sixth form students.

I completed two 3 month summer internships at Imagination Technologies. After University I was offered a job and currently work as a Leading Software Design Engineer at Imagination Technologies where I work in the Tools and Automation team.

Skills and Experience

During my time at Southampton University they exposed us to numerous paradigms of programming languages which is why I have a diverse skillset. For the below section I have categorized my skills into those I actively use day to day and those I have experienced to some level.

Proficient Skills

These are the skills I use day to day and I consider myself most experienced in:

  • PHP - This was one of the first languages I learnt to program in and still enjoy working with it. Its ability to build feature rich applications has always interested me.
  • SQL (specifically MySQL) - I have studied advanced databases in university to learn some of the theory behind what you need to consider when designing a database. I have primarily worked with MySQL as my chosen dialect of SQL but have also worked with SQLite databases when I needed a small embedded database.
  • Python - Python is my favourite scripting language and use it to automate many day to day tasks such as managing my servers. The majority of the software I have written for the Raspberry Pi Cluster is written in Python.
  • Javascript/jQuery - I have experience of using pure javascript (primarily in web workers) and the jQuery library to provide more feature rich websites
  • Java - Java was Southampton's "learning language" and therefore I used this throughout my degree. Compared to PHP I enjoy its strongly typed nature and use it to develop small desktop tools requiring a UI.
  • Linux - During university I ran Fedora as an operating system on my laptop giving me a crash course in Linux. Personally and professionally I maintain a number of Fedora, CentOS, Ubuntu, and Debian servers and am proficient at Linux server management. In addition to the servers I maintain my work with the Raspberry Pi Cluster has further improved my Linux experiance.
  • HTML/CSS - As part of my development work with PHP I used HTML and CSS to create my applications. Typically I will use a some kind of base CSS template such as Pure CSS or Bootstrap.
  • Version Control - I have experienced a number of distributed and client/server version management systems including git, SVN, and Perforce. For personal projects (including this website) I use git for its ease of creating local repositories and the ability to push to remote repositories with SSH and no further setup.
  • Unit Testing - I personally feel that unit tests are one of the few ways you can easily ensure that large codebases have a few number of regressions in each new deployment of code so am an advocate of unit testing. I have used PHPUnit, JUnit, Google Test for PHP, Java, and C++ respectively.

Novice Skills

These are skills I don't use day to day or professionally but I have experience in them. Level of experience is noted with the skill.

  • C - We were taught C in our Operating Systems class as our second "learning language" which among other projects we used to write a custom implementation of malloc. Later I took an Realtime Computing and Embedded Systems course which we used C to write programs for FreeRTOS. The work in C with RTOS was to explore the problems of servicing requests with real time requirements and the various problems that can occur while using multiple threads.
  • C++ - As part of an effort to improve my knowledge of computer graphics I have spent time programming a sprite based game in C++ using the SDL graphics library. In addition to this I have been working on some basic vision software to automate repetitive tasks using OpenCV and colour/pattern matching to determine where the software should click to complete a predefined action.
  • C# - I have used C# to develop a number of small UI based applications used to display data. I found it relatively easy to adapt to C# as it is very similar to Java and am looking to spend more time working with C# in the future.
  • SCHEME - SCHEME was taught as part of the diverse number of paradigms and introduced me to some basic concepts of functional languages. I enjoyed its different way of doing things and the discourse around its functional style. We were also introduced to how non functional languages can implement some of its features (such as tail recursion) for performance gains.
  • MATLAB - During my Computational Finance course we used MATLAB along with scientific python to complete a number of tasks including creating an algorithm which would create a portfolio to track the FTSE250. This gave me an in depth introduction to MATLAB and numerical processing using its powerful feature set.
  • AngularJS - During my fourth year group project we used AngularJS and worked on creating a plugin that would augment the AngularJS HTML5 video player Videogular to add quizzes and polls during video playback. Here I helped creating the overlay and example interface which we used to illustrate the plugins we created to our stakeholders.
  • Node.js - In addition to AngularJS my fourth year project also utilized Node.js as a lightweight server. We needed a small webserver to collect and forward data about users interfactions with the plugins. I enjoyed the "Javascript on the server" method of Node.js as I like Javascript and therefore am looking for another oppertunity to play with Node.js to learn about it more.