
Senior Embedded Software Engineer
- Sunnyvale, CA
- Permanent
- Full-time
- Develop rock solid embedded software components and multi-threaded applications in C++
- Contribute to software development across all system layers, including Linux kernel, OS system components, user applications, and infrastructure software
- Contribute to cross-compilation of system software libraries and applications
- Implement early prototypes to evaluate new product concepts and integrate proof-of-concept modules into robot systems with production-ready, highest quality code.
- Evaluate design trade-offs and make design and architectural decisions when integrating various components of distinct nature (e.g., CPU vs. GPU intensive) within embedded software.
- Analyze and optimize run-time system performance with metrics at various system layers, from Linux kernel to operating system, and all the way up to user applications
- Work with a variety of cross functional teams (e.g., ME, EE, Cybersecurity, RA, QA) across all phases of the product development lifecycle including prototype, design, implementation, debug, V&V, release, field support, and sustaining
- Create high quality technical documents capturing key design concepts and principles behind software design and architectures
- Strong intuition and understanding of systems design methodologies for performance, testability, scalability, and maintainability
- Strong proficiency in modern C++ skills and advanced Linux system software development experience
- Hands-on software development in Python and shell scripts
- In-depth knowledge of Linux internals (schedulers, memory management, concurrency, IPC, memory allocation, file system, networking, logging, storage, etc.)
- Hands-on experience with designing hardware/software interfaces used in complex devices
- Extensive hands-on experience implementing SW/HW interfaces used in complex devices including interfaces with external devices from Linux as well as network communication interfaces.
- Proven track record for successfully delivering products to embedded environments
- Strong problem solving and analytical skills, ability to independently analyze complex system problems and isolate and troubleshoot software and hardware problems
- Proficiency in written and verbal communication
- Self-motivated, flexible team player to support all aspects of software development life cycle with the ability to define goals and work independently in a fast-paced environment
- Minimum Bachelor's degree in Computer Science or Engineering, with minimum of 7 years of industry experience. Master's or PhD degrees with minimum of 5 years of industry experienced is preferred.
- Experience with test automation and development of CI/CD pipelines (e.g., Jenkins, Buildbot)
- Experience with modern software build systems (e.g., CMake, Bazel).
- Experience with cloud computing and storage infrastructures (e.g., AWS)
- Understanding about GPU and machine learning technologies
- Understanding about cybersecurity best practices, security hardening strategies and implementation