The Software Engineer researches, designs, develops, tests, integrates, documents, and enhances complex and diverse software systems. Works individually or part of a research team. Resolves software problems. Uses software development and software design methodologies appropriate to the research and development environment. Provides specific input to the software components of system design, requirements analysis, and synthesis from system level to individual software components. Uses sound software engineering principles to ensure that developed code is modifiable, efficient, reliable, understandable, and fault tolerant. Provides software process management and control throughout the coding portion of the software development process.
A Bachelor's degree in computer science, engineering, or a VISTA-relevant field OR an additional three (3) years of related experience can be substituted for a degree. A minimum of twenty (20) years of general software development experience. Within the last twenty (20) years, a minimum of ten (10) years of combined experience with a minimum of three (3) software development languages. Minimum of eight (8) years of combined experience working with a minimum of two (2) operating systems. Within the last five (5) years, a minimum of three (3) years in-depth knowledge of a VISTA-related domain. Demonstrated experience leading multiple software development teams and ensuring that all work is completed within the constraints of the software development process being used on the project.
- Within the last seven (7) years, a minimum of three (3) years experience developing in C++ (including multi-threaded applications)
- Experience creating and maintaining automated builds of C++ code on Linux platforms (e.g. with Buildbot or Jenkins)
- Minimum of two (2) years experience developing in Python (including C/Python bindings)
- Experience developing Linux applications on a variety of distros and architectures
- Proactive self-starter capable of taking high level direction, building requirements and implementing solutions
- Experience with Docker/containerization
- Experience with PyTorch and LibTorch
- Experience developing applications that run on GPU's (e.g. with CUDA)
Experience maintaining and managing complex software packages