Role: C++ Software Engineer
Location: Penang, Malaysia (Onsite)
Job Description
- Design and implement sophisticated, scalable, multi-threaded object-oriented software in C++ to solve challenging problems involving high-speed data processing and networking.
- Develop advanced software modules following modern C++ design patterns.
- Utilize C programming skills for Linux device driver development and debugging.
- Identify and improve low-level system performance issues through problem-solving skills and experience.
- Design algorithms for controlling image acquisition parameters and environmental conditions (Temperature, Power, Fog, Frost, etc.).
- Create design documents on software architecture and algorithms.
- Collaborate with hardware designers on board bring-up and debugging.
- Maintain and improve firmware build systems using Make and Python.
- Review peers' code for adherence to coding standards and design guidelines.
- Estimate and track time and effort for implementation tasks.
- Review marketing and product requirements during feasibility and development phases.
- Collaborate with QA on test case identification for new features and regression testing.
- Follow established development processes for all tasks.
- Provide mentorship and coaching to junior developers.
Basic Requirements
- Bachelor's or Master's degree in Computer Engineering, Software Engineering, Electronics, or Electrical Engineering.
- At least 3 years of embedded development experience.
- Strong C and C++ programming skills for embedded applications.
- Understanding of operating system concepts including processes, threads, mutexes, interrupt handling, and exceptions.
- Experience with C/C++ compilation and debugging tools.
- Proficiency with scripting languages, build systems, and version control systems.
- Excellent written and oral communication skills.
- Experience developing in a Linux environment for ARM processors.
- Knowledge of low-level programming for hardware peripherals and drivers.
- Understanding of embedded design considerations such as memory management, microprocessor architectures, instruction efficiency, and I/O timing.
- Knowledge of digital imaging/photography and audio/video coding is a plus.