A versatile and dedicated software engineer with a passion for crafting functional, efficient and elegant code. I have developed a relentless curiosity, allowing me to think outside the box and stay up to date with industry trends. I actively engage with the software community, following latest industry insights through content creators and newsletters. This not only keeps me informed, but also fuels my curiosity and enthusiasm for exploring technologies and languages. The latest being my new passion for learning Vim, to make me a more efficient programmer :D.
I am a highly competitive individual driven by a desire to excel. I have demonstrated my ability to work effectively within diverse teams and thrive in an environment where ideas are openly exchanged, challenges are met head-on, and innovative solutions are collectively crafted.
Having graduated with an MEng in Computing from Swansea University in July 2022, I joined Capgemini in November 2022 and have been working as a Junior Consultant in the field of AI/ML since. I held an 87% average across the 4 year Master's degree. I hold strong industrial experience in developing code in Python, where I have worked at VIAVI Solutions to develop full AI/ML pipelines, including the development of algorithms to identify and collect relevant data, the optimisation of existing code to minimise execution times and storage usage, and the training of NLP machine learning models. I also have strong educational experience in developing code in Java, C++, Arduino C, Kotlin, and Python, with some software testing experience in white-box and black-box testing. Alongside this, I have experienced educational exposure to C, Haskell, Prolog, SQL, XML, SPARK Ada, and System Verilog.
During my time working with VIAVI Solutions, I developed code in VSCode, using Pandas, NumPy, Transformers, PyTorch, TensorFlow, Keras, and SKLearn to name just a few libraries that were necessary to meet the project requirements. I followed VIAVI's choice of SAFe5 agile for the software development life cycle, where we implemented a CI/CD pipeline to simultaneously implement necessary features to progress the project at the required pace. As part of this SDLC, I estimated story points, time for feature development completion, and time to bring the project to production standard, along with holding peer code reviews when pull requests were submitted. To ensure that the SAFe5 agile process was followed correctly, we used JIRA and Confluence to track sprints, MCRs and stories, alongside using Bitbucket and Git for software version control. I also utilised JIRA and Confluence to create and maintain use-case documentation with block diagrams, design approach, experiment results, and benchmarking metrics. With the team in its infancy, I drove the team's commitment to many coding best practices, including git commit conventions and the abstraction of code in an object-oriented manner.
Outside of the professional setting, I remain a hugely competitive individual with experience of playing cricket at a semi-professional level, helping to demonstrate my ability to excel in high pressured team environments. I'm a massive sports fan, taking a keen interest in motorsport, football, cricket, golf and tennis. Despite having a career in software development, I also enjoy coding as a hobby, often experimenting with and learning new languages. I count myself extremely fortunate to be able to do something I love every day as part of my career.
View Resume Especially Automated is a tool for the automated uploading of Arduino sketches wirelessly to development boards that house ESP32 chips. The platform was developed with a Python backend and PyQt5 front end, utilising UDP for communication between the platform and network of ESP32 devices, as well as multithreading to allow for the operation of concurrent processes. Matplotlib and file I/O was used to allow for the saving of results as well as the viewing of scatter graphs charting parameter values against results.
Built alongside the software platform was a decentralised firefly synchronisation use case. This use case aimed to demonstrate how a network of embedded systems could synchronise with their neighbours following the natural phenomena of firefly synchronisation. LoRa modules were utilised for communication between the nodes of the network, with Arduino C and C++ being used to developed the software for the development boards.
The initial idea for this project was to develop a firefly synchronisation system between nodes within a network of embedded systems, and further research the effectiveness of such a system for the enhancement of robustness in communication networks in noisy environments. However, as I was completing an engineering degree, it was necessary to instead develop a project that produced a final product. The idea for developing the Especially Automated software platform came from struggles I experienced when developing and testing Arduino code on a number of embedded systems.
The project counted for 30 credits of my Master's year and consisted of the submission of 3 documents along with a presentation of the final project. The 3 documents submitted as part of the project were namely Milestone's 1, 2 and 3 for which I scored 80%, 73% and 91% respectively. Milestone 3 accounted for 60% of the project's marks and thus acted as a dissertation document. For this reason, I assume this project is graded as 91%. The presentation I conducted demonstrating the final product developed as part of this project scored 87%.
I took an implicit team leader role, leading by example to develop a walking aid usage prompt system for sufferers of dementia. The system comprises of 2 embedded systems, one attached to the patient to detect when they are walking, the other attached to their walking aid. When the wearable device detects when the patient is walking, communication is made with the walking aid device to gain an understanding of if the walking aid is moving also. If it's not, a reminder message is played to the patient. The software for the system was developed in Arduino C/C++, utilising ESP-Now for communication and required the editing of open source libraries to ensure that the system was fully functional. ADXL345 accelerometers and audio shields were used to provide the full functionality of the system. Despite many efforts being made by myself to motivate other members in the group to contribute to the project, I developed the full software system myself and wrote the vast majority of the documentation we submitted. Full documentation can be viewed by clicking on the image to the right.
Unfortunately, our module coordinator encouraged us not to assign a team leader role. I envisioned issues arising because of this and made an effort to lead the team by example throughout. These efforts included using the github issues page to create an interactive to-do list for the team, as well as ensuring that I was continuously progressing the work of the project and that I was providing regular updates of work deadlines to the team.
I was also assigned as the Client Communications Officer for the team. This role allowed me to keep in constant communication with our client and be able to plan meetings and develop a list of functional and non-functional requirements for the project which the client agreed to. Throughout the development of the project, I also needed to ensure that we remained within budget whilst continually communicating with the client to arrange the ordering and pickup of hardware items.
The structure of the assessment for this project followed a similar structure to that of the assessment carried out on the individual Master's project. We were tasked with submitting 3 documents, with the latter of those being Milestone 3 which constituted 60% of the project's marks. Because of this, Milestone 3 can be regarded as the dissertation document for this project. The group scored a mark of 81% for Milestone 3, but as the group all agreed that I had contributed more to the project than any other group member, I received an individual mark of 100%. The project consisted of 2 other document submissions, namely Milestone's 1 and 2, where the group scored marks of 70% and 88% respectively.
AllerGenius is an Android application developed for the purposes of a Bachelor's project. The app allows users to scan barcodes, view food labels digitally in a customisable way and log any foods they have eaten or symptoms that they have experienced. I have implemented an augmented reality feature for the barcode scanning, which is imperfect in its current form and needs a little tweaking. The app was developed in Kotlin and utilised Google's MLKit, ARCore and Firebase technologies.
A news aggregator application that allows users to enter keywords for news stories they wish to see. The user can sort the news stories they see, view them offline or complete crosswords. It is an Android application developed in Kotlin, using Firebase for login services and storage of each users' chosen keywords. Various public libraries were used for the fetching of JSON data from a news story database as well as the displaying of crossword games to the user.
The EveryDice is an infinitely programmable dice that myself and a group of Master's students developed in a Hardware and Devices module. I developed the Android application for this system in Java and gained experience in developing software that communicated between the application and the Phidgets abstract input/output hardware devices. I also worked closely with another student in the group to implement the functionality of rolling and shaking functionality within the dice. That student is a junior engineer at Mercedes High-Performance Powertrains and so I gained valuable insight into industrial hardware/software engineering practises.
For this coursework within the CS235 module at Swansea University, I was individually tasked with performing a round of user research, analysing feedback and implementing new features on a previously developed retro video game system. Due to COVID-19, I was limited to only being able to conduct user research with a couple of participants. Despite this, I was still able to gain experience in developing user research plans and documentation.
As part of the user research procedure, I needed to identify new features that should be added to the retro video game prototype, with these features then being added to the existing system. For this, I advanced both the front end and the back end of the retro video game including the development of a tweet score features and the re-designing of the user interface to better match the feel of the characters and items included within the game. Development of these features were once again carried out in Java and JavaFX.
For this assignment within the CS235 Software Engineering 2 module at Swansea University, we had to complete the partial implementation of the group's previous implementation of a retro 2D game. For instance, we had to implement a level editor as part of this coursework. It allows users to design their own level via a 'nice' editor (i.e. a Graphical User Interface). A user is able to start a new map, edit existing maps and also delete custom made maps. These maps are playable as custom maps and separate from the original game levels.
We were required to develop this in Java with the use of JavaFX to develop the front-end of the 2D game. We were given the optiom to work on the implementation that this group had previously supplied or to work on an implementation of another group. Our group decided to work on their own previous implementation, but as I was new to the group, I had to further develop software that was unfamiliar to me. This allowed me to gain important experience in understanding the code of other developers and developing on top of their code.
My personal contribution to this coursework was to develop file I/O software that allowed for the correct saving and loading of custom maps for the game, as well as further work on the front-end side that allowed for the correct functionality to be implemented within the map creation feature. As well as this, I made a strong effort to motivate the team to deliver the coursework days before the deadline to ensure enough time was allowed for the fixing of bugs and for the development of a demonstration video. I also had a strong contribution to both the fixing of bugs and the filming of a demonstration video.
For the CS230 Software Engineering module at Swansea University, our randomly assembled group was tasked with developing a 2D retro game using Java and JavaFX. The game is composed of multiple levels (i.e., a collection of maps). A player plays one level at a time and, upon completion of a level, progresses onto the next level. Each level is played on a 2 dimensional map (i.e., grid).
Each cell of the grid can be of a certain type, for example, a wall, a door, ground (i.e., empty), etc. There is also the player who occupies a cell and various enemies that if touched will kill the player. The player can move by using the arrow keys (up, down, left and right). After the player moves, the screen will be redrawn with the new game state.
We were required to develop the game whilst adhering strictly to a functional specification supplied, but we were also required to think of and develop additional features to advance our game in order to attain higher marks.
For this coursework, I worked extensively with another member of the group in developing software as part of adherence to the pair programming paradigm. My main area of software development was for the back-end of game, including building a binary search tree for the searching of profiles saved within the game, as well as developing the file reading and writing system for saving user accounts and loading the maps for the game. I also heavily influenced the development of the front end of the game as well as working tirelessly to motivate other team members to ensure that the coursework was completed on time.
In this coursework, we were expected to write programs in Haskell to solve some simple tasks as an introduction to functional programming. Some of those simple tasks included simple arithmetic problems, with a more advanced task requiring us to develop Haskell code that would allow a user to play a game of Nim. We were also asked to create an AI function that would play against the user and would have an optimal strategy to beat the user. The code for this group coursework was written by myself, with another group member helping to decide on the final committed code.
Within the CSC205 Declarative Programming module at Swansea University, we were tasked as a group of 3 students to solve simple programming questions in Prolog, a logic programming language. The most challenging of those questions was to create a solution to the Futoshiki puzzle, where we needed to develop two solutions, one that listed all possible solutions for the problem, and another that was more efficient by only identifying the solutions which fit the constraints of the puzzle.
Despite being assigned this coursework as a team of 3, I was the sole contributor of software for our solution, which fortunately allowed me to gain a more solid understanding of Prolog and logic programming.
I enjoy building desktop computers and have done so for myself and for others, including friends and relatives. It allows me to keep up to date with latest technologies, such as the current competition in the CPU space between AMD and Intel, with the likes of Apple joining the battle with their own silicon technologies. Due to computer systems being an enjoyment of mine, I regularly view video content produced by the likes of Linus Tech Tips, Gamers Nexus, and JayzTwoCents in an attempt to gain a better understanding of the inner workings of computer hardware and software technologies.
This example of computer system was built by myself, with the components being budgeted for and upgraded over many years. I take pride in the aesthetics involved with desktop computers, and continuously attempt to identify how I can extract further performance from the system with processes such as GPU, CPU and RAM overclocking.
If you are looking for an extremely dedicated and hard working software engineer to join your ranks, please contact me through the button below.
Get in touch