Role : C++ Software Development Engineer
Location :Penang, Malaysia
Job description :
Design and implement sophisticated scalable multi-threaded Object Oriented Software in C++ for solving challenging problems involving high speed data processing and networking
Design advanced software modules that follow modern C++ design patterns
Apply C programming skills for Linux device driver development and debugging
Apply problem solving skills and experience to identify and improve low-level system performance issues
Apply engineering principles to design algorithms for controlling image acquisition parameters, as well as environmental conditions (Temperature, Power, Fog, Frost, etc.)
Create design documents on software architecture and algorithms
Collaborate with Hardware designers on board bring-up and debug
Maintain and improve Firmware build system using Make and Python
Review code of peers for adherence to coding standards and design guidelines
Estimate and track time and effort necessary for completing implementation tasks
Review Marketing and Product Requirements Document during feasibility and development
Collaborate with Quality Assurance team on identifying test cases for new features and areas for regression tests
Follow the established development process for all design and implementation tasks
Provides mentorship and coaching to junior developers
Basic Requirements
Bachelor / Master degree in Computer Engineering, Software Engineering and Electronics and Electrical
3+ years embedded development experience
Strong C and C++ design and programming skills for embedded applications
Firm grasp of operating system concepts including processes, threads, mutexes, interrupt handling, and exception handling
Experience with C/C++ compilation and debugging tools
Experience with scripting languages, build systems, and version control systems
Excellent written and oral communication skills
Experience with development in a Linux environment for ARM target processors
Working knowledge in writing low level programming for HW peripherals and drivers.
Understanding of embedded design considerations including C/C++ memory
management, microprocessor architectures, instruction efficiency, and I/O timing
Knowledge of digital imaging/photography and audio/video coding is a plus