DescriptionThe Software Engineer will be a member of a team responsible for designing, analyzing requirements, developing, implementing, testing, debugging, and maintaining software solutions for ADTRAN products including but not limited to the following: driver development, application development, system software architecture, software test development, and customer assistance.
Duties and Responsibilities
- Example target projects:
- Design or assist in the design and development of multiple L2 and L3 networking protocols running on real-time embedded network devices.
- Design or assist in the board bring-up activities for SDX Aggregation Switches and writing low level drivers including some open-source components, such as ONIE, ONL.
- Perform or assist in high-level and low-level software design and implementation of new modules and enhancements to existing software.
- Perform or assist in feasibility studies of needed software development.
- Document the design including features definition and provisioning models.
- Help to model and define APIs using MIBs, CLI, YANG or similar standards.
- Conduct and participate in design reviews and code reviews.
- Plan and perform unit and system level testing of implemented software modules and enhancements.
- Help fix software bugs found during all testing phases.
- Work with team to deploy and test incremental software releases.
- Organize and coordinate development activities within schedule and product constraints.
- Other projects and assignments may result and be assigned to accommodate the changing needs of the department and the Company.
Basic Qualifications
- Bachelor’s degree in Computer Science, Computer Engineering, Computer Information Science, Electrical Engineering, or equivalent education required.
- 2-5 years of professional experience is preferred.
- Familiarity with Ethernet and networking protocols and experience with embedded software design, implementation and debugging ranging from the driver/interrupt level up to the application level including interprocess communication and multi-threading techniques is required.
- A solid foundation in computer science, with strong competencies in data structures, algorithms, software engineering, and functional programming techniques is required.
- Experience with at least one modern functional programming language (Scala, Erlang, Elixir, Haskell).
- Experience with a JVM language (Java or Scala) including, but not limited to, JVM tuning and memory management.
- Experience with C/C++
- Experience developing containerized applications (Docker or equivalent).
- Experience developing and deploying large scale applications.
- Familiarity with lab test equipment that would be needed to unit or system level test the software component designed is required.
- No travel is expected in this position.
Preferred Qualifications (Optional)
- Knowledge of Jenkins, CI/CD, TCP/IP, IP protocols, Datacom technologies, VxWorks, QNX, embedded Linux, L2 and L3 protocols, Ethernet switching, networking protocols experience preferred.