Software Engineer - Communication Systems

Location: Woking, GB


McLaren Applied Technologies:

McLaren Applied Technologies is a high-performance technology company which combines fresh thinking and innovation to solve crucial challenges and improve people's lives in industries as diverse as health, public transport, automotive and motorsport. Within the public transport and smart cities space we are working on a range of exciting projects utilising communication systems and data technology to help solve real world problems, whilst improving the commuter experience. 


The Team 

The Communications Systems Team create high-performance wireless networking solutions for a diverse range of vehicles ranging from rail to aerospace. They aim to create a robust communications and data acquisition platform to provide a foundation for McLaren’s next generation Intelligent Fleet concept. The team embody a unique mix of software and networking capabilities to design and implement the in-vehicle and back-end data centre architecture. 


The Role 

You will be working with the Communications Systems Software Team to create scalable, high-performance wireless networking solutions for fleets of vehicles, primarily for, but not limited to, the public transport sector. As a developer who is passionate about technology, you will be: 

  • Developing and maintaining reusable software components for a combination of off-the-shelf and bespoke hardware ranging from cloud-based servers to resource-constrained embedded units all running customized Linux environments 

  • Learning how to leverage existing open source software to extend our capabilities 

  • Integrating and tailoring software to suit customers’ needs 

  • Assist in building demonstration and proof-of-concept systems 

  • Support the test and systems team by creating and adapting components to facilitate the use of automated test and simulation infrastructure 

  • Supporting the maintenance and deployment of the team’s software components locally and in the field 


Essential Knowledge, Skills and Experience 

  • You have experience working in and developing for a Linux environment. 

  • Proficient at coding for Linux systems in C; familiar with the standard C and POSIX libraries, including the socket API. 

  • You should be familiar with the core tools, Bash, GCC, make and Git 

  • Scripting skills in Python 

  • Understanding of TCP/IP networking fundamentals – the different protocol layers and what they’re for, the basics of routing, flow control and congestion avoidance 

  • Have experience with all phases of software engineering from concept and design to implementation and test, ideally with agile ways of working 


Desirable Knowledge, Skills and Experience 

Experience of any of the following points would be advantageous, but is not essential: 

  • Linux device driver or other kernel development experience, in particular working with the network stack 

  • Advanced use of netfilter and iproute tools to manipulate and control packets in the network stack 

  • Experience working with and configuring Linux kernel virtual machines (KVMs) 

  • Linux system building experience, i.e. creating systems from scratch, building and configuring custom kernels, set up bootloaders on custom targets 

  • Web development skills – HTML/CSS, JavaScript, Django 

  • Layer 1 and 2 networking knowledge: Ethernet, wireless protocols 

  • Practical experience developing wireless devices: wireless network behaviour, basic protocol knowledge, measurement and testing of device performance 

  • C++ development experience, familiar with the STL and Boost Libraries 

  • Have experience working with databases, relational and/or NoSQL 

  • Rail, aviation or other transport industry experience  

  • Degree in computer science, telecommunications, software or related discipline, or the equivalent industry experience