Principal Software Engineer (C++/Java)

The Company Our client is a leading Software provider who employs over 4,000 staff across 50 Countries. With a Turnover of over £1 billion and share prices doubling in the past year the company is now looking to expand its Software Development Team with the addition of an experienced Principal Software Engineer who will provide clear technical leadership on projects whilst working in a team of 10. Position Objectives The successful candidate will take on a senior role in the close-knit and highly skilled multi-disciplinary R&D team of 10 working on the a real-time streaming analytics product. As one of the "Principal"-level software engineers you will be ready to provide clear technical leadership on projects and make a significant contribution to the design, implementation and testing of new functionality in an award-winning high performance event processing product, owning and influencing the development of key product areas. Tasks and Responsibilities The successful candidate will be an excellent all-round software developer with experience of designing, building and testing complex software systems, ideally with strong C++ and Java in an enterprise environment. They should be a conscientious, assertive and highly-motivated individual, who will bring to the role important technical skills and also be keen to learn new ones on an ongoing basis. Specific responsibilities will include: - Software architecture, design, development, documentation and testing - Continuous improvement of software development, test and release processes - Evaluation and recommendation of technologies - Contribution of creative and innovative ideas for products and features - Project management in an agile software development team ("product owner" role) - Collaborative development of product features with key customers ("co-innovation") - Design and development of cross-product/suite-wide features with other R&D teams Essential Requirements - Strong and up-to-date development skills in modern C++ and/or Java. - Substantial experience of systems programming techniques including multi-threading, performance optimization and memory profiling. - Strong understanding of data structures, algorithms and algorithmic complexity. - Strong understanding of computer architectures and their impact on software performance. - Experience of object oriented design, including the architecture of large and complex software systems. - Experience designing frameworks and APIs. - Experience of software development and maintenance on multiple platforms including Windows and Linux. - Experience of commercial software engineering, working practices and methodologies, particularly agile software development. - Practical experience of QA methodology and practice, including unit testing, TDD and CI. Experience of breaking features down into agile user stories for a team to work on. Highly desirable - Experience with the challenges of developing distributed computing systems. - Strong expertise with developing scalable, concurrent software. - Experience with communicating/documenting software design with team members. - Experience as a development team lead or product owner. - Knowledge of the latest programming patterns and best practices. - Software development experience on Raspberry Pi and mobile platforms such as iOS or Android. - Knowledge of scripting languages like Python. - Knowledge of cloud infrastructure technologies, e.g. Docker, Amazon Web Services, CloudFoundry - A First Class or Second Class Upper first degree in Computer Science, Mathematics or an Engineering-related subject is required, with a Masters or Ph.D. degree in a relevant subject considered desirable Additional Requirements & Soft Skills The successful candidate will be someone who takes pride in constantly improving, and is passionate about delivering software engineered to the highest standards of readability/maintainability, performance, and usability. They will have strong interpersonal and presentation skills, including the ability to communicate clearly and concisely with peers and prospects/customers. They will have the ability to operate independently and work on their own initiative, taking ownership and responsibility for software deliverables. The following skills and experience are also highly desirable: - Ability to self-teach new technologies. - Ability to mentor and teach junior team members. - Ability to work and communicate well with a geographically distributed team. - Ability to present complex technical subjects to internal and external (customer/prospect) audiences. - Willingness to occasionally travel, within the UK and overseas. Benefits of the Position - A chance to work with and learn from a team of smart and highly knowledgeable colleagues - An atmosphere where quality and innovation are prized, and everybody has the chance to help shape both design decisions and the agile development processes we follow - A wide variety of projects, languages and a constantly changing set of new technologies to learn about and use