Job responsibilities
- Executes creative software solutions, design, development, and technical troubleshooting with ability to think beyond routine or conventional approaches to build solutions or break down technical problems
- Develops secure high-quality production code in C, C++, Python and other languages and reviews and debugs code written by others. Write high-quality documentation and unit tests for the software solutions
- Design and implement high-performance distributed executions of the software solutions and deploy them onto distributed platforms including multi-threaded CPUs, multiple CPUs and GPUs
- Optimize the software solutions for execution speed, memory efficiency and communication latency through algorithmic improvements and vectorization
- Work with the quantum-inspired algorithm researchers to identify bottlenecks in subroutines of the algorithms and devise methods to speed up the executions
- Identify dependencies in the code to ensure seamless execution in other environments
- Identifies opportunities to eliminate or automate remediation of recurring issues to improve overall operational stability of software applications and systems
- Leads evaluation sessions with external vendors, startups, and internal teams to drive outcomes-oriented probing of architectural designs, technical credentials, and applicability for use within existing systems and information architecture
- Leads communities of practice across Software Engineering to drive awareness and use of new and leading-edge technologies
- Adds to team culture of diversity, equity, inclusion, and respect
Required qualifications, capabilities, and skills
- Formal training or certification on software engineering concepts with 5+ years of applied experience.
- Bachelor’s degree combined with 4+ years of industry experience in algorithm execution or a Master’s or Ph.D. degree in computer science, physics, math, engineering or related fields combined with 2+ years of industry experience
- Hands-on practical experience delivering system design, application development, testing, and operational stability
- Advanced in one or more programming language(s) - Proficiency in Python
- Experience leading software projects.
- Proficiency in automation and continuous delivery methods
- Proficient in all aspects of the Software Development Life Cycle
- Advanced understanding of agile methodologies such as CI/CD, Application Resiliency, and Security
- Demonstrated proficiency in software applications and technical processes within a technical discipline (e.g., cloud, artificial intelligence, machine learning, mobile, etc.)
- In-depth knowledge of the financial services industry and their IT systems
- Practical cloud native experience
Preferred qualifications, capabilities, and skills
- Proficiency in C++ and Standard Template Library (STL). Proficiency in C / Julia
- Experience with GPU acceleration and distributed programming of algorithms (CUDA, OpenCL, OpenMP, MPI, AVX)
- Familiarity with mainstream compilers (gcc, icc, llvm/clang) especially their features and options related to tuning the performance of the compiled software
- Experience in implementing data structures for randomized algorithms in big data settings (e.g., Sketching techniques, sampling techniques for numerical linear algebra)
- Experience in building tensor network libraries for applications in machine learning and optimization. Experience in using FPGAs to accelerate algorithms across machine learning or optimization
- Experience in running large scale Monte-Carlo simulations. Experience in accelerating annealing type algorithms using GPUs
- Experience in finance is a plus, though no prior familiarity with financial use cases is required