Curriculum Vitae
Experience
Career Break
May 2023 – present | Neath, UK
• Health-related career break due to illness, with personal projects and courses available on GitHub. Now seeking to return to full-time software development.
Junior Software Consultant
July 2022 – April 2023 | Realworld Systems | Cambridge, UK
• Worked as a developer on the GIS software GE Smallworld using Magik (OOP)
• Built a new address database and implemented an importer to load ˜6 million records for production use, taking into consideration time and memory constraints.
• Wrote and maintained code: regression testing, code reviews, wrote and delivered patches; used Git for version control.
Research Intern
June 2019 – August 2019 | Institute for Mathematical Innovation, University of Bath | Bath, UK
• Independently scoped and conducted a research project on university transport logistics, working without a defined brief to formulate research questions and gather data from the university and local council.
• Analysed and visualised geospatial data using QGIS; produced a research poster and presented findings to academic staff.
Projects
grape (NFA-based regex engine)
C++ | 2026
• Built a grep-style regex engine using Thompson’s NFA construction, chosen for its guaranteed linear-time matching. I diverged from the backtracking approach recommended by the tutorial after recognising its exponential worst-case behaviour.
• Pipeline: tokeniser → shunting-yard postfix conversion → Thompson’s construction → NFA simulation
• Supports character classes, alternation, quantifiers, and substring search across multiple files
Ray Tracer with Photon Mapping
C++ | 2026
• Undergraduate coursework project (76%) extended and refactored in 2026: a Whitted-style ray tracer with global illumination via photon mapping, implemented using Jensen’s 1996 paper
• Implements separate caustic and global photon maps stored in a kd-tree with k-NN lookup, Fresnel refraction, Phong normal interpolation for smooth mesh shading, gamma correction, and antialiasing
• Photon mapping simulates indirect lighting effects — caustics through glass, colour bleeding between surfaces — that direct illumination alone cannot produce
Others
Haskell, Rust | 2025-2026
• Lambda Calculus with Krivine Abstract Machine (Haskell): Undergraduate project (80%) revisited in 2026. Rewrote the Krivine Abstract Machine from scratch using closures for a correct implementation.
• Hack Assembler (Haskell): A two-pass assembler for the Hack instruction set, from the course ’From NAND to Tetris’.
• CHIP-8 Emulator (Rust): Implements all 35 original opcodes, so it runs all classic CHIP-8 programs and passes Timendus’ test suite
• Path Tracer (Rust): Path tracer following Peter Shirley’s Ray Tracing in One Weekend series, translating it from C++ to Rust. Features include: positionable camera, BVH, volumes, emissive surfaces, materials (lambertian, dielectric, metal), Perlin noise, spheres and quadrilaterals.
Education
Mathematics MSc
2021 | University of London | London, UK
Modules : Graph Theory, Number Theory & Geometry, Algebraic Number Theory, Linear & Non-Linear Optimisation, Methods in Finance, essay on Fermat’s Last Theorem, dissertation on Riemann surfaces.
Mathematics BSc (Hons.)
2020 | University of Bath | Bath, UK
Studied 7 computer science modules (42 ECTS credits), including cryptography, algorithms and time complexity. I particularly enjoyed programming projects:
• Advanced Computer Graphics: building a ray tracer with photon mapping in C++,
• Functional Programming coursework: building a lambda calculus interpreter with the Krivine Abstract Machine in Haskell,
• Numerical Analysis coursework in MATLAB
Throughout my degree I completed coursework in C++, Haskell, MATLAB and R.
A-Levels
Gower College Swansea | 2017 | Swansea, UK
A Levels: Mathematics (A*), Further Mathematics (A*), Chemistry (A). UKMT Gold award, and represented Gower College in the team challenge.
Technical Skills
Languages: C++, Rust, Python, Haskell, Magik
Developer Tools: Git, Cargo, VS Code, Neovim