British Computer Society award for top postgraduate student.
C++
The focus of the degree was on high performance C++, with particular
attention on the demands required by games programming. C++ projects
included a first person shooter and a five-a-side football physics
simulation.
Shaders
A course was devoted to creating an underwater scene, rendered
entirely in the graphics card using the shader RenderMonkey.
This required paying particular attention to the different types
of lighting and underwater effects.
Networking
The C++ five-a-side football game also contained a networked
component. The game was designed so that both teams could be
controlled on separate computers, which connect to a central server
which implemented the physics engine.
Group Project
The group project involved designing and creating a PC game, and then
porting it to a GameCube. I was voted in as project manager, therefore
making me responsible for motivating and co-ordinating everyone in the
team and ensuring a timely delivery. A working game was delivered, and
everyone on the team received a distinction for the work.
OpenGL
The 3D components of the projects, including the first person shooter,
five-a-side simulation and dissertation, were implemented using the
OpenGL libraries.
AI
The AI project involved creating the algoritm to determine the next
move PacMan should make. the algoritm was implemented in a number of
different ways, including the Dijkstra shortest path algorithm and
the A* and MinMax decision tree algorithms.
Concurrency
In order to ensure that all of the implemented projects ran at a high
framerate, extensive use of C++ threading and concurrency was used.
Dissertation
The main end of year dissertaion involved
implementing a working golf game in C++. The game had all of the elements
required to play a round, but was primarilly focussed on the implementation
and validation of the Physics engine used to calculate the flight of the
gold ball in the air. This required extensive research of the complicated
laws of motion as well as the implementation of an engine fast enough to
calculate this in real time and the testing to prove the correctness of
the simulated output.
Cambridge University
MA Computer Science
September 2003 - June 2006
2:1
Homerton College
Java
One of the main languages used in the degree was Java, which covered
the use of the language, OOO and more advanced topics such as the
garbage collector and stack frames and how to use them to optimise code.
Databases
The databases course introduced the concept of relational databases and
how SQL is used to control them. We also learnt about what is involved
in scaling up the size of a database.
Distributed Systems
Distributed systems introduced the concepts required to create
applications and databases which run over a number of different machines.
Algorithms
This course introduced the concepts of algorithms, and what to look
out for when creating or choosing an algorithm to solve a specific
task. It also introduced a number of useful algorithms.
Software Engineering
Software Enginnering covered the
different models for the SDLC, such as the iterative and waterfall models,
as well as introducing formal methods for proving the validity of an
implementation.
AI
The artifical intelligence work covered the basic concepts of different
types of AI, such as decision trees, path finding algorithms and neural nets.
Concurrent Systems
This course built upon the threading introduced in the Java work to go
through the concepts of concurrency and the implemetation and use of
the methods for providing synchronisation.
Data Structures
In a similar fashion to the algorithms course, this introduced the
standard and advanced data structures and what factors to look out for
when choosing one to solve a particular problem.
Logic And Proof
The logic & proof couse provided the fundamentals for performing
mathematical proofs and creating advanced logic statements.
ML
The use of ML provided an introduction to functional programming and
how recursion can be used in practical applications.
HCI
Human Computer interaction focused on the design of user interfaces,
specifically the best pratices for a variety of different users and
environments.
Graphics
This course covered the algorithms and techniques used to display and
improve the graphics on screens, and the algorithms involved in computer
vision.
Physics
The Computer Science Tripos involved taking part of the Natural Sciences
Tripos, of which I choose Physics.
Maths
The maths parts covered the maths required for the Natural Sciences tripos,
as well as discrete mathematics used in formal proofs and probability.
Hardware
The hardware courses covered electronic circuits and the various logical
components used to design them, as well as writing Verilog code to program
FPGA chips.
Security
The security course introduced a number of the factors involved in creating
secure systems and the dangers of providing insufficient security.
Unix
We were given an introduction to the Unix operating system, and the
differences with Windows which was used for the majority of the degree.
Operating Systems
The operating systems course introduced the concepts of the various
operating systems, such as the CPU scheduling and memory management
algorithms.
Group Project
The group project involved designing and creating a hearts game. I was
voted in as lead programmer, giving me the responsibility of writing
the game engine in Java and co-ordinating the integration of the other
parts of the game such as the AI and graphics.
Dissertation
My dissertation involved creating a traffic simulation in Java Swing.
The purpose of the simulation was to demonstrate how the vehicles behaved
in different traffic conditions, which was implemented using decision tree
AI. This was expanded to include a learning algorithm which allowed the
simulation to learn how vehicles could change lanes safely. This proved
successful, as the testing demonstrated that as the simulation ran, the
number of unsuccessful lane changes decreased as the data set used to create
the decision tree expanded.
I am currently working at Centrica EM&T, which is the proprietary trading arm of Centrica, as a senior
developer in a team providing an Azure cloud infrastructure platform used extensively by various trading,
risk and operations teams in the company. The platform is primarily used to run the Quant models for contract
valuations and risk calculations, but is increasingly being used for other tasks which require custom C#
applications to be developed. In order to manage the increased workload, I have been leading the efforts
to scale the platform, by implementing more efficient and resilient core libraries as well as moving the
release processes to VSTS for significantly improved control and reduced manual work.
Other projects I have led have included working with the product control team to integrate an external price
reconciliation system to replace a work intensive manual process, working with various risk teams to simplify
a complicated risk system while also expanding it to include a newly acquired subsidiary, and coordinating
various development projects performed by an off-site support and development team.
The role also includes being on an overnight support rota to support the end of day batch processes, which
would involve resolving problems stopping business critical tasks from running, often in difficult circumstances.
C# .Net
The actions performing the various tasks were implemented in C#, which required a wide range of
high performance algorithms and functions to be developed.
Scale
The number of users and volume of calculations performed by the system rapidly increased,
so I had to develop new features and processes to ensure that the SLA continued to be
hit.
Cloud
The majority of the computation is performed on Azure based VMs, so the role has included
managing and improving the cloud infrastructure.
Management
As a senior member of the team, I was responsible for managing a number of projects with
quant, risk and operations teams throughout the company, as well as helping to manage offshore
development and support teams.
Documentation
I was responsible for writing a number of technical documents which detailed various processes,
in order to help the support teams maintain the systems and efficiently respond to problems.
Agile
We worked using Agile design methodologies, including daily stand ups at the Kanban
board and continuous integration.
Release Process
There were no release processes when I arrived, so part of my role was to implement
an organised process which ensured that only the intended changes made it into
production.
Support
The role included being on an overnight support rota to support the end of day
batch processes, which would involve resolving problems stopping business critical
tasks from running, often in difficult circumstances.
PST has developed an electronic performance and tracking system (EPTS) which
is used to monitor athletes during training and competition. The data read back
from the athletes is analysed and presented to the atheltes or their sports
science staff, with the intention of improving the athletes performance and
minimising the risks of injury.
The Precision-SSS system consists of a unit attached to each player which contains
a GPS device and set of acceleronmeters which can precisely record the movements
of the athlete. This data is transmited to a reciever connected to the tablet
allowing it to be read by the app and displayed to the user in real time. The
data presented is converted by the app into specific sports science metrics and
combined with data read back from the PrecisionNet cloud service to provide a
comprehensive and targeted summary of the athelte(s) performance during the recording
period.
C# .Net
I have personally performed all engine development so far, which has
been written in C# .Net. This engine takes advantange of a number of
features of the language, including multithreading and networking.
Engine
The engine provides the low level drivers for reading the data from the
hardware, as well as the core processes for associating this data with
the appropriate players and calculating the various sports science metrics.
All of this has to be perfomed in real time and the data saved for future
reference.
Cloud
The PrecisionNet cloud platform collects all of the data recorded from
athetes using the system and identifies trends and patterns. These are
then communictaed with the software to provide appropriate feedback and
comparisons for the individual athelte.
Management
As Technical Director I am responsible for the delivery of all of the
technology within PST. This includes the direct management of a number
of overseas software developers who helped to create the interface for
Precision-SSS.
WPF / XAML
I have written the majority of the interface, in conjuction with some
overseas contractors. The development has been performed in WPF XAML so
that it is compatible with the c# engine and runs on Windows.
App
The app is currently designed to run on a Windows 10 tablet, making use
of libraries for communicating over USB and Bluetooth and for creating a
real time visualisation of the data read from the hardware and PrecisionNet.
Hardware
The hardware developed includes the unit for recording the information
about the athlete and the receiver for collecting the data. I oversee the
development of the hardware and its integration with the software.
Support
I am responsible for providing the support to the users as required, either
directly or through co-ordinating the support team. The support consists of
fixing any issues which are found, or working with particular teams and
athletes to develop new features which meet their demands.
I worked as a senior member of a large development team that was responsible for an award
winning platform for optimising the storage of billions of pounds worth of shares and other
financial derivatives throughout the company by identifying where the firm had both bought
and sold shares, and only keeping the minimum trades necessary. This platform saved millions
of pounds for the company a year and was released to different teams around the world.
I was also part of a global team which was responsible for a system for routing thousands of
financial transactions a day. This was critical for the trading desks as the transactions were
routed into the database allowing the desks to see their risk exposure immediately.
My primary focus within the teams was to improve the resiliency of the systems through implementing
a number of new release procedures and improving the testing frameworks which resulted in a
significant reduction to the downtime and maintenance costs for both systems.
Slang
The majority of the development was performed in Slang, which is an interpreted
OOO based scripting language. Due to the high volume of transactions and processing
and complecity of the code, the scripts required careful design and optimisation.
Global Team
Being part of a global team required co-developing with people all over the world.
This required extensive and clear documentation as well as regular meetings to ensure
that all development remained co-ordinated and in sync.
Unix
The servers which ran the code for distributing the transaction information ran on
Unix, which required an appreciation of the OS and how to setup the processes.
Management
As a senior member of the team, the role required a significant amount of management
and leadership. This was particularly required when setting up the new release and
testing procedures, as they increased the work required to make changes and so the
significant advantages they introduced needed to be communicated and advocated.
SecDB
All of the transactions created by the systems were stored in the database SecDB,
which is a globally distributed relational database.
Release
One of the major problems of the development was that the large global developer base
meant that a vast number of changes were made daily, ofen without full testing. I
implemented a number of new release procedures which allowed us to see all changes
made to the relavent code for our systems and prevented these changes from going into
production until we had performed all of our own tests and were satisfied that they
would work. The release would then occur in a controlled way to minimise the chances
of anything breaking.
Testing
Before I arrived the testing of the system was performed in an incomplete and ad-hoc
way. I pushed to increase the test coverage and also implemted new processes to make
it much easier to run the tests. These were linked to the new release procedues to
guarentee that full tests were run on all code released.
I also designed and implemented automatic tests which compared the output of different
versions of the code, which ensured that the only differences in the code released to
that in production are expected.
Support
The team was responsible for a number of existing systems which were actively used by
the trasing desks and therefore had to be supported. The support ofent involved
having to fix issues in unfamiliar code while ensuring the traders were prevented from
getting upset, within very tight timescales due to the nature and speed of trading.
GIS has created a high performance industiral inkjet printing engine. This market leading engine
was capable of converting any image or custom designed input into print data for a vast array
of printheads in real time. This greatly exceeded any other product available and allowed previously
impossible print runs to be performed, such as continuously printing tiles with a unique natural
effect pattern on each one.
Having joined the company when it was a small start-up, I played a crucial role in it growing into an
extremely successful and Queens award winning medium sized company, and as such my role constantly
changed and grew. I initially joined the software team and soon became responsible for leading the
architecture and development of the high performance core software system. Later on I became the
Applications Manager, which still required me to work on the full development stack but also involved
working on projects which could not be fulfilled by the standard software product.
C++ & MFC
The core engine was developed in C++, with MFC for the simpler interfaces. Due to the
complexity and scale of the architecture, extensive use of object orientation and
software engineering principles were required to keep the code manageable.
Performance
In order to provide real time printing at the maximum speed allowed by the printheads,
the engine had to process and download Gigabytes of data per second. This required
complex use of C++ to create highly parallelised and optimised code.
Full Stack
For a long time I was the only software developer, and then led the architecture when
the team expanded. Because of this it was necessary that I was significantly involved
in all parts and stages of the development.
Agile
The small development team and rapidly changing nature of the market and customer
requirements meant that all development was performed in an agile fashion, to ensure
that priorites could be changed quickly and releases were produced frequently.
C# WPF
I wrote the more complicated interfaces in C# WPF in order to take advantage of a
number of features in the language as well as the speed of development.
Release
To ensure the release process was controllable, we introduced the Hudson (and later
Jenkins) release management system as well as controls on the software versions. This
provided us with an effecient method for controlling exactly what was run in production
as well as making supporting legacy systems much easier.
QA
In addition to my software roles, I was also the QA manager. This gave me the
responsibility for setting the test standards, guiding where and how the testing was
performed and writing or describing the test scripts procedures to be used in the
testing.
Management
Being the lead software architect and manager of special projects required a
significant amount of leadership and management, as I needed to guide the architecture
as well as tutor and motivate junior members of the team.
Python
The QA test scripts and other utility scripts were written in Python. This allowed
them to be developed and maintained quickly by a range of developers, which still
ensuring they were complex enough to fully test the features in the software.
Special Projects
My role as Applications Manager still required me to work on the core development
stack but also involved working on projects which could not be fulfilled by the
standard software product. This usually required me to develop specific and challenging
software and algorithms often on my own and to strict time constraints.
TCP/IP
The core application operated a remote client server architectiure,. This required
me to implement and maintain a high performance and crucially a reliable TCP/IP
infrastructure to allow the applications to communicate for the lifetime of the print
run.
Support & Documentation
I provided the technical lead for the customer support team, which involved a
significant amount of customer interaction. I never lost focus on how important the
support was to the continued success of the company and we earned a glowing reputation
throughout the industry for the quality of our customer care.
I also wrote a significant amount of technical documentation in order to reduce the
workload of the support team.
During the summer I worked in the QA department of Rebellion Games testing the latest games in
development. My tasks involved playing through the games looking for bugs, and testing particular
sections or for specific problems.
Testing
My primary focus was on testing the games in development. This included searching for
ways to reproduce particular bugs seen in development, testing specific areas or free
testing an entire game.
Bug Tracking
Any bugs found had to be added to the bug tracking database. This required a clear
description of the bug as well as precise instructions to repriduce them.
Reports
In addition to testing for bugs, I was often asked to test finished games which were
being evaluated by the publisher arm of the company. This involved writing a formal
report of the game summarising the strengths and weaknesses, as well as a recommendation
about whether the game was worth taking on.
Team
Being part of the QA team meant that I had to work closely with the other members to
ensure that all work was co-ordinated and completed, as well as following the instructions
from the management to ensure my work was focussed and correct.
While on a STEP (Shell Technology Enterprise Programme) placement, I was responsible for improving and
expanding the intranet web pages for the company’s QA team. As a result of the new pages developed,
the efficiency and rate of bug finding of the QA team measureably increased significantly.
Perl
The majority of the code was written in Perl. A significant number of new scripts
had to be developed as well as maintanence of existing scripts.
SQL
The main purpose of the pages were to read data from the internal databases and display
it in a user friendly way. The database access was performed through SQL and integrated
with the Perl code through DBI.
HTML
The intranet web pages were developed in HTML, which integrated with the Perl code
through CGI.
Requirements
The role required me to consult the end users in the QA team to gather requirements,
and then work by myself in turning the vague requirements into actual implementations.
Current Status
Date of Birth
13/07/1985
Nationality
British
Location
London, UK
Status
Currently employed
Professional Profile
A strong software engineer, with practical experience with multiple languages in the
full development life cycle.
An extremely hard and diligent worker, who takes great pride in any work carried out
and who always tries to produce the highest quality work possible within any deadlines set.
Many years of full stack experience in an agile development environment.
Experience in technical team lead and management positions.
An understanding of the commercial as well as technical aspects of project planning.
A passion for providing dedicated, professional and informative customer support.
The ambition and drive to constantly improve and gain new skills and responsibilities.
A valuable team member, who can communicate with other team members formally and
informally, both verbally and through written reports.
The ability to work as an individual, including solving problems and thinking about how
any requirements given can be expanded or improved.
Outstanding planning and organisational abilities, both with work and personally.
The ability to schedule and work on many different tasks and projects at the same time.
Comfortable travelling around the world and working in a variety of environments.