Role Overview
We are seeking a highly skilled and motivated Senior C++ Software Engineer to lead the revitalization of an existing C++ application. This project involves significant restructuring and build system improvements to enhance maintainability, testability, and overall quality. This role is perfect for an engineer who thrives on tackling complex refactoring challenges, optimizing build processes, and establishing robust testing practices.
Responsibilities
- Project Restructuring: Analyze the current codebase, which is spread across four main directories, and design a more modular and maintainable directory structure.
- CMake Infrastructure Enhancement: Refactor and update the existing CMake build system to align with the new project structure, ensuring reliable builds of all libraries and the main executable. Integrate the Catch2 unit testing framework into the CMake build process, and configure the build system to automatically build and execute all unit tests with relevant code changes.
- Unit Testing: Enhance the existing test suite by writing new unit tests using Catch2, focusing on critical areas and newly refactored code to ensure high test coverage and maintain testing best practices.
- Code Refactoring: Identify and refactor areas within the existing C++ codebase to improve clarity, reduce complexity, enhance performance where applicable, and adhere to modern C++ standards and best practices.
- Collaboration: Work closely with the existing development team to understand the current system and agree on restructuring and refactoring strategies.
Required Skills
- C++ Development: At least 5 years of professional software development experience using modern C++ (C++11 or later preferred).
- CMake Expertise: A minimum of 3 years of experience designing, implementing, and maintaining complex CMake build systems for C++ projects.
- Unit Testing: Demonstrable experience with the Catch2 unit testing framework, including writing tests and integrating them into a build process.
Nice to Have
- Algorithmic Trading: Familiarity with concepts, patterns, or systems related to algorithmic trading or financial markets.
- Code Refactoring Experience: Proven track record of successfully refactoring legacy or complex C++ codebases.
- Version Control: Proficiency with Git.
- CI/CD: Experience setting up or working with Continuous Integration/Continuous Deployment pipelines such as Jenkins, GitLab CI, or GitHub Actions.