Senior Software Engineer
Cambridge, UK office-based or hybrid
About the company
We are a UK-based R&D subsidiary of our German parent company Maschinenfabrik Reinhausen GmbH, who are a specialist in the design and manufacture of power electronics for high power applications such as power transmission and renewable energy generation.
In Cambridge, we develop technology and contribute to industrial product developments. We are currently a small, friendly team looking to expand our software capability.
We are looking for an enthusiastic software engineer, experienced in embedded Linux development and C++ in particular. The role will involve working on various embedded systems and contributing to the full software development lifecycle. We work on a mixture of R&D and product developments as required by our parent company.
As a team, we develop systems primarily targeted at power electronics applications. We work remotely and come together as required at our office for lab-based work or some face-to-face time. You can choose the working arrangement that suits you best. The only thing we ask is that you are able to attend the office when required for lab-testing. Most weeks this might be a day or two but on occasion could be a full week.
We regularly work alongside our colleagues in Germany and therefore occasional travel is required. They are based in Regensburg, Bavaria, which is a rather nice place to visit and close to Nuremberg and Munich.
Our embedded systems range from small microcontroller (e.g., STM32) based bare-metal and RTOS applications up to larger embedded Linux systems running on multi-core SoCs (e.g., AMD Xilinx Zynq Ultra-scale). Therefore, there is a good variety in the work ranging from programming hardware peripherals to writing multi-threaded user-land applications or kernel drivers for Linux. For this role we are looking for Linux kernel and user-space experience and any knowledge of power electronics control systems or motor drives would be an advantage.
We have legacy code written in C, which needs occasional support, and we are writing more C++ as we move forward. Alongside the embedded software, we have some PC tools ans many scripts written in Python, Bash and Awk etc. Being able to modify or create tools using them will be required.
We use a variety of toolchains, including Git for source control and Redmine/Jira for change management (depending on the project). We use various debuggers and try to develop in an IDE/editor agnostic fashion where possible so you can use your favourite tools.
Being able to communicate is important, as the role will involve liaison with FPGA and power electronics engineers in order to elicit requirements for the code. We often work in an agile way although some projects for industrial applications will require more process: documentation, test etc.
If this sounds good, then we would love to meet you and show you more of the interesting work that we do here. We recognize that the traditional technical quiz-style interview doesn’t work for everyone, so we invite applicants to share with us their preferred way to show off their technical skills. We typically discuss a face-to-face some embedded C/C++ questions, and talk about object-oriented programming concepts. We als like you to present a project, or some code that you have worked on, and talk to us about it.
- You have a degree in Computer Science, Electrical Engineering, Electronics, Physics or similar
- You enjoy writing software and building systems
- You like to learn new things and aren’t scared by legacy codebases
- You have the persistence to overcome technical challenges (and enjoy the feeling when you do!)
- You have your own ideas but also understand the need to be pragmatic
- You don’t mind helping out with recruitment or coaching junior staff members
- You can organise yourself and manage your own time on a day-to-day basis
- Previous experience of full lifecycle embedded software development
- Requirements, design, tests and peer review
- At least 5 years experience in C++
- Embedded Linux - writing both kernel drivers and user-space applications
- Experience of systems architecture and of designing distributed systems an advantage
- Writing drivers for peripherals such as ADCs and DMA
- Reading schematics, data sheets and liaising with hardware designers
- Being able to debug complex problems
- Knowledge of common synchronization mechanisms used in multi-process systems
- Working with revision control systems, change management systems and continuous integration systems
- Scripting languages, ablility to produce test tools and build scripts
- Ability to produce written documents as required for industrial application projects
- Good interfacing skills inside multi-disciplinary teams
- Flexible working
- 25 days/year holiday with ability to buy or sell a week
- Health Insurance for you and your family (including private dental cover)
- Death in Service Benefit (4x salary)
- Employer pension contribution matching employee up to 5%
- Annual performance-related bonus