Analyze, design, develop, troubleshoot and debug software programs for commercial or end user applications. Writes code, completes programming and performs testing and debugging of applications.
As a member of the software engineering team, you will analyze and integrate external customer specifications and requirements. In alignment with the product development teams you will create the architectural design and specification as well as implementation on the product side. Specify, design and implement modest changes to existing software architecture. Build new products and development tools. Build and execute unit/functional tests and unit/functional test plans. Review integration and regression test plans. Review customer bug reports, implement fixes.
Work is non-routine and very complex, involving the application of advanced technical skills in area of specialization. You are a leading contributor individually and as a team member, providing direction and mentoring to others.
Desired Skills/Experience
- BS or MS in Computer Science or related technical field or equivalent practical experience of 5+ years. - Knowledge in USB device programming is a must - Strong knowledge of Linux/Unix/MacOS/Windows fundamentals and internals - Strong knowledge of the base USB specification (transfer types, URB handling) and key device classes (HID, MSD, UVC) - Knowledge in low-level USB device programming in userland on Linux and Windows - Knowledge in C/C++ programming language - Knowledge in Python programming language is a plus - Solid understanding of designing systems for performance, efficiency, and availability with a strong customer focus - Strong troubleshooting and performance tuning skills - Understanding of the key concepts of remote desktop access protocols - Good written and verbal communication skills with the ability to present complex information in a clear, concise manner to all audiences - Results driven; thrives in a development environment that is agile, collaborative, and in start-up mode, even when faced with ambiguity
ResponsibilitiesAs a Senior or Principal Software Engineer you will work within the associated international teams on remote device access functionality, including USB pass-through, webcam support, printing and other remote device support. This includes architectural design, prototyping, implementation, integration, testing, bug fixing, improving current processes and protocols, sustaining and all other aspects of software development process.