Select items for more information.


Education

A course centred on giving students a wide and general understanding of the foundations of AI and Machine Learning. Topics covered ranged from data mining and analysis to robotics to optimisation techniques to ANNs and deep learning. A secondary focus was the practical implementation of the scientific process in computer-science, concluding in a Master's Thesis containing original research.

My Thesis concerned the creation and evaluation of a novel algorithm for generating and evaluating infinitely extendable procedurally generated heightmaps (think Minecraft), combining Perlin noise and Voronoi spaces to capture the best of both techniques and create strategically interesting terrain with irregular first- and second-order discontinuities. My supervisor and I are considering submitting a shorter version as a conference paper later this year.

A BCS-certified specialist course in software development and programming, specifically focused on the techniques and areas relevant to computer games and game engines. Practical experience centred on C++ development but also included projects in a variety of languages and environments, and included exposure to related subjects like robotics and fuzzy logic (a speciality of DMU).


Relevant Experience

Upon graduating from the De Montfort University BSc in Computer Games Programming, I chose to return for an MSc. My old lecturers were sufficiently impressed by my undergraduate output that they offered me a paid part-time position teaching on the course I’d just completed. This consisted of a supporting role on the course’s most challenging modules, Game Engine Architecture and Game Engine Development, which together guide students through coding a functional game engine from scratch. Topics covered included graphics programming, library integration and management, software architecture and the use of programming patterns, debugging practices and techniques, and source control, among others.

My role was to run many of the lab sessions, provide expert programming support to struggling students, and do the bulk of the marking. As such, I had to be entirely fluent in the taught topics, capable of resolving students' coding mistakes quickly and with clear explanations, and able to critically evaluate the code of others while providing constructive feedback. The job also required strong soft skills, especially when I had to help students remotely in the first COVID-19 lockdown.

My role at Felcana, a small startup in pet healthcare technologies, was to overhaul and improve the company's website. This was more exciting than it sounds, as I was tasked with adding several pieces of custom functionality not present in the existing template, and I had none of the source code or development structures - only the browserified and semi-minimised Javascript. As such, I had to reverse-engineer large chunks of commercial code while working in a complex web-dev tech-stack of Shopify's API, Liquid Ruby, SCSS, and a wide range of commercially-used Javascript Libraries. Due to Felcana's nature as a small team, I was operating entirely independently with no support from any other developer. The company was delighted with the results I produced and the website I built remained in use for over two years.

My role at Gamesys, a major online gambling company, was to prototype novel slot-machine concepts for evaluation with regards to commercial development. To do this I made use of widely-used game-related JavaScript libraries such as PIXI.js and tween.js, and operated largely independently while preparing concepts for pitching.


Skills

Having spent a lot of time marking final-year students, I’m in the privileged position of being able to say with certainty that I am very highly skilled by graduate standards. I’m entirely comfortable and capable with a wide variety of mathematical and programming concepts and frameworks, both high- and low-level, in areas relevant to games, robotics, and AI. Although I have the most expertise in C++ and JavaScript, I’ve built projects in a wide variety of languages including Java, C#, MATLAB, Lua, VBA, Squirrel, GDscript, GLSL, and Python. I've also worked with a variety of game engines including Unity, Unreal, Godot, and Source

I've had plenty of experience learning new technologies, navigating unfamiliar APIs, and debugging other people’s code as well as my own; Adapting to new programming environments is not an issue. I also have the technical skills necessary for working close to the hardware, eg. constructing shader pipelines, manually managing memory in the C style, cache optimisation, etc.

I’m familiar with both currently fashionable ANN-based deep learning techniques and less popular schools of AI such as Evolutionary Computing and Fuzzy Logic. I’ve used high-level frameworks such as Pytorch and MATLAB’s ML suite, but also programmed solutions from the ground up, including implementing a novel neural network approach from the backpropagation calculus up. I’m also thoroughly familiar with the hands-on implemention of other techniques like genetic algorithms, including important supporting elements like designing for multithreading.

I'm familiar with most approaches used for agent AI in games, some practically and others at least at a theoretical level. Although it's not the direction I ended up pursuing, I did considerable research in this area for my MSc Thesis, on top of my existing knowledge from personal interest.

I’m experienced as working in teams as both a team member and as a team leader. I’m a clear communicator, and I have experience at mentoring others and reviewing their work. Throughout my university career I tended to be the one running my team in any group project, a role I’m quite competent in and which has given me some helpful insights for when I’m in a more supporting role. I’m entirely comfortable with both public speaking and delivering constructive criticism to other team-members in an appropriate manner; I’m also receptive to such feedback. My experience teaching has helped develop my skills for mentoring others and conveying complex concepts in multiple ways to aid comprehension.

Building games has always fascinated me as much as playing them, and this manifests itself as a wide variety of knowledge and experience. I’ve built board games, participated in game-jams, modded games both digital and tabletop, run custom servers with altered rulesets, built a plethora of custom-maps for games like CS:GO and TF2, and GM-ed homebrew-heavy tabletop RPG campaigns. My favourite games have always been titles which allow me to create content for others and start changing the rules of play to see what works and doesn’t work. As such, I live and breathe game design; I’ve read Swink, watched more hours of GDC talks than any sane person should, and played too many games purely because they were bad in interesting ways.

Composing decent prose is hard, and I flatter myself that I’ve reached the lofty bar of ‘barely competent’. I’m in no way a professional writer, but I can put together an email or GDD or item description at speed and deliver something which isn’t plagued by typos and grammatical errors and which loosely conforms to the ideals of accuracy, brevity, and clarity. I can proof-read worth a damn, too, which seems to be a surprisingly uncommon skill amongst programmers.

I have a variety of supplementary skillsets which complement my primary development competencies. I am by no means an artist, but I know the basics and can construct rough-and-ready temporary assets in both 2D and 3D - my experience is primarily with Inkscape and Blender, but I have used other tools like Adobe Illustrator and Maya. Generally, this cross-discipline knowledge makes it much easier for me to effectively communicate and work with artists.

I also have quite a bit of experience building websites on a variety of different platforms and technologies, including this one. (It's a heavily-modded version of the Monoxide theme for Gantry 5 running on Joomla running on Hostinger. Web-dev! For all your tech-stack tech-debt cold-sweat word-salad needs!)


+44 7552 538 438 / This email address is being protected from spambots. You need JavaScript enabled to view it.