General Summary
Job Description
- Design, development and optimization of embedded software and/or device drivers in one or more Real-Time Operating Systems - Android, QNX or Embedded Linux.
- Enable vision algorithms/kernels realizable on DSPs, vision accelerators or GPUs.
- Design and implement complex fault-tolerant safety systems in accordance to industry standard specifications (eg. ISO26262, ASPICE).
- Contribute to all phases of software development - bring-up, design and deployment.
- Work with engineers, partners and customers across different geographical sites and technology domains.
- Solid hands-on software design, development, optimization and debugging experience on complex embedded computing platforms.
- Skills and experience required in C/C++ programming and operating systems like QNX, Linux and other RTOSs.
- Candidate should be detail-oriented and have strong analytical and debugging skills, strong communication skills (written and verbal), working with teams across multiple time zones.
- Fluent in industry standard software development tools: debuggers, code revision control systems (GIT, Perforce), IDEs and build tools.
- Excellent verbal and written communication skills required.
- Experience working on computer vision kernels/imaging and vision accelerators is preferred.
- Experience designing complex fault-tolerant safety systems, and designing in accordance to industry standard specifications (eg. ISO26262, ASPICE) is preferred.
Minimum Qualifications
- Bachelor's degree in Engineering, Information Systems, Computer Science, or related field.
Principal Duties and Responsibilities
- Completes assigned coding tasks to specifications on time without significant errors or bugs.
- Adapts to changes and setbacks in order to manage pressure and meet deadlines.
- Collaborates with others inside and outside project team to accomplish project objectives.
- Communicates with project lead to provide status and information about impending obstacles.
- Quickly resolves moderately complex software issues and bugs.
- Gathers, integrates, and interprets information specific to a module or sub-block of code from a variety of sources in order to troubleshoot issues and find solutions.
- Seeks others' opinions and shares own opinions with others about ways in which a problem can be addressed differently.
- Participates in technical conversations with tech leads/managers.
- Anticipates and communicates issues with team to maintain open communication.
- Writes readable code for large features or significant bug fixes to support collaboration with other engineers.
- Unit tests own code to verify the stability and functionality of a feature.
Level Of Responsibility
- Working under minimal supervision.
- Using verbal and written communication skills to convey information that may be somewhat complex to others who may have limited knowledge of the subject in question.
- Completing tasks with multiple steps that can be performed in various orders; some planning and prioritization must occur to complete the tasks effectively; mistakes may result in some rework.
- Exercising creativity to draft original documents, imagery, or work products within established guidelines.
- Using deductive and inductive problem solving; multiple approaches may be taken/necessary to solve the problem; often information is missing or incomplete; intermediate data analysis/interpretation skills may be required.